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/aggr_impl.h
          +++ new/usr/src/uts/common/sys/aggr_impl.h
↓ open down ↓ 13 lines elided ↑ open up ↑
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  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 + * Copyright 2012 OmniTI Computer Consulting, Inc  All rights reserved.
       25 + * Copyright 2018 Joyent, Inc.
  24   26   */
  25   27  
  26   28  #ifndef _SYS_AGGR_IMPL_H
  27   29  #define _SYS_AGGR_IMPL_H
  28   30  
  29   31  #include <sys/types.h>
  30   32  #include <sys/cred.h>
  31   33  #include <sys/mac_ether.h>
  32   34  #include <sys/mac_provider.h>
  33   35  #include <sys/mac_client.h>
↓ open down ↓ 13 lines elided ↑ open up ↑
  47   49  #define AGGR_MODIFY_MAC                 0x02
  48   50  #define AGGR_MODIFY_LACP_MODE           0x04
  49   51  #define AGGR_MODIFY_LACP_TIMER          0x08
  50   52  
  51   53  /*
  52   54   * Possible value of aggr_rseudo_rx_ring_t.arr_flags. Set when the ring entry
  53   55   * in the pseudo RX group is used.
  54   56   */
  55   57  #define MAC_PSEUDO_RING_INUSE   0x01
  56   58  
       59 +/*
       60 + * VLAN filters placed on the Rx pseudo group.
       61 + */
       62 +typedef struct aggr_vlan {
       63 +        list_node_t     av_link;
       64 +        uint16_t        av_vid;         /* VLAN ID */
       65 +        uint_t          av_refs;        /* num aggr clients using this VID */
       66 +} aggr_vlan_t;
       67 +
  57   68  typedef struct aggr_unicst_addr_s {
  58   69          uint8_t                         aua_addr[ETHERADDRL];
  59   70          struct aggr_unicst_addr_s       *aua_next;
  60   71  } aggr_unicst_addr_t;
  61   72  
  62   73  typedef struct aggr_pseudo_rx_ring_s {
  63   74          mac_ring_handle_t       arr_rh; /* filled in by aggr_fill_ring() */
  64   75          struct aggr_port_s      *arr_port;
  65   76          mac_ring_handle_t       arr_hw_rh;
  66   77          uint_t                  arr_flags;
  67   78          uint64_t                arr_gen;
  68   79  } aggr_pseudo_rx_ring_t;
  69   80  
  70   81  typedef struct aggr_pseudo_rx_group_s {
  71   82          struct aggr_grp_s       *arg_grp; /* filled in by aggr_fill_group() */
  72   83          mac_group_handle_t      arg_gh;   /* filled in by aggr_fill_group() */
  73   84          aggr_unicst_addr_t      *arg_macaddr;
  74   85          aggr_pseudo_rx_ring_t   arg_rings[MAX_RINGS_PER_GROUP];
  75   86          uint_t                  arg_ring_cnt;
       87 +        uint_t                  arg_untagged; /* num clients untagged */
       88 +        list_t                  arg_vlans;    /* VLANs on this group */
  76   89  } aggr_pseudo_rx_group_t;
  77   90  
  78   91  typedef struct aggr_pseudo_tx_ring_s {
  79   92          mac_ring_handle_t       atr_rh; /* filled in by aggr_fill_ring() */
  80   93          struct aggr_port_s      *atr_port;
  81   94          mac_ring_handle_t       atr_hw_rh;
  82   95          uint_t                  atr_flags;
  83   96  } aggr_pseudo_tx_ring_t;
  84   97  
  85   98  typedef struct aggr_pseudo_tx_group_s {
↓ open down ↓ 93 lines elided ↑ open up ↑
 179  192          aggr_port_t     *lg_mac_addr_port;
 180  193          mac_handle_t    lg_mh;
 181  194          zoneid_t        lg_zoneid;
 182  195          uint_t          lg_nattached_ports;
 183  196          krwlock_t       lg_tx_lock;
 184  197          uint_t          lg_ntx_ports;
 185  198          aggr_port_t     **lg_tx_ports;          /* array of tx ports */
 186  199          uint_t          lg_tx_ports_size;       /* size of lg_tx_ports */
 187  200          uint32_t        lg_tx_policy;           /* outbound policy */
 188  201          uint8_t         lg_mac_tx_policy;
 189      -        uint64_t        lg_ifspeed;
 190  202          link_state_t    lg_link_state;
      203 +
      204 +
      205 +        /*
      206 +         * The lg_stat_lock must be held when accessing these fields.
      207 +         */
      208 +        kmutex_t        lg_stat_lock;
      209 +        uint64_t        lg_ifspeed;
 191  210          link_duplex_t   lg_link_duplex;
 192  211          uint64_t        lg_stat[MAC_NSTAT];
 193  212          uint64_t        lg_ether_stat[ETHER_NSTAT];
      213 +
 194  214          aggr_lacp_mode_t lg_lacp_mode;          /* off, active, or passive */
 195  215          Agg_t           aggr;                   /* 802.3ad data */
 196  216          uint32_t        lg_hcksum_txflags;
 197  217          uint_t          lg_max_sdu;
 198  218          uint32_t        lg_margin;
 199  219          mac_capab_lso_t lg_cap_lso;
 200  220  
 201  221          /*
 202  222           * The following fields are used by the LACP packets processing.
 203  223           * Specifically, as the LACP packets processing is not performance
↓ open down ↓ 97 lines elided ↑ open up ↑
 301  321  extern int aggr_port_start(aggr_port_t *);
 302  322  extern void aggr_port_stop(aggr_port_t *);
 303  323  extern int aggr_port_promisc(aggr_port_t *, boolean_t);
 304  324  extern int aggr_port_unicst(aggr_port_t *);
 305  325  extern int aggr_port_multicst(void *, boolean_t, const uint8_t *);
 306  326  extern uint64_t aggr_port_stat(aggr_port_t *, uint_t);
 307  327  extern boolean_t aggr_port_notify_link(aggr_grp_t *, aggr_port_t *);
 308  328  extern void aggr_port_init_callbacks(aggr_port_t *);
 309  329  
 310  330  extern void aggr_recv_cb(void *, mac_resource_handle_t, mblk_t *, boolean_t);
      331 +extern void aggr_recv_promisc_cb(void *, mac_resource_handle_t, mblk_t *,
      332 +    boolean_t);
 311  333  
 312  334  extern void aggr_tx_ring_update(void *, uintptr_t);
 313  335  extern void aggr_tx_notify_thread(void *);
 314  336  extern void aggr_send_port_enable(aggr_port_t *);
 315  337  extern void aggr_send_port_disable(aggr_port_t *);
 316  338  extern void aggr_send_update_policy(aggr_grp_t *, uint32_t);
 317  339  
 318  340  extern void aggr_lacp_init(void);
 319  341  extern void aggr_lacp_fini(void);
 320  342  extern void aggr_lacp_init_port(aggr_port_t *);
↓ open down ↓ 10 lines elided ↑ open up ↑
 331  353  extern void aggr_lacp_rx_thread(void *);
 332  354  extern void aggr_recv_lacp(aggr_port_t *, mac_resource_handle_t, mblk_t *);
 333  355  
 334  356  extern void aggr_grp_port_hold(aggr_port_t *);
 335  357  extern void aggr_grp_port_rele(aggr_port_t *);
 336  358  extern void aggr_grp_port_wait(aggr_grp_t *);
 337  359  
 338  360  extern int aggr_port_addmac(aggr_port_t *, const uint8_t *);
 339  361  extern void aggr_port_remmac(aggr_port_t *, const uint8_t *);
 340  362  
      363 +extern int aggr_port_addvlan(aggr_port_t *, uint16_t);
      364 +extern int aggr_port_remvlan(aggr_port_t *, uint16_t);
      365 +
 341  366  extern mblk_t *aggr_ring_tx(void *, mblk_t *);
 342  367  extern mblk_t *aggr_find_tx_ring(void *, mblk_t *,
 343  368      uintptr_t, mac_ring_handle_t *);
 344  369  
 345  370  #endif  /* _KERNEL */
 346  371  
 347  372  #ifdef  __cplusplus
 348  373  }
 349  374  #endif
 350  375  
 351  376  #endif  /* _SYS_AGGR_IMPL_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX