net: adopt skb_network_offset() and similar helpers
authorEric Dumazet <edumazet@google.com>
Thu, 29 Feb 2024 09:39:07 +0000 (09:39 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 4 Mar 2024 08:47:06 +0000 (08:47 +0000)
This is a cleanup patch, making code a bit more concise.

1) Use skb_network_offset(skb) in place of
       (skb_network_header(skb) - skb->data)

2) Use -skb_network_offset(skb) in place of
       (skb->data - skb_network_header(skb))

3) Use skb_transport_offset(skb) in place of
       (skb_transport_header(skb) - skb->data)

4) Use skb_inner_transport_offset(skb) in place of
       (skb_inner_transport_header(skb) - skb->data)

Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Edward Cree <ecree.xilinx@gmail.com> # for sfc
Signed-off-by: David S. Miller <davem@davemloft.net>
24 files changed:
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/iavf/iavf_main.c
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igbvf/netdev.c
drivers/net/ethernet/intel/igc/igc_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
drivers/net/ethernet/qlogic/qede/qede_fp.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
drivers/net/ethernet/sfc/siena/tx_common.c
drivers/net/ethernet/sfc/tx_common.c
drivers/net/ethernet/sfc/tx_tso.c
drivers/net/ethernet/sun/sunvnet_common.c
drivers/net/ethernet/wangxun/libwx/wx_lib.c
drivers/net/wireguard/receive.c
kernel/bpf/cgroup.c
net/ipv4/raw.c
net/ipv4/xfrm4_input.c
net/ipv6/exthdrs.c
net/ipv6/netfilter/nf_conntrack_reasm.c
net/ipv6/reassembly.c
net/ipv6/xfrm6_input.c

