Skip to content
  • Venkat Duvvuru's avatar
    be2net: don't enable multicast flag in be_enable_if_filters() routine · c1bb0a55
    Venkat Duvvuru authored
    
    
    When the interface is opened (in be_open()) the routine
    be_enable_if_filters() must be called to switch on the basic filtering
    capabilities of an interface that are not changed at run-time.
    These include the flags UNTAGGED, BROADCAST and PASS_L3L4_ERRORS.
    Other flags such as MULTICAST and PROMISC must be enabled later by
    be_set_rx_mode() based on the state in the netdev/adapter struct.
    
    be_enable_if_filters() routine is wrongly trying to enable MULTICAST flag
    without checking the current adapter state. This can cause the RX_FILTER
    cmds to the FW to fail.  This patch fixes this problem by only enabling
    the basic filtering flags in be_enable_if_filters().
    
    The VF must be able to issue RX_FILTER cmd with any filter flag, as long
    as the PF allowed those flags (if_cap_flags) in the iface it provisioned
    for the VF. This rule is applicable even when the VF doesn't have the
    FILTMGMT privilege. There is a bug in BE3 FW that wrongly fails RX_FILTER
    multicast programming cmds on VFs that don't have FILTMGMT privilege.
    This patch also helps in insulating the VF driver from be_open failures due
    to the FW bug. A fix for the BE3 FW issue will be available in
    versions >= 11.0.283.0 and 10.6.334.0
    
    Reported-by: default avatarIvan Vecera <ivecera@redhat.com>
    Signed-off-by: default avatarVenkat Duvvuru <venkatkumar.duvvuru@avagotech.com>
    Signed-off-by: default avatarSathya Perla <sathya.perla@broadcom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c1bb0a55