25 #include <linux/list.h>
31 #include <linux/ipv6.h>
33 #include <linux/poll.h>
45 #if IS_ENABLED(CONFIG_IPV6)
52 #define UDP_SKB_CB(__skb) ((struct udp_skb_cb *)((__skb)->cb))
84 struct net *
net,
unsigned int num)
86 return &table->
hash[udp_hashfn(net, num, table->
mask)];
99 #define UDP_CSUM_NOXMIT 1
102 #define UDP_CSUM_NORCV 2
105 #define UDP_CSUM_DEFAULT 0
126 static inline int udp_lib_checksum_complete(
struct sk_buff *skb)
128 return !skb_csum_unnecessary(skb) &&
129 __udp_lib_checksum_complete(skb);
141 sizeof(
struct udphdr), 0);
143 csum = csum_add(csum, skb->
csum);
153 for (skb = skb_shinfo(skb)->frag_list;
skb; skb = skb->
next) {
154 csum = csum_add(csum, skb->
csum);
160 static inline void udp_lib_hash(
struct sock *sk)
168 static inline void udp_lib_close(
struct sock *sk,
long timeout)
174 int (*)(
const struct sock *,
const struct sock *),
175 unsigned int hash2_nulladdr);
179 int (*saddr_cmp)(
const struct sock *,
180 const struct sock *));
191 char __user *optval,
int __user *optlen);
193 char __user *optval,
unsigned int optlen,
194 int (*push_pending_frames)(
struct sock *));
211 #define UDP_INC_STATS_USER(net, field, is_udplite) do { \
212 if (is_udplite) SNMP_INC_STATS_USER((net)->mib.udplite_statistics, field); \
213 else SNMP_INC_STATS_USER((net)->mib.udp_statistics, field); } while(0)
214 #define UDP_INC_STATS_BH(net, field, is_udplite) do { \
215 if (is_udplite) SNMP_INC_STATS_BH((net)->mib.udplite_statistics, field); \
216 else SNMP_INC_STATS_BH((net)->mib.udp_statistics, field); } while(0)
218 #define UDP6_INC_STATS_BH(net, field, is_udplite) do { \
219 if (is_udplite) SNMP_INC_STATS_BH((net)->mib.udplite_stats_in6, field);\
220 else SNMP_INC_STATS_BH((net)->mib.udp_stats_in6, field); \
222 #define UDP6_INC_STATS_USER(net, field, __lite) do { \
223 if (__lite) SNMP_INC_STATS_USER((net)->mib.udplite_stats_in6, field); \
224 else SNMP_INC_STATS_USER((net)->mib.udp_stats_in6, field); \
227 #if IS_ENABLED(CONFIG_IPV6)
228 #define UDPX_INC_STATS_BH(sk, field) \
230 if ((sk)->sk_family == AF_INET) \
231 UDP_INC_STATS_BH(sock_net(sk), field, 0); \
233 UDP6_INC_STATS_BH(sock_net(sk), field, 0); \
236 #define UDPX_INC_STATS_BH(sk, field) UDP_INC_STATS_BH(sock_net(sk), field, 0)
257 #ifdef CONFIG_PROC_FS
261 extern int udp4_proc_init(
void);
262 extern void udp4_proc_exit(
void);
271 #if IS_ENABLED(CONFIG_IPV6)