[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:
parent
f64955eb11
commit
48d49d0ccd
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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];
|
||||||
|
|
Loading…
Reference in New Issue