mirror of https://gitee.com/openkylin/linux.git
[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)
|
||||
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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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];
|
||||
|
|
Loading…
Reference in New Issue