Lines Matching +full:foo +full:- +full:over +full:- +full:udp

1 /* SPDX-License-Identifier: GPL-2.0-or-later */
11 #include <net/udp.h>
16 /* Virtual address of skb_shinfo(skb)->frags[0].page + offset. */
32 /* This indicates where we are processing relative to skb->data. */
35 /* This is non-zero if the packet cannot be merged with the new skb. */
44 /* Used in ipv6_gro_receive() and foo-over-udp and esp-in-udp */
56 /* This is non-zero if the packet may be of the same flow. */
71 /* Used in foo-over-udp, set in udp[46]_gro_receive */
91 #define NAPI_GRO_CB(skb) ((struct napi_gro_cb *)(skb)->cb)
96 return ++NAPI_GRO_CB(skb)->recursion_counter == GRO_RECURSION_LIMIT; in gro_recursion_inc_test()
105 NAPI_GRO_CB(skb)->flush |= 1; in call_gro_receive()
120 NAPI_GRO_CB(skb)->flush |= 1; in call_gro_receive_sk()
129 return NAPI_GRO_CB(skb)->data_offset; in skb_gro_offset()
134 return skb->len - NAPI_GRO_CB(skb)->data_offset; in skb_gro_len()
139 NAPI_GRO_CB(skb)->data_offset += len; in skb_gro_pull()
145 return NAPI_GRO_CB(skb)->frag0 + offset; in skb_gro_header_fast()
150 return NAPI_GRO_CB(skb)->frag0_len < hlen; in skb_gro_header_hard()
155 NAPI_GRO_CB(skb)->frag0 = NULL; in skb_gro_frag0_invalidate()
156 NAPI_GRO_CB(skb)->frag0_len = 0; in skb_gro_frag0_invalidate()
166 return skb->data + offset; in skb_gro_header_slow()
182 return (NAPI_GRO_CB(skb)->frag0 ?: skb->data) + in skb_gro_network_header()
190 return csum_tcpudp_nofold(iph->saddr, iph->daddr, in inet_gro_compute_pseudo()
197 if (NAPI_GRO_CB(skb)->csum_valid) in skb_gro_postpull_rcsum()
198 NAPI_GRO_CB(skb)->csum = wsum_negate(csum_partial(start, len, in skb_gro_postpull_rcsum()
199 wsum_negate(NAPI_GRO_CB(skb)->csum))); in skb_gro_postpull_rcsum()
211 return (NAPI_GRO_CB(skb)->gro_remcsum_start == skb_gro_offset(skb)); in skb_at_gro_remcsum_start()
218 return ((skb->ip_summed != CHECKSUM_PARTIAL || in __skb_gro_checksum_validate_needed()
222 NAPI_GRO_CB(skb)->csum_cnt == 0 && in __skb_gro_checksum_validate_needed()
229 if (NAPI_GRO_CB(skb)->csum_valid && in __skb_gro_checksum_validate_complete()
230 !csum_fold(csum_add(psum, NAPI_GRO_CB(skb)->csum))) in __skb_gro_checksum_validate_complete()
233 NAPI_GRO_CB(skb)->csum = psum; in __skb_gro_checksum_validate_complete()
240 if (NAPI_GRO_CB(skb)->csum_cnt > 0) { in skb_gro_incr_csum_unnecessary()
242 NAPI_GRO_CB(skb)->csum_cnt--; in skb_gro_incr_csum_unnecessary()
276 return (NAPI_GRO_CB(skb)->csum_cnt == 0 && in __skb_gro_checksum_convert_check()
277 !NAPI_GRO_CB(skb)->csum_valid); in __skb_gro_checksum_convert_check()
283 NAPI_GRO_CB(skb)->csum = ~pseudo; in __skb_gro_checksum_convert()
284 NAPI_GRO_CB(skb)->csum_valid = 1; in __skb_gro_checksum_convert()
301 grc->offset = 0; in skb_gro_remcsum_init()
302 grc->delta = 0; in skb_gro_remcsum_init()
314 BUG_ON(!NAPI_GRO_CB(skb)->csum_valid); in skb_gro_remcsum_process()
317 NAPI_GRO_CB(skb)->gro_remcsum_start = off + hdrlen + start; in skb_gro_remcsum_process()
325 delta = remcsum_adjust(ptr + hdrlen, NAPI_GRO_CB(skb)->csum, in skb_gro_remcsum_process()
328 /* Adjust skb->csum since we changed the packet */ in skb_gro_remcsum_process()
329 NAPI_GRO_CB(skb)->csum = csum_add(NAPI_GRO_CB(skb)->csum, delta); in skb_gro_remcsum_process()
331 grc->offset = off + hdrlen + offset; in skb_gro_remcsum_process()
332 grc->delta = delta; in skb_gro_remcsum_process()
341 size_t plen = grc->offset + sizeof(u16); in skb_gro_remcsum_cleanup()
343 if (!grc->delta) in skb_gro_remcsum_cleanup()
346 ptr = skb_gro_header(skb, plen, grc->offset); in skb_gro_remcsum_cleanup()
350 remcsum_unadjust((__sum16 *)ptr, grc->delta); in skb_gro_remcsum_cleanup()
356 if (PTR_ERR(pp) != -EINPROGRESS) in skb_gro_flush_final()
357 NAPI_GRO_CB(skb)->flush |= flush; in skb_gro_flush_final()
364 if (PTR_ERR(pp) != -EINPROGRESS) { in skb_gro_flush_final_remcsum()
365 NAPI_GRO_CB(skb)->flush |= flush; in skb_gro_flush_final_remcsum()
367 skb->remcsum_offload = 0; in skb_gro_flush_final_remcsum()
373 NAPI_GRO_CB(skb)->flush |= flush; in skb_gro_flush_final()
380 NAPI_GRO_CB(skb)->flush |= flush; in skb_gro_flush_final_remcsum()
382 skb->remcsum_offload = 0; in skb_gro_flush_final_remcsum()
404 NAPI_GRO_CB(skb)->flush |= 1, NULL : \
428 return ~csum_unfold(csum_ipv6_magic(&iph->saddr, &iph->daddr, in ip6_gro_compute_pseudo()
437 if (!napi->rx_count) in gro_normal_list()
439 netif_receive_skb_list_internal(&napi->rx_list); in gro_normal_list()
440 INIT_LIST_HEAD(&napi->rx_list); in gro_normal_list()
441 napi->rx_count = 0; in gro_normal_list()
449 list_add_tail(&skb->list, &napi->rx_list); in gro_normal_one()
450 napi->rx_count += segs; in gro_normal_one()
451 if (napi->rx_count >= READ_ONCE(gro_normal_batch)) in gro_normal_one()
458 * The caller must verify skb_valid_dst(skb) is false and skb->dev is initialized.
463 *iif = inet_iif(skb) ?: skb->dev->ifindex; in inet_get_iif_sdif()
467 if (netif_is_l3_slave(skb->dev)) { in inet_get_iif_sdif()
468 struct net_device *master = netdev_master_upper_dev_get_rcu(skb->dev); in inet_get_iif_sdif()
471 *iif = master ? master->ifindex : 0; in inet_get_iif_sdif()
479 * The caller must verify skb_valid_dst(skb) is false and skb->dev is initialized.
484 /* using skb->dev->ifindex because skb_dst(skb) is not initialized */ in inet6_get_iif_sdif()
485 *iif = skb->dev->ifindex; in inet6_get_iif_sdif()
489 if (netif_is_l3_slave(skb->dev)) { in inet6_get_iif_sdif()
490 struct net_device *master = netdev_master_upper_dev_get_rcu(skb->dev); in inet6_get_iif_sdif()
493 *iif = master ? master->ifindex : 0; in inet6_get_iif_sdif()