Lines Matching +full:compute +full:- +full:cb
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
33 * struct udp_skb_cb - UDP(-Lite) private variables
36 * @cscov: checksum coverage length (UDP-Lite only)
49 #define UDP_SKB_CB(__skb) ((struct udp_skb_cb *)((__skb)->cb))
52 * struct udp_hslot - UDP hash slot
65 * struct udp_table - UDP table
83 return &table->hash[udp_hashfn(net, num, table->mask)]; in udp_hashslot()
92 return &table->hash2[hash & table->mask]; in udp_hashslot2()
107 * Generic checksumming routines for UDP(-Lite) v4 and v6
111 return (UDP_SKB_CB(skb)->cscov == skb->len ? in __udp_lib_checksum_complete()
113 __skb_checksum_complete_head(skb, UDP_SKB_CB(skb)->cscov)); in __udp_lib_checksum_complete()
123 * udp_csum_outgoing - compute UDPv4/v6 checksum over fragments
125 * @skb: sk_buff containing the filled-in UDP header
132 skb_queue_walk(&sk->sk_write_queue, skb) { in udp_csum_outgoing()
133 csum = csum_add(csum, skb->csum); in udp_csum_outgoing()
141 sizeof(struct udphdr), skb->csum); in udp_csum()
143 for (skb = skb_shinfo(skb)->frag_list; skb; skb = skb->next) { in udp_csum()
144 csum = csum_add(csum, skb->csum); in udp_csum()
160 if (!skb->csum_valid && skb->ip_summed == CHECKSUM_NONE) in udp_csum_pull_header()
161 skb->csum = csum_partial(skb->data, sizeof(struct udphdr), in udp_csum_pull_header()
162 skb->csum); in udp_csum_pull_header()
164 UDP_SKB_CB(skb)->cscov -= sizeof(struct udphdr); in udp_csum_pull_header()
198 /* hash routines shared between UDPv4/6 and UDP-Litev4/6 */
232 * Ethernet packet so use that to compute a hash. in udp_flow_src_port()
234 hash = jhash(skb->data, 2 * ETH_ALEN, in udp_flow_src_port()
235 (__force u32) skb->protocol); in udp_flow_src_port()
251 return htons((((u64) hash * (max - min)) >> 32) + min); in udp_flow_src_port()
256 return sk_rmem_alloc_get(sk) - READ_ONCE(udp_sk(sk)->forward_deficit); in udp_rqueue_get()
263 return inet_bound_dev_eq(!!READ_ONCE(net->ipv4.sysctl_udp_l3mdev_accept), in udp_sk_bound_dev_eq()
331 /* UDP uses skb->dev_scratch to cache as much information as possible and avoid
335 /* skb->truesize and the stateless bit are embedded in a single field;
342 /* len and the bit needed to compute skb_csum_unnecessary
344 * skb->len can be stored on 16 bits since the udp header has been
355 return (struct udp_dev_scratch *)&skb->dev_scratch; in udp_skb_scratch()
361 return udp_skb_scratch(skb)->len; in udp_skb_len()
366 return udp_skb_scratch(skb)->csum_unnecessary; in udp_skb_csum_unnecessary()
371 return udp_skb_scratch(skb)->is_linear; in udp_skb_is_linear()
377 return skb->len; in udp_skb_len()
396 n = copy_to_iter(skb->data + off, len, to); in copy_linear_skb()
401 return -EFAULT; in copy_linear_skb()
405 * SNMP statistics for UDP and UDP-Lite
408 if (is_udplite) SNMP_INC_STATS((net)->mib.udplite_statistics, field); \
409 else SNMP_INC_STATS((net)->mib.udp_statistics, field); } while(0)
411 if (is_udplite) __SNMP_INC_STATS((net)->mib.udplite_statistics, field); \
412 else __SNMP_INC_STATS((net)->mib.udp_statistics, field); } while(0)
415 if (is_udplite) __SNMP_INC_STATS((net)->mib.udplite_stats_in6, field);\
416 else __SNMP_INC_STATS((net)->mib.udp_stats_in6, field); \
419 if (__lite) SNMP_INC_STATS((net)->mib.udplite_stats_in6, field); \
420 else SNMP_INC_STATS((net)->mib.udp_stats_in6, field); \
426 ipv4 ? (IS_UDPLITE(sk) ? sock_net(sk)->mib.udplite_statistics : \
427 sock_net(sk)->mib.udp_statistics) : \
428 (IS_UDPLITE(sk) ? sock_net(sk)->mib.udplite_stats_in6 : \
429 sock_net(sk)->mib.udp_stats_in6); \
434 IS_UDPLITE(sk) ? sock_net(sk)->mib.udplite_statistics : \
435 sock_net(sk)->mib.udp_statistics; \
440 __SNMP_INC_STATS(__UDPX_MIB(sk, (sk)->sk_family == AF_INET), field)
497 if (skb->pkt_type == PACKET_LOOPBACK) in udp_rcv_segment()
498 skb->ip_summed = CHECKSUM_PARTIAL; in udp_rcv_segment()
500 /* the GSO CB lays after the UDP one, no need to save and restore any in udp_rcv_segment()
501 * CB fragment in udp_rcv_segment()
505 int segs_nr = skb_shinfo(skb)->gso_segs; in udp_rcv_segment()
507 atomic_add(segs_nr, &sk->sk_drops); in udp_rcv_segment()