aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2007-03-10 10:30:58 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2007-04-26 01:24:37 -0400
commit48d49d0ccdaa9caff4636ef9c3410973d28131b5 (patch)
tree3bdf0729bf05e817d1bb9c3299906682414f8a76
parentf64955eb117ad62480b858fd69a11e6f9e74f60b (diff)
[SK_BUFF]: Introduce skb_set_mac_header()
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>
-rw-r--r--drivers/net/loopback.c2
-rw-r--r--drivers/net/myri_sbus.c2
-rw-r--r--drivers/s390/net/qeth_eddp.c2
-rw-r--r--drivers/s390/net/qeth_main.c4
-rw-r--r--include/linux/skbuff.h5
-rw-r--r--net/atm/br2684.c2
6 files changed, 11 insertions, 6 deletions
diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c
index 4380e5e89dc9..a71d8e0a9b57 100644
--- a/drivers/net/loopback.c
+++ b/drivers/net/loopback.c
@@ -90,7 +90,7 @@ static void emulate_large_send_offload(struct sk_buff *skb)
90 if (!nskb) 90 if (!nskb)
91 break; 91 break;
92 skb_reserve(nskb, 32); 92 skb_reserve(nskb, 32);
93 nskb->mac.raw = nskb->data - 14; 93 skb_set_mac_header(nskb, -ETH_HLEN);
94 nskb->nh.raw = nskb->data; 94 nskb->nh.raw = nskb->data;
95 iph = nskb->nh.iph; 95 iph = nskb->nh.iph;
96 memcpy(nskb->data, skb->nh.raw, doffset); 96 memcpy(nskb->data, skb->nh.raw, doffset);
diff --git a/drivers/net/myri_sbus.c b/drivers/net/myri_sbus.c
index de092658db6c..e1f16fb05846 100644
--- a/drivers/net/myri_sbus.c
+++ b/drivers/net/myri_sbus.c
@@ -368,7 +368,7 @@ static __be16 myri_type_trans(struct sk_buff *skb, struct net_device *dev)
368 struct ethhdr *eth; 368 struct ethhdr *eth;
369 unsigned char *rawp; 369 unsigned char *rawp;
370 370
371 skb->mac.raw = skb->data + MYRI_PAD_LEN; 371 skb_set_mac_header(skb, MYRI_PAD_LEN);
372 skb_pull(skb, dev->hard_header_len); 372 skb_pull(skb, dev->hard_header_len);
373 eth = eth_hdr(skb); 373 eth = eth_hdr(skb);
374 374
diff --git a/drivers/s390/net/qeth_eddp.c b/drivers/s390/net/qeth_eddp.c
index 910a8ab66b05..893125403c68 100644
--- a/drivers/s390/net/qeth_eddp.c
+++ b/drivers/s390/net/qeth_eddp.c
@@ -486,7 +486,7 @@ qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx,
486 return -ENOMEM; 486 return -ENOMEM;
487 } 487 }
488 if (qhdr->hdr.l2.id == QETH_HEADER_TYPE_LAYER2) { 488 if (qhdr->hdr.l2.id == QETH_HEADER_TYPE_LAYER2) {
489 skb->mac.raw = skb->data + sizeof(struct qeth_hdr); 489 skb_set_mac_header(skb, sizeof(struct qeth_hdr));
490 memcpy(&eddp->mac, eth_hdr(skb), ETH_HLEN); 490 memcpy(&eddp->mac, eth_hdr(skb), ETH_HLEN);
491#ifdef CONFIG_QETH_VLAN 491#ifdef CONFIG_QETH_VLAN
492 if (eddp->mac.h_proto == __constant_htons(ETH_P_8021Q)) { 492 if (eddp->mac.h_proto == __constant_htons(ETH_P_8021Q)) {
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c
index 28822025b791..c0ee6d94ea38 100644
--- a/drivers/s390/net/qeth_main.c
+++ b/drivers/s390/net/qeth_main.c
@@ -2306,7 +2306,7 @@ qeth_rebuild_skb_fake_ll_tr(struct qeth_card *card, struct sk_buff *skb,
2306 struct iphdr *ip_hdr; 2306 struct iphdr *ip_hdr;
2307 2307
2308 QETH_DBF_TEXT(trace,5,"skbfktr"); 2308 QETH_DBF_TEXT(trace,5,"skbfktr");
2309 skb->mac.raw = skb->data - QETH_FAKE_LL_LEN_TR; 2309 skb_set_mac_header(skb, -QETH_FAKE_LL_LEN_TR);
2310 /* this is a fake ethernet header */ 2310 /* this is a fake ethernet header */
2311 fake_hdr = tr_hdr(skb); 2311 fake_hdr = tr_hdr(skb);
2312 2312
@@ -2359,7 +2359,7 @@ qeth_rebuild_skb_fake_ll_eth(struct qeth_card *card, struct sk_buff *skb,
2359 struct iphdr *ip_hdr; 2359 struct iphdr *ip_hdr;
2360 2360
2361 QETH_DBF_TEXT(trace,5,"skbfketh"); 2361 QETH_DBF_TEXT(trace,5,"skbfketh");
2362 skb->mac.raw = skb->data - QETH_FAKE_LL_LEN_ETH; 2362 skb_set_mac_header(skb, -QETH_FAKE_LL_LEN_ETH);
2363 /* this is a fake ethernet header */ 2363 /* this is a fake ethernet header */
2364 fake_hdr = eth_hdr(skb); 2364 fake_hdr = eth_hdr(skb);
2365 2365
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 748f254b50cc..43ab6cbf8446 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -965,6 +965,11 @@ static inline void skb_reset_mac_header(struct sk_buff *skb)
965 skb->mac.raw = skb->data; 965 skb->mac.raw = skb->data;
966} 966}
967 967
968static inline void skb_set_mac_header(struct sk_buff *skb, const int offset)
969{
970 skb->mac.raw = skb->data + offset;
971}
972
968/* 973/*
969 * CPUs often take a performance hit when accessing unaligned memory 974 * CPUs often take a performance hit when accessing unaligned memory
970 * locations. The actual performance hit varies, it can be small if the 975 * locations. The actual performance hit varies, it can be small if the
diff --git a/net/atm/br2684.c b/net/atm/br2684.c
index 900d42ca8a50..a1686dfcbb9a 100644
--- a/net/atm/br2684.c
+++ b/net/atm/br2684.c
@@ -458,7 +458,7 @@ static void br2684_push(struct atm_vcc *atmvcc, struct sk_buff *skb)
458 /* FIXME: tcpdump shows that pointer to mac header is 2 bytes earlier, 458 /* FIXME: tcpdump shows that pointer to mac header is 2 bytes earlier,
459 than should be. What else should I set? */ 459 than should be. What else should I set? */
460 skb_pull(skb, plen); 460 skb_pull(skb, plen);
461 skb->mac.raw = skb->data - ETH_HLEN; 461 skb_set_mac_header(skb, -ETH_HLEN);
462 skb->pkt_type = PACKET_HOST; 462 skb->pkt_type = PACKET_HOST;
463#ifdef CONFIG_BR2684_FAST_TRANS 463#ifdef CONFIG_BR2684_FAST_TRANS
464 skb->protocol = ((u16 *) skb->data)[-1]; 464 skb->protocol = ((u16 *) skb->data)[-1];