Print this page
11493 aggr needs support for multiple pseudo rx groups
Portions contributed by: Dan McDonald <danmcd@joyent.com>
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>

*** 240,259 **** #define MC_PROPERTIES (MC_SETPROP | MC_GETPROP | MC_PROPINFO) /* * Virtualization Capabilities */ /* ! * The ordering of entries below is important. MAC_HW_CLASSIFIER ! * is the cutoff below which are entries which don't depend on ! * H/W. MAC_HW_CLASSIFIER and entries after that are cases where ! * H/W has been updated through add/modify/delete APIs. */ typedef enum { MAC_NO_CLASSIFIER = 0, MAC_SW_CLASSIFIER, ! MAC_HW_CLASSIFIER } mac_classify_type_t; typedef void (*mac_rx_func_t)(void *, mac_resource_handle_t, mblk_t *, boolean_t); --- 240,302 ---- #define MC_PROPERTIES (MC_SETPROP | MC_GETPROP | MC_PROPINFO) /* * Virtualization Capabilities */ + /* ! * The type of ring classification. This is used by MAC to determine ! * what, if any, processing it has to do upon receiving traffic on a ! * particular Rx ring. ! * ! * MAC_NO_CLASSIFIER ! * ! * No classification has been set. No traffic should cross an Rx ! * ring in this state. ! * ! * MAC_SW_CLASSIFIER ! * ! * The driver delivers traffic for multiple clients to this ring. ! * All traffic must be software classified by MAC to guarantee ! * delivery to the correct client. This classification type may ! * be chosen for several reasons. ! * ! * o The driver provides only one group and there are multiple ! * clients using the MAC. ! * ! * o The driver provides some hardware filtering but not enough ! * to fully classify the traffic. E.g., a VLAN VNIC requires L2 ! * unicast address filtering as well as VLAN filtering, but ! * some drivers may only support the former. ! * ! * o The ring belongs to the default group. The default group ! * acts as a spillover for all clients that can't reserve an ! * exclusive group. It also handles multicast traffic for all ! * clients. For these reasons, the default group's rings are ! * always software classified. ! * ! * MAC_HW_CLASSIFIER ! * ! * The driver delivers traffic for a single MAC client across ! * this ring. With this guarantee, MAC can simply pass the ! * traffic up the stack or even allow polling of the ring. ! * ! * MAC_PASSTHRU_CLASSIFIER ! * ! * The ring is in "passthru" mode. In this mode we bypass all of ! * the typical MAC processing and pass the traffic directly to ! * the mr_pt_fn callback, see mac_rx_common(). This is used in ! * cases where there is another module acting as MAC provider on ! * behalf of the driver. E.g., link aggregations use this mode to ! * take full control of the port's rings; allowing it to enforce ! * LACP protocols and aggregate rings across discrete drivers. */ typedef enum { MAC_NO_CLASSIFIER = 0, MAC_SW_CLASSIFIER, ! MAC_HW_CLASSIFIER, ! MAC_PASSTHRU_CLASSIFIER } mac_classify_type_t; typedef void (*mac_rx_func_t)(void *, mac_resource_handle_t, mblk_t *, boolean_t);
*** 362,371 **** --- 405,415 ---- union { mac_ring_send_t send; mac_ring_poll_t poll; } mrfunion; mac_ring_stat_t mri_stat; + /* * mri_flags will have some bits set to indicate some special * property/feature of a ring like serialization needed for a * Tx ring or packets should always need enqueuing on Rx side, * etc.