blob: b2e704f7b864966d9eea983e065e9a8942c43ed7 [file]
/*
* This file was extracted by hand from
* https://pubs.opengroup.org/onlinepubs/9629799/chap10.htm#tagcjh_11_03
*/
/*
* The NLMv3 protocol
*/
pragma header nlm3;
const LM_MAXSTRLEN = 1024;
const LM_MAXNAMELEN = 1025;
const MAXNETOBJ_SZ = 1024;
typedef opaque netobj<MAXNETOBJ_SZ>;
enum nlm_stats {
LCK_GRANTED = 0,
LCK_DENIED = 1,
LCK_DENIED_NOLOCKS = 2,
LCK_BLOCKED = 3,
LCK_DENIED_GRACE_PERIOD = 4
};
pragma big_endian nlm_stats;
struct nlm_stat {
nlm_stats stat;
};
struct nlm_res {
netobj cookie;
nlm_stat stat;
};
struct nlm_holder {
bool exclusive;
int uppid;
netobj oh;
unsigned int l_offset;
unsigned int l_len;
};
union nlm_testrply switch (nlm_stats stat) {
case LCK_DENIED:
nlm_holder holder;
default:
void;
};
struct nlm_testres {
netobj cookie;
nlm_testrply test_stat;
};
struct nlm_lock {
string caller_name<LM_MAXSTRLEN>;
netobj fh;
netobj oh;
int uppid;
unsigned int l_offset;
unsigned int l_len;
};
struct nlm_lockargs {
netobj cookie;
bool block;
bool exclusive;
nlm_lock alock;
bool reclaim;
int state;
};
struct nlm_cancargs {
netobj cookie;
bool block;
bool exclusive;
nlm_lock alock;
};
struct nlm_testargs {
netobj cookie;
bool exclusive;
nlm_lock alock;
};
struct nlm_unlockargs {
netobj cookie;
nlm_lock alock;
};
enum fsh_mode {
fsm_DN = 0,
fsm_DR = 1,
fsm_DW = 2,
fsm_DRW = 3
};
enum fsh_access {
fsa_NONE = 0,
fsa_R = 1,
fsa_W = 2,
fsa_RW = 3
};
struct nlm_share {
string caller_name<LM_MAXSTRLEN>;
netobj fh;
netobj oh;
fsh_mode mode;
fsh_access access;
};
struct nlm_shareargs {
netobj cookie;
nlm_share share;
bool reclaim;
};
struct nlm_shareres {
netobj cookie;
nlm_stats stat;
int sequence;
};
struct nlm_notify {
string name<LM_MAXNAMELEN>;
long state;
};
/*
* Argument for the Linux-private SM_NOTIFY procedure
*/
const SM_PRIV_SIZE = 16;
struct nlm_notifyargs {
nlm_notify notify;
opaque private[SM_PRIV_SIZE];
};
program NLM_PROG {
version NLM_VERS {
void NLM_NULL(void) = 0;
nlm_testres NLM_TEST(nlm_testargs) = 1;
nlm_res NLM_LOCK(nlm_lockargs) = 2;
nlm_res NLM_CANCEL(nlm_cancargs) = 3;
nlm_res NLM_UNLOCK(nlm_unlockargs) = 4;
nlm_res NLM_GRANTED(nlm_testargs) = 5;
void NLM_TEST_MSG(nlm_testargs) = 6;
void NLM_LOCK_MSG(nlm_lockargs) = 7;
void NLM_CANCEL_MSG(nlm_cancargs) = 8;
void NLM_UNLOCK_MSG(nlm_unlockargs) = 9;
void NLM_GRANTED_MSG(nlm_testargs) = 10;
void NLM_TEST_RES(nlm_testres) = 11;
void NLM_LOCK_RES(nlm_res) = 12;
void NLM_CANCEL_RES(nlm_res) = 13;
void NLM_UNLOCK_RES(nlm_res) = 14;
void NLM_GRANTED_RES(nlm_res) = 15;
void NLM_SM_NOTIFY(nlm_notifyargs) = 16;
nlm_shareres NLM_SHARE(nlm_shareargs) = 20;
nlm_shareres NLM_UNSHARE(nlm_shareargs) = 21;
nlm_res NLM_NM_LOCK(nlm_lockargs) = 22;
void NLM_FREE_ALL(nlm_notify) = 23;
} = 3;
} = 100021;