The branch stable/13 has been updated by zlei:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=afaa32661b482323c3cce149fb74aa7b3b14ffa5

commit afaa32661b482323c3cce149fb74aa7b3b14ffa5
Author:     Zhenlei Huang <z...@freebsd.org>
AuthorDate: 2024-10-12 13:56:56 +0000
Commit:     Zhenlei Huang <z...@freebsd.org>
CommitDate: 2025-07-08 10:03:28 +0000

    axgbe: Fix setting promisc mode
    
    Ethernet drivers should respect IFF_PROMISC rather than IFF_PPROMISC.
    The latter is for user-requested promisc mode, it implies the former
    but not vice versa. Some in-kernel components such as if_bridge(4) and
    bpf(4) will set promisc mode for interfaces on-demand.
    
    While here, update the debugging message to be not confusing.
    
    This was spotted while reviewing markj@ 's work D46524.
    
    Test from Franco shows that the interface seems to be unconditionally
    initialized to promisc mode regardless of this fix. That needs further
    investigation.
    
    Reviewed by:    markj, Franco Fichtner <fra...@opnsense.org>
    Tested by:      Franco Fichtner <fra...@opnsense.org>
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D46794
    
    (cherry picked from commit c7a2636889a649985e323de23fe495608b6fe483)
---
 sys/dev/axgbe/if_axgbe_pci.c | 10 ++++++----
 sys/dev/axgbe/xgbe-dev.c     |  2 +-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/sys/dev/axgbe/if_axgbe_pci.c b/sys/dev/axgbe/if_axgbe_pci.c
index 679de1c6092a..52f9abaafb45 100644
--- a/sys/dev/axgbe/if_axgbe_pci.c
+++ b/sys/dev/axgbe/if_axgbe_pci.c
@@ -2342,11 +2342,11 @@ axgbe_if_promisc_set(if_ctx_t ctx, int flags)
        struct ifnet *ifp = pdata->netdev;
 
        axgbe_printf(1, "%s: MAC_PFR 0x%x drv_flags 0x%x if_flags 0x%x\n",
-           __func__, XGMAC_IOREAD(pdata, MAC_PFR), ifp->if_drv_flags, 
ifp->if_flags);
+           __func__, XGMAC_IOREAD(pdata, MAC_PFR), ifp->if_drv_flags, flags);
 
-       if (ifp->if_flags & IFF_PPROMISC) {
+       if (flags & IFF_PROMISC) {
 
-               axgbe_printf(1, "User requested to enter promisc mode\n");
+               axgbe_printf(1, "Requested to enter promisc mode\n");
 
                if (XGMAC_IOREAD_BITS(pdata, MAC_PFR, PR) == 1) {
                        axgbe_printf(1, "Already in promisc mode\n");
@@ -2355,10 +2355,11 @@ axgbe_if_promisc_set(if_ctx_t ctx, int flags)
 
                axgbe_printf(1, "Entering promisc mode\n");
                XGMAC_IOWRITE_BITS(pdata, MAC_PFR, PR, 1);
+               /* Disable VLAN filtering */
                XGMAC_IOWRITE_BITS(pdata, MAC_PFR, VTFE, 0);
        } else {
 
-               axgbe_printf(1, "User requested to leave promisc mode\n");
+               axgbe_printf(1, "Requested to leave promisc mode\n");
 
                if (XGMAC_IOREAD_BITS(pdata, MAC_PFR, PR) == 0) {
                        axgbe_printf(1, "Already not in promisc mode\n");
@@ -2367,6 +2368,7 @@ axgbe_if_promisc_set(if_ctx_t ctx, int flags)
 
                axgbe_printf(1, "Leaving promisc mode\n");
                XGMAC_IOWRITE_BITS(pdata, MAC_PFR, PR, 0);
+               /* Enable VLAN filtering */
                XGMAC_IOWRITE_BITS(pdata, MAC_PFR, VTFE, 1);
        }
 
diff --git a/sys/dev/axgbe/xgbe-dev.c b/sys/dev/axgbe/xgbe-dev.c
index 214ff8d4fbe3..beffa47cae7e 100644
--- a/sys/dev/axgbe/xgbe-dev.c
+++ b/sys/dev/axgbe/xgbe-dev.c
@@ -971,7 +971,7 @@ xgbe_config_rx_mode(struct xgbe_prv_data *pdata)
 {
        unsigned int pr_mode, am_mode;
 
-       pr_mode = ((pdata->netdev->if_flags & IFF_PPROMISC) != 0);
+       pr_mode = ((pdata->netdev->if_flags & IFF_PROMISC) != 0);
        am_mode = ((pdata->netdev->if_flags & IFF_ALLMULTI) != 0);
 
        xgbe_set_promiscuous_mode(pdata, pr_mode);

Reply via email to