Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 48d49d0c authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo Committed by David S. Miller
Browse files

[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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f64955eb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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);

+1 −1
Original line number Diff line number Diff line
@@ -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)) {
+2 −2
Original line number Diff line number Diff line
@@ -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);

+5 −0
Original line number Diff line number Diff line
@@ -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
Loading