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>
*** 19,28 ****
--- 19,30 ----
* CDDL HEADER END
*/
/*
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ * Copyright 2012 OmniTI Computer Consulting, Inc All rights reserved.
+ * Copyright 2018 Joyent, Inc.
*/
#ifndef _SYS_AGGR_IMPL_H
#define _SYS_AGGR_IMPL_H
*** 52,61 ****
--- 54,72 ----
* Possible value of aggr_rseudo_rx_ring_t.arr_flags. Set when the ring entry
* in the pseudo RX group is used.
*/
#define MAC_PSEUDO_RING_INUSE 0x01
+ /*
+ * VLAN filters placed on the Rx pseudo group.
+ */
+ typedef struct aggr_vlan {
+ list_node_t av_link;
+ uint16_t av_vid; /* VLAN ID */
+ uint_t av_refs; /* num aggr clients using this VID */
+ } aggr_vlan_t;
+
typedef struct aggr_unicst_addr_s {
uint8_t aua_addr[ETHERADDRL];
struct aggr_unicst_addr_s *aua_next;
} aggr_unicst_addr_t;
*** 71,80 ****
--- 82,93 ----
struct aggr_grp_s *arg_grp; /* filled in by aggr_fill_group() */
mac_group_handle_t arg_gh; /* filled in by aggr_fill_group() */
aggr_unicst_addr_t *arg_macaddr;
aggr_pseudo_rx_ring_t arg_rings[MAX_RINGS_PER_GROUP];
uint_t arg_ring_cnt;
+ uint_t arg_untagged; /* num clients untagged */
+ list_t arg_vlans; /* VLANs on this group */
} aggr_pseudo_rx_group_t;
typedef struct aggr_pseudo_tx_ring_s {
mac_ring_handle_t atr_rh; /* filled in by aggr_fill_ring() */
struct aggr_port_s *atr_port;
*** 184,198 ****
uint_t lg_ntx_ports;
aggr_port_t **lg_tx_ports; /* array of tx ports */
uint_t lg_tx_ports_size; /* size of lg_tx_ports */
uint32_t lg_tx_policy; /* outbound policy */
uint8_t lg_mac_tx_policy;
- uint64_t lg_ifspeed;
link_state_t lg_link_state;
link_duplex_t lg_link_duplex;
uint64_t lg_stat[MAC_NSTAT];
uint64_t lg_ether_stat[ETHER_NSTAT];
aggr_lacp_mode_t lg_lacp_mode; /* off, active, or passive */
Agg_t aggr; /* 802.3ad data */
uint32_t lg_hcksum_txflags;
uint_t lg_max_sdu;
uint32_t lg_margin;
--- 197,218 ----
uint_t lg_ntx_ports;
aggr_port_t **lg_tx_ports; /* array of tx ports */
uint_t lg_tx_ports_size; /* size of lg_tx_ports */
uint32_t lg_tx_policy; /* outbound policy */
uint8_t lg_mac_tx_policy;
link_state_t lg_link_state;
+
+
+ /*
+ * The lg_stat_lock must be held when accessing these fields.
+ */
+ kmutex_t lg_stat_lock;
+ uint64_t lg_ifspeed;
link_duplex_t lg_link_duplex;
uint64_t lg_stat[MAC_NSTAT];
uint64_t lg_ether_stat[ETHER_NSTAT];
+
aggr_lacp_mode_t lg_lacp_mode; /* off, active, or passive */
Agg_t aggr; /* 802.3ad data */
uint32_t lg_hcksum_txflags;
uint_t lg_max_sdu;
uint32_t lg_margin;
*** 306,315 ****
--- 326,337 ----
extern uint64_t aggr_port_stat(aggr_port_t *, uint_t);
extern boolean_t aggr_port_notify_link(aggr_grp_t *, aggr_port_t *);
extern void aggr_port_init_callbacks(aggr_port_t *);
extern void aggr_recv_cb(void *, mac_resource_handle_t, mblk_t *, boolean_t);
+ extern void aggr_recv_promisc_cb(void *, mac_resource_handle_t, mblk_t *,
+ boolean_t);
extern void aggr_tx_ring_update(void *, uintptr_t);
extern void aggr_tx_notify_thread(void *);
extern void aggr_send_port_enable(aggr_port_t *);
extern void aggr_send_port_disable(aggr_port_t *);
*** 336,345 ****
--- 358,370 ----
extern void aggr_grp_port_wait(aggr_grp_t *);
extern int aggr_port_addmac(aggr_port_t *, const uint8_t *);
extern void aggr_port_remmac(aggr_port_t *, const uint8_t *);
+ extern int aggr_port_addvlan(aggr_port_t *, uint16_t);
+ extern int aggr_port_remvlan(aggr_port_t *, uint16_t);
+
extern mblk_t *aggr_ring_tx(void *, mblk_t *);
extern mblk_t *aggr_find_tx_ring(void *, mblk_t *,
uintptr_t, mac_ring_handle_t *);
#endif /* _KERNEL */