cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ar-internal.h (43245B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/* AF_RXRPC internal definitions
      3 *
      4 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
      5 * Written by David Howells (dhowells@redhat.com)
      6 */
      7
      8#include <linux/atomic.h>
      9#include <linux/seqlock.h>
     10#include <linux/win_minmax.h>
     11#include <net/net_namespace.h>
     12#include <net/netns/generic.h>
     13#include <net/sock.h>
     14#include <net/af_rxrpc.h>
     15#include <keys/rxrpc-type.h>
     16#include "protocol.h"
     17
     18#define FCRYPT_BSIZE 8
     19struct rxrpc_crypt {
     20	union {
     21		u8	x[FCRYPT_BSIZE];
     22		__be32	n[2];
     23	};
     24} __attribute__((aligned(8)));
     25
     26#define rxrpc_queue_work(WS)	queue_work(rxrpc_workqueue, (WS))
     27#define rxrpc_queue_delayed_work(WS,D)	\
     28	queue_delayed_work(rxrpc_workqueue, (WS), (D))
     29
     30struct key_preparsed_payload;
     31struct rxrpc_connection;
     32
     33/*
     34 * Mark applied to socket buffers in skb->mark.  skb->priority is used
     35 * to pass supplementary information.
     36 */
     37enum rxrpc_skb_mark {
     38	RXRPC_SKB_MARK_REJECT_BUSY,	/* Reject with BUSY */
     39	RXRPC_SKB_MARK_REJECT_ABORT,	/* Reject with ABORT (code in skb->priority) */
     40};
     41
     42/*
     43 * sk_state for RxRPC sockets
     44 */
     45enum {
     46	RXRPC_UNBOUND = 0,
     47	RXRPC_CLIENT_UNBOUND,		/* Unbound socket used as client */
     48	RXRPC_CLIENT_BOUND,		/* client local address bound */
     49	RXRPC_SERVER_BOUND,		/* server local address bound */
     50	RXRPC_SERVER_BOUND2,		/* second server local address bound */
     51	RXRPC_SERVER_LISTENING,		/* server listening for connections */
     52	RXRPC_SERVER_LISTEN_DISABLED,	/* server listening disabled */
     53	RXRPC_CLOSE,			/* socket is being closed */
     54};
     55
     56/*
     57 * Per-network namespace data.
     58 */
     59struct rxrpc_net {
     60	struct proc_dir_entry	*proc_net;	/* Subdir in /proc/net */
     61	u32			epoch;		/* Local epoch for detecting local-end reset */
     62	struct list_head	calls;		/* List of calls active in this namespace */
     63	spinlock_t		call_lock;	/* Lock for ->calls */
     64	atomic_t		nr_calls;	/* Count of allocated calls */
     65
     66	atomic_t		nr_conns;
     67	struct list_head	conn_proc_list;	/* List of conns in this namespace for proc */
     68	struct list_head	service_conns;	/* Service conns in this namespace */
     69	rwlock_t		conn_lock;	/* Lock for ->conn_proc_list, ->service_conns */
     70	struct work_struct	service_conn_reaper;
     71	struct timer_list	service_conn_reap_timer;
     72
     73	bool			live;
     74
     75	bool			kill_all_client_conns;
     76	atomic_t		nr_client_conns;
     77	spinlock_t		client_conn_cache_lock; /* Lock for ->*_client_conns */
     78	spinlock_t		client_conn_discard_lock; /* Prevent multiple discarders */
     79	struct list_head	idle_client_conns;
     80	struct work_struct	client_conn_reaper;
     81	struct timer_list	client_conn_reap_timer;
     82
     83	struct hlist_head	local_endpoints;
     84	struct mutex		local_mutex;	/* Lock for ->local_endpoints */
     85
     86	DECLARE_HASHTABLE	(peer_hash, 10);
     87	spinlock_t		peer_hash_lock;	/* Lock for ->peer_hash */
     88
     89#define RXRPC_KEEPALIVE_TIME 20 /* NAT keepalive time in seconds */
     90	u8			peer_keepalive_cursor;
     91	time64_t		peer_keepalive_base;
     92	struct list_head	peer_keepalive[32];
     93	struct list_head	peer_keepalive_new;
     94	struct timer_list	peer_keepalive_timer;
     95	struct work_struct	peer_keepalive_work;
     96};
     97
     98/*
     99 * Service backlog preallocation.
    100 *
    101 * This contains circular buffers of preallocated peers, connections and calls
    102 * for incoming service calls and their head and tail pointers.  This allows
    103 * calls to be set up in the data_ready handler, thereby avoiding the need to
    104 * shuffle packets around so much.
    105 */
    106struct rxrpc_backlog {
    107	unsigned short		peer_backlog_head;
    108	unsigned short		peer_backlog_tail;
    109	unsigned short		conn_backlog_head;
    110	unsigned short		conn_backlog_tail;
    111	unsigned short		call_backlog_head;
    112	unsigned short		call_backlog_tail;
    113#define RXRPC_BACKLOG_MAX	32
    114	struct rxrpc_peer	*peer_backlog[RXRPC_BACKLOG_MAX];
    115	struct rxrpc_connection	*conn_backlog[RXRPC_BACKLOG_MAX];
    116	struct rxrpc_call	*call_backlog[RXRPC_BACKLOG_MAX];
    117};
    118
    119/*
    120 * RxRPC socket definition
    121 */
    122struct rxrpc_sock {
    123	/* WARNING: sk has to be the first member */
    124	struct sock		sk;
    125	rxrpc_notify_new_call_t	notify_new_call; /* Func to notify of new call */
    126	rxrpc_discard_new_call_t discard_new_call; /* Func to discard a new call */
    127	struct rxrpc_local	*local;		/* local endpoint */
    128	struct rxrpc_backlog	*backlog;	/* Preallocation for services */
    129	spinlock_t		incoming_lock;	/* Incoming call vs service shutdown lock */
    130	struct list_head	sock_calls;	/* List of calls owned by this socket */
    131	struct list_head	to_be_accepted;	/* calls awaiting acceptance */
    132	struct list_head	recvmsg_q;	/* Calls awaiting recvmsg's attention  */
    133	rwlock_t		recvmsg_lock;	/* Lock for recvmsg_q */
    134	struct key		*key;		/* security for this socket */
    135	struct key		*securities;	/* list of server security descriptors */
    136	struct rb_root		calls;		/* User ID -> call mapping */
    137	unsigned long		flags;
    138#define RXRPC_SOCK_CONNECTED		0	/* connect_srx is set */
    139	rwlock_t		call_lock;	/* lock for calls */
    140	u32			min_sec_level;	/* minimum security level */
    141#define RXRPC_SECURITY_MAX	RXRPC_SECURITY_ENCRYPT
    142	bool			exclusive;	/* Exclusive connection for a client socket */
    143	u16			second_service;	/* Additional service bound to the endpoint */
    144	struct {
    145		/* Service upgrade information */
    146		u16		from;		/* Service ID to upgrade (if not 0) */
    147		u16		to;		/* service ID to upgrade to */
    148	} service_upgrade;
    149	sa_family_t		family;		/* Protocol family created with */
    150	struct sockaddr_rxrpc	srx;		/* Primary Service/local addresses */
    151	struct sockaddr_rxrpc	connect_srx;	/* Default client address from connect() */
    152};
    153
    154#define rxrpc_sk(__sk) container_of((__sk), struct rxrpc_sock, sk)
    155
    156/*
    157 * CPU-byteorder normalised Rx packet header.
    158 */
    159struct rxrpc_host_header {
    160	u32		epoch;		/* client boot timestamp */
    161	u32		cid;		/* connection and channel ID */
    162	u32		callNumber;	/* call ID (0 for connection-level packets) */
    163	u32		seq;		/* sequence number of pkt in call stream */
    164	u32		serial;		/* serial number of pkt sent to network */
    165	u8		type;		/* packet type */
    166	u8		flags;		/* packet flags */
    167	u8		userStatus;	/* app-layer defined status */
    168	u8		securityIndex;	/* security protocol ID */
    169	union {
    170		u16	_rsvd;		/* reserved */
    171		u16	cksum;		/* kerberos security checksum */
    172	};
    173	u16		serviceId;	/* service ID */
    174} __packed;
    175
    176/*
    177 * RxRPC socket buffer private variables
    178 * - max 48 bytes (struct sk_buff::cb)
    179 */
    180struct rxrpc_skb_priv {
    181	atomic_t	nr_ring_pins;		/* Number of rxtx ring pins */
    182	u8		nr_subpackets;		/* Number of subpackets */
    183	u8		rx_flags;		/* Received packet flags */
    184#define RXRPC_SKB_INCL_LAST	0x01		/* - Includes last packet */
    185#define RXRPC_SKB_TX_BUFFER	0x02		/* - Is transmit buffer */
    186	union {
    187		int		remain;		/* amount of space remaining for next write */
    188
    189		/* List of requested ACKs on subpackets */
    190		unsigned long	rx_req_ack[(RXRPC_MAX_NR_JUMBO + BITS_PER_LONG - 1) /
    191					   BITS_PER_LONG];
    192	};
    193
    194	struct rxrpc_host_header hdr;		/* RxRPC packet header from this packet */
    195};
    196
    197#define rxrpc_skb(__skb) ((struct rxrpc_skb_priv *) &(__skb)->cb)
    198
    199/*
    200 * RxRPC security module interface
    201 */
    202struct rxrpc_security {
    203	const char		*name;		/* name of this service */
    204	u8			security_index;	/* security type provided */
    205	u32			no_key_abort;	/* Abort code indicating no key */
    206
    207	/* Initialise a security service */
    208	int (*init)(void);
    209
    210	/* Clean up a security service */
    211	void (*exit)(void);
    212
    213	/* Parse the information from a server key */
    214	int (*preparse_server_key)(struct key_preparsed_payload *);
    215
    216	/* Clean up the preparse buffer after parsing a server key */
    217	void (*free_preparse_server_key)(struct key_preparsed_payload *);
    218
    219	/* Destroy the payload of a server key */
    220	void (*destroy_server_key)(struct key *);
    221
    222	/* Describe a server key */
    223	void (*describe_server_key)(const struct key *, struct seq_file *);
    224
    225	/* initialise a connection's security */
    226	int (*init_connection_security)(struct rxrpc_connection *,
    227					struct rxrpc_key_token *);
    228
    229	/* Work out how much data we can store in a packet, given an estimate
    230	 * of the amount of data remaining.
    231	 */
    232	int (*how_much_data)(struct rxrpc_call *, size_t,
    233			     size_t *, size_t *, size_t *);
    234
    235	/* impose security on a packet */
    236	int (*secure_packet)(struct rxrpc_call *, struct sk_buff *, size_t);
    237
    238	/* verify the security on a received packet */
    239	int (*verify_packet)(struct rxrpc_call *, struct sk_buff *,
    240			     unsigned int, unsigned int, rxrpc_seq_t, u16);
    241
    242	/* Free crypto request on a call */
    243	void (*free_call_crypto)(struct rxrpc_call *);
    244
    245	/* Locate the data in a received packet that has been verified. */
    246	void (*locate_data)(struct rxrpc_call *, struct sk_buff *,
    247			    unsigned int *, unsigned int *);
    248
    249	/* issue a challenge */
    250	int (*issue_challenge)(struct rxrpc_connection *);
    251
    252	/* respond to a challenge */
    253	int (*respond_to_challenge)(struct rxrpc_connection *,
    254				    struct sk_buff *,
    255				    u32 *);
    256
    257	/* verify a response */
    258	int (*verify_response)(struct rxrpc_connection *,
    259			       struct sk_buff *,
    260			       u32 *);
    261
    262	/* clear connection security */
    263	void (*clear)(struct rxrpc_connection *);
    264};
    265
    266/*
    267 * RxRPC local transport endpoint description
    268 * - owned by a single AF_RXRPC socket
    269 * - pointed to by transport socket struct sk_user_data
    270 */
    271struct rxrpc_local {
    272	struct rcu_head		rcu;
    273	atomic_t		active_users;	/* Number of users of the local endpoint */
    274	refcount_t		ref;		/* Number of references to the structure */
    275	struct rxrpc_net	*rxnet;		/* The network ns in which this resides */
    276	struct hlist_node	link;
    277	struct socket		*socket;	/* my UDP socket */
    278	struct work_struct	processor;
    279	struct rxrpc_sock __rcu	*service;	/* Service(s) listening on this endpoint */
    280	struct rw_semaphore	defrag_sem;	/* control re-enablement of IP DF bit */
    281	struct sk_buff_head	reject_queue;	/* packets awaiting rejection */
    282	struct sk_buff_head	event_queue;	/* endpoint event packets awaiting processing */
    283	struct rb_root		client_bundles;	/* Client connection bundles by socket params */
    284	spinlock_t		client_bundles_lock; /* Lock for client_bundles */
    285	spinlock_t		lock;		/* access lock */
    286	rwlock_t		services_lock;	/* lock for services list */
    287	int			debug_id;	/* debug ID for printks */
    288	bool			dead;
    289	bool			service_closed;	/* Service socket closed */
    290	struct sockaddr_rxrpc	srx;		/* local address */
    291};
    292
    293/*
    294 * RxRPC remote transport endpoint definition
    295 * - matched by local endpoint, remote port, address and protocol type
    296 */
    297struct rxrpc_peer {
    298	struct rcu_head		rcu;		/* This must be first */
    299	refcount_t		ref;
    300	unsigned long		hash_key;
    301	struct hlist_node	hash_link;
    302	struct rxrpc_local	*local;
    303	struct hlist_head	error_targets;	/* targets for net error distribution */
    304	struct rb_root		service_conns;	/* Service connections */
    305	struct list_head	keepalive_link;	/* Link in net->peer_keepalive[] */
    306	time64_t		last_tx_at;	/* Last time packet sent here */
    307	seqlock_t		service_conn_lock;
    308	spinlock_t		lock;		/* access lock */
    309	unsigned int		if_mtu;		/* interface MTU for this peer */
    310	unsigned int		mtu;		/* network MTU for this peer */
    311	unsigned int		maxdata;	/* data size (MTU - hdrsize) */
    312	unsigned short		hdrsize;	/* header size (IP + UDP + RxRPC) */
    313	int			debug_id;	/* debug ID for printks */
    314	struct sockaddr_rxrpc	srx;		/* remote address */
    315
    316	/* calculated RTT cache */
    317#define RXRPC_RTT_CACHE_SIZE 32
    318	spinlock_t		rtt_input_lock;	/* RTT lock for input routine */
    319	ktime_t			rtt_last_req;	/* Time of last RTT request */
    320	unsigned int		rtt_count;	/* Number of samples we've got */
    321
    322	u32			srtt_us;	/* smoothed round trip time << 3 in usecs */
    323	u32			mdev_us;	/* medium deviation			*/
    324	u32			mdev_max_us;	/* maximal mdev for the last rtt period	*/
    325	u32			rttvar_us;	/* smoothed mdev_max			*/
    326	u32			rto_j;		/* Retransmission timeout in jiffies */
    327	u8			backoff;	/* Backoff timeout */
    328
    329	u8			cong_cwnd;	/* Congestion window size */
    330};
    331
    332/*
    333 * Keys for matching a connection.
    334 */
    335struct rxrpc_conn_proto {
    336	union {
    337		struct {
    338			u32	epoch;		/* epoch of this connection */
    339			u32	cid;		/* connection ID */
    340		};
    341		u64		index_key;
    342	};
    343};
    344
    345struct rxrpc_conn_parameters {
    346	struct rxrpc_local	*local;		/* Representation of local endpoint */
    347	struct rxrpc_peer	*peer;		/* Remote endpoint */
    348	struct key		*key;		/* Security details */
    349	bool			exclusive;	/* T if conn is exclusive */
    350	bool			upgrade;	/* T if service ID can be upgraded */
    351	u16			service_id;	/* Service ID for this connection */
    352	u32			security_level;	/* Security level selected */
    353};
    354
    355/*
    356 * Bits in the connection flags.
    357 */
    358enum rxrpc_conn_flag {
    359	RXRPC_CONN_HAS_IDR,		/* Has a client conn ID assigned */
    360	RXRPC_CONN_IN_SERVICE_CONNS,	/* Conn is in peer->service_conns */
    361	RXRPC_CONN_DONT_REUSE,		/* Don't reuse this connection */
    362	RXRPC_CONN_PROBING_FOR_UPGRADE,	/* Probing for service upgrade */
    363	RXRPC_CONN_FINAL_ACK_0,		/* Need final ACK for channel 0 */
    364	RXRPC_CONN_FINAL_ACK_1,		/* Need final ACK for channel 1 */
    365	RXRPC_CONN_FINAL_ACK_2,		/* Need final ACK for channel 2 */
    366	RXRPC_CONN_FINAL_ACK_3,		/* Need final ACK for channel 3 */
    367};
    368
    369#define RXRPC_CONN_FINAL_ACK_MASK ((1UL << RXRPC_CONN_FINAL_ACK_0) |	\
    370				   (1UL << RXRPC_CONN_FINAL_ACK_1) |	\
    371				   (1UL << RXRPC_CONN_FINAL_ACK_2) |	\
    372				   (1UL << RXRPC_CONN_FINAL_ACK_3))
    373
    374/*
    375 * Events that can be raised upon a connection.
    376 */
    377enum rxrpc_conn_event {
    378	RXRPC_CONN_EV_CHALLENGE,	/* Send challenge packet */
    379};
    380
    381/*
    382 * The connection protocol state.
    383 */
    384enum rxrpc_conn_proto_state {
    385	RXRPC_CONN_UNUSED,		/* Connection not yet attempted */
    386	RXRPC_CONN_CLIENT,		/* Client connection */
    387	RXRPC_CONN_SERVICE_PREALLOC,	/* Service connection preallocation */
    388	RXRPC_CONN_SERVICE_UNSECURED,	/* Service unsecured connection */
    389	RXRPC_CONN_SERVICE_CHALLENGING,	/* Service challenging for security */
    390	RXRPC_CONN_SERVICE,		/* Service secured connection */
    391	RXRPC_CONN_REMOTELY_ABORTED,	/* Conn aborted by peer */
    392	RXRPC_CONN_LOCALLY_ABORTED,	/* Conn aborted locally */
    393	RXRPC_CONN__NR_STATES
    394};
    395
    396/*
    397 * RxRPC client connection bundle.
    398 */
    399struct rxrpc_bundle {
    400	struct rxrpc_conn_parameters params;
    401	refcount_t		ref;
    402	unsigned int		debug_id;
    403	bool			try_upgrade;	/* True if the bundle is attempting upgrade */
    404	bool			alloc_conn;	/* True if someone's getting a conn */
    405	short			alloc_error;	/* Error from last conn allocation */
    406	spinlock_t		channel_lock;
    407	struct rb_node		local_node;	/* Node in local->client_conns */
    408	struct list_head	waiting_calls;	/* Calls waiting for channels */
    409	unsigned long		avail_chans;	/* Mask of available channels */
    410	struct rxrpc_connection	*conns[4];	/* The connections in the bundle (max 4) */
    411};
    412
    413/*
    414 * RxRPC connection definition
    415 * - matched by { local, peer, epoch, conn_id, direction }
    416 * - each connection can only handle four simultaneous calls
    417 */
    418struct rxrpc_connection {
    419	struct rxrpc_conn_proto	proto;
    420	struct rxrpc_conn_parameters params;
    421
    422	refcount_t		ref;
    423	struct rcu_head		rcu;
    424	struct list_head	cache_link;
    425
    426	unsigned char		act_chans;	/* Mask of active channels */
    427	struct rxrpc_channel {
    428		unsigned long		final_ack_at;	/* Time at which to issue final ACK */
    429		struct rxrpc_call __rcu	*call;		/* Active call */
    430		unsigned int		call_debug_id;	/* call->debug_id */
    431		u32			call_id;	/* ID of current call */
    432		u32			call_counter;	/* Call ID counter */
    433		u32			last_call;	/* ID of last call */
    434		u8			last_type;	/* Type of last packet */
    435		union {
    436			u32		last_seq;
    437			u32		last_abort;
    438		};
    439	} channels[RXRPC_MAXCALLS];
    440
    441	struct timer_list	timer;		/* Conn event timer */
    442	struct work_struct	processor;	/* connection event processor */
    443	struct rxrpc_bundle	*bundle;	/* Client connection bundle */
    444	struct rb_node		service_node;	/* Node in peer->service_conns */
    445	struct list_head	proc_link;	/* link in procfs list */
    446	struct list_head	link;		/* link in master connection list */
    447	struct sk_buff_head	rx_queue;	/* received conn-level packets */
    448
    449	const struct rxrpc_security *security;	/* applied security module */
    450	union {
    451		struct {
    452			struct crypto_sync_skcipher *cipher;	/* encryption handle */
    453			struct rxrpc_crypt csum_iv;	/* packet checksum base */
    454			u32	nonce;		/* response re-use preventer */
    455		} rxkad;
    456	};
    457	unsigned long		flags;
    458	unsigned long		events;
    459	unsigned long		idle_timestamp;	/* Time at which last became idle */
    460	spinlock_t		state_lock;	/* state-change lock */
    461	enum rxrpc_conn_proto_state state;	/* current state of connection */
    462	u32			abort_code;	/* Abort code of connection abort */
    463	int			debug_id;	/* debug ID for printks */
    464	atomic_t		serial;		/* packet serial number counter */
    465	unsigned int		hi_serial;	/* highest serial number received */
    466	u32			service_id;	/* Service ID, possibly upgraded */
    467	u8			security_ix;	/* security type */
    468	u8			out_clientflag;	/* RXRPC_CLIENT_INITIATED if we are client */
    469	u8			bundle_shift;	/* Index into bundle->avail_chans */
    470	short			error;		/* Local error code */
    471};
    472
    473static inline bool rxrpc_to_server(const struct rxrpc_skb_priv *sp)
    474{
    475	return sp->hdr.flags & RXRPC_CLIENT_INITIATED;
    476}
    477
    478static inline bool rxrpc_to_client(const struct rxrpc_skb_priv *sp)
    479{
    480	return !rxrpc_to_server(sp);
    481}
    482
    483/*
    484 * Flags in call->flags.
    485 */
    486enum rxrpc_call_flag {
    487	RXRPC_CALL_RELEASED,		/* call has been released - no more message to userspace */
    488	RXRPC_CALL_HAS_USERID,		/* has a user ID attached */
    489	RXRPC_CALL_IS_SERVICE,		/* Call is service call */
    490	RXRPC_CALL_EXPOSED,		/* The call was exposed to the world */
    491	RXRPC_CALL_RX_LAST,		/* Received the last packet (at rxtx_top) */
    492	RXRPC_CALL_TX_LAST,		/* Last packet in Tx buffer (at rxtx_top) */
    493	RXRPC_CALL_SEND_PING,		/* A ping will need to be sent */
    494	RXRPC_CALL_RETRANS_TIMEOUT,	/* Retransmission due to timeout occurred */
    495	RXRPC_CALL_BEGAN_RX_TIMER,	/* We began the expect_rx_by timer */
    496	RXRPC_CALL_RX_HEARD,		/* The peer responded at least once to this call */
    497	RXRPC_CALL_RX_UNDERRUN,		/* Got data underrun */
    498	RXRPC_CALL_DISCONNECTED,	/* The call has been disconnected */
    499	RXRPC_CALL_KERNEL,		/* The call was made by the kernel */
    500	RXRPC_CALL_UPGRADE,		/* Service upgrade was requested for the call */
    501};
    502
    503/*
    504 * Events that can be raised on a call.
    505 */
    506enum rxrpc_call_event {
    507	RXRPC_CALL_EV_ACK,		/* need to generate ACK */
    508	RXRPC_CALL_EV_ABORT,		/* need to generate abort */
    509	RXRPC_CALL_EV_RESEND,		/* Tx resend required */
    510	RXRPC_CALL_EV_PING,		/* Ping send required */
    511	RXRPC_CALL_EV_EXPIRED,		/* Expiry occurred */
    512	RXRPC_CALL_EV_ACK_LOST,		/* ACK may be lost, send ping */
    513};
    514
    515/*
    516 * The states that a call can be in.
    517 */
    518enum rxrpc_call_state {
    519	RXRPC_CALL_UNINITIALISED,
    520	RXRPC_CALL_CLIENT_AWAIT_CONN,	/* - client waiting for connection to become available */
    521	RXRPC_CALL_CLIENT_SEND_REQUEST,	/* - client sending request phase */
    522	RXRPC_CALL_CLIENT_AWAIT_REPLY,	/* - client awaiting reply */
    523	RXRPC_CALL_CLIENT_RECV_REPLY,	/* - client receiving reply phase */
    524	RXRPC_CALL_SERVER_PREALLOC,	/* - service preallocation */
    525	RXRPC_CALL_SERVER_SECURING,	/* - server securing request connection */
    526	RXRPC_CALL_SERVER_RECV_REQUEST,	/* - server receiving request */
    527	RXRPC_CALL_SERVER_ACK_REQUEST,	/* - server pending ACK of request */
    528	RXRPC_CALL_SERVER_SEND_REPLY,	/* - server sending reply */
    529	RXRPC_CALL_SERVER_AWAIT_ACK,	/* - server awaiting final ACK */
    530	RXRPC_CALL_COMPLETE,		/* - call complete */
    531	NR__RXRPC_CALL_STATES
    532};
    533
    534/*
    535 * Call completion condition (state == RXRPC_CALL_COMPLETE).
    536 */
    537enum rxrpc_call_completion {
    538	RXRPC_CALL_SUCCEEDED,		/* - Normal termination */
    539	RXRPC_CALL_REMOTELY_ABORTED,	/* - call aborted by peer */
    540	RXRPC_CALL_LOCALLY_ABORTED,	/* - call aborted locally on error or close */
    541	RXRPC_CALL_LOCAL_ERROR,		/* - call failed due to local error */
    542	RXRPC_CALL_NETWORK_ERROR,	/* - call terminated by network error */
    543	NR__RXRPC_CALL_COMPLETIONS
    544};
    545
    546/*
    547 * Call Tx congestion management modes.
    548 */
    549enum rxrpc_congest_mode {
    550	RXRPC_CALL_SLOW_START,
    551	RXRPC_CALL_CONGEST_AVOIDANCE,
    552	RXRPC_CALL_PACKET_LOSS,
    553	RXRPC_CALL_FAST_RETRANSMIT,
    554	NR__RXRPC_CONGEST_MODES
    555};
    556
    557/*
    558 * RxRPC call definition
    559 * - matched by { connection, call_id }
    560 */
    561struct rxrpc_call {
    562	struct rcu_head		rcu;
    563	struct rxrpc_connection	*conn;		/* connection carrying call */
    564	struct rxrpc_peer	*peer;		/* Peer record for remote address */
    565	struct rxrpc_sock __rcu	*socket;	/* socket responsible */
    566	struct rxrpc_net	*rxnet;		/* Network namespace to which call belongs */
    567	const struct rxrpc_security *security;	/* applied security module */
    568	struct mutex		user_mutex;	/* User access mutex */
    569	unsigned long		ack_at;		/* When deferred ACK needs to happen */
    570	unsigned long		ack_lost_at;	/* When ACK is figured as lost */
    571	unsigned long		resend_at;	/* When next resend needs to happen */
    572	unsigned long		ping_at;	/* When next to send a ping */
    573	unsigned long		keepalive_at;	/* When next to send a keepalive ping */
    574	unsigned long		expect_rx_by;	/* When we expect to get a packet by */
    575	unsigned long		expect_req_by;	/* When we expect to get a request DATA packet by */
    576	unsigned long		expect_term_by;	/* When we expect call termination by */
    577	u32			next_rx_timo;	/* Timeout for next Rx packet (jif) */
    578	u32			next_req_timo;	/* Timeout for next Rx request packet (jif) */
    579	struct skcipher_request	*cipher_req;	/* Packet cipher request buffer */
    580	struct timer_list	timer;		/* Combined event timer */
    581	struct work_struct	processor;	/* Event processor */
    582	rxrpc_notify_rx_t	notify_rx;	/* kernel service Rx notification function */
    583	struct list_head	link;		/* link in master call list */
    584	struct list_head	chan_wait_link;	/* Link in conn->bundle->waiting_calls */
    585	struct hlist_node	error_link;	/* link in error distribution list */
    586	struct list_head	accept_link;	/* Link in rx->acceptq */
    587	struct list_head	recvmsg_link;	/* Link in rx->recvmsg_q */
    588	struct list_head	sock_link;	/* Link in rx->sock_calls */
    589	struct rb_node		sock_node;	/* Node in rx->calls */
    590	struct sk_buff		*tx_pending;	/* Tx socket buffer being filled */
    591	wait_queue_head_t	waitq;		/* Wait queue for channel or Tx */
    592	s64			tx_total_len;	/* Total length left to be transmitted (or -1) */
    593	__be32			crypto_buf[2];	/* Temporary packet crypto buffer */
    594	unsigned long		user_call_ID;	/* user-defined call ID */
    595	unsigned long		flags;
    596	unsigned long		events;
    597	spinlock_t		lock;
    598	spinlock_t		notify_lock;	/* Kernel notification lock */
    599	rwlock_t		state_lock;	/* lock for state transition */
    600	u32			abort_code;	/* Local/remote abort code */
    601	int			error;		/* Local error incurred */
    602	enum rxrpc_call_state	state;		/* current state of call */
    603	enum rxrpc_call_completion completion;	/* Call completion condition */
    604	refcount_t		ref;
    605	u16			service_id;	/* service ID */
    606	u8			security_ix;	/* Security type */
    607	enum rxrpc_interruptibility interruptibility; /* At what point call may be interrupted */
    608	u32			call_id;	/* call ID on connection  */
    609	u32			cid;		/* connection ID plus channel index */
    610	int			debug_id;	/* debug ID for printks */
    611	unsigned short		rx_pkt_offset;	/* Current recvmsg packet offset */
    612	unsigned short		rx_pkt_len;	/* Current recvmsg packet len */
    613	bool			rx_pkt_last;	/* Current recvmsg packet is last */
    614
    615	/* Rx/Tx circular buffer, depending on phase.
    616	 *
    617	 * In the Rx phase, packets are annotated with 0 or the number of the
    618	 * segment of a jumbo packet each buffer refers to.  There can be up to
    619	 * 47 segments in a maximum-size UDP packet.
    620	 *
    621	 * In the Tx phase, packets are annotated with which buffers have been
    622	 * acked.
    623	 */
    624#define RXRPC_RXTX_BUFF_SIZE	64
    625#define RXRPC_RXTX_BUFF_MASK	(RXRPC_RXTX_BUFF_SIZE - 1)
    626#define RXRPC_INIT_RX_WINDOW_SIZE 63
    627	struct sk_buff		**rxtx_buffer;
    628	u8			*rxtx_annotations;
    629#define RXRPC_TX_ANNO_ACK	0
    630#define RXRPC_TX_ANNO_UNACK	1
    631#define RXRPC_TX_ANNO_NAK	2
    632#define RXRPC_TX_ANNO_RETRANS	3
    633#define RXRPC_TX_ANNO_MASK	0x03
    634#define RXRPC_TX_ANNO_LAST	0x04
    635#define RXRPC_TX_ANNO_RESENT	0x08
    636
    637#define RXRPC_RX_ANNO_SUBPACKET	0x3f		/* Subpacket number in jumbogram */
    638#define RXRPC_RX_ANNO_VERIFIED	0x80		/* Set if verified and decrypted */
    639	rxrpc_seq_t		tx_hard_ack;	/* Dead slot in buffer; the first transmitted but
    640						 * not hard-ACK'd packet follows this.
    641						 */
    642	rxrpc_seq_t		tx_top;		/* Highest Tx slot allocated. */
    643	u16			tx_backoff;	/* Delay to insert due to Tx failure */
    644
    645	/* TCP-style slow-start congestion control [RFC5681].  Since the SMSS
    646	 * is fixed, we keep these numbers in terms of segments (ie. DATA
    647	 * packets) rather than bytes.
    648	 */
    649#define RXRPC_TX_SMSS		RXRPC_JUMBO_DATALEN
    650	u8			cong_cwnd;	/* Congestion window size */
    651	u8			cong_extra;	/* Extra to send for congestion management */
    652	u8			cong_ssthresh;	/* Slow-start threshold */
    653	enum rxrpc_congest_mode	cong_mode:8;	/* Congestion management mode */
    654	u8			cong_dup_acks;	/* Count of ACKs showing missing packets */
    655	u8			cong_cumul_acks; /* Cumulative ACK count */
    656	ktime_t			cong_tstamp;	/* Last time cwnd was changed */
    657
    658	rxrpc_seq_t		rx_hard_ack;	/* Dead slot in buffer; the first received but not
    659						 * consumed packet follows this.
    660						 */
    661	rxrpc_seq_t		rx_top;		/* Highest Rx slot allocated. */
    662	rxrpc_seq_t		rx_expect_next;	/* Expected next packet sequence number */
    663	rxrpc_serial_t		rx_serial;	/* Highest serial received for this call */
    664	u8			rx_winsize;	/* Size of Rx window */
    665	u8			tx_winsize;	/* Maximum size of Tx window */
    666	bool			tx_phase;	/* T if transmission phase, F if receive phase */
    667	u8			nr_jumbo_bad;	/* Number of jumbo dups/exceeds-windows */
    668
    669	spinlock_t		input_lock;	/* Lock for packet input to this call */
    670
    671	/* Receive-phase ACK management (ACKs we send). */
    672	u8			ackr_reason;	/* reason to ACK */
    673	rxrpc_serial_t		ackr_serial;	/* serial of packet being ACK'd */
    674	rxrpc_seq_t		ackr_highest_seq; /* Higest sequence number received */
    675	atomic_t		ackr_nr_unacked; /* Number of unacked packets */
    676	atomic_t		ackr_nr_consumed; /* Number of packets needing hard ACK */
    677
    678	/* RTT management */
    679	rxrpc_serial_t		rtt_serial[4];	/* Serial number of DATA or PING sent */
    680	ktime_t			rtt_sent_at[4];	/* Time packet sent */
    681	unsigned long		rtt_avail;	/* Mask of available slots in bits 0-3,
    682						 * Mask of pending samples in 8-11 */
    683#define RXRPC_CALL_RTT_AVAIL_MASK	0xf
    684#define RXRPC_CALL_RTT_PEND_SHIFT	8
    685
    686	/* Transmission-phase ACK management (ACKs we've received). */
    687	ktime_t			acks_latest_ts;	/* Timestamp of latest ACK received */
    688	rxrpc_seq_t		acks_first_seq;	/* first sequence number received */
    689	rxrpc_seq_t		acks_prev_seq;	/* Highest previousPacket received */
    690	rxrpc_seq_t		acks_lowest_nak; /* Lowest NACK in the buffer (or ==tx_hard_ack) */
    691	rxrpc_seq_t		acks_lost_top;	/* tx_top at the time lost-ack ping sent */
    692	rxrpc_serial_t		acks_lost_ping;	/* Serial number of probe ACK */
    693};
    694
    695/*
    696 * Summary of a new ACK and the changes it made to the Tx buffer packet states.
    697 */
    698struct rxrpc_ack_summary {
    699	u8			ack_reason;
    700	u8			nr_acks;		/* Number of ACKs in packet */
    701	u8			nr_nacks;		/* Number of NACKs in packet */
    702	u8			nr_new_acks;		/* Number of new ACKs in packet */
    703	u8			nr_new_nacks;		/* Number of new NACKs in packet */
    704	u8			nr_rot_new_acks;	/* Number of rotated new ACKs */
    705	bool			new_low_nack;		/* T if new low NACK found */
    706	bool			retrans_timeo;		/* T if reTx due to timeout happened */
    707	u8			flight_size;		/* Number of unreceived transmissions */
    708	/* Place to stash values for tracing */
    709	enum rxrpc_congest_mode	mode:8;
    710	u8			cwnd;
    711	u8			ssthresh;
    712	u8			dup_acks;
    713	u8			cumulative_acks;
    714};
    715
    716/*
    717 * sendmsg() cmsg-specified parameters.
    718 */
    719enum rxrpc_command {
    720	RXRPC_CMD_SEND_DATA,		/* send data message */
    721	RXRPC_CMD_SEND_ABORT,		/* request abort generation */
    722	RXRPC_CMD_REJECT_BUSY,		/* [server] reject a call as busy */
    723	RXRPC_CMD_CHARGE_ACCEPT,	/* [server] charge accept preallocation */
    724};
    725
    726struct rxrpc_call_params {
    727	s64			tx_total_len;	/* Total Tx data length (if send data) */
    728	unsigned long		user_call_ID;	/* User's call ID */
    729	struct {
    730		u32		hard;		/* Maximum lifetime (sec) */
    731		u32		idle;		/* Max time since last data packet (msec) */
    732		u32		normal;		/* Max time since last call packet (msec) */
    733	} timeouts;
    734	u8			nr_timeouts;	/* Number of timeouts specified */
    735	bool			kernel;		/* T if kernel is making the call */
    736	enum rxrpc_interruptibility interruptibility; /* How is interruptible is the call? */
    737};
    738
    739struct rxrpc_send_params {
    740	struct rxrpc_call_params call;
    741	u32			abort_code;	/* Abort code to Tx (if abort) */
    742	enum rxrpc_command	command : 8;	/* The command to implement */
    743	bool			exclusive;	/* Shared or exclusive call */
    744	bool			upgrade;	/* If the connection is upgradeable */
    745};
    746
    747#include <trace/events/rxrpc.h>
    748
    749/*
    750 * af_rxrpc.c
    751 */
    752extern atomic_t rxrpc_n_tx_skbs, rxrpc_n_rx_skbs;
    753extern struct workqueue_struct *rxrpc_workqueue;
    754
    755/*
    756 * call_accept.c
    757 */
    758int rxrpc_service_prealloc(struct rxrpc_sock *, gfp_t);
    759void rxrpc_discard_prealloc(struct rxrpc_sock *);
    760struct rxrpc_call *rxrpc_new_incoming_call(struct rxrpc_local *,
    761					   struct rxrpc_sock *,
    762					   struct sk_buff *);
    763void rxrpc_accept_incoming_calls(struct rxrpc_local *);
    764int rxrpc_user_charge_accept(struct rxrpc_sock *, unsigned long);
    765
    766/*
    767 * call_event.c
    768 */
    769void rxrpc_propose_ACK(struct rxrpc_call *, u8, u32, bool, bool,
    770		       enum rxrpc_propose_ack_trace);
    771void rxrpc_process_call(struct work_struct *);
    772
    773void rxrpc_reduce_call_timer(struct rxrpc_call *call,
    774			     unsigned long expire_at,
    775			     unsigned long now,
    776			     enum rxrpc_timer_trace why);
    777
    778void rxrpc_delete_call_timer(struct rxrpc_call *call);
    779
    780/*
    781 * call_object.c
    782 */
    783extern const char *const rxrpc_call_states[];
    784extern const char *const rxrpc_call_completions[];
    785extern unsigned int rxrpc_max_call_lifetime;
    786extern struct kmem_cache *rxrpc_call_jar;
    787
    788struct rxrpc_call *rxrpc_find_call_by_user_ID(struct rxrpc_sock *, unsigned long);
    789struct rxrpc_call *rxrpc_alloc_call(struct rxrpc_sock *, gfp_t, unsigned int);
    790struct rxrpc_call *rxrpc_new_client_call(struct rxrpc_sock *,
    791					 struct rxrpc_conn_parameters *,
    792					 struct sockaddr_rxrpc *,
    793					 struct rxrpc_call_params *, gfp_t,
    794					 unsigned int);
    795void rxrpc_incoming_call(struct rxrpc_sock *, struct rxrpc_call *,
    796			 struct sk_buff *);
    797void rxrpc_release_call(struct rxrpc_sock *, struct rxrpc_call *);
    798void rxrpc_release_calls_on_socket(struct rxrpc_sock *);
    799bool __rxrpc_queue_call(struct rxrpc_call *);
    800bool rxrpc_queue_call(struct rxrpc_call *);
    801void rxrpc_see_call(struct rxrpc_call *);
    802bool rxrpc_try_get_call(struct rxrpc_call *call, enum rxrpc_call_trace op);
    803void rxrpc_get_call(struct rxrpc_call *, enum rxrpc_call_trace);
    804void rxrpc_put_call(struct rxrpc_call *, enum rxrpc_call_trace);
    805void rxrpc_cleanup_call(struct rxrpc_call *);
    806void rxrpc_destroy_all_calls(struct rxrpc_net *);
    807
    808static inline bool rxrpc_is_service_call(const struct rxrpc_call *call)
    809{
    810	return test_bit(RXRPC_CALL_IS_SERVICE, &call->flags);
    811}
    812
    813static inline bool rxrpc_is_client_call(const struct rxrpc_call *call)
    814{
    815	return !rxrpc_is_service_call(call);
    816}
    817
    818/*
    819 * conn_client.c
    820 */
    821extern unsigned int rxrpc_reap_client_connections;
    822extern unsigned long rxrpc_conn_idle_client_expiry;
    823extern unsigned long rxrpc_conn_idle_client_fast_expiry;
    824extern struct idr rxrpc_client_conn_ids;
    825
    826void rxrpc_destroy_client_conn_ids(void);
    827struct rxrpc_bundle *rxrpc_get_bundle(struct rxrpc_bundle *);
    828void rxrpc_put_bundle(struct rxrpc_bundle *);
    829int rxrpc_connect_call(struct rxrpc_sock *, struct rxrpc_call *,
    830		       struct rxrpc_conn_parameters *, struct sockaddr_rxrpc *,
    831		       gfp_t);
    832void rxrpc_expose_client_call(struct rxrpc_call *);
    833void rxrpc_disconnect_client_call(struct rxrpc_bundle *, struct rxrpc_call *);
    834void rxrpc_put_client_conn(struct rxrpc_connection *);
    835void rxrpc_discard_expired_client_conns(struct work_struct *);
    836void rxrpc_destroy_all_client_connections(struct rxrpc_net *);
    837void rxrpc_clean_up_local_conns(struct rxrpc_local *);
    838
    839/*
    840 * conn_event.c
    841 */
    842void rxrpc_process_connection(struct work_struct *);
    843void rxrpc_process_delayed_final_acks(struct rxrpc_connection *, bool);
    844
    845/*
    846 * conn_object.c
    847 */
    848extern unsigned int rxrpc_connection_expiry;
    849extern unsigned int rxrpc_closed_conn_expiry;
    850
    851struct rxrpc_connection *rxrpc_alloc_connection(gfp_t);
    852struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *,
    853						   struct sk_buff *,
    854						   struct rxrpc_peer **);
    855void __rxrpc_disconnect_call(struct rxrpc_connection *, struct rxrpc_call *);
    856void rxrpc_disconnect_call(struct rxrpc_call *);
    857void rxrpc_kill_connection(struct rxrpc_connection *);
    858bool rxrpc_queue_conn(struct rxrpc_connection *);
    859void rxrpc_see_connection(struct rxrpc_connection *);
    860struct rxrpc_connection *rxrpc_get_connection(struct rxrpc_connection *);
    861struct rxrpc_connection *rxrpc_get_connection_maybe(struct rxrpc_connection *);
    862void rxrpc_put_service_conn(struct rxrpc_connection *);
    863void rxrpc_service_connection_reaper(struct work_struct *);
    864void rxrpc_destroy_all_connections(struct rxrpc_net *);
    865
    866static inline bool rxrpc_conn_is_client(const struct rxrpc_connection *conn)
    867{
    868	return conn->out_clientflag;
    869}
    870
    871static inline bool rxrpc_conn_is_service(const struct rxrpc_connection *conn)
    872{
    873	return !rxrpc_conn_is_client(conn);
    874}
    875
    876static inline void rxrpc_put_connection(struct rxrpc_connection *conn)
    877{
    878	if (!conn)
    879		return;
    880
    881	if (rxrpc_conn_is_client(conn))
    882		rxrpc_put_client_conn(conn);
    883	else
    884		rxrpc_put_service_conn(conn);
    885}
    886
    887static inline void rxrpc_reduce_conn_timer(struct rxrpc_connection *conn,
    888					   unsigned long expire_at)
    889{
    890	timer_reduce(&conn->timer, expire_at);
    891}
    892
    893/*
    894 * conn_service.c
    895 */
    896struct rxrpc_connection *rxrpc_find_service_conn_rcu(struct rxrpc_peer *,
    897						     struct sk_buff *);
    898struct rxrpc_connection *rxrpc_prealloc_service_connection(struct rxrpc_net *, gfp_t);
    899void rxrpc_new_incoming_connection(struct rxrpc_sock *, struct rxrpc_connection *,
    900				   const struct rxrpc_security *, struct sk_buff *);
    901void rxrpc_unpublish_service_conn(struct rxrpc_connection *);
    902
    903/*
    904 * input.c
    905 */
    906int rxrpc_input_packet(struct sock *, struct sk_buff *);
    907
    908/*
    909 * insecure.c
    910 */
    911extern const struct rxrpc_security rxrpc_no_security;
    912
    913/*
    914 * key.c
    915 */
    916extern struct key_type key_type_rxrpc;
    917
    918int rxrpc_request_key(struct rxrpc_sock *, sockptr_t , int);
    919int rxrpc_get_server_data_key(struct rxrpc_connection *, const void *, time64_t,
    920			      u32);
    921
    922/*
    923 * local_event.c
    924 */
    925extern void rxrpc_process_local_events(struct rxrpc_local *);
    926
    927/*
    928 * local_object.c
    929 */
    930struct rxrpc_local *rxrpc_lookup_local(struct net *, const struct sockaddr_rxrpc *);
    931struct rxrpc_local *rxrpc_get_local(struct rxrpc_local *);
    932struct rxrpc_local *rxrpc_get_local_maybe(struct rxrpc_local *);
    933void rxrpc_put_local(struct rxrpc_local *);
    934struct rxrpc_local *rxrpc_use_local(struct rxrpc_local *);
    935void rxrpc_unuse_local(struct rxrpc_local *);
    936void rxrpc_queue_local(struct rxrpc_local *);
    937void rxrpc_destroy_all_locals(struct rxrpc_net *);
    938
    939static inline bool __rxrpc_unuse_local(struct rxrpc_local *local)
    940{
    941	return atomic_dec_return(&local->active_users) == 0;
    942}
    943
    944static inline bool __rxrpc_use_local(struct rxrpc_local *local)
    945{
    946	return atomic_fetch_add_unless(&local->active_users, 1, 0) != 0;
    947}
    948
    949/*
    950 * misc.c
    951 */
    952extern unsigned int rxrpc_max_backlog __read_mostly;
    953extern unsigned long rxrpc_requested_ack_delay;
    954extern unsigned long rxrpc_soft_ack_delay;
    955extern unsigned long rxrpc_idle_ack_delay;
    956extern unsigned int rxrpc_rx_window_size;
    957extern unsigned int rxrpc_rx_mtu;
    958extern unsigned int rxrpc_rx_jumbo_max;
    959
    960extern const s8 rxrpc_ack_priority[];
    961
    962/*
    963 * net_ns.c
    964 */
    965extern unsigned int rxrpc_net_id;
    966extern struct pernet_operations rxrpc_net_ops;
    967
    968static inline struct rxrpc_net *rxrpc_net(struct net *net)
    969{
    970	return net_generic(net, rxrpc_net_id);
    971}
    972
    973/*
    974 * output.c
    975 */
    976int rxrpc_send_ack_packet(struct rxrpc_call *, bool, rxrpc_serial_t *);
    977int rxrpc_send_abort_packet(struct rxrpc_call *);
    978int rxrpc_send_data_packet(struct rxrpc_call *, struct sk_buff *, bool);
    979void rxrpc_reject_packets(struct rxrpc_local *);
    980void rxrpc_send_keepalive(struct rxrpc_peer *);
    981
    982/*
    983 * peer_event.c
    984 */
    985void rxrpc_error_report(struct sock *);
    986void rxrpc_peer_keepalive_worker(struct work_struct *);
    987
    988/*
    989 * peer_object.c
    990 */
    991struct rxrpc_peer *rxrpc_lookup_peer_rcu(struct rxrpc_local *,
    992					 const struct sockaddr_rxrpc *);
    993struct rxrpc_peer *rxrpc_lookup_peer(struct rxrpc_sock *, struct rxrpc_local *,
    994				     struct sockaddr_rxrpc *, gfp_t);
    995struct rxrpc_peer *rxrpc_alloc_peer(struct rxrpc_local *, gfp_t);
    996void rxrpc_new_incoming_peer(struct rxrpc_sock *, struct rxrpc_local *,
    997			     struct rxrpc_peer *);
    998void rxrpc_destroy_all_peers(struct rxrpc_net *);
    999struct rxrpc_peer *rxrpc_get_peer(struct rxrpc_peer *);
   1000struct rxrpc_peer *rxrpc_get_peer_maybe(struct rxrpc_peer *);
   1001void rxrpc_put_peer(struct rxrpc_peer *);
   1002void rxrpc_put_peer_locked(struct rxrpc_peer *);
   1003
   1004/*
   1005 * proc.c
   1006 */
   1007extern const struct seq_operations rxrpc_call_seq_ops;
   1008extern const struct seq_operations rxrpc_connection_seq_ops;
   1009extern const struct seq_operations rxrpc_peer_seq_ops;
   1010extern const struct seq_operations rxrpc_local_seq_ops;
   1011
   1012/*
   1013 * recvmsg.c
   1014 */
   1015void rxrpc_notify_socket(struct rxrpc_call *);
   1016bool __rxrpc_set_call_completion(struct rxrpc_call *, enum rxrpc_call_completion, u32, int);
   1017bool rxrpc_set_call_completion(struct rxrpc_call *, enum rxrpc_call_completion, u32, int);
   1018bool __rxrpc_call_completed(struct rxrpc_call *);
   1019bool rxrpc_call_completed(struct rxrpc_call *);
   1020bool __rxrpc_abort_call(const char *, struct rxrpc_call *, rxrpc_seq_t, u32, int);
   1021bool rxrpc_abort_call(const char *, struct rxrpc_call *, rxrpc_seq_t, u32, int);
   1022int rxrpc_recvmsg(struct socket *, struct msghdr *, size_t, int);
   1023
   1024/*
   1025 * Abort a call due to a protocol error.
   1026 */
   1027static inline bool __rxrpc_abort_eproto(struct rxrpc_call *call,
   1028					struct sk_buff *skb,
   1029					const char *eproto_why,
   1030					const char *why,
   1031					u32 abort_code)
   1032{
   1033	struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
   1034
   1035	trace_rxrpc_rx_eproto(call, sp->hdr.serial, eproto_why);
   1036	return rxrpc_abort_call(why, call, sp->hdr.seq, abort_code, -EPROTO);
   1037}
   1038
   1039#define rxrpc_abort_eproto(call, skb, eproto_why, abort_why, abort_code) \
   1040	__rxrpc_abort_eproto((call), (skb), tracepoint_string(eproto_why), \
   1041			     (abort_why), (abort_code))
   1042
   1043/*
   1044 * rtt.c
   1045 */
   1046void rxrpc_peer_add_rtt(struct rxrpc_call *, enum rxrpc_rtt_rx_trace, int,
   1047			rxrpc_serial_t, rxrpc_serial_t, ktime_t, ktime_t);
   1048unsigned long rxrpc_get_rto_backoff(struct rxrpc_peer *, bool);
   1049void rxrpc_peer_init_rtt(struct rxrpc_peer *);
   1050
   1051/*
   1052 * rxkad.c
   1053 */
   1054#ifdef CONFIG_RXKAD
   1055extern const struct rxrpc_security rxkad;
   1056#endif
   1057
   1058/*
   1059 * security.c
   1060 */
   1061int __init rxrpc_init_security(void);
   1062const struct rxrpc_security *rxrpc_security_lookup(u8);
   1063void rxrpc_exit_security(void);
   1064int rxrpc_init_client_conn_security(struct rxrpc_connection *);
   1065const struct rxrpc_security *rxrpc_get_incoming_security(struct rxrpc_sock *,
   1066							 struct sk_buff *);
   1067struct key *rxrpc_look_up_server_security(struct rxrpc_connection *,
   1068					  struct sk_buff *, u32, u32);
   1069
   1070/*
   1071 * sendmsg.c
   1072 */
   1073int rxrpc_do_sendmsg(struct rxrpc_sock *, struct msghdr *, size_t);
   1074
   1075/*
   1076 * server_key.c
   1077 */
   1078extern struct key_type key_type_rxrpc_s;
   1079
   1080int rxrpc_server_keyring(struct rxrpc_sock *, sockptr_t, int);
   1081
   1082/*
   1083 * skbuff.c
   1084 */
   1085void rxrpc_kernel_data_consumed(struct rxrpc_call *, struct sk_buff *);
   1086void rxrpc_packet_destructor(struct sk_buff *);
   1087void rxrpc_new_skb(struct sk_buff *, enum rxrpc_skb_trace);
   1088void rxrpc_see_skb(struct sk_buff *, enum rxrpc_skb_trace);
   1089void rxrpc_eaten_skb(struct sk_buff *, enum rxrpc_skb_trace);
   1090void rxrpc_get_skb(struct sk_buff *, enum rxrpc_skb_trace);
   1091void rxrpc_free_skb(struct sk_buff *, enum rxrpc_skb_trace);
   1092void rxrpc_purge_queue(struct sk_buff_head *);
   1093
   1094/*
   1095 * sysctl.c
   1096 */
   1097#ifdef CONFIG_SYSCTL
   1098extern int __init rxrpc_sysctl_init(void);
   1099extern void rxrpc_sysctl_exit(void);
   1100#else
   1101static inline int __init rxrpc_sysctl_init(void) { return 0; }
   1102static inline void rxrpc_sysctl_exit(void) {}
   1103#endif
   1104
   1105/*
   1106 * utils.c
   1107 */
   1108int rxrpc_extract_addr_from_skb(struct sockaddr_rxrpc *, struct sk_buff *);
   1109
   1110static inline bool before(u32 seq1, u32 seq2)
   1111{
   1112        return (s32)(seq1 - seq2) < 0;
   1113}
   1114static inline bool before_eq(u32 seq1, u32 seq2)
   1115{
   1116        return (s32)(seq1 - seq2) <= 0;
   1117}
   1118static inline bool after(u32 seq1, u32 seq2)
   1119{
   1120        return (s32)(seq1 - seq2) > 0;
   1121}
   1122static inline bool after_eq(u32 seq1, u32 seq2)
   1123{
   1124        return (s32)(seq1 - seq2) >= 0;
   1125}
   1126
   1127/*
   1128 * debug tracing
   1129 */
   1130extern unsigned int rxrpc_debug;
   1131
   1132#define dbgprintk(FMT,...) \
   1133	printk("[%-6.6s] "FMT"\n", current->comm ,##__VA_ARGS__)
   1134
   1135#define kenter(FMT,...)	dbgprintk("==> %s("FMT")",__func__ ,##__VA_ARGS__)
   1136#define kleave(FMT,...)	dbgprintk("<== %s()"FMT"",__func__ ,##__VA_ARGS__)
   1137#define kdebug(FMT,...)	dbgprintk("    "FMT ,##__VA_ARGS__)
   1138#define kproto(FMT,...)	dbgprintk("### "FMT ,##__VA_ARGS__)
   1139#define knet(FMT,...)	dbgprintk("@@@ "FMT ,##__VA_ARGS__)
   1140
   1141
   1142#if defined(__KDEBUG)
   1143#define _enter(FMT,...)	kenter(FMT,##__VA_ARGS__)
   1144#define _leave(FMT,...)	kleave(FMT,##__VA_ARGS__)
   1145#define _debug(FMT,...)	kdebug(FMT,##__VA_ARGS__)
   1146#define _proto(FMT,...)	kproto(FMT,##__VA_ARGS__)
   1147#define _net(FMT,...)	knet(FMT,##__VA_ARGS__)
   1148
   1149#elif defined(CONFIG_AF_RXRPC_DEBUG)
   1150#define RXRPC_DEBUG_KENTER	0x01
   1151#define RXRPC_DEBUG_KLEAVE	0x02
   1152#define RXRPC_DEBUG_KDEBUG	0x04
   1153#define RXRPC_DEBUG_KPROTO	0x08
   1154#define RXRPC_DEBUG_KNET	0x10
   1155
   1156#define _enter(FMT,...)					\
   1157do {							\
   1158	if (unlikely(rxrpc_debug & RXRPC_DEBUG_KENTER))	\
   1159		kenter(FMT,##__VA_ARGS__);		\
   1160} while (0)
   1161
   1162#define _leave(FMT,...)					\
   1163do {							\
   1164	if (unlikely(rxrpc_debug & RXRPC_DEBUG_KLEAVE))	\
   1165		kleave(FMT,##__VA_ARGS__);		\
   1166} while (0)
   1167
   1168#define _debug(FMT,...)					\
   1169do {							\
   1170	if (unlikely(rxrpc_debug & RXRPC_DEBUG_KDEBUG))	\
   1171		kdebug(FMT,##__VA_ARGS__);		\
   1172} while (0)
   1173
   1174#define _proto(FMT,...)					\
   1175do {							\
   1176	if (unlikely(rxrpc_debug & RXRPC_DEBUG_KPROTO))	\
   1177		kproto(FMT,##__VA_ARGS__);		\
   1178} while (0)
   1179
   1180#define _net(FMT,...)					\
   1181do {							\
   1182	if (unlikely(rxrpc_debug & RXRPC_DEBUG_KNET))	\
   1183		knet(FMT,##__VA_ARGS__);		\
   1184} while (0)
   1185
   1186#else
   1187#define _enter(FMT,...)	no_printk("==> %s("FMT")",__func__ ,##__VA_ARGS__)
   1188#define _leave(FMT,...)	no_printk("<== %s()"FMT"",__func__ ,##__VA_ARGS__)
   1189#define _debug(FMT,...)	no_printk("    "FMT ,##__VA_ARGS__)
   1190#define _proto(FMT,...)	no_printk("### "FMT ,##__VA_ARGS__)
   1191#define _net(FMT,...)	no_printk("@@@ "FMT ,##__VA_ARGS__)
   1192#endif
   1193
   1194/*
   1195 * debug assertion checking
   1196 */
   1197#if 1 // defined(__KDEBUGALL)
   1198
   1199#define ASSERT(X)						\
   1200do {								\
   1201	if (unlikely(!(X))) {					\
   1202		pr_err("Assertion failed\n");			\
   1203		BUG();						\
   1204	}							\
   1205} while (0)
   1206
   1207#define ASSERTCMP(X, OP, Y)						\
   1208do {									\
   1209	__typeof__(X) _x = (X);						\
   1210	__typeof__(Y) _y = (__typeof__(X))(Y);				\
   1211	if (unlikely(!(_x OP _y))) {					\
   1212		pr_err("Assertion failed - %lu(0x%lx) %s %lu(0x%lx) is false\n", \
   1213		       (unsigned long)_x, (unsigned long)_x, #OP,	\
   1214		       (unsigned long)_y, (unsigned long)_y);		\
   1215		BUG();							\
   1216	}								\
   1217} while (0)
   1218
   1219#define ASSERTIF(C, X)						\
   1220do {								\
   1221	if (unlikely((C) && !(X))) {				\
   1222		pr_err("Assertion failed\n");			\
   1223		BUG();						\
   1224	}							\
   1225} while (0)
   1226
   1227#define ASSERTIFCMP(C, X, OP, Y)					\
   1228do {									\
   1229	__typeof__(X) _x = (X);						\
   1230	__typeof__(Y) _y = (__typeof__(X))(Y);				\
   1231	if (unlikely((C) && !(_x OP _y))) {				\
   1232		pr_err("Assertion failed - %lu(0x%lx) %s %lu(0x%lx) is false\n", \
   1233		       (unsigned long)_x, (unsigned long)_x, #OP,	\
   1234		       (unsigned long)_y, (unsigned long)_y);		\
   1235		BUG();							\
   1236	}								\
   1237} while (0)
   1238
   1239#else
   1240
   1241#define ASSERT(X)				\
   1242do {						\
   1243} while (0)
   1244
   1245#define ASSERTCMP(X, OP, Y)			\
   1246do {						\
   1247} while (0)
   1248
   1249#define ASSERTIF(C, X)				\
   1250do {						\
   1251} while (0)
   1252
   1253#define ASSERTIFCMP(C, X, OP, Y)		\
   1254do {						\
   1255} while (0)
   1256
   1257#endif /* __KDEBUGALL */