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/sys/mac_client_impl.h
          +++ new/usr/src/uts/common/sys/mac_client_impl.h
↓ open down ↓ 16 lines elided ↑ open up ↑
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
  24   24   * Copyright (c) 2012, Joyent, Inc.  All rights reserved.
  25   25   */
  26   26  /*
  27      - * Copyright (c) 2013, Joyent, Inc.  All rights reserved.
       27 + * Copyright 2018 Joyent, Inc.
  28   28   */
  29   29  
  30   30  #ifndef _SYS_MAC_CLIENT_IMPL_H
  31   31  #define _SYS_MAC_CLIENT_IMPL_H
  32   32  
  33   33  #include <sys/modhash.h>
  34   34  #include <sys/mac_client.h>
  35   35  #include <sys/mac_provider.h>
  36   36  #include <sys/mac.h>
  37   37  #include <sys/mac_impl.h>
↓ open down ↓ 12 lines elided ↑ open up ↑
  50   50  /*
  51   51   * Need a list to chain all VIDs assigned to a client. Normally, one
  52   52   * MAC client only has one VID. But vsw might need multiple VIDs.
  53   53   */
  54   54  typedef struct mac_unicast_impl_s {                     /* Protected by */
  55   55          struct mac_unicast_impl_s       *mui_next;      /* SL */
  56   56          mac_address_t                   *mui_map;       /* SL */
  57   57          uint16_t                        mui_vid;        /* SL */
  58   58  } mac_unicast_impl_t;
  59   59  
  60      -#define MAC_CLIENT_FLAGS_PRIMARY                0X0001
       60 +#define MAC_CLIENT_FLAGS_PRIMARY                0x0001
  61   61  #define MAC_CLIENT_FLAGS_VNIC_PRIMARY           0x0002
  62   62  #define MAC_CLIENT_FLAGS_MULTI_PRIMARY          0x0004
  63   63  #define MAC_CLIENT_FLAGS_PASSIVE_PRIMARY        0x0008
  64   64  
  65   65  /*
  66   66   * One of these is instantiated per MAC client promiscuous callback.
  67   67   *
  68   68   * Each element of this structure belongs to two linked list. One
  69   69   * for the mac_client_impl_t (mci_promisc_list) which created allocated
  70   70   * the callback, the other for the mac_impl_t (mi_promisc_list) corresponding
↓ open down ↓ 53 lines elided ↑ open up ↑
 124  124          mac_rx_t                mci_rx_p_fn;            /* Rx Quiescence */
 125  125          void                    *mci_rx_p_arg;          /* Rx Quiescence */
 126  126          void                    *mci_p_unicast_list;
 127  127  
 128  128          mac_cb_t                *mci_promisc_list;      /* mi_promisc_lock */
 129  129  
 130  130          mac_address_t           *mci_unicast;
 131  131          uint32_t                mci_flags;              /* SL */
 132  132          krwlock_t               mci_rw_lock;
 133  133          mac_unicast_impl_t      *mci_unicast_list;      /* mci_rw_lock */
      134 +
 134  135          /*
 135  136           * The mac_client_impl_t may be shared by multiple clients, i.e
 136  137           * multiple VLANs sharing the same MAC client. In this case the
 137      -         * address/vid tubles differ and are each associated with their
      138 +         * address/vid tuples differ and are each associated with their
 138  139           * own flow entry, but the rest underlying components SRS, etc,
 139  140           * are common.
      141 +         *
      142 +         * This is only needed to support sun4v vsw. There are several
      143 +         * places in MAC we could simplify the code if we removed
      144 +         * sun4v support.
 140  145           */
 141  146          flow_entry_t            *mci_flent_list;        /* mci_rw_lock */
 142  147          uint_t                  mci_nflents;            /* mci_rw_lock */
 143  148          uint_t                  mci_nvids;              /* mci_rw_lock */
 144  149          volatile uint32_t       mci_vidcache;           /* VID cache */
 145  150  
 146  151          /* Resource Management Functions */
 147  152          mac_resource_add_t      mci_resource_add;       /* SL */
 148  153          mac_resource_remove_t   mci_resource_remove;    /* SL */
 149  154          mac_resource_quiesce_t  mci_resource_quiesce;   /* SL */
