Home | History | Annotate | Download | only in rpcsvc
      1 /* @(#)nlm_prot.x	2.1 88/08/01 4.0 RPCSRC */
      2 /* @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro */
      3 
      4 /*
      5  * Network lock manager protocol definition
      6  * Copyright (C) 1986 Sun Microsystems, Inc.
      7  *
      8  * protocol used between local lock manager and remote lock manager
      9  */
     10 
     11 #ifdef RPC_HDR
     12 %#define LM_MAXSTRLEN	1024
     13 %#define MAXNAMELEN	LM_MAXSTRLEN+1
     14 #endif
     15 
     16 /*
     17  * status of a call to the lock manager
     18  */
     19 enum nlm_stats {
     20 	nlm_granted = 0,
     21 	nlm_denied = 1,
     22 	nlm_denied_nolocks = 2,
     23 	nlm_blocked = 3,
     24 	nlm_denied_grace_period = 4
     25 };
     26 
     27 struct nlm_holder {
     28 	bool exclusive;
     29 	int svid;
     30 	netobj oh;
     31 	unsigned l_offset;
     32 	unsigned l_len;
     33 };
     34 
     35 union nlm_testrply switch (nlm_stats stat) {
     36 	case nlm_denied:
     37 		struct nlm_holder holder;
     38 	default:
     39 		void;
     40 };
     41 
     42 struct nlm_stat {
     43 	nlm_stats stat;
     44 };
     45 
     46 struct nlm_res {
     47 	netobj cookie;
     48 	nlm_stat stat;
     49 };
     50 
     51 struct nlm_testres {
     52 	netobj cookie;
     53 	nlm_testrply stat;
     54 };
     55 
     56 struct nlm_lock {
     57 	string caller_name<LM_MAXSTRLEN>;
     58 	netobj fh;		/* identify a file */
     59 	netobj oh;		/* identify owner of a lock */
     60 	int svid;		/* generated from pid for svid */
     61 	unsigned l_offset;
     62 	unsigned l_len;
     63 };
     64 
     65 struct nlm_lockargs {
     66 	netobj cookie;
     67 	bool block;
     68 	bool exclusive;
     69 	struct nlm_lock alock;
     70 	bool reclaim;		/* used for recovering locks */
     71 	int state;		/* specify local status monitor state */
     72 };
     73 
     74 struct nlm_cancargs {
     75 	netobj cookie;
     76 	bool block;
     77 	bool exclusive;
     78 	struct nlm_lock alock;
     79 };
     80 
     81 struct nlm_testargs {
     82 	netobj cookie;
     83 	bool exclusive;
     84 	struct nlm_lock alock;
     85 };
     86 
     87 struct nlm_unlockargs {
     88 	netobj cookie;
     89 	struct nlm_lock alock;
     90 };
     91 
     92 
     93 #ifdef RPC_HDR
     94 %/*
     95 % * The following enums are actually bit encoded for efficient
     96 % * boolean algebra.... DON'T change them.....
     97 % */
     98 #endif
     99 enum	fsh_mode {
    100 	fsm_DN  = 0,	/* deny none */
    101 	fsm_DR  = 1,	/* deny read */
    102 	fsm_DW  = 2,	/* deny write */
    103 	fsm_DRW = 3	/* deny read/write */
    104 };
    105 
    106 enum	fsh_access {
    107 	fsa_NONE = 0,	/* for completeness */
    108 	fsa_R    = 1,	/* read only */
    109 	fsa_W    = 2,	/* write only */
    110 	fsa_RW   = 3	/* read/write */
    111 };
    112 
    113 struct	nlm_share {
    114 	string caller_name<LM_MAXSTRLEN>;
    115 	netobj	fh;
    116 	netobj	oh;
    117 	fsh_mode	mode;
    118 	fsh_access	access;
    119 };
    120 
    121 struct	nlm_shareargs {
    122 	netobj	cookie;
    123 	nlm_share	share;
    124 	bool	reclaim;
    125 };
    126 
    127 struct	nlm_shareres {
    128 	netobj	cookie;
    129 	nlm_stats	stat;
    130 	int	sequence;
    131 };
    132 
    133 struct	nlm_notify {
    134 	string name<MAXNAMELEN>;
    135 	long state;
    136 };
    137 
    138 /*
    139  * Over-the-wire protocol used between the network lock managers
    140  */
    141 
    142 program NLM_PROG {
    143 	version NLM_VERS {
    144 
    145 		nlm_testres	NLM_TEST(struct nlm_testargs) =	1;
    146 
    147 		nlm_res		NLM_LOCK(struct nlm_lockargs) =	2;
    148 
    149 		nlm_res		NLM_CANCEL(struct nlm_cancargs) = 3;
    150 		nlm_res		NLM_UNLOCK(struct nlm_unlockargs) =	4;
    151 
    152 		/*
    153 		 * remote lock manager call-back to grant lock
    154 		 */
    155 		nlm_res		NLM_GRANTED(struct nlm_testargs)= 5;
    156 		/*
    157 		 * message passing style of requesting lock
    158 		 */
    159 		void		NLM_TEST_MSG(struct nlm_testargs) = 6;
    160 		void		NLM_LOCK_MSG(struct nlm_lockargs) = 7;
    161 		void		NLM_CANCEL_MSG(struct nlm_cancargs) =8;
    162 		void		NLM_UNLOCK_MSG(struct nlm_unlockargs) = 9;
    163 		void		NLM_GRANTED_MSG(struct nlm_testargs) = 10;
    164 		void		NLM_TEST_RES(nlm_testres) = 11;
    165 		void		NLM_LOCK_RES(nlm_res) = 12;
    166 		void		NLM_CANCEL_RES(nlm_res) = 13;
    167 		void		NLM_UNLOCK_RES(nlm_res) = 14;
    168 		void		NLM_GRANTED_RES(nlm_res) = 15;
    169 	} = 1;
    170 
    171 	version NLM_VERSX {
    172 		nlm_shareres	NLM_SHARE(nlm_shareargs) = 20;
    173 		nlm_shareres	NLM_UNSHARE(nlm_shareargs) = 21;
    174 		nlm_res		NLM_NM_LOCK(nlm_lockargs) = 22;
    175 		void		NLM_FREE_ALL(nlm_notify) = 23;
    176 	} = 3;
    177 
    178 } = 100021;
    179 
    180