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>

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/dls/dls.c
          +++ new/usr/src/uts/common/io/dls/dls.c
↓ open down ↓ 163 lines elided ↑ open up ↑
 164  164                  dls_sap = DLS_SAP_PROMISC;
 165  165  
 166  166          /*
 167  167           * Set up the dld_str_t to mark it as able to receive packets.
 168  168           */
 169  169          dsp->ds_sap = sap;
 170  170  
 171  171          /*
 172  172           * The MAC layer does the VLAN demultiplexing and will only pass up
 173  173           * untagged packets to non-promiscuous primary MAC clients. In order to
 174      -         * support the binding to the VLAN SAP which is required by DLPI, dls
      174 +         * support binding to the VLAN SAP, which is required by DLPI, DLS
 175  175           * needs to get a copy of all tagged packets when the client binds to
 176  176           * the VLAN SAP. We do this by registering a separate promiscuous
 177      -         * callback for each dls client binding to that SAP.
      177 +         * callback for each DLS client binding to that SAP.
 178  178           *
 179  179           * Note: even though there are two promiscuous handles in dld_str_t,
 180  180           * ds_mph is for the regular promiscuous mode, ds_vlan_mph is the handle
 181      -         * to receive VLAN pkt when promiscuous mode is not on. Only one of
 182      -         * them can be non-NULL at the same time, to avoid receiving dup copies
 183      -         * of pkts.
      181 +         * to receive VLAN traffic when promiscuous mode is not on. Only one of
      182 +         * them can be non-NULL at the same time, to avoid receiving duplicate
      183 +         * copies of packets.
 184  184           */
 185  185          if (sap == ETHERTYPE_VLAN && dsp->ds_promisc == 0) {
 186  186                  int err;
 187  187  
 188  188                  if (dsp->ds_vlan_mph != NULL)
 189  189                          return (EINVAL);
 190  190                  err = mac_promisc_add(dsp->ds_mch,
 191  191                      MAC_CLIENT_PROMISC_ALL, dls_rx_vlan_promisc, dsp,
 192  192                      &dsp->ds_vlan_mph, MAC_PROMISC_FLAGS_NO_PHYS);
 193  193  
↓ open down ↓ 451 lines elided ↑ open up ↑
 645  645           */
 646  646          if (dlp->dl_nactive == 0) {
 647  647                  /*
 648  648                   * First client; add the primary unicast address.
 649  649                   */
 650  650                  mac_diag_t diag;
 651  651  
 652  652                  /* request the primary MAC address */
 653  653                  if ((err = mac_unicast_add(dlp->dl_mch, NULL,
 654  654                      MAC_UNICAST_PRIMARY | MAC_UNICAST_TAG_DISABLE |
 655      -                    MAC_UNICAST_DISABLE_TX_VID_CHECK, &dlp->dl_mah, 0,
 656      -                    &diag)) != 0) {
      655 +                    MAC_UNICAST_DISABLE_TX_VID_CHECK, &dlp->dl_mah,
      656 +                    VLAN_ID_NONE, &diag)) != 0) {
 657  657                          return (err);
 658  658                  }
 659  659  
 660  660                  /*
 661  661                   * Set the function to start receiving packets.
 662  662                   */
 663  663                  mac_rx_set(dlp->dl_mch, i_dls_link_rx, dlp);
 664  664          }
 665  665          dlp->dl_nactive++;
 666  666          return (0);
↓ open down ↓ 67 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX