xref: /OK3568_Linux_fs/kernel/include/net/af_rxrpc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /* RxRPC kernel service interface definitions
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
5*4882a593Smuzhiyun  * Written by David Howells (dhowells@redhat.com)
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef _NET_RXRPC_H
9*4882a593Smuzhiyun #define _NET_RXRPC_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <linux/rxrpc.h>
12*4882a593Smuzhiyun #include <linux/ktime.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun struct key;
15*4882a593Smuzhiyun struct sock;
16*4882a593Smuzhiyun struct socket;
17*4882a593Smuzhiyun struct rxrpc_call;
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun enum rxrpc_interruptibility {
20*4882a593Smuzhiyun 	RXRPC_INTERRUPTIBLE,	/* Call is interruptible */
21*4882a593Smuzhiyun 	RXRPC_PREINTERRUPTIBLE,	/* Call can be cancelled whilst waiting for a slot */
22*4882a593Smuzhiyun 	RXRPC_UNINTERRUPTIBLE,	/* Call should not be interruptible at all */
23*4882a593Smuzhiyun };
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /*
26*4882a593Smuzhiyun  * Debug ID counter for tracing.
27*4882a593Smuzhiyun  */
28*4882a593Smuzhiyun extern atomic_t rxrpc_debug_id;
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun typedef void (*rxrpc_notify_rx_t)(struct sock *, struct rxrpc_call *,
31*4882a593Smuzhiyun 				  unsigned long);
32*4882a593Smuzhiyun typedef void (*rxrpc_notify_end_tx_t)(struct sock *, struct rxrpc_call *,
33*4882a593Smuzhiyun 				      unsigned long);
34*4882a593Smuzhiyun typedef void (*rxrpc_notify_new_call_t)(struct sock *, struct rxrpc_call *,
35*4882a593Smuzhiyun 					unsigned long);
36*4882a593Smuzhiyun typedef void (*rxrpc_discard_new_call_t)(struct rxrpc_call *, unsigned long);
37*4882a593Smuzhiyun typedef void (*rxrpc_user_attach_call_t)(struct rxrpc_call *, unsigned long);
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun void rxrpc_kernel_new_call_notification(struct socket *,
40*4882a593Smuzhiyun 					rxrpc_notify_new_call_t,
41*4882a593Smuzhiyun 					rxrpc_discard_new_call_t);
42*4882a593Smuzhiyun struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *,
43*4882a593Smuzhiyun 					   struct sockaddr_rxrpc *,
44*4882a593Smuzhiyun 					   struct key *,
45*4882a593Smuzhiyun 					   unsigned long,
46*4882a593Smuzhiyun 					   s64,
47*4882a593Smuzhiyun 					   gfp_t,
48*4882a593Smuzhiyun 					   rxrpc_notify_rx_t,
49*4882a593Smuzhiyun 					   bool,
50*4882a593Smuzhiyun 					   enum rxrpc_interruptibility,
51*4882a593Smuzhiyun 					   unsigned int);
52*4882a593Smuzhiyun int rxrpc_kernel_send_data(struct socket *, struct rxrpc_call *,
53*4882a593Smuzhiyun 			   struct msghdr *, size_t,
54*4882a593Smuzhiyun 			   rxrpc_notify_end_tx_t);
55*4882a593Smuzhiyun int rxrpc_kernel_recv_data(struct socket *, struct rxrpc_call *,
56*4882a593Smuzhiyun 			   struct iov_iter *, bool, u32 *, u16 *);
57*4882a593Smuzhiyun bool rxrpc_kernel_abort_call(struct socket *, struct rxrpc_call *,
58*4882a593Smuzhiyun 			     u32, int, const char *);
59*4882a593Smuzhiyun void rxrpc_kernel_end_call(struct socket *, struct rxrpc_call *);
60*4882a593Smuzhiyun void rxrpc_kernel_get_peer(struct socket *, struct rxrpc_call *,
61*4882a593Smuzhiyun 			   struct sockaddr_rxrpc *);
62*4882a593Smuzhiyun bool rxrpc_kernel_get_srtt(struct socket *, struct rxrpc_call *, u32 *);
63*4882a593Smuzhiyun int rxrpc_kernel_charge_accept(struct socket *, rxrpc_notify_rx_t,
64*4882a593Smuzhiyun 			       rxrpc_user_attach_call_t, unsigned long, gfp_t,
65*4882a593Smuzhiyun 			       unsigned int);
66*4882a593Smuzhiyun void rxrpc_kernel_set_tx_length(struct socket *, struct rxrpc_call *, s64);
67*4882a593Smuzhiyun bool rxrpc_kernel_check_life(const struct socket *, const struct rxrpc_call *);
68*4882a593Smuzhiyun u32 rxrpc_kernel_get_epoch(struct socket *, struct rxrpc_call *);
69*4882a593Smuzhiyun bool rxrpc_kernel_get_reply_time(struct socket *, struct rxrpc_call *,
70*4882a593Smuzhiyun 				 ktime_t *);
71*4882a593Smuzhiyun bool rxrpc_kernel_call_is_complete(struct rxrpc_call *);
72*4882a593Smuzhiyun void rxrpc_kernel_set_max_life(struct socket *, struct rxrpc_call *,
73*4882a593Smuzhiyun 			       unsigned long);
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun int rxrpc_sock_set_min_security_level(struct sock *sk, unsigned int val);
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #endif /* _NET_RXRPC_H */
78