mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-24 01:41:39 +00:00
![Vladimir Oltean](/assets/img/avatar_default.png)
This removes the existing implementation from tag_sja1105, which was partially incorrect (it was not changing the MAC header offset, thereby leaving it to point 4 bytes earlier than it should have). This overwrites the VLAN tag by moving the Ethernet source and destination MACs 4 bytes to the right. Then skb->data (assumed to be pointing immediately after the EtherType) is temporarily pushed to the beginning of the new Ethernet header, the new Ethernet header offset and length are recorded, then skb->data is moved back to where it was. Signed-off-by: Vladimir Oltean <olteanv@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
74 lines
1.4 KiB
C
74 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0
|
|
* Copyright (c) 2019, Vladimir Oltean <olteanv@gmail.com>
|
|
*/
|
|
|
|
#ifndef _NET_DSA_8021Q_H
|
|
#define _NET_DSA_8021Q_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct dsa_switch;
|
|
struct sk_buff;
|
|
struct net_device;
|
|
struct packet_type;
|
|
|
|
#if IS_ENABLED(CONFIG_NET_DSA_TAG_8021Q)
|
|
|
|
int dsa_port_setup_8021q_tagging(struct dsa_switch *ds, int index,
|
|
bool enabled);
|
|
|
|
struct sk_buff *dsa_8021q_xmit(struct sk_buff *skb, struct net_device *netdev,
|
|
u16 tpid, u16 tci);
|
|
|
|
u16 dsa_8021q_tx_vid(struct dsa_switch *ds, int port);
|
|
|
|
u16 dsa_8021q_rx_vid(struct dsa_switch *ds, int port);
|
|
|
|
int dsa_8021q_rx_switch_id(u16 vid);
|
|
|
|
int dsa_8021q_rx_source_port(u16 vid);
|
|
|
|
struct sk_buff *dsa_8021q_remove_header(struct sk_buff *skb);
|
|
|
|
#else
|
|
|
|
int dsa_port_setup_8021q_tagging(struct dsa_switch *ds, int index,
|
|
bool enabled)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
struct sk_buff *dsa_8021q_xmit(struct sk_buff *skb, struct net_device *netdev,
|
|
u16 tpid, u16 tci)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
u16 dsa_8021q_tx_vid(struct dsa_switch *ds, int port)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
u16 dsa_8021q_rx_vid(struct dsa_switch *ds, int port)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int dsa_8021q_rx_switch_id(u16 vid)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int dsa_8021q_rx_source_port(u16 vid)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
struct sk_buff *dsa_8021q_remove_header(struct sk_buff *skb)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
#endif /* IS_ENABLED(CONFIG_NET_DSA_TAG_8021Q) */
|
|
|
|
#endif /* _NET_DSA_8021Q_H */
|