4e86d248dc5ef1bbbf64d7f6b6e520b378c58af9
[cascardo/linux.git] / net / rxrpc / ar-internal.h
1 /* AF_RXRPC internal definitions
2  *
3  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells (dhowells@redhat.com)
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version
9  * 2 of the License, or (at your option) any later version.
10  */
11
12 #include <linux/atomic.h>
13 #include <linux/seqlock.h>
14 #include <net/sock.h>
15 #include <net/af_rxrpc.h>
16 #include <rxrpc/packet.h>
17
18 #if 0
19 #define CHECK_SLAB_OKAY(X)                                   \
20         BUG_ON(atomic_read((X)) >> (sizeof(atomic_t) - 2) == \
21                (POISON_FREE << 8 | POISON_FREE))
22 #else
23 #define CHECK_SLAB_OKAY(X) do {} while (0)
24 #endif
25
26 #define FCRYPT_BSIZE 8
27 struct rxrpc_crypt {
28         union {
29                 u8      x[FCRYPT_BSIZE];
30                 __be32  n[2];
31         };
32 } __attribute__((aligned(8)));
33
34 #define rxrpc_queue_work(WS)    queue_work(rxrpc_workqueue, (WS))
35 #define rxrpc_queue_delayed_work(WS,D)  \
36         queue_delayed_work(rxrpc_workqueue, (WS), (D))
37
38 #define rxrpc_queue_call(CALL)  rxrpc_queue_work(&(CALL)->processor)
39
40 struct rxrpc_connection;
41
42 /*
43  * Mark applied to socket buffers.
44  */
45 enum rxrpc_skb_mark {
46         RXRPC_SKB_MARK_DATA,            /* data message */
47         RXRPC_SKB_MARK_FINAL_ACK,       /* final ACK received message */
48         RXRPC_SKB_MARK_BUSY,            /* server busy message */
49         RXRPC_SKB_MARK_REMOTE_ABORT,    /* remote abort message */
50         RXRPC_SKB_MARK_LOCAL_ABORT,     /* local abort message */
51         RXRPC_SKB_MARK_NET_ERROR,       /* network error message */
52         RXRPC_SKB_MARK_LOCAL_ERROR,     /* local error message */
53         RXRPC_SKB_MARK_NEW_CALL,        /* local error message */
54 };
55
56 /*
57  * sk_state for RxRPC sockets
58  */
59 enum {
60         RXRPC_UNBOUND = 0,
61         RXRPC_CLIENT_UNBOUND,           /* Unbound socket used as client */
62         RXRPC_CLIENT_BOUND,             /* client local address bound */
63         RXRPC_SERVER_BOUND,             /* server local address bound */
64         RXRPC_SERVER_LISTENING,         /* server listening for connections */
65         RXRPC_CLOSE,                    /* socket is being closed */
66 };
67
68 /*
69  * RxRPC socket definition
70  */
71 struct rxrpc_sock {
72         /* WARNING: sk has to be the first member */
73         struct sock             sk;
74         rxrpc_notify_new_call_t notify_new_call; /* Func to notify of new call */
75         struct rxrpc_local      *local;         /* local endpoint */
76         struct list_head        listen_link;    /* link in the local endpoint's listen list */
77         struct list_head        secureq;        /* calls awaiting connection security clearance */
78         struct list_head        acceptq;        /* calls awaiting acceptance */
79         struct key              *key;           /* security for this socket */
80         struct key              *securities;    /* list of server security descriptors */
81         struct rb_root          calls;          /* outstanding calls on this socket */
82         unsigned long           flags;
83 #define RXRPC_SOCK_CONNECTED            0       /* connect_srx is set */
84         rwlock_t                call_lock;      /* lock for calls */
85         u32                     min_sec_level;  /* minimum security level */
86 #define RXRPC_SECURITY_MAX      RXRPC_SECURITY_ENCRYPT
87         bool                    exclusive;      /* Exclusive connection for a client socket */
88         sa_family_t             family;         /* Protocol family created with */
89         struct sockaddr_rxrpc   srx;            /* local address */
90         struct sockaddr_rxrpc   connect_srx;    /* Default client address from connect() */
91 };
92
93 #define rxrpc_sk(__sk) container_of((__sk), struct rxrpc_sock, sk)
94
95 /*
96  * CPU-byteorder normalised Rx packet header.
97  */
98 struct rxrpc_host_header {
99         u32             epoch;          /* client boot timestamp */
100         u32             cid;            /* connection and channel ID */
101         u32             callNumber;     /* call ID (0 for connection-level packets) */
102         u32             seq;            /* sequence number of pkt in call stream */
103         u32             serial;         /* serial number of pkt sent to network */
104         u8              type;           /* packet type */
105         u8              flags;          /* packet flags */
106         u8              userStatus;     /* app-layer defined status */
107         u8              securityIndex;  /* security protocol ID */
108         union {
109                 u16     _rsvd;          /* reserved */
110                 u16     cksum;          /* kerberos security checksum */
111         };
112         u16             serviceId;      /* service ID */
113 } __packed;
114
115 /*
116  * RxRPC socket buffer private variables
117  * - max 48 bytes (struct sk_buff::cb)
118  */
119 struct rxrpc_skb_priv {
120         struct rxrpc_call       *call;          /* call with which associated */
121         unsigned long           resend_at;      /* time in jiffies at which to resend */
122         union {
123                 unsigned int    offset;         /* offset into buffer of next read */
124                 int             remain;         /* amount of space remaining for next write */
125                 u32             error;          /* network error code */
126                 bool            need_resend;    /* T if needs resending */
127         };
128
129         struct rxrpc_host_header hdr;           /* RxRPC packet header from this packet */
130 };
131
132 #define rxrpc_skb(__skb) ((struct rxrpc_skb_priv *) &(__skb)->cb)
133
134 enum rxrpc_command {
135         RXRPC_CMD_SEND_DATA,            /* send data message */
136         RXRPC_CMD_SEND_ABORT,           /* request abort generation */
137         RXRPC_CMD_ACCEPT,               /* [server] accept incoming call */
138         RXRPC_CMD_REJECT_BUSY,          /* [server] reject a call as busy */
139 };
140
141 /*
142  * RxRPC security module interface
143  */
144 struct rxrpc_security {
145         const char              *name;          /* name of this service */
146         u8                      security_index; /* security type provided */
147
148         /* Initialise a security service */
149         int (*init)(void);
150
151         /* Clean up a security service */
152         void (*exit)(void);
153
154         /* initialise a connection's security */
155         int (*init_connection_security)(struct rxrpc_connection *);
156
157         /* prime a connection's packet security */
158         int (*prime_packet_security)(struct rxrpc_connection *);
159
160         /* impose security on a packet */
161         int (*secure_packet)(struct rxrpc_call *,
162                              struct sk_buff *,
163                              size_t,
164                              void *);
165
166         /* verify the security on a received packet */
167         int (*verify_packet)(struct rxrpc_call *, struct sk_buff *, u32 *);
168
169         /* issue a challenge */
170         int (*issue_challenge)(struct rxrpc_connection *);
171
172         /* respond to a challenge */
173         int (*respond_to_challenge)(struct rxrpc_connection *,
174                                     struct sk_buff *,
175                                     u32 *);
176
177         /* verify a response */
178         int (*verify_response)(struct rxrpc_connection *,
179                                struct sk_buff *,
180                                u32 *);
181
182         /* clear connection security */
183         void (*clear)(struct rxrpc_connection *);
184 };
185
186 /*
187  * RxRPC local transport endpoint description
188  * - owned by a single AF_RXRPC socket
189  * - pointed to by transport socket struct sk_user_data
190  */
191 struct rxrpc_local {
192         struct rcu_head         rcu;
193         atomic_t                usage;
194         struct list_head        link;
195         struct socket           *socket;        /* my UDP socket */
196         struct work_struct      processor;
197         struct list_head        services;       /* services listening on this endpoint */
198         struct rw_semaphore     defrag_sem;     /* control re-enablement of IP DF bit */
199         struct sk_buff_head     accept_queue;   /* incoming calls awaiting acceptance */
200         struct sk_buff_head     reject_queue;   /* packets awaiting rejection */
201         struct sk_buff_head     event_queue;    /* endpoint event packets awaiting processing */
202         struct rb_root          client_conns;   /* Client connections by socket params */
203         spinlock_t              client_conns_lock; /* Lock for client_conns */
204         spinlock_t              lock;           /* access lock */
205         rwlock_t                services_lock;  /* lock for services list */
206         int                     debug_id;       /* debug ID for printks */
207         bool                    dead;
208         struct sockaddr_rxrpc   srx;            /* local address */
209 };
210
211 /*
212  * RxRPC remote transport endpoint definition
213  * - matched by local endpoint, remote port, address and protocol type
214  */
215 struct rxrpc_peer {
216         struct rcu_head         rcu;            /* This must be first */
217         atomic_t                usage;
218         unsigned long           hash_key;
219         struct hlist_node       hash_link;
220         struct rxrpc_local      *local;
221         struct hlist_head       error_targets;  /* targets for net error distribution */
222         struct work_struct      error_distributor;
223         struct rb_root          service_conns;  /* Service connections */
224         seqlock_t               service_conn_lock;
225         spinlock_t              lock;           /* access lock */
226         unsigned int            if_mtu;         /* interface MTU for this peer */
227         unsigned int            mtu;            /* network MTU for this peer */
228         unsigned int            maxdata;        /* data size (MTU - hdrsize) */
229         unsigned short          hdrsize;        /* header size (IP + UDP + RxRPC) */
230         int                     debug_id;       /* debug ID for printks */
231         int                     error_report;   /* Net (+0) or local (+1000000) to distribute */
232 #define RXRPC_LOCAL_ERROR_OFFSET 1000000
233         struct sockaddr_rxrpc   srx;            /* remote address */
234
235         /* calculated RTT cache */
236 #define RXRPC_RTT_CACHE_SIZE 32
237         suseconds_t             rtt;            /* current RTT estimate (in uS) */
238         unsigned int            rtt_point;      /* next entry at which to insert */
239         unsigned int            rtt_usage;      /* amount of cache actually used */
240         suseconds_t             rtt_cache[RXRPC_RTT_CACHE_SIZE]; /* calculated RTT cache */
241 };
242
243 /*
244  * Keys for matching a connection.
245  */
246 struct rxrpc_conn_proto {
247         union {
248                 struct {
249                         u32     epoch;          /* epoch of this connection */
250                         u32     cid;            /* connection ID */
251                 };
252                 u64             index_key;
253         };
254 };
255
256 struct rxrpc_conn_parameters {
257         struct rxrpc_local      *local;         /* Representation of local endpoint */
258         struct rxrpc_peer       *peer;          /* Remote endpoint */
259         struct key              *key;           /* Security details */
260         bool                    exclusive;      /* T if conn is exclusive */
261         u16                     service_id;     /* Service ID for this connection */
262         u32                     security_level; /* Security level selected */
263 };
264
265 /*
266  * Bits in the connection flags.
267  */
268 enum rxrpc_conn_flag {
269         RXRPC_CONN_HAS_IDR,             /* Has a client conn ID assigned */
270         RXRPC_CONN_IN_SERVICE_CONNS,    /* Conn is in peer->service_conns */
271         RXRPC_CONN_IN_CLIENT_CONNS,     /* Conn is in local->client_conns */
272         RXRPC_CONN_EXPOSED,             /* Conn has extra ref for exposure */
273         RXRPC_CONN_DONT_REUSE,          /* Don't reuse this connection */
274         RXRPC_CONN_COUNTED,             /* Counted by rxrpc_nr_client_conns */
275 };
276
277 /*
278  * Events that can be raised upon a connection.
279  */
280 enum rxrpc_conn_event {
281         RXRPC_CONN_EV_CHALLENGE,        /* Send challenge packet */
282 };
283
284 /*
285  * The connection cache state.
286  */
287 enum rxrpc_conn_cache_state {
288         RXRPC_CONN_CLIENT_INACTIVE,     /* Conn is not yet listed */
289         RXRPC_CONN_CLIENT_WAITING,      /* Conn is on wait list, waiting for capacity */
290         RXRPC_CONN_CLIENT_ACTIVE,       /* Conn is on active list, doing calls */
291         RXRPC_CONN_CLIENT_CULLED,       /* Conn is culled and delisted, doing calls */
292         RXRPC_CONN_CLIENT_IDLE,         /* Conn is on idle list, doing mostly nothing */
293 };
294
295 /*
296  * The connection protocol state.
297  */
298 enum rxrpc_conn_proto_state {
299         RXRPC_CONN_UNUSED,              /* Connection not yet attempted */
300         RXRPC_CONN_CLIENT,              /* Client connection */
301         RXRPC_CONN_SERVICE_UNSECURED,   /* Service unsecured connection */
302         RXRPC_CONN_SERVICE_CHALLENGING, /* Service challenging for security */
303         RXRPC_CONN_SERVICE,             /* Service secured connection */
304         RXRPC_CONN_REMOTELY_ABORTED,    /* Conn aborted by peer */
305         RXRPC_CONN_LOCALLY_ABORTED,     /* Conn aborted locally */
306         RXRPC_CONN__NR_STATES
307 };
308
309 /*
310  * RxRPC connection definition
311  * - matched by { local, peer, epoch, conn_id, direction }
312  * - each connection can only handle four simultaneous calls
313  */
314 struct rxrpc_connection {
315         struct rxrpc_conn_proto proto;
316         struct rxrpc_conn_parameters params;
317
318         atomic_t                usage;
319         struct rcu_head         rcu;
320         struct list_head        cache_link;
321
322         spinlock_t              channel_lock;
323         unsigned char           active_chans;   /* Mask of active channels */
324 #define RXRPC_ACTIVE_CHANS_MASK ((1 << RXRPC_MAXCALLS) - 1)
325         struct list_head        waiting_calls;  /* Calls waiting for channels */
326         struct rxrpc_channel {
327                 struct rxrpc_call __rcu *call;          /* Active call */
328                 u32                     call_id;        /* ID of current call */
329                 u32                     call_counter;   /* Call ID counter */
330                 u32                     last_call;      /* ID of last call */
331                 u8                      last_type;      /* Type of last packet */
332                 u16                     last_service_id;
333                 union {
334                         u32             last_seq;
335                         u32             last_abort;
336                 };
337         } channels[RXRPC_MAXCALLS];
338
339         struct work_struct      processor;      /* connection event processor */
340         union {
341                 struct rb_node  client_node;    /* Node in local->client_conns */
342                 struct rb_node  service_node;   /* Node in peer->service_conns */
343         };
344         struct list_head        proc_link;      /* link in procfs list */
345         struct list_head        link;           /* link in master connection list */
346         struct sk_buff_head     rx_queue;       /* received conn-level packets */
347         const struct rxrpc_security *security;  /* applied security module */
348         struct key              *server_key;    /* security for this service */
349         struct crypto_skcipher  *cipher;        /* encryption handle */
350         struct rxrpc_crypt      csum_iv;        /* packet checksum base */
351         unsigned long           flags;
352         unsigned long           events;
353         unsigned long           idle_timestamp; /* Time at which last became idle */
354         spinlock_t              state_lock;     /* state-change lock */
355         enum rxrpc_conn_cache_state cache_state : 8;
356         enum rxrpc_conn_proto_state state : 8;  /* current state of connection */
357         u32                     local_abort;    /* local abort code */
358         u32                     remote_abort;   /* remote abort code */
359         int                     debug_id;       /* debug ID for printks */
360         atomic_t                serial;         /* packet serial number counter */
361         unsigned int            hi_serial;      /* highest serial number received */
362         u8                      size_align;     /* data size alignment (for security) */
363         u8                      header_size;    /* rxrpc + security header size */
364         u8                      security_size;  /* security header size */
365         u32                     security_nonce; /* response re-use preventer */
366         u8                      security_ix;    /* security type */
367         u8                      out_clientflag; /* RXRPC_CLIENT_INITIATED if we are client */
368 };
369
370 /*
371  * Flags in call->flags.
372  */
373 enum rxrpc_call_flag {
374         RXRPC_CALL_RELEASED,            /* call has been released - no more message to userspace */
375         RXRPC_CALL_TERMINAL_MSG,        /* call has given the socket its final message */
376         RXRPC_CALL_RCVD_LAST,           /* all packets received */
377         RXRPC_CALL_RUN_RTIMER,          /* Tx resend timer started */
378         RXRPC_CALL_TX_SOFT_ACK,         /* sent some soft ACKs */
379         RXRPC_CALL_INIT_ACCEPT,         /* acceptance was initiated */
380         RXRPC_CALL_HAS_USERID,          /* has a user ID attached */
381         RXRPC_CALL_EXPECT_OOS,          /* expect out of sequence packets */
382         RXRPC_CALL_IS_SERVICE,          /* Call is service call */
383         RXRPC_CALL_EXPOSED,             /* The call was exposed to the world */
384         RXRPC_CALL_RX_NO_MORE,          /* Don't indicate MSG_MORE from recvmsg() */
385 };
386
387 /*
388  * Events that can be raised on a call.
389  */
390 enum rxrpc_call_event {
391         RXRPC_CALL_EV_RCVD_ACKALL,      /* ACKALL or reply received */
392         RXRPC_CALL_EV_RCVD_BUSY,        /* busy packet received */
393         RXRPC_CALL_EV_RCVD_ABORT,       /* abort packet received */
394         RXRPC_CALL_EV_RCVD_ERROR,       /* network error received */
395         RXRPC_CALL_EV_ACK_FINAL,        /* need to generate final ACK (and release call) */
396         RXRPC_CALL_EV_ACK,              /* need to generate ACK */
397         RXRPC_CALL_EV_REJECT_BUSY,      /* need to generate busy message */
398         RXRPC_CALL_EV_ABORT,            /* need to generate abort */
399         RXRPC_CALL_EV_CONN_ABORT,       /* local connection abort generated */
400         RXRPC_CALL_EV_RESEND_TIMER,     /* Tx resend timer expired */
401         RXRPC_CALL_EV_RESEND,           /* Tx resend required */
402         RXRPC_CALL_EV_DRAIN_RX_OOS,     /* drain the Rx out of sequence queue */
403         RXRPC_CALL_EV_LIFE_TIMER,       /* call's lifetimer ran out */
404         RXRPC_CALL_EV_ACCEPTED,         /* incoming call accepted by userspace app */
405         RXRPC_CALL_EV_SECURED,          /* incoming call's connection is now secure */
406         RXRPC_CALL_EV_POST_ACCEPT,      /* need to post an "accept?" message to the app */
407         RXRPC_CALL_EV_RELEASE,          /* need to release the call's resources */
408 };
409
410 /*
411  * The states that a call can be in.
412  */
413 enum rxrpc_call_state {
414         RXRPC_CALL_UNINITIALISED,
415         RXRPC_CALL_CLIENT_AWAIT_CONN,   /* - client waiting for connection to become available */
416         RXRPC_CALL_CLIENT_SEND_REQUEST, /* - client sending request phase */
417         RXRPC_CALL_CLIENT_AWAIT_REPLY,  /* - client awaiting reply */
418         RXRPC_CALL_CLIENT_RECV_REPLY,   /* - client receiving reply phase */
419         RXRPC_CALL_CLIENT_FINAL_ACK,    /* - client sending final ACK phase */
420         RXRPC_CALL_SERVER_SECURING,     /* - server securing request connection */
421         RXRPC_CALL_SERVER_ACCEPTING,    /* - server accepting request */
422         RXRPC_CALL_SERVER_RECV_REQUEST, /* - server receiving request */
423         RXRPC_CALL_SERVER_ACK_REQUEST,  /* - server pending ACK of request */
424         RXRPC_CALL_SERVER_SEND_REPLY,   /* - server sending reply */
425         RXRPC_CALL_SERVER_AWAIT_ACK,    /* - server awaiting final ACK */
426         RXRPC_CALL_COMPLETE,            /* - call complete */
427         RXRPC_CALL_DEAD,                /* - call is dead */
428         NR__RXRPC_CALL_STATES
429 };
430
431 /*
432  * Call completion condition (state == RXRPC_CALL_COMPLETE).
433  */
434 enum rxrpc_call_completion {
435         RXRPC_CALL_SUCCEEDED,           /* - Normal termination */
436         RXRPC_CALL_SERVER_BUSY,         /* - call rejected by busy server */
437         RXRPC_CALL_REMOTELY_ABORTED,    /* - call aborted by peer */
438         RXRPC_CALL_LOCALLY_ABORTED,     /* - call aborted locally on error or close */
439         RXRPC_CALL_LOCAL_ERROR,         /* - call failed due to local error */
440         RXRPC_CALL_NETWORK_ERROR,       /* - call terminated by network error */
441         NR__RXRPC_CALL_COMPLETIONS
442 };
443
444 /*
445  * RxRPC call definition
446  * - matched by { connection, call_id }
447  */
448 struct rxrpc_call {
449         struct rcu_head         rcu;
450         struct rxrpc_connection *conn;          /* connection carrying call */
451         struct rxrpc_peer       *peer;          /* Peer record for remote address */
452         struct rxrpc_sock       *socket;        /* socket responsible */
453         struct timer_list       lifetimer;      /* lifetime remaining on call */
454         struct timer_list       deadspan;       /* reap timer for re-ACK'ing, etc  */
455         struct timer_list       ack_timer;      /* ACK generation timer */
456         struct timer_list       resend_timer;   /* Tx resend timer */
457         struct work_struct      destroyer;      /* call destroyer */
458         struct work_struct      processor;      /* packet processor and ACK generator */
459         rxrpc_notify_rx_t       notify_rx;      /* kernel service Rx notification function */
460         struct list_head        link;           /* link in master call list */
461         struct list_head        chan_wait_link; /* Link in conn->waiting_calls */
462         struct hlist_node       error_link;     /* link in error distribution list */
463         struct list_head        accept_link;    /* calls awaiting acceptance */
464         struct rb_node          sock_node;      /* node in socket call tree */
465         struct sk_buff_head     rx_queue;       /* received packets */
466         struct sk_buff_head     rx_oos_queue;   /* packets received out of sequence */
467         struct sk_buff_head     knlrecv_queue;  /* Queue for kernel_recv [TODO: replace this] */
468         struct sk_buff          *tx_pending;    /* Tx socket buffer being filled */
469         wait_queue_head_t       waitq;          /* Wait queue for channel or Tx */
470         __be32                  crypto_buf[2];  /* Temporary packet crypto buffer */
471         unsigned long           user_call_ID;   /* user-defined call ID */
472         unsigned long           creation_jif;   /* time of call creation */
473         unsigned long           flags;
474         unsigned long           events;
475         spinlock_t              lock;
476         rwlock_t                state_lock;     /* lock for state transition */
477         u32                     abort_code;     /* Local/remote abort code */
478         int                     error;          /* Local error incurred */
479         enum rxrpc_call_state   state : 8;      /* current state of call */
480         enum rxrpc_call_completion completion : 8; /* Call completion condition */
481         atomic_t                usage;
482         atomic_t                skb_count;      /* Outstanding packets on this call */
483         atomic_t                sequence;       /* Tx data packet sequence counter */
484         u16                     service_id;     /* service ID */
485         u32                     call_id;        /* call ID on connection  */
486         u32                     cid;            /* connection ID plus channel index */
487         int                     debug_id;       /* debug ID for printks */
488
489         /* transmission-phase ACK management */
490         u8                      acks_head;      /* offset into window of first entry */
491         u8                      acks_tail;      /* offset into window of last entry */
492         u8                      acks_winsz;     /* size of un-ACK'd window */
493         u8                      acks_unacked;   /* lowest unacked packet in last ACK received */
494         int                     acks_latest;    /* serial number of latest ACK received */
495         rxrpc_seq_t             acks_hard;      /* highest definitively ACK'd msg seq */
496         unsigned long           *acks_window;   /* sent packet window
497                                                  * - elements are pointers with LSB set if ACK'd
498                                                  */
499
500         /* receive-phase ACK management */
501         rxrpc_seq_t             rx_data_expect; /* next data seq ID expected to be received */
502         rxrpc_seq_t             rx_data_post;   /* next data seq ID expected to be posted */
503         rxrpc_seq_t             rx_data_recv;   /* last data seq ID encountered by recvmsg */
504         rxrpc_seq_t             rx_data_eaten;  /* last data seq ID consumed by recvmsg */
505         rxrpc_seq_t             rx_first_oos;   /* first packet in rx_oos_queue (or 0) */
506         rxrpc_seq_t             ackr_win_top;   /* top of ACK window (rx_data_eaten is bottom) */
507         rxrpc_seq_t             ackr_prev_seq;  /* previous sequence number received */
508         u8                      ackr_reason;    /* reason to ACK */
509         u16                     ackr_skew;      /* skew on packet being ACK'd */
510         rxrpc_serial_t          ackr_serial;    /* serial of packet being ACK'd */
511         atomic_t                ackr_not_idle;  /* number of packets in Rx queue */
512
513         /* received packet records, 1 bit per record */
514 #define RXRPC_ACKR_WINDOW_ASZ DIV_ROUND_UP(RXRPC_MAXACKS, BITS_PER_LONG)
515         unsigned long           ackr_window[RXRPC_ACKR_WINDOW_ASZ + 1];
516 };
517
518 #include <trace/events/rxrpc.h>
519
520 /*
521  * af_rxrpc.c
522  */
523 extern atomic_t rxrpc_n_skbs;
524 extern u32 rxrpc_epoch;
525 extern atomic_t rxrpc_debug_id;
526 extern struct workqueue_struct *rxrpc_workqueue;
527
528 /*
529  * call_accept.c
530  */
531 void rxrpc_accept_incoming_calls(struct rxrpc_local *);
532 struct rxrpc_call *rxrpc_accept_call(struct rxrpc_sock *, unsigned long,
533                                      rxrpc_notify_rx_t);
534 int rxrpc_reject_call(struct rxrpc_sock *);
535
536 /*
537  * call_event.c
538  */
539 void __rxrpc_propose_ACK(struct rxrpc_call *, u8, u16, u32, bool);
540 void rxrpc_propose_ACK(struct rxrpc_call *, u8, u16, u32, bool);
541 void rxrpc_process_call(struct work_struct *);
542
543 /*
544  * call_object.c
545  */
546 extern const char *const rxrpc_call_states[];
547 extern const char *const rxrpc_call_completions[];
548 extern unsigned int rxrpc_max_call_lifetime;
549 extern unsigned int rxrpc_dead_call_expiry;
550 extern struct kmem_cache *rxrpc_call_jar;
551 extern struct list_head rxrpc_calls;
552 extern rwlock_t rxrpc_call_lock;
553
554 struct rxrpc_call *rxrpc_find_call_by_user_ID(struct rxrpc_sock *, unsigned long);
555 struct rxrpc_call *rxrpc_new_client_call(struct rxrpc_sock *,
556                                          struct rxrpc_conn_parameters *,
557                                          struct sockaddr_rxrpc *,
558                                          unsigned long, gfp_t);
559 struct rxrpc_call *rxrpc_incoming_call(struct rxrpc_sock *,
560                                        struct rxrpc_connection *,
561                                        struct sk_buff *);
562 void rxrpc_release_call(struct rxrpc_call *);
563 void rxrpc_release_calls_on_socket(struct rxrpc_sock *);
564 void rxrpc_see_call(struct rxrpc_call *);
565 void rxrpc_get_call(struct rxrpc_call *);
566 void rxrpc_put_call(struct rxrpc_call *);
567 void rxrpc_get_call_for_skb(struct rxrpc_call *, struct sk_buff *);
568 void rxrpc_put_call_for_skb(struct rxrpc_call *, struct sk_buff *);
569 void __exit rxrpc_destroy_all_calls(void);
570
571 static inline bool rxrpc_is_service_call(const struct rxrpc_call *call)
572 {
573         return test_bit(RXRPC_CALL_IS_SERVICE, &call->flags);
574 }
575
576 static inline bool rxrpc_is_client_call(const struct rxrpc_call *call)
577 {
578         return !rxrpc_is_service_call(call);
579 }
580
581 /*
582  * Transition a call to the complete state.
583  */
584 static inline bool __rxrpc_set_call_completion(struct rxrpc_call *call,
585                                                enum rxrpc_call_completion compl,
586                                                u32 abort_code,
587                                                int error)
588 {
589         if (call->state < RXRPC_CALL_COMPLETE) {
590                 call->abort_code = abort_code;
591                 call->error = error;
592                 call->completion = compl,
593                 call->state = RXRPC_CALL_COMPLETE;
594                 return true;
595         }
596         return false;
597 }
598
599 static inline bool rxrpc_set_call_completion(struct rxrpc_call *call,
600                                              enum rxrpc_call_completion compl,
601                                              u32 abort_code,
602                                              int error)
603 {
604         int ret;
605
606         write_lock_bh(&call->state_lock);
607         ret = __rxrpc_set_call_completion(call, compl, abort_code, error);
608         write_unlock_bh(&call->state_lock);
609         return ret;
610 }
611
612 /*
613  * Record that a call successfully completed.
614  */
615 static inline void __rxrpc_call_completed(struct rxrpc_call *call)
616 {
617         __rxrpc_set_call_completion(call, RXRPC_CALL_SUCCEEDED, 0, 0);
618 }
619
620 static inline void rxrpc_call_completed(struct rxrpc_call *call)
621 {
622         write_lock_bh(&call->state_lock);
623         __rxrpc_call_completed(call);
624         write_unlock_bh(&call->state_lock);
625 }
626
627 /*
628  * Record that a call is locally aborted.
629  */
630 static inline bool __rxrpc_abort_call(struct rxrpc_call *call,
631                                       u32 abort_code, int error)
632 {
633         if (__rxrpc_set_call_completion(call,
634                                         RXRPC_CALL_LOCALLY_ABORTED,
635                                         abort_code, error)) {
636                 set_bit(RXRPC_CALL_EV_ABORT, &call->events);
637                 return true;
638         }
639         return false;
640 }
641
642 static inline bool rxrpc_abort_call(struct rxrpc_call *call,
643                                     u32 abort_code, int error)
644 {
645         bool ret;
646
647         write_lock_bh(&call->state_lock);
648         ret = __rxrpc_abort_call(call, abort_code, error);
649         write_unlock_bh(&call->state_lock);
650         return ret;
651 }
652
653 /*
654  * conn_client.c
655  */
656 extern unsigned int rxrpc_max_client_connections;
657 extern unsigned int rxrpc_reap_client_connections;
658 extern unsigned int rxrpc_conn_idle_client_expiry;
659 extern unsigned int rxrpc_conn_idle_client_fast_expiry;
660 extern struct idr rxrpc_client_conn_ids;
661
662 void rxrpc_destroy_client_conn_ids(void);
663 int rxrpc_connect_call(struct rxrpc_call *, struct rxrpc_conn_parameters *,
664                        struct sockaddr_rxrpc *, gfp_t);
665 void rxrpc_expose_client_call(struct rxrpc_call *);
666 void rxrpc_disconnect_client_call(struct rxrpc_call *);
667 void rxrpc_put_client_conn(struct rxrpc_connection *);
668 void __exit rxrpc_destroy_all_client_connections(void);
669
670 /*
671  * conn_event.c
672  */
673 void rxrpc_process_connection(struct work_struct *);
674 void rxrpc_reject_packet(struct rxrpc_local *, struct sk_buff *);
675 void rxrpc_reject_packets(struct rxrpc_local *);
676
677 /*
678  * conn_object.c
679  */
680 extern unsigned int rxrpc_connection_expiry;
681 extern struct list_head rxrpc_connections;
682 extern struct list_head rxrpc_connection_proc_list;
683 extern rwlock_t rxrpc_connection_lock;
684
685 int rxrpc_extract_addr_from_skb(struct sockaddr_rxrpc *, struct sk_buff *);
686 struct rxrpc_connection *rxrpc_alloc_connection(gfp_t);
687 struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *,
688                                                    struct sk_buff *);
689 void __rxrpc_disconnect_call(struct rxrpc_connection *, struct rxrpc_call *);
690 void rxrpc_disconnect_call(struct rxrpc_call *);
691 void rxrpc_kill_connection(struct rxrpc_connection *);
692 void __rxrpc_put_connection(struct rxrpc_connection *);
693 void __exit rxrpc_destroy_all_connections(void);
694
695 static inline bool rxrpc_conn_is_client(const struct rxrpc_connection *conn)
696 {
697         return conn->out_clientflag;
698 }
699
700 static inline bool rxrpc_conn_is_service(const struct rxrpc_connection *conn)
701 {
702         return !rxrpc_conn_is_client(conn);
703 }
704
705 static inline void rxrpc_get_connection(struct rxrpc_connection *conn)
706 {
707         atomic_inc(&conn->usage);
708 }
709
710 static inline
711 struct rxrpc_connection *rxrpc_get_connection_maybe(struct rxrpc_connection *conn)
712 {
713         return atomic_inc_not_zero(&conn->usage) ? conn : NULL;
714 }
715
716 static inline void rxrpc_put_connection(struct rxrpc_connection *conn)
717 {
718         if (!conn)
719                 return;
720
721         if (rxrpc_conn_is_client(conn)) {
722                 if (atomic_dec_and_test(&conn->usage))
723                         rxrpc_put_client_conn(conn);
724         } else {
725                 if (atomic_dec_return(&conn->usage) == 1)
726                         __rxrpc_put_connection(conn);
727         }
728 }
729
730
731 static inline bool rxrpc_queue_conn(struct rxrpc_connection *conn)
732 {
733         if (!rxrpc_get_connection_maybe(conn))
734                 return false;
735         if (!rxrpc_queue_work(&conn->processor))
736                 rxrpc_put_connection(conn);
737         return true;
738 }
739
740 /*
741  * conn_service.c
742  */
743 struct rxrpc_connection *rxrpc_find_service_conn_rcu(struct rxrpc_peer *,
744                                                      struct sk_buff *);
745 struct rxrpc_connection *rxrpc_incoming_connection(struct rxrpc_local *,
746                                                    struct sockaddr_rxrpc *,
747                                                    struct sk_buff *);
748 void rxrpc_unpublish_service_conn(struct rxrpc_connection *);
749
750 /*
751  * input.c
752  */
753 void rxrpc_data_ready(struct sock *);
754 int rxrpc_queue_rcv_skb(struct rxrpc_call *, struct sk_buff *, bool, bool);
755 void rxrpc_fast_process_packet(struct rxrpc_call *, struct sk_buff *);
756
757 /*
758  * insecure.c
759  */
760 extern const struct rxrpc_security rxrpc_no_security;
761
762 /*
763  * key.c
764  */
765 extern struct key_type key_type_rxrpc;
766 extern struct key_type key_type_rxrpc_s;
767
768 int rxrpc_request_key(struct rxrpc_sock *, char __user *, int);
769 int rxrpc_server_keyring(struct rxrpc_sock *, char __user *, int);
770 int rxrpc_get_server_data_key(struct rxrpc_connection *, const void *, time_t,
771                               u32);
772
773 /*
774  * local_event.c
775  */
776 extern void rxrpc_process_local_events(struct rxrpc_local *);
777
778 /*
779  * local_object.c
780  */
781 struct rxrpc_local *rxrpc_lookup_local(const struct sockaddr_rxrpc *);
782 void __rxrpc_put_local(struct rxrpc_local *);
783 void __exit rxrpc_destroy_all_locals(void);
784
785 static inline void rxrpc_get_local(struct rxrpc_local *local)
786 {
787         atomic_inc(&local->usage);
788 }
789
790 static inline
791 struct rxrpc_local *rxrpc_get_local_maybe(struct rxrpc_local *local)
792 {
793         return atomic_inc_not_zero(&local->usage) ? local : NULL;
794 }
795
796 static inline void rxrpc_put_local(struct rxrpc_local *local)
797 {
798         if (local && atomic_dec_and_test(&local->usage))
799                 __rxrpc_put_local(local);
800 }
801
802 static inline void rxrpc_queue_local(struct rxrpc_local *local)
803 {
804         rxrpc_queue_work(&local->processor);
805 }
806
807 /*
808  * misc.c
809  */
810 extern unsigned int rxrpc_max_backlog __read_mostly;
811 extern unsigned int rxrpc_requested_ack_delay;
812 extern unsigned int rxrpc_soft_ack_delay;
813 extern unsigned int rxrpc_idle_ack_delay;
814 extern unsigned int rxrpc_rx_window_size;
815 extern unsigned int rxrpc_rx_mtu;
816 extern unsigned int rxrpc_rx_jumbo_max;
817
818 extern const char *const rxrpc_pkts[];
819 extern const s8 rxrpc_ack_priority[];
820
821 extern const char *rxrpc_acks(u8 reason);
822
823 /*
824  * output.c
825  */
826 extern unsigned int rxrpc_resend_timeout;
827
828 int rxrpc_send_data_packet(struct rxrpc_connection *, struct sk_buff *);
829 int rxrpc_do_sendmsg(struct rxrpc_sock *, struct msghdr *, size_t);
830
831 /*
832  * peer_event.c
833  */
834 void rxrpc_error_report(struct sock *);
835 void rxrpc_peer_error_distributor(struct work_struct *);
836
837 /*
838  * peer_object.c
839  */
840 struct rxrpc_peer *rxrpc_lookup_peer_rcu(struct rxrpc_local *,
841                                          const struct sockaddr_rxrpc *);
842 struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_local *,
843                                      struct sockaddr_rxrpc *, gfp_t);
844 struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *, gfp_t);
845
846 static inline struct rxrpc_peer *rxrpc_get_peer(struct rxrpc_peer *peer)
847 {
848         atomic_inc(&peer->usage);
849         return peer;
850 }
851
852 static inline
853 struct rxrpc_peer *rxrpc_get_peer_maybe(struct rxrpc_peer *peer)
854 {
855         return atomic_inc_not_zero(&peer->usage) ? peer : NULL;
856 }
857
858 extern void __rxrpc_put_peer(struct rxrpc_peer *peer);
859 static inline void rxrpc_put_peer(struct rxrpc_peer *peer)
860 {
861         if (peer && atomic_dec_and_test(&peer->usage))
862                 __rxrpc_put_peer(peer);
863 }
864
865 /*
866  * proc.c
867  */
868 extern const struct file_operations rxrpc_call_seq_fops;
869 extern const struct file_operations rxrpc_connection_seq_fops;
870
871 /*
872  * recvmsg.c
873  */
874 void rxrpc_remove_user_ID(struct rxrpc_sock *, struct rxrpc_call *);
875 int rxrpc_recvmsg(struct socket *, struct msghdr *, size_t, int);
876
877 /*
878  * rxkad.c
879  */
880 #ifdef CONFIG_RXKAD
881 extern const struct rxrpc_security rxkad;
882 #endif
883
884 /*
885  * security.c
886  */
887 int __init rxrpc_init_security(void);
888 void rxrpc_exit_security(void);
889 int rxrpc_init_client_conn_security(struct rxrpc_connection *);
890 int rxrpc_init_server_conn_security(struct rxrpc_connection *);
891
892 /*
893  * skbuff.c
894  */
895 void rxrpc_kernel_data_consumed(struct rxrpc_call *, struct sk_buff *);
896 void rxrpc_packet_destructor(struct sk_buff *);
897 void rxrpc_new_skb(struct sk_buff *);
898 void rxrpc_see_skb(struct sk_buff *);
899 void rxrpc_get_skb(struct sk_buff *);
900 void rxrpc_free_skb(struct sk_buff *);
901 void rxrpc_purge_queue(struct sk_buff_head *);
902
903 /*
904  * sysctl.c
905  */
906 #ifdef CONFIG_SYSCTL
907 extern int __init rxrpc_sysctl_init(void);
908 extern void rxrpc_sysctl_exit(void);
909 #else
910 static inline int __init rxrpc_sysctl_init(void) { return 0; }
911 static inline void rxrpc_sysctl_exit(void) {}
912 #endif
913
914 /*
915  * utils.c
916  */
917 int rxrpc_extract_addr_from_skb(struct sockaddr_rxrpc *, struct sk_buff *);
918
919 /*
920  * debug tracing
921  */
922 extern unsigned int rxrpc_debug;
923
924 #define dbgprintk(FMT,...) \
925         printk("[%-6.6s] "FMT"\n", current->comm ,##__VA_ARGS__)
926
927 #define kenter(FMT,...) dbgprintk("==> %s("FMT")",__func__ ,##__VA_ARGS__)
928 #define kleave(FMT,...) dbgprintk("<== %s()"FMT"",__func__ ,##__VA_ARGS__)
929 #define kdebug(FMT,...) dbgprintk("    "FMT ,##__VA_ARGS__)
930 #define kproto(FMT,...) dbgprintk("### "FMT ,##__VA_ARGS__)
931 #define knet(FMT,...)   dbgprintk("@@@ "FMT ,##__VA_ARGS__)
932
933
934 #if defined(__KDEBUG)
935 #define _enter(FMT,...) kenter(FMT,##__VA_ARGS__)
936 #define _leave(FMT,...) kleave(FMT,##__VA_ARGS__)
937 #define _debug(FMT,...) kdebug(FMT,##__VA_ARGS__)
938 #define _proto(FMT,...) kproto(FMT,##__VA_ARGS__)
939 #define _net(FMT,...)   knet(FMT,##__VA_ARGS__)
940
941 #elif defined(CONFIG_AF_RXRPC_DEBUG)
942 #define RXRPC_DEBUG_KENTER      0x01
943 #define RXRPC_DEBUG_KLEAVE      0x02
944 #define RXRPC_DEBUG_KDEBUG      0x04
945 #define RXRPC_DEBUG_KPROTO      0x08
946 #define RXRPC_DEBUG_KNET        0x10
947
948 #define _enter(FMT,...)                                 \
949 do {                                                    \
950         if (unlikely(rxrpc_debug & RXRPC_DEBUG_KENTER)) \
951                 kenter(FMT,##__VA_ARGS__);              \
952 } while (0)
953
954 #define _leave(FMT,...)                                 \
955 do {                                                    \
956         if (unlikely(rxrpc_debug & RXRPC_DEBUG_KLEAVE)) \
957                 kleave(FMT,##__VA_ARGS__);              \
958 } while (0)
959
960 #define _debug(FMT,...)                                 \
961 do {                                                    \
962         if (unlikely(rxrpc_debug & RXRPC_DEBUG_KDEBUG)) \
963                 kdebug(FMT,##__VA_ARGS__);              \
964 } while (0)
965
966 #define _proto(FMT,...)                                 \
967 do {                                                    \
968         if (unlikely(rxrpc_debug & RXRPC_DEBUG_KPROTO)) \
969                 kproto(FMT,##__VA_ARGS__);              \
970 } while (0)
971
972 #define _net(FMT,...)                                   \
973 do {                                                    \
974         if (unlikely(rxrpc_debug & RXRPC_DEBUG_KNET))   \
975                 knet(FMT,##__VA_ARGS__);                \
976 } while (0)
977
978 #else
979 #define _enter(FMT,...) no_printk("==> %s("FMT")",__func__ ,##__VA_ARGS__)
980 #define _leave(FMT,...) no_printk("<== %s()"FMT"",__func__ ,##__VA_ARGS__)
981 #define _debug(FMT,...) no_printk("    "FMT ,##__VA_ARGS__)
982 #define _proto(FMT,...) no_printk("### "FMT ,##__VA_ARGS__)
983 #define _net(FMT,...)   no_printk("@@@ "FMT ,##__VA_ARGS__)
984 #endif
985
986 /*
987  * debug assertion checking
988  */
989 #if 1 // defined(__KDEBUGALL)
990
991 #define ASSERT(X)                                               \
992 do {                                                            \
993         if (unlikely(!(X))) {                                   \
994                 pr_err("Assertion failed\n");                   \
995                 BUG();                                          \
996         }                                                       \
997 } while (0)
998
999 #define ASSERTCMP(X, OP, Y)                                             \
1000 do {                                                                    \
1001         unsigned long _x = (unsigned long)(X);                          \
1002         unsigned long _y = (unsigned long)(Y);                          \
1003         if (unlikely(!(_x OP _y))) {                                    \
1004                 pr_err("Assertion failed - %lu(0x%lx) %s %lu(0x%lx) is false\n",                        \
1005                        _x, _x, #OP, _y, _y);                            \
1006                 BUG();                                                  \
1007         }                                                               \
1008 } while (0)
1009
1010 #define ASSERTIF(C, X)                                          \
1011 do {                                                            \
1012         if (unlikely((C) && !(X))) {                            \
1013                 pr_err("Assertion failed\n");                   \
1014                 BUG();                                          \
1015         }                                                       \
1016 } while (0)
1017
1018 #define ASSERTIFCMP(C, X, OP, Y)                                        \
1019 do {                                                                    \
1020         unsigned long _x = (unsigned long)(X);                          \
1021         unsigned long _y = (unsigned long)(Y);                          \
1022         if (unlikely((C) && !(_x OP _y))) {                             \
1023                 pr_err("Assertion failed - %lu(0x%lx) %s %lu(0x%lx) is false\n", \
1024                        _x, _x, #OP, _y, _y);                            \
1025                 BUG();                                                  \
1026         }                                                               \
1027 } while (0)
1028
1029 #else
1030
1031 #define ASSERT(X)                               \
1032 do {                                            \
1033 } while (0)
1034
1035 #define ASSERTCMP(X, OP, Y)                     \
1036 do {                                            \
1037 } while (0)
1038
1039 #define ASSERTIF(C, X)                          \
1040 do {                                            \
1041 } while (0)
1042
1043 #define ASSERTIFCMP(C, X, OP, Y)                \
1044 do {                                            \
1045 } while (0)
1046
1047 #endif /* __KDEBUGALL */