| 1 |
|
| 2 | #ifndef _INET_COMMON_H
|
| 3 | #define _INET_COMMON_H
|
| 4 |
|
| 5 | #include <linux/indirect_call_wrapper.h>
|
| 6 | #include <linux/net.h>
|
| 7 | #include <linux/netdev_features.h>
|
| 8 | #include <linux/types.h>
|
| 9 | #include <net/sock.h>
|
| 10 |
|
| 11 | extern const struct proto_ops inet_stream_ops;
|
| 12 | extern const struct proto_ops inet_dgram_ops;
|
| 13 |
|
| 14 | |
| 15 | * INET4 prototypes used by INET6
|
| 16 |
|
| 17 |
|
| 18 | struct msghdr;
|
| 19 | struct net;
|
| 20 | struct page;
|
| 21 | struct sock;
|
| 22 | struct socket;
|
| 23 |
|
| 24 | int inet_release(struct socket *sock);
|
| 25 | int inet_stream_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
|
| 26 | int addr_len, int flags);
|
| 27 | int __inet_stream_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
|
| 28 | int addr_len, int flags, int is_sendmsg);
|
| 29 | int inet_dgram_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
|
| 30 | int addr_len, int flags);
|
| 31 | int inet_accept(struct socket *sock, struct socket *newsock,
|
| 32 | struct proto_accept_arg *arg);
|
| 33 | void __inet_accept(struct socket *sock, struct socket *newsock,
|
| 34 | struct sock *newsk);
|
| 35 | int inet_send_prepare(struct sock *sk);
|
| 36 | int inet_sendmsg(struct socket *sock, struct msghdr *msg, size_t size);
|
| 37 | void inet_splice_eof(struct socket *sock);
|
| 38 | int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
|
| 39 | int flags);
|
| 40 | int inet_shutdown(struct socket *sock, int how);
|
| 41 | int inet_listen(struct socket *sock, int backlog);
|
| 42 | int __inet_listen_sk(struct sock *sk, int backlog);
|
| 43 | void inet_sock_destruct(struct sock *sk);
|
| 44 | int inet_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len);
|
| 45 | int inet_bind_sk(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len);
|
| 46 |
|
| 47 | #define BIND_FORCE_ADDRESS_NO_PORT (1 << 0)
|
| 48 |
|
| 49 | #define BIND_WITH_LOCK (1 << 1)
|
| 50 |
|
| 51 | #define BIND_FROM_BPF (1 << 2)
|
| 52 |
|
| 53 | #define BIND_NO_CAP_NET_BIND_SERVICE (1 << 3)
|
| 54 | int __inet_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len,
|
| 55 | u32 flags);
|
| 56 | int inet_getname(struct socket *sock, struct sockaddr *uaddr,
|
| 57 | int peer);
|
| 58 | int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
|
| 59 | int inet_ctl_sock_create(struct sock **sk, unsigned short family,
|
| 60 | unsigned short type, unsigned char protocol,
|
| 61 | struct net *net);
|
| 62 | int inet_recv_error(struct sock *sk, struct msghdr *msg, int len);
|
| 63 |
|
| 64 | struct sk_buff *inet_gro_receive(struct list_head *head, struct sk_buff *skb);
|
| 65 | int inet_gro_complete(struct sk_buff *skb, int nhoff);
|
| 66 | struct sk_buff *inet_gso_segment(struct sk_buff *skb,
|
| 67 | netdev_features_t features);
|
| 68 |
|
| 69 | static inline void inet_ctl_sock_destroy(struct sock *sk)
|
| 70 | {
|
| 71 | if (sk)
|
| 72 | sock_release(sk->sk_socket);
|
| 73 | }
|
| 74 |
|
| 75 | #define indirect_call_gro_receive(f2, f1, cb, head, skb) \
|
| 76 | ({ \
|
| 77 | unlikely(gro_recursion_inc_test(skb)) ? \
|
| 78 | NAPI_GRO_CB(skb)->flush |= 1, NULL : \
|
| 79 | INDIRECT_CALL_2(cb, f2, f1, head, skb); \
|
| 80 | })
|
| 81 |
|
| 82 | #endif
|