Print this page
11490 SRS ring polling disabled for VLANs
11491 Want DLS bypass for VLAN traffic
11492 add VLVF bypass to ixgbe core
2869 duplicate packets with vnics over aggrs
11489 DLS stat delete and aggr kstat can deadlock
Portions contributed by: Theo Schlossnagle <jesus@omniti.com>
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Dan McDonald <danmcd@joyent.com>

@@ -89,10 +89,12 @@
 #define IXGBE_INTR_ADJUST               0x40
 #define IXGBE_ERROR                     0x80
 
 #define MAX_NUM_UNICAST_ADDRESSES       0x80
 #define MAX_NUM_MULTICAST_ADDRESSES     0x1000
+#define MAX_NUM_VLAN_FILTERS            0x40
+
 #define IXGBE_INTR_NONE                 0
 #define IXGBE_INTR_MSIX                 1
 #define IXGBE_INTR_MSI                  2
 #define IXGBE_INTR_LEGACY               3
 

@@ -385,10 +387,19 @@
                 uint8_t         group_index;
                 uint8_t         addr[ETHERADDRL];
         } mac;
 } ixgbe_ether_addr_t;
 
+/*
+ * The list of VLANs an Rx group will accept.
+ */
+typedef struct ixgbe_vlan {
+        list_node_t             ixvl_link;
+        uint16_t                ixvl_vid;   /* The VLAN ID */
+        uint_t                  ixvl_refs;  /* Number of users of this VLAN */
+} ixgbe_vlan_t;
+
 typedef enum {
         USE_NONE,
         USE_COPY,
         USE_DMA
 } tx_type_t;

@@ -587,17 +598,20 @@
         mac_ring_handle_t       ring_handle;
         uint64_t                ring_gen_num;
 
         struct ixgbe            *ixgbe;         /* Pointer to ixgbe struct */
 } ixgbe_rx_ring_t;
+
 /*
  * Software Receive Ring Group
  */
 typedef struct ixgbe_rx_group {
         uint32_t                index;          /* Group index */
         mac_group_handle_t      group_handle;   /* call back group handle */
         struct ixgbe            *ixgbe;         /* Pointer to ixgbe struct */
+        boolean_t               aupe;           /* AUPE bit */
+        list_t                  vlans;          /* list of VLANs to allow */
 } ixgbe_rx_group_t;
 
 /*
  * structure to map interrupt cleanup to msi-x vector
  */

@@ -660,10 +674,11 @@
         /*
          * Receive Groups
          */
         ixgbe_rx_group_t        *rx_groups;     /* Array of rx groups */
         uint32_t                num_rx_groups;  /* Number of rx groups in use */
+        uint32_t                rx_def_group;   /* Default Rx group index */
 
         /*
          * Transmit Rings
          */
         ixgbe_tx_ring_t         *tx_rings;      /* Array of tx rings */

@@ -713,10 +728,13 @@
         uint32_t                unicst_total;
         ixgbe_ether_addr_t      unicst_addr[MAX_NUM_UNICAST_ADDRESSES];
         uint32_t                mcast_count;
         struct ether_addr       mcast_table[MAX_NUM_MULTICAST_ADDRESSES];
 
+        boolean_t               vlft_enabled; /* VLAN filtering enabled? */
+        boolean_t               vlft_init;    /* VLAN filtering initialized? */
+
         ulong_t                 sys_page_size;
 
         boolean_t               link_check_complete;
         hrtime_t                link_check_hrtime;
         ddi_periodic_t          periodic_id; /* for link check timer func */