Blame view
net/rxrpc/ar-internal.h
38.3 KB
17926a793 [AF_RXRPC]: Provi... |
1 2 3 4 5 6 7 8 9 10 |
/* AF_RXRPC internal definitions * * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. * Written by David Howells (dhowells@redhat.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */ |
be6e6707f rxrpc: Rework pee... |
11 |
#include <linux/atomic.h> |
8496af50e rxrpc: Use RCU to... |
12 |
#include <linux/seqlock.h> |
2baec2c3f rxrpc: Support ne... |
13 14 |
#include <net/net_namespace.h> #include <net/netns/generic.h> |
e0e4d82f3 rxrpc: Create a n... |
15 |
#include <net/sock.h> |
be6e6707f rxrpc: Rework pee... |
16 |
#include <net/af_rxrpc.h> |
ddc6c70f0 rxrpc: Move the p... |
17 |
#include "protocol.h" |
17926a793 [AF_RXRPC]: Provi... |
18 19 20 21 22 23 |
#if 0 #define CHECK_SLAB_OKAY(X) \ BUG_ON(atomic_read((X)) >> (sizeof(atomic_t) - 2) == \ (POISON_FREE << 8 | POISON_FREE)) #else |
b4f1342f9 rxrpc: Adjust som... |
24 |
#define CHECK_SLAB_OKAY(X) do {} while (0) |
17926a793 [AF_RXRPC]: Provi... |
25 |
#endif |
17926a793 [AF_RXRPC]: Provi... |
26 27 28 29 |
#define FCRYPT_BSIZE 8 struct rxrpc_crypt { union { u8 x[FCRYPT_BSIZE]; |
91e916cff net/rxrpc trivial... |
30 |
__be32 n[2]; |
17926a793 [AF_RXRPC]: Provi... |
31 32 |
}; } __attribute__((aligned(8))); |
651350d10 [AF_RXRPC]: Add a... |
33 34 35 |
#define rxrpc_queue_work(WS) queue_work(rxrpc_workqueue, (WS)) #define rxrpc_queue_delayed_work(WS,D) \ queue_delayed_work(rxrpc_workqueue, (WS), (D)) |
cc8feb8ed rxrpc: Fix exclus... |
36 |
struct rxrpc_connection; |
17926a793 [AF_RXRPC]: Provi... |
37 |
/* |
d001648ec rxrpc: Don't expo... |
38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
* Mark applied to socket buffers. */ enum rxrpc_skb_mark { RXRPC_SKB_MARK_DATA, /* data message */ RXRPC_SKB_MARK_FINAL_ACK, /* final ACK received message */ RXRPC_SKB_MARK_BUSY, /* server busy message */ RXRPC_SKB_MARK_REMOTE_ABORT, /* remote abort message */ RXRPC_SKB_MARK_LOCAL_ABORT, /* local abort message */ RXRPC_SKB_MARK_NET_ERROR, /* network error message */ RXRPC_SKB_MARK_LOCAL_ERROR, /* local error message */ RXRPC_SKB_MARK_NEW_CALL, /* local error message */ }; /* |
17926a793 [AF_RXRPC]: Provi... |
52 53 54 |
* sk_state for RxRPC sockets */ enum { |
2341e0775 rxrpc: Simplify c... |
55 56 |
RXRPC_UNBOUND = 0, RXRPC_CLIENT_UNBOUND, /* Unbound socket used as client */ |
17926a793 [AF_RXRPC]: Provi... |
57 |
RXRPC_CLIENT_BOUND, /* client local address bound */ |
17926a793 [AF_RXRPC]: Provi... |
58 |
RXRPC_SERVER_BOUND, /* server local address bound */ |
28036f448 rxrpc: Permit mul... |
59 |
RXRPC_SERVER_BOUND2, /* second server local address bound */ |
17926a793 [AF_RXRPC]: Provi... |
60 |
RXRPC_SERVER_LISTENING, /* server listening for connections */ |
210f03531 rxrpc: Allow list... |
61 |
RXRPC_SERVER_LISTEN_DISABLED, /* server listening disabled */ |
17926a793 [AF_RXRPC]: Provi... |
62 63 64 65 |
RXRPC_CLOSE, /* socket is being closed */ }; /* |
2baec2c3f rxrpc: Support ne... |
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
* Per-network namespace data. */ struct rxrpc_net { struct proc_dir_entry *proc_net; /* Subdir in /proc/net */ u32 epoch; /* Local epoch for detecting local-end reset */ struct list_head calls; /* List of calls active in this namespace */ rwlock_t call_lock; /* Lock for ->calls */ struct list_head conn_proc_list; /* List of conns in this namespace for proc */ struct list_head service_conns; /* Service conns in this namespace */ rwlock_t conn_lock; /* Lock for ->conn_proc_list, ->service_conns */ struct delayed_work service_conn_reaper; unsigned int nr_client_conns; unsigned int nr_active_client_conns; bool kill_all_client_conns; |
1392633ba rxrpc: Fix servic... |
82 |
bool live; |
2baec2c3f rxrpc: Support ne... |
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
spinlock_t client_conn_cache_lock; /* Lock for ->*_client_conns */ spinlock_t client_conn_discard_lock; /* Prevent multiple discarders */ struct list_head waiting_client_conns; struct list_head active_client_conns; struct list_head idle_client_conns; struct delayed_work client_conn_reaper; struct list_head local_endpoints; struct mutex local_mutex; /* Lock for ->local_endpoints */ spinlock_t peer_hash_lock; /* Lock for ->peer_hash */ DECLARE_HASHTABLE (peer_hash, 10); }; /* |
00e907127 rxrpc: Preallocat... |
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
* Service backlog preallocation. * * This contains circular buffers of preallocated peers, connections and calls * for incoming service calls and their head and tail pointers. This allows * calls to be set up in the data_ready handler, thereby avoiding the need to * shuffle packets around so much. */ struct rxrpc_backlog { unsigned short peer_backlog_head; unsigned short peer_backlog_tail; unsigned short conn_backlog_head; unsigned short conn_backlog_tail; unsigned short call_backlog_head; unsigned short call_backlog_tail; #define RXRPC_BACKLOG_MAX 32 struct rxrpc_peer *peer_backlog[RXRPC_BACKLOG_MAX]; struct rxrpc_connection *conn_backlog[RXRPC_BACKLOG_MAX]; struct rxrpc_call *call_backlog[RXRPC_BACKLOG_MAX]; }; /* |
17926a793 [AF_RXRPC]: Provi... |
119 120 121 122 123 |
* RxRPC socket definition */ struct rxrpc_sock { /* WARNING: sk has to be the first member */ struct sock sk; |
d001648ec rxrpc: Don't expo... |
124 |
rxrpc_notify_new_call_t notify_new_call; /* Func to notify of new call */ |
00e907127 rxrpc: Preallocat... |
125 |
rxrpc_discard_new_call_t discard_new_call; /* Func to discard a new call */ |
17926a793 [AF_RXRPC]: Provi... |
126 |
struct rxrpc_local *local; /* local endpoint */ |
00e907127 rxrpc: Preallocat... |
127 |
struct rxrpc_backlog *backlog; /* Preallocation for services */ |
248f219cb rxrpc: Rewrite th... |
128 129 130 131 132 |
spinlock_t incoming_lock; /* Incoming call vs service shutdown lock */ struct list_head sock_calls; /* List of calls owned by this socket */ struct list_head to_be_accepted; /* calls awaiting acceptance */ struct list_head recvmsg_q; /* Calls awaiting recvmsg's attention */ rwlock_t recvmsg_lock; /* Lock for recvmsg_q */ |
17926a793 [AF_RXRPC]: Provi... |
133 134 |
struct key *key; /* security for this socket */ struct key *securities; /* list of server security descriptors */ |
00e907127 rxrpc: Preallocat... |
135 |
struct rb_root calls; /* User ID -> call mapping */ |
17926a793 [AF_RXRPC]: Provi... |
136 |
unsigned long flags; |
2341e0775 rxrpc: Simplify c... |
137 |
#define RXRPC_SOCK_CONNECTED 0 /* connect_srx is set */ |
17926a793 [AF_RXRPC]: Provi... |
138 139 140 |
rwlock_t call_lock; /* lock for calls */ u32 min_sec_level; /* minimum security level */ #define RXRPC_SECURITY_MAX RXRPC_SECURITY_ENCRYPT |
cc8feb8ed rxrpc: Fix exclus... |
141 |
bool exclusive; /* Exclusive connection for a client socket */ |
28036f448 rxrpc: Permit mul... |
142 |
u16 second_service; /* Additional service bound to the endpoint */ |
4722974d9 rxrpc: Implement ... |
143 144 145 146 147 |
struct { /* Service upgrade information */ u16 from; /* Service ID to upgrade (if not 0) */ u16 to; /* service ID to upgrade to */ } service_upgrade; |
cc8feb8ed rxrpc: Fix exclus... |
148 |
sa_family_t family; /* Protocol family created with */ |
4722974d9 rxrpc: Implement ... |
149 |
struct sockaddr_rxrpc srx; /* Primary Service/local addresses */ |
2341e0775 rxrpc: Simplify c... |
150 |
struct sockaddr_rxrpc connect_srx; /* Default client address from connect() */ |
17926a793 [AF_RXRPC]: Provi... |
151 152 153 154 155 |
}; #define rxrpc_sk(__sk) container_of((__sk), struct rxrpc_sock, sk) /* |
0d12f8a40 rxrpc: Keep the s... |
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
* CPU-byteorder normalised Rx packet header. */ struct rxrpc_host_header { u32 epoch; /* client boot timestamp */ u32 cid; /* connection and channel ID */ u32 callNumber; /* call ID (0 for connection-level packets) */ u32 seq; /* sequence number of pkt in call stream */ u32 serial; /* serial number of pkt sent to network */ u8 type; /* packet type */ u8 flags; /* packet flags */ u8 userStatus; /* app-layer defined status */ u8 securityIndex; /* security protocol ID */ union { u16 _rsvd; /* reserved */ u16 cksum; /* kerberos security checksum */ }; u16 serviceId; /* service ID */ } __packed; /* |
17926a793 [AF_RXRPC]: Provi... |
176 177 178 179 |
* RxRPC socket buffer private variables * - max 48 bytes (struct sk_buff::cb) */ struct rxrpc_skb_priv { |
248f219cb rxrpc: Rewrite th... |
180 |
union { |
50235c4b5 rxrpc: Obtain RTT... |
181 |
u8 nr_jumbo; /* Number of jumbo subpackets */ |
248f219cb rxrpc: Rewrite th... |
182 |
}; |
17926a793 [AF_RXRPC]: Provi... |
183 |
union { |
17926a793 [AF_RXRPC]: Provi... |
184 |
int remain; /* amount of space remaining for next write */ |
17926a793 [AF_RXRPC]: Provi... |
185 |
}; |
0d12f8a40 rxrpc: Keep the s... |
186 |
struct rxrpc_host_header hdr; /* RxRPC packet header from this packet */ |
17926a793 [AF_RXRPC]: Provi... |
187 188 189 |
}; #define rxrpc_skb(__skb) ((struct rxrpc_skb_priv *) &(__skb)->cb) |
17926a793 [AF_RXRPC]: Provi... |
190 191 192 193 |
/* * RxRPC security module interface */ struct rxrpc_security { |
17926a793 [AF_RXRPC]: Provi... |
194 195 |
const char *name; /* name of this service */ u8 security_index; /* security type provided */ |
648af7fca rxrpc: Absorb the... |
196 197 198 199 200 |
/* Initialise a security service */ int (*init)(void); /* Clean up a security service */ void (*exit)(void); |
17926a793 [AF_RXRPC]: Provi... |
201 202 203 204 |
/* initialise a connection's security */ int (*init_connection_security)(struct rxrpc_connection *); /* prime a connection's packet security */ |
a263629da rxrpc: Avoid usin... |
205 |
int (*prime_packet_security)(struct rxrpc_connection *); |
17926a793 [AF_RXRPC]: Provi... |
206 207 |
/* impose security on a packet */ |
a263629da rxrpc: Avoid usin... |
208 |
int (*secure_packet)(struct rxrpc_call *, |
17926a793 [AF_RXRPC]: Provi... |
209 210 211 212 213 |
struct sk_buff *, size_t, void *); /* verify the security on a received packet */ |
5a42976d4 rxrpc: Add tracep... |
214 |
int (*verify_packet)(struct rxrpc_call *, struct sk_buff *, |
248f219cb rxrpc: Rewrite th... |
215 216 217 218 219 |
unsigned int, unsigned int, rxrpc_seq_t, u16); /* Locate the data in a received packet that has been verified. */ void (*locate_data)(struct rxrpc_call *, struct sk_buff *, unsigned int *, unsigned int *); |
17926a793 [AF_RXRPC]: Provi... |
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
/* issue a challenge */ int (*issue_challenge)(struct rxrpc_connection *); /* respond to a challenge */ int (*respond_to_challenge)(struct rxrpc_connection *, struct sk_buff *, u32 *); /* verify a response */ int (*verify_response)(struct rxrpc_connection *, struct sk_buff *, u32 *); /* clear connection security */ void (*clear)(struct rxrpc_connection *); }; /* |
4f95dd78a rxrpc: Rework loc... |
239 240 241 |
* RxRPC local transport endpoint description * - owned by a single AF_RXRPC socket * - pointed to by transport socket struct sk_user_data |
17926a793 [AF_RXRPC]: Provi... |
242 243 |
*/ struct rxrpc_local { |
4f95dd78a rxrpc: Rework loc... |
244 245 |
struct rcu_head rcu; atomic_t usage; |
2baec2c3f rxrpc: Support ne... |
246 |
struct rxrpc_net *rxnet; /* The network ns in which this resides */ |
4f95dd78a rxrpc: Rework loc... |
247 |
struct list_head link; |
17926a793 [AF_RXRPC]: Provi... |
248 |
struct socket *socket; /* my UDP socket */ |
4f95dd78a rxrpc: Rework loc... |
249 |
struct work_struct processor; |
1e9e5c952 rxrpc: Reduce the... |
250 |
struct rxrpc_sock __rcu *service; /* Service(s) listening on this endpoint */ |
17926a793 [AF_RXRPC]: Provi... |
251 |
struct rw_semaphore defrag_sem; /* control re-enablement of IP DF bit */ |
17926a793 [AF_RXRPC]: Provi... |
252 |
struct sk_buff_head reject_queue; /* packets awaiting rejection */ |
44ba06987 RxRPC: Handle VER... |
253 |
struct sk_buff_head event_queue; /* endpoint event packets awaiting processing */ |
999b69f89 rxrpc: Kill the c... |
254 255 |
struct rb_root client_conns; /* Client connections by socket params */ spinlock_t client_conns_lock; /* Lock for client_conns */ |
17926a793 [AF_RXRPC]: Provi... |
256 257 |
spinlock_t lock; /* access lock */ rwlock_t services_lock; /* lock for services list */ |
17926a793 [AF_RXRPC]: Provi... |
258 |
int debug_id; /* debug ID for printks */ |
4f95dd78a rxrpc: Rework loc... |
259 |
bool dead; |
1392633ba rxrpc: Fix servic... |
260 |
bool service_closed; /* Service socket closed */ |
17926a793 [AF_RXRPC]: Provi... |
261 262 263 264 265 |
struct sockaddr_rxrpc srx; /* local address */ }; /* * RxRPC remote transport endpoint definition |
be6e6707f rxrpc: Rework pee... |
266 |
* - matched by local endpoint, remote port, address and protocol type |
17926a793 [AF_RXRPC]: Provi... |
267 268 |
*/ struct rxrpc_peer { |
be6e6707f rxrpc: Rework pee... |
269 270 271 272 273 |
struct rcu_head rcu; /* This must be first */ atomic_t usage; unsigned long hash_key; struct hlist_node hash_link; struct rxrpc_local *local; |
f66d74901 rxrpc: Use the pe... |
274 275 |
struct hlist_head error_targets; /* targets for net error distribution */ struct work_struct error_distributor; |
aa390bbe2 rxrpc: Kill off t... |
276 |
struct rb_root service_conns; /* Service connections */ |
8496af50e rxrpc: Use RCU to... |
277 |
seqlock_t service_conn_lock; |
17926a793 [AF_RXRPC]: Provi... |
278 |
spinlock_t lock; /* access lock */ |
95c961747 net: cleanup unsi... |
279 280 281 |
unsigned int if_mtu; /* interface MTU for this peer */ unsigned int mtu; /* network MTU for this peer */ unsigned int maxdata; /* data size (MTU - hdrsize) */ |
17926a793 [AF_RXRPC]: Provi... |
282 283 |
unsigned short hdrsize; /* header size (IP + UDP + RxRPC) */ int debug_id; /* debug ID for printks */ |
f66d74901 rxrpc: Use the pe... |
284 285 |
int error_report; /* Net (+0) or local (+1000000) to distribute */ #define RXRPC_LOCAL_ERROR_OFFSET 1000000 |
17926a793 [AF_RXRPC]: Provi... |
286 287 288 289 |
struct sockaddr_rxrpc srx; /* remote address */ /* calculated RTT cache */ #define RXRPC_RTT_CACHE_SIZE 32 |
0d4b103c0 rxrpc: Reduce the... |
290 |
ktime_t rtt_last_req; /* Time of last RTT request */ |
cf1a6474f rxrpc: Add per-pe... |
291 292 293 294 295 |
u64 rtt; /* Current RTT estimate (in nS) */ u64 rtt_sum; /* Sum of cache contents */ u64 rtt_cache[RXRPC_RTT_CACHE_SIZE]; /* Determined RTT cache */ u8 rtt_cursor; /* next entry at which to insert */ u8 rtt_usage; /* amount of cache actually used */ |
f7aec129a rxrpc: Cache the ... |
296 297 |
u8 cong_cwnd; /* Congestion window size */ |
17926a793 [AF_RXRPC]: Provi... |
298 299 300 |
}; /* |
19ffa01c9 rxrpc: Use struct... |
301 302 303 |
* Keys for matching a connection. */ struct rxrpc_conn_proto { |
e8d70ce17 rxrpc: Prune the ... |
304 305 306 307 308 309 |
union { struct { u32 epoch; /* epoch of this connection */ u32 cid; /* connection ID */ }; u64 index_key; |
19ffa01c9 rxrpc: Use struct... |
310 311 312 313 314 315 316 317 |
}; }; struct rxrpc_conn_parameters { struct rxrpc_local *local; /* Representation of local endpoint */ struct rxrpc_peer *peer; /* Remote endpoint */ struct key *key; /* Security details */ bool exclusive; /* T if conn is exclusive */ |
4e255721d rxrpc: Add servic... |
318 |
bool upgrade; /* T if service ID can be upgraded */ |
19ffa01c9 rxrpc: Use struct... |
319 320 321 322 323 |
u16 service_id; /* Service ID for this connection */ u32 security_level; /* Security level selected */ }; /* |
bba304db3 rxrpc: Turn conne... |
324 325 326 327 |
* Bits in the connection flags. */ enum rxrpc_conn_flag { RXRPC_CONN_HAS_IDR, /* Has a client conn ID assigned */ |
001c11224 rxrpc: Maintain a... |
328 329 |
RXRPC_CONN_IN_SERVICE_CONNS, /* Conn is in peer->service_conns */ RXRPC_CONN_IN_CLIENT_CONNS, /* Conn is in local->client_conns */ |
45025bcee rxrpc: Improve ma... |
330 331 332 |
RXRPC_CONN_EXPOSED, /* Conn has extra ref for exposure */ RXRPC_CONN_DONT_REUSE, /* Don't reuse this connection */ RXRPC_CONN_COUNTED, /* Counted by rxrpc_nr_client_conns */ |
4e255721d rxrpc: Add servic... |
333 |
RXRPC_CONN_PROBING_FOR_UPGRADE, /* Probing for service upgrade */ |
bba304db3 rxrpc: Turn conne... |
334 335 336 337 338 339 340 341 342 343 |
}; /* * Events that can be raised upon a connection. */ enum rxrpc_conn_event { RXRPC_CONN_EV_CHALLENGE, /* Send challenge packet */ }; /* |
45025bcee rxrpc: Improve ma... |
344 345 346 347 348 349 |
* The connection cache state. */ enum rxrpc_conn_cache_state { RXRPC_CONN_CLIENT_INACTIVE, /* Conn is not yet listed */ RXRPC_CONN_CLIENT_WAITING, /* Conn is on wait list, waiting for capacity */ RXRPC_CONN_CLIENT_ACTIVE, /* Conn is on active list, doing calls */ |
4e255721d rxrpc: Add servic... |
350 |
RXRPC_CONN_CLIENT_UPGRADE, /* Conn is on active list, probing for upgrade */ |
45025bcee rxrpc: Improve ma... |
351 352 |
RXRPC_CONN_CLIENT_CULLED, /* Conn is culled and delisted, doing calls */ RXRPC_CONN_CLIENT_IDLE, /* Conn is on idle list, doing mostly nothing */ |
363deeab6 rxrpc: Add connec... |
353 |
RXRPC_CONN__NR_CACHE_STATES |
45025bcee rxrpc: Improve ma... |
354 355 356 |
}; /* |
bba304db3 rxrpc: Turn conne... |
357 358 359 360 361 |
* The connection protocol state. */ enum rxrpc_conn_proto_state { RXRPC_CONN_UNUSED, /* Connection not yet attempted */ RXRPC_CONN_CLIENT, /* Client connection */ |
00e907127 rxrpc: Preallocat... |
362 |
RXRPC_CONN_SERVICE_PREALLOC, /* Service connection preallocation */ |
bba304db3 rxrpc: Turn conne... |
363 364 365 366 367 |
RXRPC_CONN_SERVICE_UNSECURED, /* Service unsecured connection */ RXRPC_CONN_SERVICE_CHALLENGING, /* Service challenging for security */ RXRPC_CONN_SERVICE, /* Service secured connection */ RXRPC_CONN_REMOTELY_ABORTED, /* Conn aborted by peer */ RXRPC_CONN_LOCALLY_ABORTED, /* Conn aborted locally */ |
bba304db3 rxrpc: Turn conne... |
368 369 370 371 |
RXRPC_CONN__NR_STATES }; /* |
17926a793 [AF_RXRPC]: Provi... |
372 |
* RxRPC connection definition |
aa390bbe2 rxrpc: Kill off t... |
373 |
* - matched by { local, peer, epoch, conn_id, direction } |
17926a793 [AF_RXRPC]: Provi... |
374 375 376 |
* - each connection can only handle four simultaneous calls */ struct rxrpc_connection { |
19ffa01c9 rxrpc: Use struct... |
377 378 |
struct rxrpc_conn_proto proto; struct rxrpc_conn_parameters params; |
45025bcee rxrpc: Improve ma... |
379 380 381 |
atomic_t usage; struct rcu_head rcu; struct list_head cache_link; |
a1399f8bb rxrpc: Call chann... |
382 |
|
45025bcee rxrpc: Improve ma... |
383 384 385 386 |
spinlock_t channel_lock; unsigned char active_chans; /* Mask of active channels */ #define RXRPC_ACTIVE_CHANS_MASK ((1 << RXRPC_MAXCALLS) - 1) struct list_head waiting_calls; /* Calls waiting for channels */ |
a1399f8bb rxrpc: Call chann... |
387 388 389 390 391 |
struct rxrpc_channel { struct rxrpc_call __rcu *call; /* Active call */ u32 call_id; /* ID of current call */ u32 call_counter; /* Call ID counter */ u32 last_call; /* ID of last call */ |
18bfeba50 rxrpc: Perform te... |
392 |
u8 last_type; /* Type of last packet */ |
18bfeba50 rxrpc: Perform te... |
393 394 395 396 |
union { u32 last_seq; u32 last_abort; }; |
a1399f8bb rxrpc: Call chann... |
397 |
} channels[RXRPC_MAXCALLS]; |
999b69f89 rxrpc: Kill the c... |
398 |
|
17926a793 [AF_RXRPC]: Provi... |
399 |
struct work_struct processor; /* connection event processor */ |
999b69f89 rxrpc: Kill the c... |
400 401 |
union { struct rb_node client_node; /* Node in local->client_conns */ |
aa390bbe2 rxrpc: Kill off t... |
402 |
struct rb_node service_node; /* Node in peer->service_conns */ |
999b69f89 rxrpc: Kill the c... |
403 |
}; |
4d028b2c8 rxrpc: Dup the ma... |
404 |
struct list_head proc_link; /* link in procfs list */ |
17926a793 [AF_RXRPC]: Provi... |
405 |
struct list_head link; /* link in master connection list */ |
17926a793 [AF_RXRPC]: Provi... |
406 |
struct sk_buff_head rx_queue; /* received conn-level packets */ |
648af7fca rxrpc: Absorb the... |
407 |
const struct rxrpc_security *security; /* applied security module */ |
17926a793 [AF_RXRPC]: Provi... |
408 |
struct key *server_key; /* security for this service */ |
1afe593b4 rxrpc: Use skcipher |
409 |
struct crypto_skcipher *cipher; /* encryption handle */ |
17926a793 [AF_RXRPC]: Provi... |
410 |
struct rxrpc_crypt csum_iv; /* packet checksum base */ |
4a3388c80 rxrpc: Use IDR to... |
411 |
unsigned long flags; |
17926a793 [AF_RXRPC]: Provi... |
412 |
unsigned long events; |
f51b44800 rxrpc: Set connec... |
413 |
unsigned long idle_timestamp; /* Time at which last became idle */ |
17926a793 [AF_RXRPC]: Provi... |
414 |
spinlock_t state_lock; /* state-change lock */ |
cf13258fd rxrpc: Fix ASSERT... |
415 416 |
enum rxrpc_conn_cache_state cache_state; enum rxrpc_conn_proto_state state; /* current state of connection */ |
dc44b3a09 rxrpc: Differenti... |
417 418 |
u32 local_abort; /* local abort code */ u32 remote_abort; /* remote abort code */ |
17926a793 [AF_RXRPC]: Provi... |
419 |
int debug_id; /* debug ID for printks */ |
17926a793 [AF_RXRPC]: Provi... |
420 |
atomic_t serial; /* packet serial number counter */ |
563ea7d5d rxrpc: Calculate ... |
421 |
unsigned int hi_serial; /* highest serial number received */ |
5a924b895 rxrpc: Don't stor... |
422 |
u32 security_nonce; /* response re-use preventer */ |
68d6d1ae5 rxrpc: Separate t... |
423 |
u16 service_id; /* Service ID, possibly upgraded */ |
17926a793 [AF_RXRPC]: Provi... |
424 |
u8 size_align; /* data size alignment (for security) */ |
17926a793 [AF_RXRPC]: Provi... |
425 |
u8 security_size; /* security header size */ |
17926a793 [AF_RXRPC]: Provi... |
426 |
u8 security_ix; /* security type */ |
17926a793 [AF_RXRPC]: Provi... |
427 428 429 430 |
u8 out_clientflag; /* RXRPC_CLIENT_INITIATED if we are client */ }; /* |
5b8848d14 rxrpc: Convert ca... |
431 432 433 434 |
* Flags in call->flags. */ enum rxrpc_call_flag { RXRPC_CALL_RELEASED, /* call has been released - no more message to userspace */ |
5b8848d14 rxrpc: Convert ca... |
435 |
RXRPC_CALL_HAS_USERID, /* has a user ID attached */ |
dabe5a790 rxrpc: Tidy up th... |
436 |
RXRPC_CALL_IS_SERVICE, /* Call is service call */ |
45025bcee rxrpc: Improve ma... |
437 |
RXRPC_CALL_EXPOSED, /* The call was exposed to the world */ |
248f219cb rxrpc: Rewrite th... |
438 439 |
RXRPC_CALL_RX_LAST, /* Received the last packet (at rxtx_top) */ RXRPC_CALL_TX_LAST, /* Last packet in Tx buffer (at rxtx_top) */ |
c038a58cc rxrpc: Allow fail... |
440 |
RXRPC_CALL_TX_LASTQ, /* Last packet has been queued */ |
a5af7e1fc rxrpc: Fix loss o... |
441 |
RXRPC_CALL_SEND_PING, /* A ping will need to be sent */ |
8e83134db rxrpc: Send pings... |
442 |
RXRPC_CALL_PINGING, /* Ping in process */ |
57494343c rxrpc: Implement ... |
443 |
RXRPC_CALL_RETRANS_TIMEOUT, /* Retransmission due to timeout occurred */ |
5b8848d14 rxrpc: Convert ca... |
444 445 446 447 448 449 |
}; /* * Events that can be raised on a call. */ enum rxrpc_call_event { |
4c198ad17 rxrpc: Rename cal... |
450 |
RXRPC_CALL_EV_ACK, /* need to generate ACK */ |
4c198ad17 rxrpc: Rename cal... |
451 |
RXRPC_CALL_EV_ABORT, /* need to generate abort */ |
248f219cb rxrpc: Rewrite th... |
452 |
RXRPC_CALL_EV_TIMER, /* Timer expired */ |
4c198ad17 rxrpc: Rename cal... |
453 |
RXRPC_CALL_EV_RESEND, /* Tx resend required */ |
a5af7e1fc rxrpc: Fix loss o... |
454 |
RXRPC_CALL_EV_PING, /* Ping send required */ |
5b8848d14 rxrpc: Convert ca... |
455 456 457 458 459 460 |
}; /* * The states that a call can be in. */ enum rxrpc_call_state { |
999b69f89 rxrpc: Kill the c... |
461 462 |
RXRPC_CALL_UNINITIALISED, RXRPC_CALL_CLIENT_AWAIT_CONN, /* - client waiting for connection to become available */ |
5b8848d14 rxrpc: Convert ca... |
463 464 465 |
RXRPC_CALL_CLIENT_SEND_REQUEST, /* - client sending request phase */ RXRPC_CALL_CLIENT_AWAIT_REPLY, /* - client awaiting reply */ RXRPC_CALL_CLIENT_RECV_REPLY, /* - client receiving reply phase */ |
00e907127 rxrpc: Preallocat... |
466 |
RXRPC_CALL_SERVER_PREALLOC, /* - service preallocation */ |
5b8848d14 rxrpc: Convert ca... |
467 468 469 470 471 472 |
RXRPC_CALL_SERVER_SECURING, /* - server securing request connection */ RXRPC_CALL_SERVER_ACCEPTING, /* - server accepting request */ RXRPC_CALL_SERVER_RECV_REQUEST, /* - server receiving request */ RXRPC_CALL_SERVER_ACK_REQUEST, /* - server pending ACK of request */ RXRPC_CALL_SERVER_SEND_REPLY, /* - server sending reply */ RXRPC_CALL_SERVER_AWAIT_ACK, /* - server awaiting final ACK */ |
f5c17aaeb rxrpc: Calls shou... |
473 |
RXRPC_CALL_COMPLETE, /* - call complete */ |
f5c17aaeb rxrpc: Calls shou... |
474 475 476 477 |
NR__RXRPC_CALL_STATES }; /* |
57494343c rxrpc: Implement ... |
478 479 480 481 482 483 484 485 486 487 488 |
* Call Tx congestion management modes. */ enum rxrpc_congest_mode { RXRPC_CALL_SLOW_START, RXRPC_CALL_CONGEST_AVOIDANCE, RXRPC_CALL_PACKET_LOSS, RXRPC_CALL_FAST_RETRANSMIT, NR__RXRPC_CONGEST_MODES }; /* |
17926a793 [AF_RXRPC]: Provi... |
489 490 491 492 |
* RxRPC call definition * - matched by { connection, call_id } */ struct rxrpc_call { |
dee46364c rxrpc: Add RCU de... |
493 |
struct rcu_head rcu; |
17926a793 [AF_RXRPC]: Provi... |
494 |
struct rxrpc_connection *conn; /* connection carrying call */ |
df5d8bf70 rxrpc: Make /proc... |
495 |
struct rxrpc_peer *peer; /* Peer record for remote address */ |
8d94aa381 rxrpc: Calls shou... |
496 |
struct rxrpc_sock __rcu *socket; /* socket responsible */ |
540b1c48c rxrpc: Fix deadlo... |
497 |
struct mutex user_mutex; /* User access mutex */ |
df0adc788 rxrpc: Keep the c... |
498 499 |
ktime_t ack_at; /* When deferred ACK needs to happen */ ktime_t resend_at; /* When next resend needs to happen */ |
a5af7e1fc rxrpc: Fix loss o... |
500 |
ktime_t ping_at; /* When next to send a ping */ |
df0adc788 rxrpc: Keep the c... |
501 |
ktime_t expire_at; /* When the call times out */ |
248f219cb rxrpc: Rewrite th... |
502 503 |
struct timer_list timer; /* Combined event timer */ struct work_struct processor; /* Event processor */ |
d001648ec rxrpc: Don't expo... |
504 |
rxrpc_notify_rx_t notify_rx; /* kernel service Rx notification function */ |
17926a793 [AF_RXRPC]: Provi... |
505 |
struct list_head link; /* link in master call list */ |
45025bcee rxrpc: Improve ma... |
506 |
struct list_head chan_wait_link; /* Link in conn->waiting_calls */ |
f66d74901 rxrpc: Use the pe... |
507 |
struct hlist_node error_link; /* link in error distribution list */ |
248f219cb rxrpc: Rewrite th... |
508 509 510 511 |
struct list_head accept_link; /* Link in rx->acceptq */ struct list_head recvmsg_link; /* Link in rx->recvmsg_q */ struct list_head sock_link; /* Link in rx->sock_calls */ struct rb_node sock_node; /* Node in rx->calls */ |
17926a793 [AF_RXRPC]: Provi... |
512 |
struct sk_buff *tx_pending; /* Tx socket buffer being filled */ |
45025bcee rxrpc: Improve ma... |
513 |
wait_queue_head_t waitq; /* Wait queue for channel or Tx */ |
e754eba68 rxrpc: Provide a ... |
514 |
s64 tx_total_len; /* Total length left to be transmitted (or -1) */ |
a263629da rxrpc: Avoid usin... |
515 |
__be32 crypto_buf[2]; /* Temporary packet crypto buffer */ |
17926a793 [AF_RXRPC]: Provi... |
516 |
unsigned long user_call_ID; /* user-defined call ID */ |
17926a793 [AF_RXRPC]: Provi... |
517 |
unsigned long flags; |
17926a793 [AF_RXRPC]: Provi... |
518 |
unsigned long events; |
17926a793 [AF_RXRPC]: Provi... |
519 520 |
spinlock_t lock; rwlock_t state_lock; /* lock for state transition */ |
f5c17aaeb rxrpc: Calls shou... |
521 522 |
u32 abort_code; /* Local/remote abort code */ int error; /* Local error incurred */ |
cf13258fd rxrpc: Fix ASSERT... |
523 524 |
enum rxrpc_call_state state; /* current state of call */ enum rxrpc_call_completion completion; /* Call completion condition */ |
17926a793 [AF_RXRPC]: Provi... |
525 |
atomic_t usage; |
dabe5a790 rxrpc: Tidy up th... |
526 |
u16 service_id; /* service ID */ |
278ac0cdd rxrpc: Cache the ... |
527 |
u8 security_ix; /* Security type */ |
dabe5a790 rxrpc: Tidy up th... |
528 529 530 |
u32 call_id; /* call ID on connection */ u32 cid; /* connection ID plus channel index */ int debug_id; /* debug ID for printks */ |
8e83134db rxrpc: Send pings... |
531 532 |
unsigned short rx_pkt_offset; /* Current recvmsg packet offset */ unsigned short rx_pkt_len; /* Current recvmsg packet len */ |
17926a793 [AF_RXRPC]: Provi... |
533 |
|
248f219cb rxrpc: Rewrite th... |
534 535 536 537 538 539 540 541 542 543 544 |
/* Rx/Tx circular buffer, depending on phase. * * In the Rx phase, packets are annotated with 0 or the number of the * segment of a jumbo packet each buffer refers to. There can be up to * 47 segments in a maximum-size UDP packet. * * In the Tx phase, packets are annotated with which buffers have been * acked. */ #define RXRPC_RXTX_BUFF_SIZE 64 #define RXRPC_RXTX_BUFF_MASK (RXRPC_RXTX_BUFF_SIZE - 1) |
75e421263 rxrpc: Correctly ... |
545 |
#define RXRPC_INIT_RX_WINDOW_SIZE 32 |
248f219cb rxrpc: Rewrite th... |
546 547 548 549 550 551 |
struct sk_buff **rxtx_buffer; u8 *rxtx_annotations; #define RXRPC_TX_ANNO_ACK 0 #define RXRPC_TX_ANNO_UNACK 1 #define RXRPC_TX_ANNO_NAK 2 #define RXRPC_TX_ANNO_RETRANS 3 |
f07373ead rxrpc: Add re-sen... |
552 |
#define RXRPC_TX_ANNO_MASK 0x03 |
70790dbe3 rxrpc: Pass the l... |
553 554 |
#define RXRPC_TX_ANNO_LAST 0x04 #define RXRPC_TX_ANNO_RESENT 0x08 |
248f219cb rxrpc: Rewrite th... |
555 556 557 558 559 560 561 |
#define RXRPC_RX_ANNO_JUMBO 0x3f /* Jumbo subpacket number + 1 if not zero */ #define RXRPC_RX_ANNO_JLAST 0x40 /* Set if last element of a jumbo packet */ #define RXRPC_RX_ANNO_VERIFIED 0x80 /* Set if verified and decrypted */ rxrpc_seq_t tx_hard_ack; /* Dead slot in buffer; the first transmitted but * not hard-ACK'd packet follows this. */ rxrpc_seq_t tx_top; /* Highest Tx slot allocated. */ |
57494343c rxrpc: Implement ... |
562 563 564 565 566 567 568 569 570 571 572 573 574 |
/* TCP-style slow-start congestion control [RFC5681]. Since the SMSS * is fixed, we keep these numbers in terms of segments (ie. DATA * packets) rather than bytes. */ #define RXRPC_TX_SMSS RXRPC_JUMBO_DATALEN u8 cong_cwnd; /* Congestion window size */ u8 cong_extra; /* Extra to send for congestion management */ u8 cong_ssthresh; /* Slow-start threshold */ enum rxrpc_congest_mode cong_mode:8; /* Congestion management mode */ u8 cong_dup_acks; /* Count of ACKs showing missing packets */ u8 cong_cumul_acks; /* Cumulative ACK count */ ktime_t cong_tstamp; /* Last time cwnd was changed */ |
248f219cb rxrpc: Rewrite th... |
575 576 |
rxrpc_seq_t rx_hard_ack; /* Dead slot in buffer; the first received but not * consumed packet follows this. |
17926a793 [AF_RXRPC]: Provi... |
577 |
*/ |
248f219cb rxrpc: Rewrite th... |
578 579 580 581 |
rxrpc_seq_t rx_top; /* Highest Rx slot allocated. */ rxrpc_seq_t rx_expect_next; /* Expected next packet sequence number */ u8 rx_winsize; /* Size of Rx window */ u8 tx_winsize; /* Maximum size of Tx window */ |
71f3ca408 rxrpc: Improve sk... |
582 |
bool tx_phase; /* T if transmission phase, F if receive phase */ |
75e421263 rxrpc: Correctly ... |
583 |
u8 nr_jumbo_bad; /* Number of jumbo dups/exceeds-windows */ |
17926a793 [AF_RXRPC]: Provi... |
584 585 |
/* receive-phase ACK management */ |
4e36a95e5 RxRPC: Use uX/sX ... |
586 |
u8 ackr_reason; /* reason to ACK */ |
563ea7d5d rxrpc: Calculate ... |
587 |
u16 ackr_skew; /* skew on packet being ACK'd */ |
0d12f8a40 rxrpc: Keep the s... |
588 |
rxrpc_serial_t ackr_serial; /* serial of packet being ACK'd */ |
248f219cb rxrpc: Rewrite th... |
589 |
rxrpc_seq_t ackr_prev_seq; /* previous sequence number received */ |
805b21b92 rxrpc: Send an AC... |
590 591 |
rxrpc_seq_t ackr_consumed; /* Highest packet shown consumed */ rxrpc_seq_t ackr_seen; /* Highest packet shown seen */ |
a5af7e1fc rxrpc: Fix loss o... |
592 593 594 595 |
/* ping management */ rxrpc_serial_t ping_serial; /* Last ping sent */ ktime_t ping_time; /* Time last ping sent */ |
17926a793 [AF_RXRPC]: Provi... |
596 |
|
248f219cb rxrpc: Rewrite th... |
597 |
/* transmission-phase ACK management */ |
57494343c rxrpc: Implement ... |
598 |
ktime_t acks_latest_ts; /* Timestamp of latest ACK received */ |
248f219cb rxrpc: Rewrite th... |
599 |
rxrpc_serial_t acks_latest; /* serial number of latest ACK received */ |
31a1b9895 rxrpc: Generate a... |
600 601 602 603 |
rxrpc_seq_t acks_lowest_nak; /* Lowest NACK in the buffer (or ==tx_hard_ack) */ }; /* |
57494343c rxrpc: Implement ... |
604 |
* Summary of a new ACK and the changes it made to the Tx buffer packet states. |
31a1b9895 rxrpc: Generate a... |
605 606 607 608 609 610 611 612 613 |
*/ struct rxrpc_ack_summary { u8 ack_reason; u8 nr_acks; /* Number of ACKs in packet */ u8 nr_nacks; /* Number of NACKs in packet */ u8 nr_new_acks; /* Number of new ACKs in packet */ u8 nr_new_nacks; /* Number of new NACKs in packet */ u8 nr_rot_new_acks; /* Number of rotated new ACKs */ bool new_low_nack; /* T if new low NACK found */ |
57494343c rxrpc: Implement ... |
614 615 616 617 618 619 620 621 |
bool retrans_timeo; /* T if reTx due to timeout happened */ u8 flight_size; /* Number of unreceived transmissions */ /* Place to stash values for tracing */ enum rxrpc_congest_mode mode:8; u8 cwnd; u8 ssthresh; u8 dup_acks; u8 cumulative_acks; |
17926a793 [AF_RXRPC]: Provi... |
622 |
}; |
df844fd46 rxrpc: Use a trac... |
623 |
#include <trace/events/rxrpc.h> |
17926a793 [AF_RXRPC]: Provi... |
624 |
/* |
651350d10 [AF_RXRPC]: Add a... |
625 |
* af_rxrpc.c |
17926a793 [AF_RXRPC]: Provi... |
626 |
*/ |
71f3ca408 rxrpc: Improve sk... |
627 |
extern atomic_t rxrpc_n_tx_skbs, rxrpc_n_rx_skbs; |
651350d10 [AF_RXRPC]: Add a... |
628 629 |
extern atomic_t rxrpc_debug_id; extern struct workqueue_struct *rxrpc_workqueue; |
17926a793 [AF_RXRPC]: Provi... |
630 631 |
/* |
0d81a51ab rxrpc: Update the... |
632 |
* call_accept.c |
17926a793 [AF_RXRPC]: Provi... |
633 |
*/ |
00e907127 rxrpc: Preallocat... |
634 635 |
int rxrpc_service_prealloc(struct rxrpc_sock *, gfp_t); void rxrpc_discard_prealloc(struct rxrpc_sock *); |
248f219cb rxrpc: Rewrite th... |
636 637 638 |
struct rxrpc_call *rxrpc_new_incoming_call(struct rxrpc_local *, struct rxrpc_connection *, struct sk_buff *); |
4f95dd78a rxrpc: Rework loc... |
639 |
void rxrpc_accept_incoming_calls(struct rxrpc_local *); |
d001648ec rxrpc: Don't expo... |
640 641 |
struct rxrpc_call *rxrpc_accept_call(struct rxrpc_sock *, unsigned long, rxrpc_notify_rx_t); |
c1b1203d6 net: misc: Remove... |
642 |
int rxrpc_reject_call(struct rxrpc_sock *); |
17926a793 [AF_RXRPC]: Provi... |
643 644 |
/* |
0d81a51ab rxrpc: Update the... |
645 |
* call_event.c |
17926a793 [AF_RXRPC]: Provi... |
646 |
*/ |
9749fd2be rxrpc: Need to pr... |
647 |
void __rxrpc_set_timer(struct rxrpc_call *, enum rxrpc_timer_trace, ktime_t); |
df0adc788 rxrpc: Keep the c... |
648 |
void rxrpc_set_timer(struct rxrpc_call *, enum rxrpc_timer_trace, ktime_t); |
9c7ad4344 rxrpc: Add tracep... |
649 650 |
void rxrpc_propose_ACK(struct rxrpc_call *, u8, u16, u32, bool, bool, enum rxrpc_propose_ack_trace); |
c1b1203d6 net: misc: Remove... |
651 |
void rxrpc_process_call(struct work_struct *); |
17926a793 [AF_RXRPC]: Provi... |
652 653 |
/* |
0d81a51ab rxrpc: Update the... |
654 |
* call_object.c |
17926a793 [AF_RXRPC]: Provi... |
655 |
*/ |
f5c17aaeb rxrpc: Calls shou... |
656 657 |
extern const char *const rxrpc_call_states[]; extern const char *const rxrpc_call_completions[]; |
dad8aff75 rxrpc: Replace al... |
658 |
extern unsigned int rxrpc_max_call_lifetime; |
17926a793 [AF_RXRPC]: Provi... |
659 |
extern struct kmem_cache *rxrpc_call_jar; |
17926a793 [AF_RXRPC]: Provi... |
660 |
|
2341e0775 rxrpc: Simplify c... |
661 |
struct rxrpc_call *rxrpc_find_call_by_user_ID(struct rxrpc_sock *, unsigned long); |
b89372f23 rxrpc: Provide a ... |
662 |
struct rxrpc_call *rxrpc_alloc_call(struct rxrpc_sock *, gfp_t); |
2341e0775 rxrpc: Simplify c... |
663 |
struct rxrpc_call *rxrpc_new_client_call(struct rxrpc_sock *, |
19ffa01c9 rxrpc: Use struct... |
664 |
struct rxrpc_conn_parameters *, |
999b69f89 rxrpc: Kill the c... |
665 |
struct sockaddr_rxrpc *, |
e754eba68 rxrpc: Provide a ... |
666 |
unsigned long, s64, gfp_t); |
c038a58cc rxrpc: Allow fail... |
667 668 669 670 671 |
int rxrpc_retry_client_call(struct rxrpc_sock *, struct rxrpc_call *, struct rxrpc_conn_parameters *, struct sockaddr_rxrpc *, gfp_t); |
248f219cb rxrpc: Rewrite th... |
672 673 |
void rxrpc_incoming_call(struct rxrpc_sock *, struct rxrpc_call *, struct sk_buff *); |
8d94aa381 rxrpc: Calls shou... |
674 |
void rxrpc_release_call(struct rxrpc_sock *, struct rxrpc_call *); |
c038a58cc rxrpc: Allow fail... |
675 |
int rxrpc_prepare_call_for_retry(struct rxrpc_sock *, struct rxrpc_call *); |
c1b1203d6 net: misc: Remove... |
676 |
void rxrpc_release_calls_on_socket(struct rxrpc_sock *); |
8d94aa381 rxrpc: Calls shou... |
677 678 |
bool __rxrpc_queue_call(struct rxrpc_call *); bool rxrpc_queue_call(struct rxrpc_call *); |
e34d4234b rxrpc: Trace rxrp... |
679 |
void rxrpc_see_call(struct rxrpc_call *); |
fff72429c rxrpc: Improve th... |
680 681 |
void rxrpc_get_call(struct rxrpc_call *, enum rxrpc_call_trace); void rxrpc_put_call(struct rxrpc_call *, enum rxrpc_call_trace); |
00e907127 rxrpc: Preallocat... |
682 |
void rxrpc_cleanup_call(struct rxrpc_call *); |
2baec2c3f rxrpc: Support ne... |
683 |
void rxrpc_destroy_all_calls(struct rxrpc_net *); |
17926a793 [AF_RXRPC]: Provi... |
684 |
|
dabe5a790 rxrpc: Tidy up th... |
685 686 687 688 689 690 691 692 693 |
static inline bool rxrpc_is_service_call(const struct rxrpc_call *call) { return test_bit(RXRPC_CALL_IS_SERVICE, &call->flags); } static inline bool rxrpc_is_client_call(const struct rxrpc_call *call) { return !rxrpc_is_service_call(call); } |
17926a793 [AF_RXRPC]: Provi... |
694 |
/* |
f5c17aaeb rxrpc: Calls shou... |
695 696 697 698 699 700 701 702 703 704 705 706 |
* Transition a call to the complete state. */ static inline bool __rxrpc_set_call_completion(struct rxrpc_call *call, enum rxrpc_call_completion compl, u32 abort_code, int error) { if (call->state < RXRPC_CALL_COMPLETE) { call->abort_code = abort_code; call->error = error; call->completion = compl, call->state = RXRPC_CALL_COMPLETE; |
c0d058c21 rxrpc: Make sure ... |
707 |
wake_up(&call->waitq); |
f5c17aaeb rxrpc: Calls shou... |
708 709 710 711 712 713 714 715 716 717 |
return true; } return false; } static inline bool rxrpc_set_call_completion(struct rxrpc_call *call, enum rxrpc_call_completion compl, u32 abort_code, int error) { |
e8d6bbb05 rxrpc: Fix return... |
718 |
bool ret; |
f5c17aaeb rxrpc: Calls shou... |
719 720 721 722 723 724 725 726 727 728 |
write_lock_bh(&call->state_lock); ret = __rxrpc_set_call_completion(call, compl, abort_code, error); write_unlock_bh(&call->state_lock); return ret; } /* * Record that a call successfully completed. */ |
e8d6bbb05 rxrpc: Fix return... |
729 |
static inline bool __rxrpc_call_completed(struct rxrpc_call *call) |
f5c17aaeb rxrpc: Calls shou... |
730 |
{ |
e8d6bbb05 rxrpc: Fix return... |
731 |
return __rxrpc_set_call_completion(call, RXRPC_CALL_SUCCEEDED, 0, 0); |
f5c17aaeb rxrpc: Calls shou... |
732 |
} |
e8d6bbb05 rxrpc: Fix return... |
733 |
static inline bool rxrpc_call_completed(struct rxrpc_call *call) |
f5c17aaeb rxrpc: Calls shou... |
734 |
{ |
e8d6bbb05 rxrpc: Fix return... |
735 |
bool ret; |
f5c17aaeb rxrpc: Calls shou... |
736 |
write_lock_bh(&call->state_lock); |
e8d6bbb05 rxrpc: Fix return... |
737 |
ret = __rxrpc_call_completed(call); |
f5c17aaeb rxrpc: Calls shou... |
738 |
write_unlock_bh(&call->state_lock); |
e8d6bbb05 rxrpc: Fix return... |
739 |
return ret; |
f5c17aaeb rxrpc: Calls shou... |
740 741 742 743 744 |
} /* * Record that a call is locally aborted. */ |
5a42976d4 rxrpc: Add tracep... |
745 746 |
static inline bool __rxrpc_abort_call(const char *why, struct rxrpc_call *call, rxrpc_seq_t seq, |
f5c17aaeb rxrpc: Calls shou... |
747 748 |
u32 abort_code, int error) { |
5a42976d4 rxrpc: Add tracep... |
749 750 |
trace_rxrpc_abort(why, call->cid, call->call_id, seq, abort_code, error); |
248f219cb rxrpc: Rewrite th... |
751 752 |
return __rxrpc_set_call_completion(call, RXRPC_CALL_LOCALLY_ABORTED, abort_code, error); |
f5c17aaeb rxrpc: Calls shou... |
753 |
} |
5a42976d4 rxrpc: Add tracep... |
754 755 |
static inline bool rxrpc_abort_call(const char *why, struct rxrpc_call *call, rxrpc_seq_t seq, u32 abort_code, int error) |
f5c17aaeb rxrpc: Calls shou... |
756 757 758 759 |
{ bool ret; write_lock_bh(&call->state_lock); |
5a42976d4 rxrpc: Add tracep... |
760 |
ret = __rxrpc_abort_call(why, call, seq, abort_code, error); |
f5c17aaeb rxrpc: Calls shou... |
761 762 763 764 765 |
write_unlock_bh(&call->state_lock); return ret; } /* |
fb46f6ee1 rxrpc: Trace prot... |
766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 |
* Abort a call due to a protocol error. */ static inline bool __rxrpc_abort_eproto(struct rxrpc_call *call, struct sk_buff *skb, const char *eproto_why, const char *why, u32 abort_code) { struct rxrpc_skb_priv *sp = rxrpc_skb(skb); trace_rxrpc_rx_eproto(call, sp->hdr.serial, eproto_why); return rxrpc_abort_call(why, call, sp->hdr.seq, abort_code, -EPROTO); } #define rxrpc_abort_eproto(call, skb, eproto_why, abort_why, abort_code) \ __rxrpc_abort_eproto((call), (skb), tracepoint_string(eproto_why), \ (abort_why), (abort_code)) /* |
4a3388c80 rxrpc: Use IDR to... |
785 786 |
* conn_client.c */ |
45025bcee rxrpc: Improve ma... |
787 788 789 790 |
extern unsigned int rxrpc_max_client_connections; extern unsigned int rxrpc_reap_client_connections; extern unsigned int rxrpc_conn_idle_client_expiry; extern unsigned int rxrpc_conn_idle_client_fast_expiry; |
4a3388c80 rxrpc: Use IDR to... |
791 |
extern struct idr rxrpc_client_conn_ids; |
eb9b9d227 rxrpc: Check that... |
792 |
void rxrpc_destroy_client_conn_ids(void); |
c6d2b8d76 rxrpc: Split clie... |
793 794 |
int rxrpc_connect_call(struct rxrpc_call *, struct rxrpc_conn_parameters *, struct sockaddr_rxrpc *, gfp_t); |
45025bcee rxrpc: Improve ma... |
795 796 797 |
void rxrpc_expose_client_call(struct rxrpc_call *); void rxrpc_disconnect_client_call(struct rxrpc_call *); void rxrpc_put_client_conn(struct rxrpc_connection *); |
2baec2c3f rxrpc: Support ne... |
798 799 |
void rxrpc_discard_expired_client_conns(struct work_struct *); void rxrpc_destroy_all_client_connections(struct rxrpc_net *); |
4a3388c80 rxrpc: Use IDR to... |
800 801 |
/* |
0d81a51ab rxrpc: Update the... |
802 803 804 |
* conn_event.c */ void rxrpc_process_connection(struct work_struct *); |
0d81a51ab rxrpc: Update the... |
805 806 807 |
/* * conn_object.c |
17926a793 [AF_RXRPC]: Provi... |
808 |
*/ |
dad8aff75 rxrpc: Replace al... |
809 |
extern unsigned int rxrpc_connection_expiry; |
1392633ba rxrpc: Fix servic... |
810 |
extern unsigned int rxrpc_closed_conn_expiry; |
17926a793 [AF_RXRPC]: Provi... |
811 |
|
c6d2b8d76 rxrpc: Split clie... |
812 |
struct rxrpc_connection *rxrpc_alloc_connection(gfp_t); |
8496af50e rxrpc: Use RCU to... |
813 814 |
struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *, struct sk_buff *); |
45025bcee rxrpc: Improve ma... |
815 |
void __rxrpc_disconnect_call(struct rxrpc_connection *, struct rxrpc_call *); |
999b69f89 rxrpc: Kill the c... |
816 |
void rxrpc_disconnect_call(struct rxrpc_call *); |
45025bcee rxrpc: Improve ma... |
817 |
void rxrpc_kill_connection(struct rxrpc_connection *); |
363deeab6 rxrpc: Add connec... |
818 819 820 821 822 |
bool rxrpc_queue_conn(struct rxrpc_connection *); void rxrpc_see_connection(struct rxrpc_connection *); void rxrpc_get_connection(struct rxrpc_connection *); struct rxrpc_connection *rxrpc_get_connection_maybe(struct rxrpc_connection *); void rxrpc_put_service_conn(struct rxrpc_connection *); |
2baec2c3f rxrpc: Support ne... |
823 824 |
void rxrpc_service_connection_reaper(struct work_struct *); void rxrpc_destroy_all_connections(struct rxrpc_net *); |
17926a793 [AF_RXRPC]: Provi... |
825 |
|
19ffa01c9 rxrpc: Use struct... |
826 827 828 829 830 831 832 |
static inline bool rxrpc_conn_is_client(const struct rxrpc_connection *conn) { return conn->out_clientflag; } static inline bool rxrpc_conn_is_service(const struct rxrpc_connection *conn) { |
e8d70ce17 rxrpc: Prune the ... |
833 |
return !rxrpc_conn_is_client(conn); |
19ffa01c9 rxrpc: Use struct... |
834 |
} |
f51b44800 rxrpc: Set connec... |
835 836 |
static inline void rxrpc_put_connection(struct rxrpc_connection *conn) { |
45025bcee rxrpc: Improve ma... |
837 838 |
if (!conn) return; |
363deeab6 rxrpc: Add connec... |
839 840 841 842 |
if (rxrpc_conn_is_client(conn)) rxrpc_put_client_conn(conn); else rxrpc_put_service_conn(conn); |
5acbee464 rxrpc: Provide qu... |
843 |
} |
17926a793 [AF_RXRPC]: Provi... |
844 |
/* |
7877a4a4b rxrpc: Split serv... |
845 846 |
* conn_service.c */ |
8496af50e rxrpc: Use RCU to... |
847 848 |
struct rxrpc_connection *rxrpc_find_service_conn_rcu(struct rxrpc_peer *, struct sk_buff *); |
2baec2c3f rxrpc: Support ne... |
849 |
struct rxrpc_connection *rxrpc_prealloc_service_connection(struct rxrpc_net *, gfp_t); |
4722974d9 rxrpc: Implement ... |
850 851 |
void rxrpc_new_incoming_connection(struct rxrpc_sock *, struct rxrpc_connection *, struct sk_buff *); |
001c11224 rxrpc: Maintain a... |
852 |
void rxrpc_unpublish_service_conn(struct rxrpc_connection *); |
7877a4a4b rxrpc: Split serv... |
853 854 |
/* |
0d81a51ab rxrpc: Update the... |
855 |
* input.c |
17926a793 [AF_RXRPC]: Provi... |
856 |
*/ |
0d81a51ab rxrpc: Update the... |
857 |
void rxrpc_data_ready(struct sock *); |
17926a793 [AF_RXRPC]: Provi... |
858 859 |
/* |
0d81a51ab rxrpc: Update the... |
860 |
* insecure.c |
17926a793 [AF_RXRPC]: Provi... |
861 |
*/ |
0d81a51ab rxrpc: Update the... |
862 |
extern const struct rxrpc_security rxrpc_no_security; |
17926a793 [AF_RXRPC]: Provi... |
863 864 |
/* |
0d81a51ab rxrpc: Update the... |
865 |
* key.c |
17926a793 [AF_RXRPC]: Provi... |
866 |
*/ |
0d81a51ab rxrpc: Update the... |
867 868 869 870 871 |
extern struct key_type key_type_rxrpc; extern struct key_type key_type_rxrpc_s; int rxrpc_request_key(struct rxrpc_sock *, char __user *, int); int rxrpc_server_keyring(struct rxrpc_sock *, char __user *, int); |
10674a03c net: rxrpc: Repla... |
872 |
int rxrpc_get_server_data_key(struct rxrpc_connection *, const void *, time64_t, |
0d81a51ab rxrpc: Update the... |
873 |
u32); |
17926a793 [AF_RXRPC]: Provi... |
874 875 |
/* |
875636163 rxrpc: Separate l... |
876 877 |
* local_event.c */ |
4f95dd78a rxrpc: Rework loc... |
878 |
extern void rxrpc_process_local_events(struct rxrpc_local *); |
875636163 rxrpc: Separate l... |
879 880 |
/* |
0d81a51ab rxrpc: Update the... |
881 |
* local_object.c |
17926a793 [AF_RXRPC]: Provi... |
882 |
*/ |
2baec2c3f rxrpc: Support ne... |
883 |
struct rxrpc_local *rxrpc_lookup_local(struct net *, const struct sockaddr_rxrpc *); |
4f95dd78a rxrpc: Rework loc... |
884 |
void __rxrpc_put_local(struct rxrpc_local *); |
2baec2c3f rxrpc: Support ne... |
885 |
void rxrpc_destroy_all_locals(struct rxrpc_net *); |
17926a793 [AF_RXRPC]: Provi... |
886 |
|
4f95dd78a rxrpc: Rework loc... |
887 888 889 890 891 892 893 894 895 896 897 898 899 |
static inline void rxrpc_get_local(struct rxrpc_local *local) { atomic_inc(&local->usage); } static inline struct rxrpc_local *rxrpc_get_local_maybe(struct rxrpc_local *local) { return atomic_inc_not_zero(&local->usage) ? local : NULL; } static inline void rxrpc_put_local(struct rxrpc_local *local) { |
5627cc8b9 rxrpc: Provide mo... |
900 |
if (local && atomic_dec_and_test(&local->usage)) |
4f95dd78a rxrpc: Rework loc... |
901 902 |
__rxrpc_put_local(local); } |
5acbee464 rxrpc: Provide qu... |
903 904 905 906 |
static inline void rxrpc_queue_local(struct rxrpc_local *local) { rxrpc_queue_work(&local->processor); } |
17926a793 [AF_RXRPC]: Provi... |
907 |
/* |
0d81a51ab rxrpc: Update the... |
908 |
* misc.c |
17926a793 [AF_RXRPC]: Provi... |
909 |
*/ |
0d81a51ab rxrpc: Update the... |
910 911 912 913 914 915 916 |
extern unsigned int rxrpc_max_backlog __read_mostly; extern unsigned int rxrpc_requested_ack_delay; extern unsigned int rxrpc_soft_ack_delay; extern unsigned int rxrpc_idle_ack_delay; extern unsigned int rxrpc_rx_window_size; extern unsigned int rxrpc_rx_mtu; extern unsigned int rxrpc_rx_jumbo_max; |
0b58b8a18 rxrpc: Split send... |
917 |
extern unsigned int rxrpc_resend_timeout; |
17926a793 [AF_RXRPC]: Provi... |
918 |
|
0d81a51ab rxrpc: Update the... |
919 |
extern const s8 rxrpc_ack_priority[]; |
17926a793 [AF_RXRPC]: Provi... |
920 |
/* |
2baec2c3f rxrpc: Support ne... |
921 922 923 924 925 926 927 928 929 930 931 |
* net_ns.c */ extern unsigned int rxrpc_net_id; extern struct pernet_operations rxrpc_net_ops; static inline struct rxrpc_net *rxrpc_net(struct net *net) { return net_generic(net, rxrpc_net_id); } /* |
0d81a51ab rxrpc: Update the... |
932 |
* output.c |
17926a793 [AF_RXRPC]: Provi... |
933 |
*/ |
a5af7e1fc rxrpc: Fix loss o... |
934 |
int rxrpc_send_ack_packet(struct rxrpc_call *, bool); |
26cb02aa6 rxrpc: Fix warnin... |
935 |
int rxrpc_send_abort_packet(struct rxrpc_call *); |
a1767077b rxrpc: Make Tx lo... |
936 |
int rxrpc_send_data_packet(struct rxrpc_call *, struct sk_buff *, bool); |
248f219cb rxrpc: Rewrite th... |
937 |
void rxrpc_reject_packets(struct rxrpc_local *); |
17926a793 [AF_RXRPC]: Provi... |
938 939 |
/* |
abe89ef0e rxrpc: Rename rxr... |
940 |
* peer_event.c |
0d81a51ab rxrpc: Update the... |
941 |
*/ |
abe89ef0e rxrpc: Rename rxr... |
942 |
void rxrpc_error_report(struct sock *); |
f66d74901 rxrpc: Use the pe... |
943 |
void rxrpc_peer_error_distributor(struct work_struct *); |
cf1a6474f rxrpc: Add per-pe... |
944 945 |
void rxrpc_peer_add_rtt(struct rxrpc_call *, enum rxrpc_rtt_rx_trace, rxrpc_serial_t, rxrpc_serial_t, ktime_t, ktime_t); |
0d81a51ab rxrpc: Update the... |
946 947 948 |
/* * peer_object.c |
17926a793 [AF_RXRPC]: Provi... |
949 |
*/ |
be6e6707f rxrpc: Rework pee... |
950 951 952 953 954 |
struct rxrpc_peer *rxrpc_lookup_peer_rcu(struct rxrpc_local *, const struct sockaddr_rxrpc *); struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_local *, struct sockaddr_rxrpc *, gfp_t); struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *, gfp_t); |
248f219cb rxrpc: Rewrite th... |
955 956 |
struct rxrpc_peer *rxrpc_lookup_incoming_peer(struct rxrpc_local *, struct rxrpc_peer *); |
be6e6707f rxrpc: Rework pee... |
957 |
|
df5d8bf70 rxrpc: Make /proc... |
958 |
static inline struct rxrpc_peer *rxrpc_get_peer(struct rxrpc_peer *peer) |
be6e6707f rxrpc: Rework pee... |
959 960 |
{ atomic_inc(&peer->usage); |
df5d8bf70 rxrpc: Make /proc... |
961 |
return peer; |
be6e6707f rxrpc: Rework pee... |
962 963 964 965 966 967 968 969 970 971 972 |
} static inline struct rxrpc_peer *rxrpc_get_peer_maybe(struct rxrpc_peer *peer) { return atomic_inc_not_zero(&peer->usage) ? peer : NULL; } extern void __rxrpc_put_peer(struct rxrpc_peer *peer); static inline void rxrpc_put_peer(struct rxrpc_peer *peer) { |
5627cc8b9 rxrpc: Provide mo... |
973 |
if (peer && atomic_dec_and_test(&peer->usage)) |
be6e6707f rxrpc: Rework pee... |
974 975 |
__rxrpc_put_peer(peer); } |
17926a793 [AF_RXRPC]: Provi... |
976 977 |
/* |
0d81a51ab rxrpc: Update the... |
978 |
* proc.c |
17926a793 [AF_RXRPC]: Provi... |
979 |
*/ |
036c2e27b [AF_RXRPC]: const... |
980 981 |
extern const struct file_operations rxrpc_call_seq_fops; extern const struct file_operations rxrpc_connection_seq_fops; |
17926a793 [AF_RXRPC]: Provi... |
982 983 |
/* |
0d81a51ab rxrpc: Update the... |
984 |
* recvmsg.c |
17926a793 [AF_RXRPC]: Provi... |
985 |
*/ |
248f219cb rxrpc: Rewrite th... |
986 |
void rxrpc_notify_socket(struct rxrpc_call *); |
1b7841404 net: Remove iocb ... |
987 |
int rxrpc_recvmsg(struct socket *, struct msghdr *, size_t, int); |
17926a793 [AF_RXRPC]: Provi... |
988 989 |
/* |
0d81a51ab rxrpc: Update the... |
990 991 992 993 994 995 996 997 |
* rxkad.c */ #ifdef CONFIG_RXKAD extern const struct rxrpc_security rxkad; #endif /* * security.c |
17926a793 [AF_RXRPC]: Provi... |
998 |
*/ |
648af7fca rxrpc: Absorb the... |
999 1000 |
int __init rxrpc_init_security(void); void rxrpc_exit_security(void); |
c1b1203d6 net: misc: Remove... |
1001 1002 |
int rxrpc_init_client_conn_security(struct rxrpc_connection *); int rxrpc_init_server_conn_security(struct rxrpc_connection *); |
71a17de30 rxrpc: Whitespace... |
1003 |
|
0b58b8a18 rxrpc: Split send... |
1004 1005 1006 1007 |
/* * sendmsg.c */ int rxrpc_do_sendmsg(struct rxrpc_sock *, struct msghdr *, size_t); |
17926a793 [AF_RXRPC]: Provi... |
1008 1009 |
/* |
0d81a51ab rxrpc: Update the... |
1010 |
* skbuff.c |
17926a793 [AF_RXRPC]: Provi... |
1011 |
*/ |
d001648ec rxrpc: Don't expo... |
1012 |
void rxrpc_kernel_data_consumed(struct rxrpc_call *, struct sk_buff *); |
c1b1203d6 net: misc: Remove... |
1013 |
void rxrpc_packet_destructor(struct sk_buff *); |
71f3ca408 rxrpc: Improve sk... |
1014 1015 1016 1017 1018 |
void rxrpc_new_skb(struct sk_buff *, enum rxrpc_skb_trace); void rxrpc_see_skb(struct sk_buff *, enum rxrpc_skb_trace); void rxrpc_get_skb(struct sk_buff *, enum rxrpc_skb_trace); void rxrpc_free_skb(struct sk_buff *, enum rxrpc_skb_trace); void rxrpc_lose_skb(struct sk_buff *, enum rxrpc_skb_trace); |
df844fd46 rxrpc: Use a trac... |
1019 |
void rxrpc_purge_queue(struct sk_buff_head *); |
17926a793 [AF_RXRPC]: Provi... |
1020 1021 |
/* |
5873c0834 af_rxrpc: Add sys... |
1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 |
* sysctl.c */ #ifdef CONFIG_SYSCTL extern int __init rxrpc_sysctl_init(void); extern void rxrpc_sysctl_exit(void); #else static inline int __init rxrpc_sysctl_init(void) { return 0; } static inline void rxrpc_sysctl_exit(void) {} #endif /* |
be6e6707f rxrpc: Rework pee... |
1033 1034 |
* utils.c */ |
7b674e390 rxrpc: Fix IPv6 s... |
1035 1036 |
int rxrpc_extract_addr_from_skb(struct rxrpc_local *, struct sockaddr_rxrpc *, struct sk_buff *); |
be6e6707f rxrpc: Rework pee... |
1037 |
|
248f219cb rxrpc: Rewrite th... |
1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 |
static inline bool before(u32 seq1, u32 seq2) { return (s32)(seq1 - seq2) < 0; } static inline bool before_eq(u32 seq1, u32 seq2) { return (s32)(seq1 - seq2) <= 0; } static inline bool after(u32 seq1, u32 seq2) { return (s32)(seq1 - seq2) > 0; } static inline bool after_eq(u32 seq1, u32 seq2) { return (s32)(seq1 - seq2) >= 0; } |
be6e6707f rxrpc: Rework pee... |
1054 |
/* |
17926a793 [AF_RXRPC]: Provi... |
1055 1056 |
* debug tracing */ |
95c961747 net: cleanup unsi... |
1057 |
extern unsigned int rxrpc_debug; |
17926a793 [AF_RXRPC]: Provi... |
1058 1059 |
#define dbgprintk(FMT,...) \ |
9f389f4b2 rxrpc: remove smp... |
1060 1061 |
printk("[%-6.6s] "FMT" ", current->comm ,##__VA_ARGS__) |
17926a793 [AF_RXRPC]: Provi... |
1062 |
|
0dc47877a net: replace rema... |
1063 1064 |
#define kenter(FMT,...) dbgprintk("==> %s("FMT")",__func__ ,##__VA_ARGS__) #define kleave(FMT,...) dbgprintk("<== %s()"FMT"",__func__ ,##__VA_ARGS__) |
17926a793 [AF_RXRPC]: Provi... |
1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 |
#define kdebug(FMT,...) dbgprintk(" "FMT ,##__VA_ARGS__) #define kproto(FMT,...) dbgprintk("### "FMT ,##__VA_ARGS__) #define knet(FMT,...) dbgprintk("@@@ "FMT ,##__VA_ARGS__) #if defined(__KDEBUG) #define _enter(FMT,...) kenter(FMT,##__VA_ARGS__) #define _leave(FMT,...) kleave(FMT,##__VA_ARGS__) #define _debug(FMT,...) kdebug(FMT,##__VA_ARGS__) #define _proto(FMT,...) kproto(FMT,##__VA_ARGS__) #define _net(FMT,...) knet(FMT,##__VA_ARGS__) #elif defined(CONFIG_AF_RXRPC_DEBUG) #define RXRPC_DEBUG_KENTER 0x01 #define RXRPC_DEBUG_KLEAVE 0x02 #define RXRPC_DEBUG_KDEBUG 0x04 #define RXRPC_DEBUG_KPROTO 0x08 #define RXRPC_DEBUG_KNET 0x10 #define _enter(FMT,...) \ do { \ if (unlikely(rxrpc_debug & RXRPC_DEBUG_KENTER)) \ kenter(FMT,##__VA_ARGS__); \ } while (0) #define _leave(FMT,...) \ do { \ if (unlikely(rxrpc_debug & RXRPC_DEBUG_KLEAVE)) \ kleave(FMT,##__VA_ARGS__); \ } while (0) #define _debug(FMT,...) \ do { \ if (unlikely(rxrpc_debug & RXRPC_DEBUG_KDEBUG)) \ kdebug(FMT,##__VA_ARGS__); \ } while (0) #define _proto(FMT,...) \ do { \ if (unlikely(rxrpc_debug & RXRPC_DEBUG_KPROTO)) \ kproto(FMT,##__VA_ARGS__); \ } while (0) #define _net(FMT,...) \ do { \ if (unlikely(rxrpc_debug & RXRPC_DEBUG_KNET)) \ knet(FMT,##__VA_ARGS__); \ } while (0) #else |
12fdff3fc Add a dummy print... |
1115 1116 1117 1118 1119 |
#define _enter(FMT,...) no_printk("==> %s("FMT")",__func__ ,##__VA_ARGS__) #define _leave(FMT,...) no_printk("<== %s()"FMT"",__func__ ,##__VA_ARGS__) #define _debug(FMT,...) no_printk(" "FMT ,##__VA_ARGS__) #define _proto(FMT,...) no_printk("### "FMT ,##__VA_ARGS__) #define _net(FMT,...) no_printk("@@@ "FMT ,##__VA_ARGS__) |
17926a793 [AF_RXRPC]: Provi... |
1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 |
#endif /* * debug assertion checking */ #if 1 // defined(__KDEBUGALL) #define ASSERT(X) \ do { \ if (unlikely(!(X))) { \ |
9b6d53985 rxrpc: Use pr_<le... |
1130 1131 |
pr_err("Assertion failed "); \ |
17926a793 [AF_RXRPC]: Provi... |
1132 1133 |
BUG(); \ } \ |
b4f1342f9 rxrpc: Adjust som... |
1134 |
} while (0) |
17926a793 [AF_RXRPC]: Provi... |
1135 1136 1137 |
#define ASSERTCMP(X, OP, Y) \ do { \ |
cf13258fd rxrpc: Fix ASSERT... |
1138 1139 |
__typeof__(X) _x = (X); \ __typeof__(Y) _y = (__typeof__(X))(Y); \ |
9b6d53985 rxrpc: Use pr_<le... |
1140 |
if (unlikely(!(_x OP _y))) { \ |
cf13258fd rxrpc: Fix ASSERT... |
1141 1142 1143 1144 |
pr_err("Assertion failed - %lu(0x%lx) %s %lu(0x%lx) is false ", \ (unsigned long)_x, (unsigned long)_x, #OP, \ (unsigned long)_y, (unsigned long)_y); \ |
17926a793 [AF_RXRPC]: Provi... |
1145 1146 |
BUG(); \ } \ |
b4f1342f9 rxrpc: Adjust som... |
1147 |
} while (0) |
17926a793 [AF_RXRPC]: Provi... |
1148 1149 1150 1151 |
#define ASSERTIF(C, X) \ do { \ if (unlikely((C) && !(X))) { \ |
9b6d53985 rxrpc: Use pr_<le... |
1152 1153 |
pr_err("Assertion failed "); \ |
17926a793 [AF_RXRPC]: Provi... |
1154 1155 |
BUG(); \ } \ |
b4f1342f9 rxrpc: Adjust som... |
1156 |
} while (0) |
17926a793 [AF_RXRPC]: Provi... |
1157 1158 1159 |
#define ASSERTIFCMP(C, X, OP, Y) \ do { \ |
cf13258fd rxrpc: Fix ASSERT... |
1160 1161 |
__typeof__(X) _x = (X); \ __typeof__(Y) _y = (__typeof__(X))(Y); \ |
9b6d53985 rxrpc: Use pr_<le... |
1162 1163 1164 |
if (unlikely((C) && !(_x OP _y))) { \ pr_err("Assertion failed - %lu(0x%lx) %s %lu(0x%lx) is false ", \ |
cf13258fd rxrpc: Fix ASSERT... |
1165 1166 |
(unsigned long)_x, (unsigned long)_x, #OP, \ (unsigned long)_y, (unsigned long)_y); \ |
17926a793 [AF_RXRPC]: Provi... |
1167 1168 |
BUG(); \ } \ |
b4f1342f9 rxrpc: Adjust som... |
1169 |
} while (0) |
17926a793 [AF_RXRPC]: Provi... |
1170 1171 1172 1173 1174 |
#else #define ASSERT(X) \ do { \ |
b4f1342f9 rxrpc: Adjust som... |
1175 |
} while (0) |
17926a793 [AF_RXRPC]: Provi... |
1176 1177 1178 |
#define ASSERTCMP(X, OP, Y) \ do { \ |
b4f1342f9 rxrpc: Adjust som... |
1179 |
} while (0) |
17926a793 [AF_RXRPC]: Provi... |
1180 1181 1182 |
#define ASSERTIF(C, X) \ do { \ |
b4f1342f9 rxrpc: Adjust som... |
1183 |
} while (0) |
17926a793 [AF_RXRPC]: Provi... |
1184 1185 1186 |
#define ASSERTIFCMP(C, X, OP, Y) \ do { \ |
b4f1342f9 rxrpc: Adjust som... |
1187 |
} while (0) |
17926a793 [AF_RXRPC]: Provi... |
1188 1189 |
#endif /* __KDEBUGALL */ |