linux/include/linux/dsa/8021q.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0
   2 * Copyright (c) 2019, Vladimir Oltean <olteanv@gmail.com>
   3 */
   4
   5#ifndef _NET_DSA_8021Q_H
   6#define _NET_DSA_8021Q_H
   7
   8#include <linux/refcount.h>
   9#include <linux/types.h>
  10
  11struct dsa_switch;
  12struct sk_buff;
  13struct net_device;
  14struct packet_type;
  15struct dsa_8021q_context;
  16
  17struct dsa_8021q_crosschip_link {
  18        struct list_head list;
  19        int port;
  20        struct dsa_8021q_context *other_ctx;
  21        int other_port;
  22        refcount_t refcount;
  23};
  24
  25struct dsa_8021q_ops {
  26        int (*vlan_add)(struct dsa_switch *ds, int port, u16 vid, u16 flags);
  27        int (*vlan_del)(struct dsa_switch *ds, int port, u16 vid);
  28};
  29
  30struct dsa_8021q_context {
  31        const struct dsa_8021q_ops *ops;
  32        struct dsa_switch *ds;
  33        struct list_head crosschip_links;
  34        /* EtherType of RX VID, used for filtering on master interface */
  35        __be16 proto;
  36};
  37
  38#define DSA_8021Q_N_SUBVLAN                     8
  39
  40#if IS_ENABLED(CONFIG_NET_DSA_TAG_8021Q)
  41
  42int dsa_8021q_setup(struct dsa_8021q_context *ctx, bool enabled);
  43
  44int dsa_8021q_crosschip_bridge_join(struct dsa_8021q_context *ctx, int port,
  45                                    struct dsa_8021q_context *other_ctx,
  46                                    int other_port);
  47
  48int dsa_8021q_crosschip_bridge_leave(struct dsa_8021q_context *ctx, int port,
  49                                     struct dsa_8021q_context *other_ctx,
  50                                     int other_port);
  51
  52struct sk_buff *dsa_8021q_xmit(struct sk_buff *skb, struct net_device *netdev,
  53                               u16 tpid, u16 tci);
  54
  55u16 dsa_8021q_tx_vid(struct dsa_switch *ds, int port);
  56
  57u16 dsa_8021q_rx_vid(struct dsa_switch *ds, int port);
  58
  59u16 dsa_8021q_rx_vid_subvlan(struct dsa_switch *ds, int port, u16 subvlan);
  60
  61int dsa_8021q_rx_switch_id(u16 vid);
  62
  63int dsa_8021q_rx_source_port(u16 vid);
  64
  65u16 dsa_8021q_rx_subvlan(u16 vid);
  66
  67bool vid_is_dsa_8021q(u16 vid);
  68
  69#else
  70
  71int dsa_8021q_setup(struct dsa_8021q_context *ctx, bool enabled)
  72{
  73        return 0;
  74}
  75
  76int dsa_8021q_crosschip_bridge_join(struct dsa_8021q_context *ctx, int port,
  77                                    struct dsa_8021q_context *other_ctx,
  78                                    int other_port)
  79{
  80        return 0;
  81}
  82
  83int dsa_8021q_crosschip_bridge_leave(struct dsa_8021q_context *ctx, int port,
  84                                     struct dsa_8021q_context *other_ctx,
  85                                     int other_port)
  86{
  87        return 0;
  88}
  89
  90struct sk_buff *dsa_8021q_xmit(struct sk_buff *skb, struct net_device *netdev,
  91                               u16 tpid, u16 tci)
  92{
  93        return NULL;
  94}
  95
  96u16 dsa_8021q_tx_vid(struct dsa_switch *ds, int port)
  97{
  98        return 0;
  99}
 100
 101u16 dsa_8021q_rx_vid(struct dsa_switch *ds, int port)
 102{
 103        return 0;
 104}
 105
 106u16 dsa_8021q_rx_vid_subvlan(struct dsa_switch *ds, int port, u16 subvlan)
 107{
 108        return 0;
 109}
 110
 111int dsa_8021q_rx_switch_id(u16 vid)
 112{
 113        return 0;
 114}
 115
 116int dsa_8021q_rx_source_port(u16 vid)
 117{
 118        return 0;
 119}
 120
 121u16 dsa_8021q_rx_subvlan(u16 vid)
 122{
 123        return 0;
 124}
 125
 126bool vid_is_dsa_8021q(u16 vid)
 127{
 128        return false;
 129}
 130
 131#endif /* IS_ENABLED(CONFIG_NET_DSA_TAG_8021Q) */
 132
 133#endif /* _NET_DSA_8021Q_H */
 134