Lines Matching +full:compute +full:- +full:cb
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
34 * struct udp_skb_cb - UDP(-Lite) private variables
37 * @cscov: checksum coverage length (UDP-Lite only)
50 #define UDP_SKB_CB(__skb) ((struct udp_skb_cb *)((__skb)->cb))
53 * struct udp_hslot - UDP hash slot
66 * struct udp_table - UDP table
84 return &table->hash[udp_hashfn(net, num, table->mask)]; in udp_hashslot()
93 return &table->hash2[hash & table->mask]; in udp_hashslot2()
109 * Generic checksumming routines for UDP(-Lite) v4 and v6
113 return (UDP_SKB_CB(skb)->cscov == skb->len ? in __udp_lib_checksum_complete()
115 __skb_checksum_complete_head(skb, UDP_SKB_CB(skb)->cscov)); in __udp_lib_checksum_complete()
125 * udp_csum_outgoing - compute UDPv4/v6 checksum over fragments
127 * @skb: sk_buff containing the filled-in UDP header
134 skb_queue_walk(&sk->sk_write_queue, skb) { in udp_csum_outgoing()
135 csum = csum_add(csum, skb->csum); in udp_csum_outgoing()
143 sizeof(struct udphdr), skb->csum); in udp_csum()
145 for (skb = skb_shinfo(skb)->frag_list; skb; skb = skb->next) { in udp_csum()
146 csum = csum_add(csum, skb->csum); in udp_csum()
162 if (!skb->csum_valid && skb->ip_summed == CHECKSUM_NONE) in udp_csum_pull_header()
163 skb->csum = csum_partial(skb->data, sizeof(struct udphdr), in udp_csum_pull_header()
164 skb->csum); in udp_csum_pull_header()
166 UDP_SKB_CB(skb)->cscov -= sizeof(struct udphdr); in udp_csum_pull_header()
182 skb_queue_head_init(&up->reader_queue); in udp_lib_init_sock()
183 up->forward_threshold = sk->sk_rcvbuf >> 2; in udp_lib_init_sock()
184 set_bit(SOCK_CUSTOM_SOCKOPT, &sk->sk_socket->flags); in udp_lib_init_sock()
187 /* hash routines shared between UDPv4/6 and UDP-Litev4/6 */
221 * Ethernet packet so use that to compute a hash. in udp_flow_src_port()
223 hash = jhash(skb->data, 2 * ETH_ALEN, in udp_flow_src_port()
224 (__force u32) skb->protocol); in udp_flow_src_port()
240 return htons((((u64) hash * (max - min)) >> 32) + min); in udp_flow_src_port()
245 return sk_rmem_alloc_get(sk) - READ_ONCE(udp_sk(sk)->forward_deficit); in udp_rqueue_get()
252 return inet_bound_dev_eq(!!READ_ONCE(net->ipv4.sysctl_udp_l3mdev_accept), in udp_sk_bound_dev_eq()
319 /* UDP uses skb->dev_scratch to cache as much information as possible and avoid
323 /* skb->truesize and the stateless bit are embedded in a single field;
330 /* len and the bit needed to compute skb_csum_unnecessary
332 * skb->len can be stored on 16 bits since the udp header has been
343 return (struct udp_dev_scratch *)&skb->dev_scratch; in udp_skb_scratch()
349 return udp_skb_scratch(skb)->len; in udp_skb_len()
354 return udp_skb_scratch(skb)->csum_unnecessary; in udp_skb_csum_unnecessary()
359 return udp_skb_scratch(skb)->is_linear; in udp_skb_is_linear()
365 return skb->len; in udp_skb_len()
384 n = copy_to_iter(skb->data + off, len, to); in copy_linear_skb()
389 return -EFAULT; in copy_linear_skb()
393 * SNMP statistics for UDP and UDP-Lite
396 if (is_udplite) SNMP_INC_STATS((net)->mib.udplite_statistics, field); \
397 else SNMP_INC_STATS((net)->mib.udp_statistics, field); } while(0)
399 if (is_udplite) __SNMP_INC_STATS((net)->mib.udplite_statistics, field); \
400 else __SNMP_INC_STATS((net)->mib.udp_statistics, field); } while(0)
403 if (is_udplite) __SNMP_INC_STATS((net)->mib.udplite_stats_in6, field);\
404 else __SNMP_INC_STATS((net)->mib.udp_stats_in6, field); \
407 if (__lite) SNMP_INC_STATS((net)->mib.udplite_stats_in6, field); \
408 else SNMP_INC_STATS((net)->mib.udp_stats_in6, field); \
414 ipv4 ? (IS_UDPLITE(sk) ? sock_net(sk)->mib.udplite_statistics : \
415 sock_net(sk)->mib.udp_statistics) : \
416 (IS_UDPLITE(sk) ? sock_net(sk)->mib.udplite_stats_in6 : \
417 sock_net(sk)->mib.udp_stats_in6); \
422 IS_UDPLITE(sk) ? sock_net(sk)->mib.udplite_statistics : \
423 sock_net(sk)->mib.udp_statistics; \
428 __SNMP_INC_STATS(__UDPX_MIB(sk, (sk)->sk_family == AF_INET), field)
484 if (skb->pkt_type == PACKET_LOOPBACK) in udp_rcv_segment()
485 skb->ip_summed = CHECKSUM_PARTIAL; in udp_rcv_segment()
487 /* the GSO CB lays after the UDP one, no need to save and restore any in udp_rcv_segment()
488 * CB fragment in udp_rcv_segment()
492 int segs_nr = skb_shinfo(skb)->gso_segs; in udp_rcv_segment()
494 atomic_add(segs_nr, &sk->sk_drops); in udp_rcv_segment()
506 /* UDP-lite can't land here - no GRO */ in udp_post_segment_fix_csum()
507 WARN_ON_ONCE(UDP_SKB_CB(skb)->partial_cov); in udp_post_segment_fix_csum()
511 * UDP tunnel(xmit) -> veth (segmentation) -> veth (gro) -> UDP tunnel (rx) in udp_post_segment_fix_csum()
520 * Additionally fixup the UDP CB. in udp_post_segment_fix_csum()
522 UDP_SKB_CB(skb)->cscov = skb->len; in udp_post_segment_fix_csum()
523 if (skb->ip_summed == CHECKSUM_NONE && !skb->csum_valid) in udp_post_segment_fix_csum()
524 skb->csum_valid = 1; in udp_post_segment_fix_csum()