gss_krb5: Advertise AES enctype support in the rpcsec_gss/krb5 upcall
[safe/jmp/linux-2.6] / net / 8021q / vlan.h
index 097b2e0..6abdcac 100644 (file)
@@ -3,6 +3,72 @@
 
 #include <linux/if_vlan.h>
 
+
+/**
+ *     struct vlan_priority_tci_mapping - vlan egress priority mappings
+ *     @priority: skb priority
+ *     @vlan_qos: vlan priority: (skb->priority << 13) & 0xE000
+ *     @next: pointer to next struct
+ */
+struct vlan_priority_tci_mapping {
+       u32                                     priority;
+       u16                                     vlan_qos;
+       struct vlan_priority_tci_mapping        *next;
+};
+
+
+/**
+ *     struct vlan_rx_stats - VLAN percpu rx stats
+ *     @rx_packets: number of received packets
+ *     @rx_bytes: number of received bytes
+ *     @multicast: number of received multicast packets
+ *     @rx_errors: number of errors
+ */
+struct vlan_rx_stats {
+       unsigned long rx_packets;
+       unsigned long rx_bytes;
+       unsigned long multicast;
+       unsigned long rx_errors;
+};
+
+/**
+ *     struct vlan_dev_info - VLAN private device data
+ *     @nr_ingress_mappings: number of ingress priority mappings
+ *     @ingress_priority_map: ingress priority mappings
+ *     @nr_egress_mappings: number of egress priority mappings
+ *     @egress_priority_map: hash of egress priority mappings
+ *     @vlan_id: VLAN identifier
+ *     @flags: device flags
+ *     @real_dev: underlying netdevice
+ *     @real_dev_addr: address of underlying netdevice
+ *     @dent: proc dir entry
+ *     @cnt_inc_headroom_on_tx: statistic - number of skb expansions on TX
+ *     @cnt_encap_on_xmit: statistic - number of skb encapsulations on TX
+ *     @vlan_rx_stats: ptr to percpu rx stats
+ */
+struct vlan_dev_info {
+       unsigned int                            nr_ingress_mappings;
+       u32                                     ingress_priority_map[8];
+       unsigned int                            nr_egress_mappings;
+       struct vlan_priority_tci_mapping        *egress_priority_map[16];
+
+       u16                                     vlan_id;
+       u16                                     flags;
+
+       struct net_device                       *real_dev;
+       unsigned char                           real_dev_addr[ETH_ALEN];
+
+       struct proc_dir_entry                   *dent;
+       unsigned long                           cnt_inc_headroom_on_tx;
+       unsigned long                           cnt_encap_on_xmit;
+       struct vlan_rx_stats __percpu           *vlan_rx_stats;
+};
+
+static inline struct vlan_dev_info *vlan_dev_info(const struct net_device *dev)
+{
+       return netdev_priv(dev);
+}
+
 #define VLAN_GRP_HASH_SHIFT    5
 #define VLAN_GRP_HASH_SIZE     (1 << VLAN_GRP_HASH_SHIFT)
 #define VLAN_GRP_HASH_MASK     (VLAN_GRP_HASH_SIZE - 1)
  *  Must be invoked with rcu_read_lock (ie preempt disabled)
  *  or with RTNL.
  */
-struct net_device *__find_vlan_dev(struct net_device *real_dev,
-                                  unsigned short VID); /* vlan.c */
+struct net_device *__find_vlan_dev(struct net_device *real_dev, u16 vlan_id);
 
 /* found in vlan_dev.c */
 int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev,
                  struct packet_type *ptype, struct net_device *orig_dev);
 void vlan_dev_set_ingress_priority(const struct net_device *dev,
-                                  u32 skb_prio, short vlan_prio);
+                                  u32 skb_prio, u16 vlan_prio);
 int vlan_dev_set_egress_priority(const struct net_device *dev,
-                                u32 skb_prio, short vlan_prio);
+                                u32 skb_prio, u16 vlan_prio);
 int vlan_dev_change_flags(const struct net_device *dev, u32 flag, u32 mask);
 void vlan_dev_get_realdev_name(const struct net_device *dev, char *result);
-void vlan_dev_get_vid(const struct net_device *dev, unsigned short *result);
 
-int vlan_check_real_dev(struct net_device *real_dev, unsigned short vlan_id);
+int vlan_check_real_dev(struct net_device *real_dev, u16 vlan_id);
 void vlan_setup(struct net_device *dev);
 int register_vlan_dev(struct net_device *dev);
-void unregister_vlan_dev(struct net_device *dev);
+void unregister_vlan_dev(struct net_device *dev, struct list_head *head);
+
+static inline u32 vlan_get_ingress_priority(struct net_device *dev,
+                                           u16 vlan_tci)
+{
+       struct vlan_dev_info *vip = vlan_dev_info(dev);
+
+       return vip->ingress_priority_map[(vlan_tci >> VLAN_PRIO_SHIFT) & 0x7];
+}
 
 #ifdef CONFIG_VLAN_8021Q_GVRP
 extern int vlan_gvrp_request_join(const struct net_device *dev);
@@ -53,8 +125,10 @@ static inline int vlan_gvrp_init(void) { return 0; }
 static inline void vlan_gvrp_uninit(void) {}
 #endif
 
-int vlan_netlink_init(void);
-void vlan_netlink_fini(void);
+extern const char vlan_fullname[];
+extern const char vlan_version[];
+extern int vlan_netlink_init(void);
+extern void vlan_netlink_fini(void);
 
 extern struct rtnl_link_ops vlan_link_ops;