/* SPDX-License-Identifier: GPL-2.0 */
/* Generated by xdrgen. Manual edits will be lost. */
/* XDR specification file: ../../Documentation/sunrpc/xdr/nlm3.x */
/* XDR specification modification time: Thu Apr 23 10:56:34 2026 */

#ifndef _LINUX_XDRGEN_NLM3_DEF_H
#define _LINUX_XDRGEN_NLM3_DEF_H

#include <linux/types.h>
#include <linux/sunrpc/xdrgen/_defs.h>

enum { LM_MAXSTRLEN = 1024 };

enum { LM_MAXNAMELEN = 1025 };

enum { MAXNETOBJ_SZ = 1024 };

typedef opaque netobj;

enum nlm_stats {
	LCK_GRANTED = 0,
	LCK_DENIED = 1,
	LCK_DENIED_NOLOCKS = 2,
	LCK_BLOCKED = 3,
	LCK_DENIED_GRACE_PERIOD = 4,
};

typedef __be32 nlm_stats;

struct nlm_stat {
	nlm_stats stat;
};

struct nlm_res {
	netobj cookie;
	struct nlm_stat stat;
};

struct nlm_holder {
	bool exclusive;
	s32 uppid;
	netobj oh;
	u32 l_offset;
	u32 l_len;
};

struct nlm_testrply {
	nlm_stats stat;
	union {
		struct nlm_holder holder;
	} u;
};

struct nlm_testres {
	netobj cookie;
	struct nlm_testrply test_stat;
};

struct nlm_lock {
	string caller_name;
	netobj fh;
	netobj oh;
	s32 uppid;
	u32 l_offset;
	u32 l_len;
};

struct nlm_lockargs {
	netobj cookie;
	bool block;
	bool exclusive;
	struct nlm_lock alock;
	bool reclaim;
	s32 state;
};

struct nlm_cancargs {
	netobj cookie;
	bool block;
	bool exclusive;
	struct nlm_lock alock;
};

struct nlm_testargs {
	netobj cookie;
	bool exclusive;
	struct nlm_lock alock;
};

struct nlm_unlockargs {
	netobj cookie;
	struct nlm_lock alock;
};

enum fsh_mode {
	fsm_DN = 0,
	fsm_DR = 1,
	fsm_DW = 2,
	fsm_DRW = 3,
};

typedef enum fsh_mode fsh_mode;

enum fsh_access {
	fsa_NONE = 0,
	fsa_R = 1,
	fsa_W = 2,
	fsa_RW = 3,
};

typedef enum fsh_access fsh_access;

struct nlm_share {
	string caller_name;
	netobj fh;
	netobj oh;
	fsh_mode mode;
	fsh_access access;
};

struct nlm_shareargs {
	netobj cookie;
	struct nlm_share share;
	bool reclaim;
};

struct nlm_shareres {
	netobj cookie;
	nlm_stats stat;
	s32 sequence;
};

struct nlm_notify {
	string name;
	s32 state;
};

enum { SM_PRIV_SIZE = 16 };

struct nlm_notifyargs {
	struct nlm_notify notify;
	u8 private[SM_PRIV_SIZE];
};

enum {
	NLM_NULL = 0,
	NLM_TEST = 1,
	NLM_LOCK = 2,
	NLM_CANCEL = 3,
	NLM_UNLOCK = 4,
	NLM_GRANTED = 5,
	NLM_TEST_MSG = 6,
	NLM_LOCK_MSG = 7,
	NLM_CANCEL_MSG = 8,
	NLM_UNLOCK_MSG = 9,
	NLM_GRANTED_MSG = 10,
	NLM_TEST_RES = 11,
	NLM_LOCK_RES = 12,
	NLM_CANCEL_RES = 13,
	NLM_UNLOCK_RES = 14,
	NLM_GRANTED_RES = 15,
	NLM_SM_NOTIFY = 16,
	NLM_SHARE = 20,
	NLM_UNSHARE = 21,
	NLM_NM_LOCK = 22,
	NLM_FREE_ALL = 23,
};

#ifndef NLM_PROG
#define NLM_PROG (100021)
#endif

#define NLM3_netobj_sz                  (XDR_unsigned_int + XDR_QUADLEN(MAXNETOBJ_SZ))
#define NLM3_nlm_stats_sz               (XDR_int)
#define NLM3_nlm_stat_sz                \
	(NLM3_nlm_stats_sz)
#define NLM3_nlm_res_sz                 \
	(NLM3_netobj_sz + NLM3_nlm_stat_sz)
#define NLM3_nlm_holder_sz              \
	(XDR_bool + XDR_int + NLM3_netobj_sz + XDR_unsigned_int + XDR_unsigned_int)
#define NLM3_nlm_testrply_sz            \
	(NLM3_nlm_stats_sz + NLM3_nlm_holder_sz)
#define NLM3_nlm_testres_sz             \
	(NLM3_netobj_sz + NLM3_nlm_testrply_sz)
#define NLM3_nlm_lock_sz                \
	(XDR_unsigned_int + XDR_QUADLEN(LM_MAXSTRLEN) + NLM3_netobj_sz + NLM3_netobj_sz + XDR_int + XDR_unsigned_int + XDR_unsigned_int)
#define NLM3_nlm_lockargs_sz            \
	(NLM3_netobj_sz + XDR_bool + XDR_bool + NLM3_nlm_lock_sz + XDR_bool + XDR_int)
#define NLM3_nlm_cancargs_sz            \
	(NLM3_netobj_sz + XDR_bool + XDR_bool + NLM3_nlm_lock_sz)
#define NLM3_nlm_testargs_sz            \
	(NLM3_netobj_sz + XDR_bool + NLM3_nlm_lock_sz)
#define NLM3_nlm_unlockargs_sz          \
	(NLM3_netobj_sz + NLM3_nlm_lock_sz)
#define NLM3_fsh_mode_sz                (XDR_int)
#define NLM3_fsh_access_sz              (XDR_int)
#define NLM3_nlm_share_sz               \
	(XDR_unsigned_int + XDR_QUADLEN(LM_MAXSTRLEN) + NLM3_netobj_sz + NLM3_netobj_sz + NLM3_fsh_mode_sz + NLM3_fsh_access_sz)
#define NLM3_nlm_shareargs_sz           \
	(NLM3_netobj_sz + NLM3_nlm_share_sz + XDR_bool)
#define NLM3_nlm_shareres_sz            \
	(NLM3_netobj_sz + NLM3_nlm_stats_sz + XDR_int)
#define NLM3_nlm_notify_sz              \
	(XDR_unsigned_int + XDR_QUADLEN(LM_MAXNAMELEN) + XDR_long)
#define NLM3_nlm_notifyargs_sz          \
	(NLM3_nlm_notify_sz + XDR_QUADLEN(SM_PRIV_SIZE))
#define NLM3_MAX_ARGS_SZ                \
	(NLM3_nlm_lockargs_sz)

#endif /* _LINUX_XDRGEN_NLM3_DEF_H */
