1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * INET An implementation of the TCP/IP protocol suite for the LINUX
4 * operating system. INET is implemented using the BSD Socket
5 * interface as the means of communication with the user level.
7 * Definitions for the UDP protocol.
9 * Version: @(#)udp.h 1.0.2 04/28/93
11 * Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
16 #include <net/inet_sock.h>
17 #include <linux/skbuff.h>
18 #include <net/netns/hash.h>
19 #include <uapi/linux/udp.h>
21 static inline struct udphdr
*udp_hdr(const struct sk_buff
*skb
)
23 return (struct udphdr
*)skb_transport_header(skb
);
26 #define UDP_HTABLE_SIZE_MIN_PERNET 128
27 #define UDP_HTABLE_SIZE_MIN (IS_ENABLED(CONFIG_BASE_SMALL) ? 128 : 256)
28 #define UDP_HTABLE_SIZE_MAX 65536
30 static inline u32
udp_hashfn(const struct net
*net
, u32 num
, u32 mask
)
32 return (num
+ net_hash_mix(net
)) & mask
;
36 UDP_FLAGS_CORK
, /* Cork is required */
37 UDP_FLAGS_NO_CHECK6_TX
, /* Send zero UDP6 checksums on TX? */
38 UDP_FLAGS_NO_CHECK6_RX
, /* Allow zero UDP6 checksums on RX? */
39 UDP_FLAGS_GRO_ENABLED
, /* Request GRO aggregation */
40 UDP_FLAGS_ACCEPT_FRAGLIST
,
42 UDP_FLAGS_ENCAP_ENABLED
, /* This socket enabled encap */
43 UDP_FLAGS_UDPLITE_SEND_CC
, /* set via udplite setsockopt */
44 UDP_FLAGS_UDPLITE_RECV_CC
, /* set via udplite setsockopt */
48 /* inet_sock has to be the first member */
49 struct inet_sock inet
;
50 #define udp_port_hash inet.sk.__sk_common.skc_u16hashes[0]
51 #define udp_portaddr_hash inet.sk.__sk_common.skc_u16hashes[1]
52 #define udp_portaddr_node inet.sk.__sk_common.skc_portaddr_node
54 unsigned long udp_flags
;
56 int pending
; /* Any pending frames ? */
57 __u8 encap_type
; /* Is this an Encapsulation socket? */
59 #if !IS_ENABLED(CONFIG_BASE_SMALL)
60 /* For UDP 4-tuple hash */
62 struct hlist_nulls_node udp_lrpa_node
;
66 * Following member retains the information to create a UDP header
67 * when the socket is uncorked.
69 __u16 len
; /* total length of pending frames */
72 * Fields specific to UDP-Lite.
77 * For encapsulation sockets.
79 int (*encap_rcv
)(struct sock
*sk
, struct sk_buff
*skb
);
80 void (*encap_err_rcv
)(struct sock
*sk
, struct sk_buff
*skb
, int err
,
81 __be16 port
, u32 info
, u8
*payload
);
82 int (*encap_err_lookup
)(struct sock
*sk
, struct sk_buff
*skb
);
83 void (*encap_destroy
)(struct sock
*sk
);
85 /* GRO functions for UDP socket */
86 struct sk_buff
* (*gro_receive
)(struct sock
*sk
,
87 struct list_head
*head
,
89 int (*gro_complete
)(struct sock
*sk
,
93 /* udp_recvmsg try to use this before splicing sk_receive_queue */
94 struct sk_buff_head reader_queue ____cacheline_aligned_in_smp
;
96 /* This field is dirtied by udp_recvmsg() */
99 /* This fields follows rcvbuf value, and is touched by udp_recvmsg */
100 int forward_threshold
;
102 /* Cache friendly copy of sk->sk_peek_off >= 0 */
103 bool peeking_with_offset
;
106 #define udp_test_bit(nr, sk) \
107 test_bit(UDP_FLAGS_##nr, &udp_sk(sk)->udp_flags)
108 #define udp_set_bit(nr, sk) \
109 set_bit(UDP_FLAGS_##nr, &udp_sk(sk)->udp_flags)
110 #define udp_test_and_set_bit(nr, sk) \
111 test_and_set_bit(UDP_FLAGS_##nr, &udp_sk(sk)->udp_flags)
112 #define udp_clear_bit(nr, sk) \
113 clear_bit(UDP_FLAGS_##nr, &udp_sk(sk)->udp_flags)
114 #define udp_assign_bit(nr, sk, val) \
115 assign_bit(UDP_FLAGS_##nr, &udp_sk(sk)->udp_flags, val)
117 #define UDP_MAX_SEGMENTS (1 << 7UL)
119 #define udp_sk(ptr) container_of_const(ptr, struct udp_sock, inet.sk)
121 static inline int udp_set_peek_off(struct sock
*sk
, int val
)
123 sk_set_peek_off(sk
, val
);
124 WRITE_ONCE(udp_sk(sk
)->peeking_with_offset
, val
>= 0);
128 static inline void udp_set_no_check6_tx(struct sock
*sk
, bool val
)
130 udp_assign_bit(NO_CHECK6_TX
, sk
, val
);
133 static inline void udp_set_no_check6_rx(struct sock
*sk
, bool val
)
135 udp_assign_bit(NO_CHECK6_RX
, sk
, val
);
138 static inline bool udp_get_no_check6_tx(const struct sock
*sk
)
140 return udp_test_bit(NO_CHECK6_TX
, sk
);
143 static inline bool udp_get_no_check6_rx(const struct sock
*sk
)
145 return udp_test_bit(NO_CHECK6_RX
, sk
);
148 static inline void udp_cmsg_recv(struct msghdr
*msg
, struct sock
*sk
,
153 if (skb_shinfo(skb
)->gso_type
& SKB_GSO_UDP_L4
) {
154 gso_size
= skb_shinfo(skb
)->gso_size
;
155 put_cmsg(msg
, SOL_UDP
, UDP_GRO
, sizeof(gso_size
), &gso_size
);
159 DECLARE_STATIC_KEY_FALSE(udp_encap_needed_key
);
160 #if IS_ENABLED(CONFIG_IPV6)
161 DECLARE_STATIC_KEY_FALSE(udpv6_encap_needed_key
);
164 static inline bool udp_encap_needed(void)
166 if (static_branch_unlikely(&udp_encap_needed_key
))
169 #if IS_ENABLED(CONFIG_IPV6)
170 if (static_branch_unlikely(&udpv6_encap_needed_key
))
177 static inline bool udp_unexpected_gso(struct sock
*sk
, struct sk_buff
*skb
)
179 if (!skb_is_gso(skb
))
182 if (skb_shinfo(skb
)->gso_type
& SKB_GSO_UDP_L4
&&
183 !udp_test_bit(ACCEPT_L4
, sk
))
186 if (skb_shinfo(skb
)->gso_type
& SKB_GSO_FRAGLIST
&&
187 !udp_test_bit(ACCEPT_FRAGLIST
, sk
))
190 /* GSO packets lacking the SKB_GSO_UDP_TUNNEL/_CSUM bits might still
191 * land in a tunnel as the socket check in udp_gro_receive cannot be
194 if (udp_encap_needed() &&
195 READ_ONCE(udp_sk(sk
)->encap_rcv
) &&
196 !(skb_shinfo(skb
)->gso_type
&
197 (SKB_GSO_UDP_TUNNEL
| SKB_GSO_UDP_TUNNEL_CSUM
)))
203 static inline void udp_allow_gso(struct sock
*sk
)
205 udp_set_bit(ACCEPT_L4
, sk
);
206 udp_set_bit(ACCEPT_FRAGLIST
, sk
);
209 #define udp_portaddr_for_each_entry(__sk, list) \
210 hlist_for_each_entry(__sk, list, __sk_common.skc_portaddr_node)
212 #define udp_portaddr_for_each_entry_rcu(__sk, list) \
213 hlist_for_each_entry_rcu(__sk, list, __sk_common.skc_portaddr_node)
215 #if !IS_ENABLED(CONFIG_BASE_SMALL)
216 #define udp_lrpa_for_each_entry_rcu(__up, node, list) \
217 hlist_nulls_for_each_entry_rcu(__up, node, list, udp_lrpa_node)
220 #define IS_UDPLITE(__sk) (__sk->sk_protocol == IPPROTO_UDPLITE)
222 #endif /* _LINUX_UDP_H */