summaryrefslogtreecommitdiff
path: root/net/8021q
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2021-01-14 18:24:55 -0800
committerJakub Kicinski <kuba@kernel.org>2021-01-14 18:24:56 -0800
commite4abfd88c78105069eef627e04ef9413746bab7b (patch)
treeae87c0c4220d19263c64d7895b2ed5f333615065 /net/8021q
parente3a7670737ecd7eb55b5c5e1900678e2a2e51ef9 (diff)
parent4f1cc51f34886d645cd3e8fc2915cc9b7a55c3b6 (diff)
Merge branch 'dissect-ptp-l2-packet-header'
Eran Ben Elisha says: ==================== Dissect PTP L2 packet header This series adds support for dissecting PTP L2 packet header (EtherType 0x88F7). For packet header dissecting, skb->protocol is needed. Add protocol parsing operation to vlan ops, to guarantee skb->protocol is set, as EtherType 0x88F7 occasionally follows a vlan header. ==================== Link: https://lore.kernel.org/r/1610478433-7606-1-git-send-email-eranbe@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/8021q')
-rw-r--r--net/8021q/vlan_dev.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index ec8408d1638f..dc1a197792e6 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -510,9 +510,17 @@ static void vlan_dev_set_lockdep_class(struct net_device *dev)
netdev_for_each_tx_queue(dev, vlan_dev_set_lockdep_one, NULL);
}
+static __be16 vlan_parse_protocol(const struct sk_buff *skb)
+{
+ struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data);
+
+ return __vlan_get_protocol(skb, veth->h_vlan_proto, NULL);
+}
+
static const struct header_ops vlan_header_ops = {
.create = vlan_dev_hard_header,
.parse = eth_header_parse,
+ .parse_protocol = vlan_parse_protocol,
};
static int vlan_passthru_hard_header(struct sk_buff *skb, struct net_device *dev,
@@ -532,6 +540,7 @@ static int vlan_passthru_hard_header(struct sk_buff *skb, struct net_device *dev
static const struct header_ops vlan_passthru_header_ops = {
.create = vlan_passthru_hard_header,
.parse = eth_header_parse,
+ .parse_protocol = vlan_parse_protocol,
};
static struct device_type vlan_type = {