[SK_BUFF]: Introduce skb_set_mac_header()
authorArnaldo Carvalho de Melo <acme@redhat.com>
Sat, 10 Mar 2007 15:30:58 +0000 (12:30 -0300)
committerDavid S. Miller <davem@sunset.davemloft.net>
Thu, 26 Apr 2007 05:24:37 +0000 (22:24 -0700)
For the cases where we want to set skb->mac.raw to an offset from skb->data.

Simple cases first, the memmove ones and specially pktgen will be left for later.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/loopback.c
drivers/net/myri_sbus.c
drivers/s390/net/qeth_eddp.c
drivers/s390/net/qeth_main.c
include/linux/skbuff.h
net/atm/br2684.c

index 4380e5e89dc957519d9520f8aee4f9c06e6275ee..a71d8e0a9b57dafa2edbda9a3c1614ee9d95771a 100644 (file)
@@ -90,7 +90,7 @@ static void emulate_large_send_offload(struct sk_buff *skb)
                if (!nskb)
                        break;
                skb_reserve(nskb, 32);
-               nskb->mac.raw = nskb->data - 14;
+               skb_set_mac_header(nskb, -ETH_HLEN);
                nskb->nh.raw = nskb->data;
                iph = nskb->nh.iph;
                memcpy(nskb->data, skb->nh.raw, doffset);
index de092658db6cd2b15c2fd351d78247bf5741dc92..e1f16fb058468dab9280795dc42998f329fb8df7 100644 (file)
@@ -368,7 +368,7 @@ static __be16 myri_type_trans(struct sk_buff *skb, struct net_device *dev)
        struct ethhdr *eth;
        unsigned char *rawp;
 
-       skb->mac.raw = skb->data + MYRI_PAD_LEN;
+       skb_set_mac_header(skb, MYRI_PAD_LEN);
        skb_pull(skb, dev->hard_header_len);
        eth = eth_hdr(skb);
 
index 910a8ab66b057aa1e62a60d7b5a7369a4f062e3e..893125403c685b9fb92c39b7d16850520f0dd414 100644 (file)
@@ -486,7 +486,7 @@ qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx,
                return -ENOMEM;
        }
        if (qhdr->hdr.l2.id == QETH_HEADER_TYPE_LAYER2) {
-               skb->mac.raw = skb->data + sizeof(struct qeth_hdr);
+               skb_set_mac_header(skb, sizeof(struct qeth_hdr));
                memcpy(&eddp->mac, eth_hdr(skb), ETH_HLEN);
 #ifdef CONFIG_QETH_VLAN
                if (eddp->mac.h_proto == __constant_htons(ETH_P_8021Q)) {
index 28822025b791f28e892852e043476dd1690883c0..c0ee6d94ea38ec8b773f7964a7c050caec2f6df3 100644 (file)
@@ -2306,7 +2306,7 @@ qeth_rebuild_skb_fake_ll_tr(struct qeth_card *card, struct sk_buff *skb,
        struct iphdr *ip_hdr;
 
        QETH_DBF_TEXT(trace,5,"skbfktr");
-       skb->mac.raw = skb->data - QETH_FAKE_LL_LEN_TR;
+       skb_set_mac_header(skb, -QETH_FAKE_LL_LEN_TR);
        /* this is a fake ethernet header */
        fake_hdr = tr_hdr(skb);
 
@@ -2359,7 +2359,7 @@ qeth_rebuild_skb_fake_ll_eth(struct qeth_card *card, struct sk_buff *skb,
        struct iphdr *ip_hdr;
 
        QETH_DBF_TEXT(trace,5,"skbfketh");
-       skb->mac.raw = skb->data - QETH_FAKE_LL_LEN_ETH;
+       skb_set_mac_header(skb, -QETH_FAKE_LL_LEN_ETH);
        /* this is a fake ethernet header */
        fake_hdr = eth_hdr(skb);
 
index 748f254b50cc1805dd3aa1a4969e1dcb19984796..43ab6cbf8446bab89fbaaf2abed71417d4befb1b 100644 (file)
@@ -965,6 +965,11 @@ static inline void skb_reset_mac_header(struct sk_buff *skb)
        skb->mac.raw = skb->data;
 }
 
+static inline void skb_set_mac_header(struct sk_buff *skb, const int offset)
+{
+       skb->mac.raw = skb->data + offset;
+}
+
 /*
  * CPUs often take a performance hit when accessing unaligned memory
  * locations. The actual performance hit varies, it can be small if the
index 900d42ca8a5063f4549300c553276e58447dd129..a1686dfcbb9a293d993829119390cb83edde50dd 100644 (file)
@@ -458,7 +458,7 @@ static void br2684_push(struct atm_vcc *atmvcc, struct sk_buff *skb)
        /* FIXME: tcpdump shows that pointer to mac header is 2 bytes earlier,
           than should be. What else should I set? */
        skb_pull(skb, plen);
-       skb->mac.raw = skb->data - ETH_HLEN;
+       skb_set_mac_header(skb, -ETH_HLEN);
        skb->pkt_type = PACKET_HOST;
 #ifdef CONFIG_BR2684_FAST_TRANS
        skb->protocol = ((u16 *) skb->data)[-1];