↓ open down ↓ 67 lines elided ↑ open up ↑
 217  222  
 218  223  #define MCIP_DATAPATH_SETUP(mcip)               \
 219  224          ((mcip)->mci_flent == NULL ? B_FALSE :  \
 220  225          !((mcip)->mci_flent->fe_flags & FE_MC_NO_DATAPATH))
 221  226  
 222  227  #define MCIP_RESOURCE_PROPS(mcip)               \
 223  228          ((mcip)->mci_flent == NULL ? NULL :     \
 224  229          &(mcip)->mci_flent->fe_resource_props)
 225  230  
 226  231  #define MCIP_EFFECTIVE_PROPS(mcip)              \
 227      -        (mcip->mci_flent == NULL ? NULL :       \
      232 +        (mcip->mci_flent == NULL ? NULL :       \
 228  233          &(mcip)->mci_flent->fe_effective_props)
 229  234  
 230  235  #define MCIP_RESOURCE_PROPS_MASK(mcip)          \
 231  236          ((mcip)->mci_flent == NULL ? 0 :        \
 232  237          (mcip)->mci_flent->fe_resource_props.mrp_mask)
 233  238  
 234  239  #define MCIP_RESOURCE_PROPS_MAXBW(mcip)         \
 235  240          ((mcip)->mci_flent == NULL ? 0 :        \
 236  241          (mcip)->mci_flent->fe_resource_props.mrp_maxbw)
 237  242  
↓ open down ↓ 68 lines elided ↑ open up ↑
 306  311  
 307  312  #define MCIP_VIDCACHE_ISVALID(v)        ((v) & (1U << MCIP_VIDCACHE_VALIDSHIFT))
 308  313  #define MCIP_VIDCACHE_VID(v)            \
 309  314          (((v) & MCIP_VIDCACHE_VIDMASK) >> MCIP_VIDCACHE_VIDSHIFT)
 310  315  #define MCIP_VIDCACHE_BOOL(v)           ((v) & (1U << MCIP_VIDCACHE_BOOLSHIFT))
 311  316  
 312  317  #define MAC_TAG_NEEDED(mcip)                                            \
 313  318          (((mcip)->mci_state_flags & MCIS_TAG_DISABLE) == 0 &&           \
 314  319          (mcip)->mci_nvids == 1)                                         \
 315  320  
      321 +/*
      322 + * MAC Client Implementation State (mci_state_flags)
      323 + *
      324 + * MCIS_IS_VNIC
      325 + *
      326 + *      The client is a VNIC.
      327 + *
      328 + * MCIS_EXCLUSIVE
      329 + *
      330 + *      The client has exclusive control over the MAC, such that it is
      331 + *      the sole client of the MAC.
      332 + *
      333 + * MCIS_TAG_DISABLE
      334 + *
      335 + *      MAC will not add VLAN tags to outgoing traffic. If this flag
      336 + *      is set it is up to the client to add the correct VLAN tag.
      337 + *
      338 + * MCIS_STRIP_DISABLE
      339 + *
      340 + *      MAC will not strip the VLAN tags on incoming traffic before
      341 + *      passing it to mci_rx_fn. This only applies to non-bypass
      342 + *      traffic.
      343 + *
      344 + * MCIS_IS_AGGR_PORT
      345 + *
      346 + *      The client represents a port on an aggr.
      347 + *
      348 + * MCIS_CLIENT_POLL_CAPABLE
      349 + *
      350 + *      The client is capable of polling the Rx TCP/UDP softrings.
      351 + *
      352 + * MCIS_DESC_LOGGED
      353 + *
      354 + *      This flag is set when the client's link info has been logged
      355 + *      by the mac_log_linkinfo() timer. This ensures that the
      356 + *      client's link info is only logged once.
      357 + *
      358 + * MCIS_SHARE_BOUND
      359 + *
      360 + *      This client has an HIO share bound to it.
      361 + *
      362 + * MCIS_DISABLE_TX_VID_CHECK
      363 + *
      364 + *      MAC will not check the VID of the client's Tx traffic.
      365 + *
      366 + * MCIS_USE_DATALINK_NAME
      367 + *
      368 + *      The client is using the same name as its underlying MAC. This
      369 + *      happens when dlmgmtd is unreachable during client creation.
      370 + *
      371 + * MCIS_UNICAST_HW
      372 + *
      373 + *      The client requires MAC address hardware classification. This
      374 + *      is only used by sun4v vsw.
      375 + *
      376 + * MCIS_IS_AGGR_CLIENT
      377 + *
      378 + *      The client sits atop an aggr.
      379 + *
      380 + * MCIS_RX_BYPASS_DISABLE
      381 + *
      382 + *      Do not allow the client to enable DLS bypass.
      383 + *
      384 + * MCIS_NO_UNICAST_ADDR
      385 + *
      386 + *      This client has no MAC unicast addresss associated with it.
      387 + *
      388 + */
 316  389  /* MCI state flags */
 317  390  #define MCIS_IS_VNIC                    0x0001
 318  391  #define MCIS_EXCLUSIVE                  0x0002
 319  392  #define MCIS_TAG_DISABLE                0x0004
 320  393  #define MCIS_STRIP_DISABLE              0x0008
 321  394  #define MCIS_IS_AGGR_PORT               0x0010
 322  395  #define MCIS_CLIENT_POLL_CAPABLE        0x0020
 323  396  #define MCIS_DESC_LOGGED                0x0040
 324  397  #define MCIS_SHARE_BOUND                0x0080
 325  398  #define MCIS_DISABLE_TX_VID_CHECK       0x0100
 326  399  #define MCIS_USE_DATALINK_NAME          0x0200
 327  400  #define MCIS_UNICAST_HW                 0x0400
 328      -#define MCIS_IS_AGGR                    0x0800
      401 +#define MCIS_IS_AGGR_CLIENT             0x0800
 329  402  #define MCIS_RX_BYPASS_DISABLE          0x1000
 330  403  #define MCIS_NO_UNICAST_ADDR            0x2000
 331  404  
 332  405  /* Mac protection flags */
 333  406  #define MPT_FLAG_V6_LOCAL_ADDR_SET      0x0001
 334  407  #define MPT_FLAG_PROMISC_FILTERED       0x0002
 335  408  
 336  409  /* in mac_client.c */
 337  410  extern void mac_promisc_client_dispatch(mac_client_impl_t *, mblk_t *);
 338  411  extern void mac_client_init(void);
↓ open down ↓ 28 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX