+enum ptlrpcs_major_flavors {
+ PTLRPCS_FLVR_MAJOR_NULL = 0,
+ PTLRPCS_FLVR_MAJOR_GSS = 1,
+ PTLRPCS_FLVR_MAJOR_MAX,
+};
+
+enum ptlrpcs_null_minor_flavors {
+ PTLRPCS_FLVR_MINOR_NULL = 0,
+ PTLRPCS_FLVR_MINOR_NULL_MAX,
+};
+enum ptlrpcs_gss_minor_flavors {
+ PTLRPCS_FLVR_MINOR_GSS_NONE = 0,
+ PTLRPCS_FLVR_MINOR_GSS_KRB5 = 1,
+ PTLRPCS_FLVR_MINOR_GSS_MAX,
+};
+
+enum ptlrpcs_security_type {
+ PTLRPCS_SVC_NONE = 0, /* no security */
+ PTLRPCS_SVC_AUTH = 1, /* authentication */
+ PTLRPCS_SVC_PRIV = 2, /* privacy */
+ PTLRPCS_SVC_MAX,
+};
+
+/*
+ * flavor compose/extract
+ */
+#define SEC_FLAVOR_MAJOR_OFFSET (24)
+#define SEC_FLAVOR_RESERVE_OFFSET (16)
+#define SEC_FLAVOR_SVC_OFFSET (8)
+#define SEC_FLAVOR_MINOR_OFFSET (0)
+
+#define SEC_MAKE_FLAVOR(major, minor, svc) \
+ (((__u32)(major) << SEC_FLAVOR_MAJOR_OFFSET) | \
+ ((__u32)(svc) << SEC_FLAVOR_SVC_OFFSET) | \
+ ((__u32)(minor) << SEC_FLAVOR_MINOR_OFFSET))
+
+#define SEC_MAKE_SUBFLAVOR(minor, svc) \
+ (((__u32)(svc) << SEC_FLAVOR_SVC_OFFSET) | \
+ ((__u32)(minor) << SEC_FLAVOR_MINOR_OFFSET))
+
+#define SEC_FLAVOR_MAJOR(flavor) \
+ ((((__u32)(flavor)) >> SEC_FLAVOR_MAJOR_OFFSET) & 0xFF)
+#define SEC_FLAVOR_MINOR(flavor) \
+ ((((__u32)(flavor)) >> SEC_FLAVOR_MINOR_OFFSET) & 0xFF)
+#define SEC_FLAVOR_SVC(flavor) \
+ ((((__u32)(flavor)) >> SEC_FLAVOR_SVC_OFFSET) & 0xFF)
+#define SEC_FLAVOR_SUB(flavor) \
+ ((((__u32)(flavor)) >> SEC_FLAVOR_MINOR_OFFSET) & 0xFFFF)
+
+/*
+ * general gss flavors
+ */
+#define PTLRPCS_FLVR_GSS_NONE \
+ SEC_MAKE_FLAVOR(PTLRPCS_FLVR_MAJOR_GSS, \
+ PTLRPCS_FLVR_MINOR_GSS_NONE, \
+ PTLRPCS_SVC_NONE)
+#define PTLRPCS_FLVR_GSS_AUTH \
+ SEC_MAKE_FLAVOR(PTLRPCS_FLVR_MAJOR_GSS, \
+ PTLRPCS_FLVR_MINOR_GSS_NONE, \
+ PTLRPCS_SVC_AUTH)
+#define PTLRPCS_FLVR_GSS_PRIV \
+ SEC_MAKE_FLAVOR(PTLRPCS_FLVR_MAJOR_GSS, \
+ PTLRPCS_FLVR_MINOR_GSS_NONE, \
+ PTLRPCS_SVC_PRIV)
+
+/*
+ * gss subflavors
+ */
+#define PTLRPCS_SUBFLVR_KRB5 \
+ SEC_MAKE_SUBFLAVOR(PTLRPCS_FLVR_MINOR_GSS_KRB5, \
+ PTLRPCS_SVC_NONE)
+#define PTLRPCS_SUBFLVR_KRB5I \
+ SEC_MAKE_SUBFLAVOR(PTLRPCS_FLVR_MINOR_GSS_KRB5, \
+ PTLRPCS_SVC_AUTH)
+#define PTLRPCS_SUBFLVR_KRB5P \
+ SEC_MAKE_SUBFLAVOR(PTLRPCS_FLVR_MINOR_GSS_KRB5, \
+ PTLRPCS_SVC_PRIV)
+
+/*
+ * "end user" flavors
+ */
+#define PTLRPCS_FLVR_NULL \
+ SEC_MAKE_FLAVOR(PTLRPCS_FLVR_MAJOR_NULL, \
+ PTLRPCS_FLVR_MINOR_NULL, \
+ PTLRPCS_SVC_NONE)
+#define PTLRPCS_FLVR_KRB5 \
+ SEC_MAKE_FLAVOR(PTLRPCS_FLVR_MAJOR_GSS, \
+ PTLRPCS_FLVR_MINOR_GSS_KRB5, \
+ PTLRPCS_SVC_NONE)
+#define PTLRPCS_FLVR_KRB5I \
+ SEC_MAKE_FLAVOR(PTLRPCS_FLVR_MAJOR_GSS, \
+ PTLRPCS_FLVR_MINOR_GSS_KRB5, \
+ PTLRPCS_SVC_AUTH)
+#define PTLRPCS_FLVR_KRB5P \
+ SEC_MAKE_FLAVOR(PTLRPCS_FLVR_MAJOR_GSS, \
+ PTLRPCS_FLVR_MINOR_GSS_KRB5, \
+ PTLRPCS_SVC_PRIV)
+
+#define PTLRPCS_FLVR_INVALID (-1)
+
+__u32 ptlrpcs_name2flavor(const char *name);
+char *ptlrpcs_flavor2name(__u32 flavor);
+
+
+#ifdef __KERNEL__
+