[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>
This commit is contained in:
Arnaldo Carvalho de Melo 2007-03-10 12:30:58 -03:00 committed by David S. Miller
parent f64955eb11
commit 48d49d0ccd
6 changed files with 11 additions and 6 deletions

View File

@ -90,7 +90,7 @@ static void emulate_large_send_offload(struct sk_buff *skb)
if (!nskb) if (!nskb)
break; break;
skb_reserve(nskb, 32); skb_reserve(nskb, 32);
nskb->mac.raw = nskb->data - 14; skb_set_mac_header(nskb, -ETH_HLEN);
nskb->nh.raw = nskb->data; nskb->nh.raw = nskb->data;
iph = nskb->nh.iph; iph = nskb->nh.iph;
memcpy(nskb->data, skb->nh.raw, doffset); memcpy(nskb->data, skb->nh.raw, doffset);

View File

@ -368,7 +368,7 @@ static __be16 myri_type_trans(struct sk_buff *skb, struct net_device *dev)
struct ethhdr *eth; struct ethhdr *eth;
unsigned char *rawp; 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); skb_pull(skb, dev->hard_header_len);
eth = eth_hdr(skb); eth = eth_hdr(skb);

View File

@ -486,7 +486,7 @@ qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx,
return -ENOMEM; return -ENOMEM;
} }
if (qhdr->hdr.l2.id == QETH_HEADER_TYPE_LAYER2) { 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); memcpy(&eddp->mac, eth_hdr(skb), ETH_HLEN);
#ifdef CONFIG_QETH_VLAN #ifdef CONFIG_QETH_VLAN
if (eddp->mac.h_proto == __constant_htons(ETH_P_8021Q)) { if (eddp->mac.h_proto == __constant_htons(ETH_P_8021Q)) {

View File

@ -2306,7 +2306,7 @@ qeth_rebuild_skb_fake_ll_tr(struct qeth_card *card, struct sk_buff *skb,
struct iphdr *ip_hdr; struct iphdr *ip_hdr;
QETH_DBF_TEXT(trace,5,"skbfktr"); 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 */ /* this is a fake ethernet header */
fake_hdr = tr_hdr(skb); 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; struct iphdr *ip_hdr;
QETH_DBF_TEXT(trace,5,"skbfketh"); 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 */ /* this is a fake ethernet header */
fake_hdr = eth_hdr(skb); fake_hdr = eth_hdr(skb);

View File

@ -965,6 +965,11 @@ static inline void skb_reset_mac_header(struct sk_buff *skb)
skb->mac.raw = skb->data; 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 * CPUs often take a performance hit when accessing unaligned memory
* locations. The actual performance hit varies, it can be small if the * locations. The actual performance hit varies, it can be small if the

View 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, /* FIXME: tcpdump shows that pointer to mac header is 2 bytes earlier,
than should be. What else should I set? */ than should be. What else should I set? */
skb_pull(skb, plen); skb_pull(skb, plen);
skb->mac.raw = skb->data - ETH_HLEN; skb_set_mac_header(skb, -ETH_HLEN);
skb->pkt_type = PACKET_HOST; skb->pkt_type = PACKET_HOST;
#ifdef CONFIG_BR2684_FAST_TRANS #ifdef CONFIG_BR2684_FAST_TRANS
skb->protocol = ((u16 *) skb->data)[-1]; skb->protocol = ((u16 *) skb->data)[-1];