Messages in this thread Patch in this message | | | From | Alexander Lobakin <> | Subject | [PATCH RFC net-next 14/19] net: dsa: tag_mtk: split out common tag accessors | Date | Mon, 30 Dec 2019 17:30:22 +0300 |
| |
Misc: fix identation of MTK_HDR_LEN and make use of it in mtk_tag_flow_dissect() instead of open-coded value.
Signed-off-by: Alexander Lobakin <alobakin@dlink.ru> --- net/dsa/tag_mtk.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-)
diff --git a/net/dsa/tag_mtk.c b/net/dsa/tag_mtk.c index c3ad7b7b142a..b926ffdf5fb5 100644 --- a/net/dsa/tag_mtk.c +++ b/net/dsa/tag_mtk.c @@ -10,12 +10,27 @@ #include "dsa_priv.h" -#define MTK_HDR_LEN 4 +#define MTK_HDR_LEN 4 #define MTK_HDR_XMIT_UNTAGGED 0 #define MTK_HDR_XMIT_TAGGED_TPID_8100 1 #define MTK_HDR_RECV_SOURCE_PORT_MASK GENMASK(2, 0) #define MTK_HDR_XMIT_DP_BIT_MASK GENMASK(5, 0) +static inline int mtk_tag_source_port(const u8 *data) +{ + /* The MTK header is added by the switch between src addr + * and ethertype at this point, skb->data points to 2 bytes + * after src addr so header should be 2 bytes right before. + * The source port field is in the second byte of the tag. + */ + return *(data - 1) & MTK_HDR_RECV_SOURCE_PORT_MASK; +} + +static inline __be16 mtk_tag_encap_proto(const u8 *data) +{ + return *(__be16 *)(data + 2); +} + static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb, struct net_device *dev) { @@ -60,17 +75,15 @@ static struct sk_buff *mtk_tag_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) { int port; - __be16 *phdr, hdr; if (unlikely(!pskb_may_pull(skb, MTK_HDR_LEN))) return NULL; - /* The MTK header is added by the switch between src addr - * and ethertype at this point, skb->data points to 2 bytes - * after src addr so header should be 2 bytes right before. - */ - phdr = (__be16 *)(skb->data - 2); - hdr = ntohs(*phdr); + port = mtk_tag_source_port(skb->data); + + skb->dev = dsa_master_find_slave(dev, 0, port); + if (!skb->dev) + return NULL; /* Remove MTK tag and recalculate checksum. */ skb_pull_rcsum(skb, MTK_HDR_LEN); @@ -79,21 +92,14 @@ static struct sk_buff *mtk_tag_rcv(struct sk_buff *skb, struct net_device *dev, skb->data - ETH_HLEN - MTK_HDR_LEN, 2 * ETH_ALEN); - /* Get source port information */ - port = (hdr & MTK_HDR_RECV_SOURCE_PORT_MASK); - - skb->dev = dsa_master_find_slave(dev, 0, port); - if (!skb->dev) - return NULL; - return skb; } static void mtk_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto, int *offset) { - *offset = 4; - *proto = ((__be16 *)skb->data)[1]; + *offset = MTK_HDR_LEN; + *proto = mtk_tag_encap_proto(skb->data); } static const struct dsa_device_ops mtk_netdev_ops = { -- 2.24.1
| |