diff options
Diffstat (limited to 'include/rxrpc/packet.h')
-rw-r--r-- | include/rxrpc/packet.h | 85 |
1 files changed, 83 insertions, 2 deletions
diff --git a/include/rxrpc/packet.h b/include/rxrpc/packet.h index 1447f0aaa0eb..452a9bb02d48 100644 --- a/include/rxrpc/packet.h +++ b/include/rxrpc/packet.h | |||
@@ -33,7 +33,8 @@ struct rxrpc_header | |||
33 | #define RXRPC_MAXCALLS 4 /* max active calls per conn */ | 33 | #define RXRPC_MAXCALLS 4 /* max active calls per conn */ |
34 | #define RXRPC_CHANNELMASK (RXRPC_MAXCALLS-1) /* mask for channel ID */ | 34 | #define RXRPC_CHANNELMASK (RXRPC_MAXCALLS-1) /* mask for channel ID */ |
35 | #define RXRPC_CIDMASK (~RXRPC_CHANNELMASK) /* mask for connection ID */ | 35 | #define RXRPC_CIDMASK (~RXRPC_CHANNELMASK) /* mask for connection ID */ |
36 | #define RXRPC_CIDSHIFT 2 /* shift for connection ID */ | 36 | #define RXRPC_CIDSHIFT ilog2(RXRPC_MAXCALLS) /* shift for connection ID */ |
37 | #define RXRPC_CID_INC (1 << RXRPC_CIDSHIFT) /* connection ID increment */ | ||
37 | 38 | ||
38 | __be32 callNumber; /* call ID (0 for connection-level packets) */ | 39 | __be32 callNumber; /* call ID (0 for connection-level packets) */ |
39 | #define RXRPC_PROCESS_MAXCALLS (1<<2) /* maximum number of active calls per conn (power of 2) */ | 40 | #define RXRPC_PROCESS_MAXCALLS (1<<2) /* maximum number of active calls per conn (power of 2) */ |
@@ -62,7 +63,10 @@ struct rxrpc_header | |||
62 | 63 | ||
63 | uint8_t userStatus; /* app-layer defined status */ | 64 | uint8_t userStatus; /* app-layer defined status */ |
64 | uint8_t securityIndex; /* security protocol ID */ | 65 | uint8_t securityIndex; /* security protocol ID */ |
65 | __be16 _rsvd; /* reserved (used by kerberos security as cksum) */ | 66 | union { |
67 | __be16 _rsvd; /* reserved */ | ||
68 | __be16 cksum; /* kerberos security checksum */ | ||
69 | }; | ||
66 | __be16 serviceId; /* service ID */ | 70 | __be16 serviceId; /* service ID */ |
67 | 71 | ||
68 | } __attribute__((packed)); | 72 | } __attribute__((packed)); |
@@ -124,4 +128,81 @@ struct rxrpc_ackpacket | |||
124 | 128 | ||
125 | } __attribute__((packed)); | 129 | } __attribute__((packed)); |
126 | 130 | ||
131 | /* | ||
132 | * ACK packets can have a further piece of information tagged on the end | ||
133 | */ | ||
134 | struct rxrpc_ackinfo { | ||
135 | __be32 rxMTU; /* maximum Rx MTU size (bytes) [AFS 3.3] */ | ||
136 | __be32 maxMTU; /* maximum interface MTU size (bytes) [AFS 3.3] */ | ||
137 | __be32 rwind; /* Rx window size (packets) [AFS 3.4] */ | ||
138 | __be32 jumbo_max; /* max packets to stick into a jumbo packet [AFS 3.5] */ | ||
139 | }; | ||
140 | |||
141 | /*****************************************************************************/ | ||
142 | /* | ||
143 | * Kerberos security type-2 challenge packet | ||
144 | */ | ||
145 | struct rxkad_challenge { | ||
146 | __be32 version; /* version of this challenge type */ | ||
147 | __be32 nonce; /* encrypted random number */ | ||
148 | __be32 min_level; /* minimum security level */ | ||
149 | __be32 __padding; /* padding to 8-byte boundary */ | ||
150 | } __attribute__((packed)); | ||
151 | |||
152 | /*****************************************************************************/ | ||
153 | /* | ||
154 | * Kerberos security type-2 response packet | ||
155 | */ | ||
156 | struct rxkad_response { | ||
157 | __be32 version; /* version of this reponse type */ | ||
158 | __be32 __pad; | ||
159 | |||
160 | /* encrypted bit of the response */ | ||
161 | struct { | ||
162 | __be32 epoch; /* current epoch */ | ||
163 | __be32 cid; /* parent connection ID */ | ||
164 | __be32 checksum; /* checksum */ | ||
165 | __be32 securityIndex; /* security type */ | ||
166 | __be32 call_id[4]; /* encrypted call IDs */ | ||
167 | __be32 inc_nonce; /* challenge nonce + 1 */ | ||
168 | __be32 level; /* desired level */ | ||
169 | } encrypted; | ||
170 | |||
171 | __be32 kvno; /* Kerberos key version number */ | ||
172 | __be32 ticket_len; /* Kerberos ticket length */ | ||
173 | } __attribute__((packed)); | ||
174 | |||
175 | /*****************************************************************************/ | ||
176 | /* | ||
177 | * RxRPC-level abort codes | ||
178 | */ | ||
179 | #define RX_CALL_DEAD -1 /* call/conn has been inactive and is shut down */ | ||
180 | #define RX_INVALID_OPERATION -2 /* invalid operation requested / attempted */ | ||
181 | #define RX_CALL_TIMEOUT -3 /* call timeout exceeded */ | ||
182 | #define RX_EOF -4 /* unexpected end of data on read op */ | ||
183 | #define RX_PROTOCOL_ERROR -5 /* low-level protocol error */ | ||
184 | #define RX_USER_ABORT -6 /* generic user abort */ | ||
185 | #define RX_ADDRINUSE -7 /* UDP port in use */ | ||
186 | #define RX_DEBUGI_BADTYPE -8 /* bad debugging packet type */ | ||
187 | |||
188 | /* | ||
189 | * Rx kerberos security abort codes | ||
190 | * - unfortunately we have no generalised security abort codes to say things | ||
191 | * like "unsupported security", so we have to use these instead and hope the | ||
192 | * other side understands | ||
193 | */ | ||
194 | #define RXKADINCONSISTENCY 19270400 /* security module structure inconsistent */ | ||
195 | #define RXKADPACKETSHORT 19270401 /* packet too short for security challenge */ | ||
196 | #define RXKADLEVELFAIL 19270402 /* security level negotiation failed */ | ||
197 | #define RXKADTICKETLEN 19270403 /* ticket length too short or too long */ | ||
198 | #define RXKADOUTOFSEQUENCE 19270404 /* packet had bad sequence number */ | ||
199 | #define RXKADNOAUTH 19270405 /* caller not authorised */ | ||
200 | #define RXKADBADKEY 19270406 /* illegal key: bad parity or weak */ | ||
201 | #define RXKADBADTICKET 19270407 /* security object was passed a bad ticket */ | ||
202 | #define RXKADUNKNOWNKEY 19270408 /* ticket contained unknown key version number */ | ||
203 | #define RXKADEXPIRED 19270409 /* authentication expired */ | ||
204 | #define RXKADSEALEDINCON 19270410 /* sealed data inconsistent */ | ||
205 | #define RXKADDATALEN 19270411 /* user data too long */ | ||
206 | #define RXKADILLEGALLEVEL 19270412 /* caller not authorised to use encrypted conns */ | ||
207 | |||
127 | #endif /* _LINUX_RXRPC_PACKET_H */ | 208 | #endif /* _LINUX_RXRPC_PACKET_H */ |