> After survey about solution for Broadcom bnxt driver issue with promiscous 
> mode. I am not found any normal solution with that situation.
> Only workaround to using promiscous mode to have normal operations with these 
> cards. This isn't normal by me!
> 
> I look and do some debug on bnxt driver. Issue came from hardware filter in 
> ASIC. On init driver and its ring buffers default states of filter are all 
> block. Also I saw that we have not ability to append configured VLANs on the 
> host into broadcom vlan tag list to be allowed for further processing from 
> network stack.
> Then my solution is simple and effective in such situation. I append to 
> filter mask bit for passing further for processing all tagged vlans and 
> native/primary vlan too.
> 
> This is enough to have normal packet processing for bnxt driver.
> We have such BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller. I 
> tested patch on them.
> 
> Patch is make on FreeBSD 14.0-CURRENT #3 main-n244973-c02a28754bc-dirty: Tue 
> Nov  2 20:53:08 EET 2021
> 
> If you are thinking it is ok. You can feel free to merge it to FreeBSD 
> existing driver.

This patch solved a big problem for me also. My environment is FreeBSD
12.2-STABLE (r370686), with a 2 port BCM57412. The bnxt interfaces
work fine as long as I configure IP address on the main (physical)
interface - no VLANs. If I configure a VLAN interface (e.g. bnxt1.91),
this only works if I put the main interface in promiscuous mode.

After updating if_bnxt.c with the patch from Michael Pounov, I am now
able to use VLAN interfaces without putting the main interface in
promiscuous mode.

This is the output from pciconf -lv:

bnxt0@pci0:24:0:0:      class=0x020000 card=0x412014e4 chip=0x16d614e4 rev=0x01 
hdr=0x00
    vendor     = 'Broadcom Inc. and subsidiaries'
    device     = 'BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller'
    class      = network
    subclass   = ethernet
bnxt1@pci0:24:0:1:      class=0x020000 card=0x412014e4 chip=0x16d614e4 rev=0x01 
hdr=0x00
    vendor     = 'Broadcom Inc. and subsidiaries'
    device     = 'BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller'
    class      = network
    subclass   = ethernet

Below I have enclosed the patch I used for 12.2-STABLE - the only
difference, as far as I can see, is slightly different line numbers.

Thank you Michael Pounov!

Steinar Haug, Nethelp consulting, sth...@nethelp.no

----------------------------------------------------------------------

--- sys/dev/bnxt/if_bnxt.c.orig 2021-09-28 21:25:17.000000000 +0200
+++ sys/dev/bnxt/if_bnxt.c      2021-11-04 07:59:24.720236000 +0100
@@ -587,7 +587,8 @@
        softc->vnic_info.def_ring_grp = (uint16_t)HWRM_NA_SIGNATURE;
        softc->vnic_info.cos_rule = (uint16_t)HWRM_NA_SIGNATURE;
        softc->vnic_info.lb_rule = (uint16_t)HWRM_NA_SIGNATURE;
-       softc->vnic_info.rx_mask = HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_BCAST;
+       softc->vnic_info.rx_mask = HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_BCAST |
+               HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ANYVLAN_NONVLAN;
        softc->vnic_info.mc_list_count = 0;
        softc->vnic_info.flags = BNXT_VNIC_FLAG_DEFAULT;
        rc = iflib_dma_alloc(ctx, BNXT_MAX_MC_ADDRS * ETHER_ADDR_LEN,
@@ -1384,8 +1385,7 @@
                    HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ANYVLAN_NONVLAN;
        else
                softc->vnic_info.rx_mask &=
-                   ~(HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_PROMISCUOUS |
-                   HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ANYVLAN_NONVLAN);
+                   ~(HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_PROMISCUOUS);
 
        rc = bnxt_hwrm_cfa_l2_set_rx_mask(softc, &softc->vnic_info);
 

Reply via email to