diff options
author | Weston Andros Adamson <dros@netapp.com> | 2013-08-13 16:37:32 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2013-09-05 10:40:45 -0400 |
commit | 2031cd1af143f47dacacbb35efbef22f2fd079e6 (patch) | |
tree | d5737cb0679b190fcfd583bb74768edfa032203e /include/linux/nfs_xdr.h | |
parent | 92cb6c5be8134db6f7c38f25f6afd13e444cebaf (diff) |
nfs4.1: Minimal SP4_MACH_CRED implementation
This is a minimal client side implementation of SP4_MACH_CRED. It will
attempt to negotiate SP4_MACH_CRED iff the EXCHANGE_ID is using
krb5i or krb5p auth. SP4_MACH_CRED will be used if the server supports the
minimal operations:
BIND_CONN_TO_SESSION
EXCHANGE_ID
CREATE_SESSION
DESTROY_SESSION
DESTROY_CLIENTID
This patch only includes the EXCHANGE_ID negotiation code because
the client will already use the machine cred for these operations.
If the server doesn't support SP4_MACH_CRED or doesn't support the minimal
operations, the exchange id will be resent with SP4_NONE.
Signed-off-by: Weston Andros Adamson <dros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'include/linux/nfs_xdr.h')
-rw-r--r-- | include/linux/nfs_xdr.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 7c3956d65b3e..01fd84b566f7 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
@@ -1107,6 +1107,23 @@ struct pnfs_ds_commit_info { | |||
1107 | struct pnfs_commit_bucket *buckets; | 1107 | struct pnfs_commit_bucket *buckets; |
1108 | }; | 1108 | }; |
1109 | 1109 | ||
1110 | #define NFS4_OP_MAP_NUM_LONGS \ | ||
1111 | DIV_ROUND_UP(LAST_NFS4_OP, 8 * sizeof(unsigned long)) | ||
1112 | #define NFS4_OP_MAP_NUM_WORDS \ | ||
1113 | (NFS4_OP_MAP_NUM_LONGS * sizeof(unsigned long) / sizeof(u32)) | ||
1114 | struct nfs4_op_map { | ||
1115 | union { | ||
1116 | unsigned long longs[NFS4_OP_MAP_NUM_LONGS]; | ||
1117 | u32 words[NFS4_OP_MAP_NUM_WORDS]; | ||
1118 | } u; | ||
1119 | }; | ||
1120 | |||
1121 | struct nfs41_state_protection { | ||
1122 | u32 how; | ||
1123 | struct nfs4_op_map enforce; | ||
1124 | struct nfs4_op_map allow; | ||
1125 | }; | ||
1126 | |||
1110 | #define NFS4_EXCHANGE_ID_LEN (48) | 1127 | #define NFS4_EXCHANGE_ID_LEN (48) |
1111 | struct nfs41_exchange_id_args { | 1128 | struct nfs41_exchange_id_args { |
1112 | struct nfs_client *client; | 1129 | struct nfs_client *client; |
@@ -1114,6 +1131,7 @@ struct nfs41_exchange_id_args { | |||
1114 | unsigned int id_len; | 1131 | unsigned int id_len; |
1115 | char id[NFS4_EXCHANGE_ID_LEN]; | 1132 | char id[NFS4_EXCHANGE_ID_LEN]; |
1116 | u32 flags; | 1133 | u32 flags; |
1134 | struct nfs41_state_protection state_protect; | ||
1117 | }; | 1135 | }; |
1118 | 1136 | ||
1119 | struct nfs41_server_owner { | 1137 | struct nfs41_server_owner { |
@@ -1146,6 +1164,7 @@ struct nfs41_exchange_id_res { | |||
1146 | struct nfs41_server_owner *server_owner; | 1164 | struct nfs41_server_owner *server_owner; |
1147 | struct nfs41_server_scope *server_scope; | 1165 | struct nfs41_server_scope *server_scope; |
1148 | struct nfs41_impl_id *impl_id; | 1166 | struct nfs41_impl_id *impl_id; |
1167 | struct nfs41_state_protection state_protect; | ||
1149 | }; | 1168 | }; |
1150 | 1169 | ||
1151 | struct nfs41_create_session_args { | 1170 | struct nfs41_create_session_args { |