linux/net/8021q/vlan.h
<<
>>
Prefs
   1#ifndef __BEN_VLAN_802_1Q_INC__
   2#define __BEN_VLAN_802_1Q_INC__
   3
   4#include <linux/if_vlan.h>
   5
   6
   7/**
   8 *      struct vlan_priority_tci_mapping - vlan egress priority mappings
   9 *      @priority: skb priority
  10 *      @vlan_qos: vlan priority: (skb->priority << 13) & 0xE000
  11 *      @next: pointer to next struct
  12 */
  13struct vlan_priority_tci_mapping {
  14        u32                                     priority;
  15        u16                                     vlan_qos;
  16        struct vlan_priority_tci_mapping        *next;
  17};
  18
  19/**
  20 *      struct vlan_dev_info - VLAN private device data
  21 *      @nr_ingress_mappings: number of ingress priority mappings
  22 *      @ingress_priority_map: ingress priority mappings
  23 *      @nr_egress_mappings: number of egress priority mappings
  24 *      @egress_priority_map: hash of egress priority mappings
  25 *      @vlan_id: VLAN identifier
  26 *      @flags: device flags
  27 *      @real_dev: underlying netdevice
  28 *      @real_dev_addr: address of underlying netdevice
  29 *      @dent: proc dir entry
  30 *      @cnt_inc_headroom_on_tx: statistic - number of skb expansions on TX
  31 *      @cnt_encap_on_xmit: statistic - number of skb encapsulations on TX
  32 */
  33struct vlan_dev_info {
  34        unsigned int                            nr_ingress_mappings;
  35        u32                                     ingress_priority_map[8];
  36        unsigned int                            nr_egress_mappings;
  37        struct vlan_priority_tci_mapping        *egress_priority_map[16];
  38
  39        u16                                     vlan_id;
  40        u16                                     flags;
  41
  42        struct net_device                       *real_dev;
  43        unsigned char                           real_dev_addr[ETH_ALEN];
  44
  45        struct proc_dir_entry                   *dent;
  46        unsigned long                           cnt_inc_headroom_on_tx;
  47        unsigned long                           cnt_encap_on_xmit;
  48};
  49
  50static inline struct vlan_dev_info *vlan_dev_info(const struct net_device *dev)
  51{
  52        return netdev_priv(dev);
  53}
  54
  55#define VLAN_GRP_HASH_SHIFT     5
  56#define VLAN_GRP_HASH_SIZE      (1 << VLAN_GRP_HASH_SHIFT)
  57#define VLAN_GRP_HASH_MASK      (VLAN_GRP_HASH_SIZE - 1)
  58
  59/*  Find a VLAN device by the MAC address of its Ethernet device, and
  60 *  it's VLAN ID.  The default configuration is to have VLAN's scope
  61 *  to be box-wide, so the MAC will be ignored.  The mac will only be
  62 *  looked at if we are configured to have a separate set of VLANs per
  63 *  each MAC addressable interface.  Note that this latter option does
  64 *  NOT follow the spec for VLANs, but may be useful for doing very
  65 *  large quantities of VLAN MUX/DEMUX onto FrameRelay or ATM PVCs.
  66 *
  67 *  Must be invoked with rcu_read_lock (ie preempt disabled)
  68 *  or with RTNL.
  69 */
  70struct net_device *__find_vlan_dev(struct net_device *real_dev, u16 vlan_id);
  71
  72/* found in vlan_dev.c */
  73int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev,
  74                  struct packet_type *ptype, struct net_device *orig_dev);
  75void vlan_dev_set_ingress_priority(const struct net_device *dev,
  76                                   u32 skb_prio, u16 vlan_prio);
  77int vlan_dev_set_egress_priority(const struct net_device *dev,
  78                                 u32 skb_prio, u16 vlan_prio);
  79int vlan_dev_change_flags(const struct net_device *dev, u32 flag, u32 mask);
  80void vlan_dev_get_realdev_name(const struct net_device *dev, char *result);
  81
  82int vlan_check_real_dev(struct net_device *real_dev, u16 vlan_id);
  83void vlan_setup(struct net_device *dev);
  84int register_vlan_dev(struct net_device *dev);
  85void unregister_vlan_dev(struct net_device *dev);
  86
  87static inline u32 vlan_get_ingress_priority(struct net_device *dev,
  88                                            u16 vlan_tci)
  89{
  90        struct vlan_dev_info *vip = vlan_dev_info(dev);
  91
  92        return vip->ingress_priority_map[(vlan_tci >> 13) & 0x7];
  93}
  94
  95#ifdef CONFIG_VLAN_8021Q_GVRP
  96extern int vlan_gvrp_request_join(const struct net_device *dev);
  97extern void vlan_gvrp_request_leave(const struct net_device *dev);
  98extern int vlan_gvrp_init_applicant(struct net_device *dev);
  99extern void vlan_gvrp_uninit_applicant(struct net_device *dev);
 100extern int vlan_gvrp_init(void);
 101extern void vlan_gvrp_uninit(void);
 102#else
 103static inline int vlan_gvrp_request_join(const struct net_device *dev) { return 0; }
 104static inline void vlan_gvrp_request_leave(const struct net_device *dev) {}
 105static inline int vlan_gvrp_init_applicant(struct net_device *dev) { return 0; }
 106static inline void vlan_gvrp_uninit_applicant(struct net_device *dev) {}
 107static inline int vlan_gvrp_init(void) { return 0; }
 108static inline void vlan_gvrp_uninit(void) {}
 109#endif
 110
 111extern const char vlan_fullname[];
 112extern const char vlan_version[];
 113extern int vlan_netlink_init(void);
 114extern void vlan_netlink_fini(void);
 115
 116extern struct rtnl_link_ops vlan_link_ops;
 117
 118static inline int is_vlan_dev(struct net_device *dev)
 119{
 120        return dev->priv_flags & IFF_802_1Q_VLAN;
 121}
 122
 123extern int vlan_net_id;
 124
 125struct proc_dir_entry;
 126
 127struct vlan_net {
 128        /* /proc/net/vlan */
 129        struct proc_dir_entry *proc_vlan_dir;
 130        /* /proc/net/vlan/config */
 131        struct proc_dir_entry *proc_vlan_conf;
 132        /* Determines interface naming scheme. */
 133        unsigned short name_type;
 134};
 135
 136#endif /* !(__BEN_VLAN_802_1Q_INC__) */
 137
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.