index 528441b..adcee8d 100644 (file)
@@ -3538,7 +3538,7 @@ static u8 bnx2x_set_pbd_csum_enc(struct bnx2x *bp, struct sk_buff *skb,
                                 u32 *parsing_data, u32 xmit_type)
 {
        *parsing_data |=
-               ((((u8 *)skb_inner_transport_header(skb) - skb->data) >> 1) <<
+               ((skb_inner_transport_offset(skb) >> 1) <<
                ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT) &
                ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W;
 
@@ -3570,7 +3570,7 @@ static u8 bnx2x_set_pbd_csum_e2(struct bnx2x *bp, struct sk_buff *skb,
                                u32 *parsing_data, u32 xmit_type)
 {
        *parsing_data |=
-               ((((u8 *)skb_transport_header(skb) - skb->data) >> 1) <<
+               ((skb_transport_offset(skb) >> 1) <<
                ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT) &
                ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W;
 
@@ -3613,7 +3613,7 @@ static u8 bnx2x_set_pbd_csum(struct bnx2x *bp, struct sk_buff *skb,
                             struct eth_tx_parse_bd_e1x *pbd,
                             u32 xmit_type)
 {
-       u8 hlen = (skb_network_header(skb) - skb->data) >> 1;
+       u8 hlen = skb_network_offset(skb) >> 1;
 
        /* for now NS flag is not used in Linux */
        pbd->global_data =
@@ -3667,8 +3667,7 @@ static void bnx2x_update_pbds_gso_enc(struct sk_buff *skb,
        u8 outerip_off, outerip_len = 0;
 
        /* from outer IP to transport */
-       hlen_w = (skb_inner_transport_header(skb) -
-                 skb_network_header(skb)) >> 1;
+       hlen_w = skb_inner_transport_offset(skb) >> 1;
 
        /* transport len */
        hlen_w += inner_tcp_hdrlen(skb) >> 1;
@@ -3714,7 +3713,7 @@ static void bnx2x_update_pbds_gso_enc(struct sk_buff *skb,
                                        0, IPPROTO_TCP, 0));
        }
 
-       outerip_off = (skb_network_header(skb) - skb->data) >> 1;
+       outerip_off = (skb_network_offset(skb)) >> 1;
 
        *global_data |=
                outerip_off |
index f1695c8..19668a8 100644 (file)
@@ -2473,9 +2473,9 @@ static netdev_features_t hns3_features_check(struct sk_buff *skb,
                return features;
 
        if (skb->encapsulation)
-               len = skb_inner_transport_header(skb) - skb->data;
+               len = skb_inner_transport_offset(skb);
        else
-               len = skb_transport_header(skb) - skb->data;
+               len = skb_transport_offset(skb);
 
        /* Assume L4 is 60 byte as TCP is the only protocol with a
         * a flexible value, and it's max len is 60 bytes.
index f12092c..a67b138 100644 (file)
@@ -13208,7 +13208,7 @@ static netdev_features_t i40e_features_check(struct sk_buff *skb,
                features &= ~NETIF_F_GSO_MASK;
 
        /* MACLEN can support at most 63 words */
-       len = skb_network_header(skb) - skb->data;
+       len = skb_network_offset(skb);
        if (len & ~(63 * 2))
                goto out_err;
 
index 335fd13..245c458 100644 (file)
@@ -4423,7 +4423,7 @@ static netdev_features_t iavf_features_check(struct sk_buff *skb,
                features &= ~NETIF_F_GSO_MASK;
 
        /* MACLEN can support at most 63 words */
-       len = skb_network_header(skb) - skb->data;
+       len = skb_network_offset(skb);
        if (len & ~(63 * 2))
                goto out_err;
 
index cebb44f..b355565 100644 (file)
@@ -2538,7 +2538,7 @@ igb_features_check(struct sk_buff *skb, struct net_device *dev,
        unsigned int network_hdr_len, mac_hdr_len;
 
        /* Make certain the headers can be described by a context descriptor */
-       mac_hdr_len = skb_network_header(skb) - skb->data;
+       mac_hdr_len = skb_network_offset(skb);
        if (unlikely(mac_hdr_len > IGB_MAX_MAC_HDR_LEN))
                return features & ~(NETIF_F_HW_CSUM |
                                    NETIF_F_SCTP_CRC |
index a4d4f00..b0cf310 100644 (file)
@@ -2655,7 +2655,7 @@ igbvf_features_check(struct sk_buff *skb, struct net_device *dev,
        unsigned int network_hdr_len, mac_hdr_len;
 
        /* Make certain the headers can be described by a context descriptor */
-       mac_hdr_len = skb_network_header(skb) - skb->data;
+       mac_hdr_len = skb_network_offset(skb);
        if (unlikely(mac_hdr_len > IGBVF_MAX_MAC_HDR_LEN))
                return features & ~(NETIF_F_HW_CSUM |
                                    NETIF_F_SCTP_CRC |
index 3af52d2..34820f6 100644 (file)
@@ -5277,7 +5277,7 @@ igc_features_check(struct sk_buff *skb, struct net_device *dev,
        unsigned int network_hdr_len, mac_hdr_len;
 
        /* Make certain the headers can be described by a context descriptor */
-       mac_hdr_len = skb_network_header(skb) - skb->data;
+       mac_hdr_len = skb_network_offset(skb);
        if (unlikely(mac_hdr_len > IGC_MAX_MAC_HDR_LEN))
                return features & ~(NETIF_F_HW_CSUM |
                                    NETIF_F_SCTP_CRC |
index e23c361..1e93edc 100644 (file)
@@ -10205,7 +10205,7 @@ ixgbe_features_check(struct sk_buff *skb, struct net_device *dev,
        unsigned int network_hdr_len, mac_hdr_len;
 
        /* Make certain the headers can be described by a context descriptor */
-       mac_hdr_len = skb_network_header(skb) - skb->data;
+       mac_hdr_len = skb_network_offset(skb);
        if (unlikely(mac_hdr_len > IXGBE_MAX_MAC_HDR_LEN))
                return features & ~(NETIF_F_HW_CSUM |
                                    NETIF_F_SCTP_CRC |
index a44e4bd..9c96001 100644 (file)
@@ -4413,7 +4413,7 @@ ixgbevf_features_check(struct sk_buff *skb, struct net_device *dev,
        unsigned int network_hdr_len, mac_hdr_len;
 
        /* Make certain the headers can be described by a context descriptor */
-       mac_hdr_len = skb_network_header(skb) - skb->data;
+       mac_hdr_len = skb_network_offset(skb);
        if (unlikely(mac_hdr_len > IXGBEVF_MAX_MAC_HDR_LEN))
                return features & ~(NETIF_F_HW_CSUM |
                                    NETIF_F_SCTP_CRC |
index cb1746b..847fa62 100644 (file)
@@ -215,7 +215,7 @@ static void qede_set_params_for_ipv6_ext(struct sk_buff *skb,
 
        bd2_bits1 |= (1 << ETH_TX_DATA_2ND_BD_IPV6_EXT_SHIFT);
 
-       bd2_bits2 |= ((((u8 *)skb_transport_header(skb) - skb->data) >> 1) &
+       bd2_bits2 |= ((skb_transport_offset(skb) >> 1) &
                     ETH_TX_DATA_2ND_BD_L4_HDR_START_OFFSET_W_MASK)
                    << ETH_TX_DATA_2ND_BD_L4_HDR_START_OFFSET_W_SHIFT;
 
index 41894d1..b9dc007 100644 (file)
@@ -446,8 +446,7 @@ static int qlcnic_tx_encap_pkt(struct qlcnic_adapter *adapter,
        encap_descr |= skb_network_offset(skb) << 10;
        first_desc->encap_descr = cpu_to_le16(encap_descr);
 
-       first_desc->tcp_hdr_offset = skb_inner_transport_header(skb) -
-                                    skb->data;
+       first_desc->tcp_hdr_offset = skb_inner_transport_offset(skb);
        first_desc->ip_hdr_offset = skb_inner_network_offset(skb);
 
        qlcnic_set_tx_flags_opcode(first_desc, flags, opcode);
index a7a9ab3..71f9b5e 100644 (file)
@@ -317,11 +317,10 @@ static int efx_tx_tso_header_length(struct sk_buff *skb)
        size_t header_len;
 
        if (skb->encapsulation)
-               header_len = skb_inner_transport_header(skb) -
-                               skb->data +
+               header_len = skb_inner_transport_offset(skb) +
                                (inner_tcp_hdr(skb)->doff << 2u);
        else
-               header_len = skb_transport_header(skb) - skb->data +
+               header_len = skb_transport_offset(skb) +
                                (tcp_hdr(skb)->doff << 2u);
        return header_len;
 }
index 9f2393d..2adb132 100644 (file)
@@ -336,11 +336,10 @@ int efx_tx_tso_header_length(struct sk_buff *skb)
        size_t header_len;
 
        if (skb->encapsulation)
-               header_len = skb_inner_transport_header(skb) -
-                               skb->data +
+               header_len = skb_inner_transport_offset(skb) +
                                (inner_tcp_hdr(skb)->doff << 2u);
        else
-               header_len = skb_transport_header(skb) - skb->data +
+               header_len = skb_transport_offset(skb) +
                                (tcp_hdr(skb)->doff << 2u);
        return header_len;
 }
index 64a6768..ddf149d 100644 (file)
@@ -174,8 +174,8 @@ static int tso_start(struct tso_state *st, struct efx_nic *efx,
        unsigned int header_len, in_len;
        dma_addr_t dma_addr;
 
-       st->ip_off = skb_network_header(skb) - skb->data;
-       st->tcp_off = skb_transport_header(skb) - skb->data;
+       st->ip_off = skb_network_offset(skb);
+       st->tcp_off = skb_transport_offset(skb);
        header_len = st->tcp_off + (tcp_hdr(skb)->doff << 2u);
        in_len = skb_headlen(skb) - header_len;
        st->header_len = header_len;
index 3525d5c..351609f 100644 (file)
@@ -1144,9 +1144,9 @@ static inline struct sk_buff *vnet_skb_shape(struct sk_buff *skb, int ncookies)
                nskb->protocol = skb->protocol;
                offset = skb_mac_header(skb) - skb->data;
                skb_set_mac_header(nskb, offset);
-               offset = skb_network_header(skb) - skb->data;
+               offset = skb_network_offset(skb);
                skb_set_network_header(nskb, offset);
-               offset = skb_transport_header(skb) - skb->data;
+               offset = skb_transport_offset(skb);
                skb_set_transport_header(nskb, offset);
 
                offset = 0;
index 7cf02ab..6dff2c8 100644 (file)
@@ -1257,7 +1257,7 @@ static int wx_tso(struct wx_ring *tx_ring, struct wx_tx_buffer *first,
 
        /* compute header lengths */
        l4len = enc ? inner_tcp_hdrlen(skb) : tcp_hdrlen(skb);
-       *hdr_len = enc ? (skb_inner_transport_header(skb) - skb->data) :
+       *hdr_len = enc ? skb_inner_transport_offset(skb) :
                         skb_transport_offset(skb);
        *hdr_len += l4len;
 
index a176653..df275b4 100644 (file)
@@ -263,7 +263,7 @@ static bool decrypt_packet(struct sk_buff *skb, struct noise_keypair *keypair)
         * call skb_cow_data, so that there's no chance that data is removed
         * from the skb, so that later we can extract the original endpoint.
         */
-       offset = skb->data - skb_network_header(skb);
+       offset = -skb_network_offset(skb);
        skb_push(skb, offset);
        num_frags = skb_cow_data(skb, 0, &trailer);
        offset += sizeof(struct message_data);
index 5a568bb..82243cb 100644 (file)
@@ -1358,7 +1358,7 @@ int __cgroup_bpf_run_filter_skb(struct sock *sk,
                                struct sk_buff *skb,
                                enum cgroup_bpf_attach_type atype)
 {
-       unsigned int offset = skb->data - skb_network_header(skb);
+       unsigned int offset = -skb_network_offset(skb);
        struct sock *save_sk;
        void *saved_data_end;
        struct cgroup *cgrp;
index 7d2bdfd..a82fd10 100644 (file)
@@ -310,7 +310,7 @@ int raw_rcv(struct sock *sk, struct sk_buff *skb)
        }
        nf_reset_ct(skb);
 
-       skb_push(skb, skb->data - skb_network_header(skb));
+       skb_push(skb, -skb_network_offset(skb));
 
        raw_rcv_skb(sk, skb);
        return 0;
index c546769..dae3510 100644 (file)
@@ -58,7 +58,7 @@ int xfrm4_transport_finish(struct sk_buff *skb, int async)
                return -iph->protocol;
 #endif
 
-       __skb_push(skb, skb->data - skb_network_header(skb));
+       __skb_push(skb, -skb_network_offset(skb));
        iph->tot_len = htons(skb->len);
        ip_send_check(iph);
 
index 26f1e4a..25a5b39 100644 (file)
@@ -804,7 +804,7 @@ looped_back:
 
        ip6_route_input(skb);
        if (skb_dst(skb)->error) {
-               skb_push(skb, skb->data - skb_network_header(skb));
+               skb_push(skb, -skb_network_offset(skb));
                dst_input(skb);
                return -1;
        }
@@ -821,7 +821,7 @@ looped_back:
                goto looped_back;
        }
 
-       skb_push(skb, skb->data - skb_network_header(skb));
+       skb_push(skb, -skb_network_offset(skb));
        dst_input(skb);
        return -1;
 
index b2dd489..1a51a44 100644 (file)
@@ -327,9 +327,9 @@ static int nf_ct_frag6_reasm(struct frag_queue *fq, struct sk_buff *skb,
        if (!reasm_data)
                goto err;
 
-       payload_len = ((skb->data - skb_network_header(skb)) -
+       payload_len = -skb_network_offset(skb) -
                       sizeof(struct ipv6hdr) + fq->q.len -
-                      sizeof(struct frag_hdr));
+                      sizeof(struct frag_hdr);
        if (payload_len > IPV6_MAXPLEN) {
                net_dbg_ratelimited("nf_ct_frag6_reasm: payload len = %d\n",
                                    payload_len);
index 5ebc47d..acb4f11 100644 (file)
@@ -272,9 +272,9 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *skb,
        if (!reasm_data)
                goto out_oom;
 
-       payload_len = ((skb->data - skb_network_header(skb)) -
+       payload_len = -skb_network_offset(skb) -
                       sizeof(struct ipv6hdr) + fq->q.len -
-                      sizeof(struct frag_hdr));
+                      sizeof(struct frag_hdr);
        if (payload_len > IPV6_MAXPLEN)
                goto out_oversize;
 
index 6e36e50..a17d783 100644 (file)
@@ -43,7 +43,7 @@ static int xfrm6_transport_finish2(struct net *net, struct sock *sk,
 int xfrm6_transport_finish(struct sk_buff *skb, int async)
 {
        struct xfrm_offload *xo = xfrm_offload(skb);
-       int nhlen = skb->data - skb_network_header(skb);
+       int nhlen = -skb_network_offset(skb);
 
        skb_network_header(skb)[IP6CB(skb)->nhoff] =
                XFRM_MODE_SKB_CB(skb)->protocol;