NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/38871 (vlans don't work on bge interface)



The following reply was made to PR kern/38871; it has been noted by GNATS.

From: masanobu%iij.ad.jp@localhost
To: gnats-bugs%NetBSD.org@localhost, mihai.chelaru%NGNetworks.ro@localhost
Cc: kern-bug-people%netbsd.org@localhost, gnats-admin%netbsd.org@localhost, 
netbsd-bugs%netbsd.org@localhost,
        apb%cequrux.com@localhost
Subject: Re: kern/38871 (vlans don't work on bge interface)
Date: Tue, 29 Jun 2010 19:58:49 +0900 (JST)

  Hi, all.
 
  This patch will fix the problem. Many drivers check ec_capenable
 correctly (though if_vlan doesn't set it...), but some don't.
 
 
  if_vlan.c:
        Set ETHERCAP_VLAN_HWTAGGING into 
ec_capenable........................................
 
  if_bge.c:
        Set BGE_RX_MODE correctly.
 
  if_age.c:
        Check ec_capenable instead of ec_capabilities.
 
  if_ale.c:
        Check ec_capenable instead of if_capabilities. (Double fault)
 
  rtl8169.c:
        Check ec_capenable instead of if_capenable.
        
 
 
 ================
 Index: net/if_vlan.c
 ===================================================================
 RCS file: /cvsroot/src/sys/net/if_vlan.c,v
 retrieving revision 1.66
 diff -u -r1.66 if_vlan.c
 --- net/if_vlan.c      5 Apr 2010 07:22:24 -0000       1.66
 +++ net/if_vlan.c      29 Jun 2010 10:48:05 -0000
 @@ -317,6 +317,7 @@
                 * offload.
                 */
                if (ec->ec_capabilities & ETHERCAP_VLAN_HWTAGGING)
 +                      ec->ec_capenable |= ETHERCAP_VLAN_HWTAGGING;
                        ifp->if_capabilities = p->if_capabilities &
                            (IFCAP_TSOv4 | IFCAP_TSOv6 |
                             IFCAP_CSUM_IPv4_Tx|IFCAP_CSUM_IPv4_Rx|
 Index: dev/pci/if_age.c
 ===================================================================
 RCS file: /cvsroot/src/sys/dev/pci/if_age.c,v
 retrieving revision 1.38
 diff -u -r1.38 if_age.c
 --- dev/pci/if_age.c   5 Apr 2010 07:20:24 -0000       1.38
 +++ dev/pci/if_age.c   29 Jun 2010 10:48:06 -0000
 @@ -2235,7 +2235,7 @@
  
        reg = CSR_READ_4(sc, AGE_MAC_CFG);
        reg &= ~MAC_CFG_VLAN_TAG_STRIP;
 -      if (sc->sc_ec.ec_capabilities & ETHERCAP_VLAN_HWTAGGING)
 +      if (sc->sc_ec.ec_capenable & ETHERCAP_VLAN_HWTAGGING)
                reg |= MAC_CFG_VLAN_TAG_STRIP;
        CSR_WRITE_4(sc, AGE_MAC_CFG, reg);
  }
 Index: dev/pci/if_ale.c
 ===================================================================
 RCS file: /cvsroot/src/sys/dev/pci/if_ale.c,v
 retrieving revision 1.11
 diff -u -r1.11 if_ale.c
 --- dev/pci/if_ale.c   5 Apr 2010 07:20:25 -0000       1.11
 +++ dev/pci/if_ale.c   29 Jun 2010 10:48:06 -0000
 @@ -1973,12 +1973,12 @@
  static void
  ale_rxvlan(struct ale_softc *sc)
  {
 -      struct ifnet *ifp = &sc->sc_ec.ec_if;
 +      struct ethercom *ec = &sc->sc_ec;
        uint32_t reg;
  
        reg = CSR_READ_4(sc, ALE_MAC_CFG);
        reg &= ~MAC_CFG_VLAN_TAG_STRIP;
 -      if (ifp->if_capabilities & ETHERCAP_VLAN_HWTAGGING)
 +      if (ec->ec_capenable & ETHERCAP_VLAN_HWTAGGING)
                reg |= MAC_CFG_VLAN_TAG_STRIP;
        CSR_WRITE_4(sc, ALE_MAC_CFG, reg);
  }
 Index: dev/pci/if_bge.c
 ===================================================================
 RCS file: /cvsroot/src/sys/dev/pci/if_bge.c,v
 retrieving revision 1.185
 diff -u -r1.185 if_bge.c
 --- dev/pci/if_bge.c   3 Jun 2010 00:05:36 -0000       1.185
 +++ dev/pci/if_bge.c   29 Jun 2010 10:48:07 -0000
 @@ -221,6 +221,7 @@
  static uint8_t bge_eeprom_getbyte(struct bge_softc *, int, uint8_t *);
  static int bge_read_eeprom(struct bge_softc *, void *, int, int);
  static void bge_setmulti(struct bge_softc *);
 +static void bge_setvlan(struct bge_softc *);
  
  static void bge_handle_events(struct bge_softc *);
  static int bge_alloc_jumbo_mem(struct bge_softc *);
 @@ -1648,6 +1649,18 @@
  }
  
  static void
 +bge_setvlan(struct bge_softc *sc)
 +{
 +      struct ethercom *ac = &sc->ethercom;
 +
 +      /* Enable or disable VLAN tag stripping as needed. */
 +      if (ac->ec_capenable & ETHERCAP_VLAN_HWTAGGING)
 +              BGE_CLRBIT(sc, BGE_RX_MODE, BGE_RXMODE_RX_KEEP_VLAN_DIAG);
 +      else
 +              BGE_SETBIT(sc, BGE_RX_MODE, BGE_RXMODE_RX_KEEP_VLAN_DIAG);
 +}
 +
 +static void
  bge_sig_pre_reset(struct bge_softc *sc, int type)
  {
        /*
 @@ -4315,6 +4328,9 @@
        /* Program multicast filter. */
        bge_setmulti(sc);
  
 +      /* Program VLAN tag stripping. */
 +      bge_setvlan(sc);
 +
        /* Init RX ring. */
        bge_init_rx_ring_std(sc);
  
 Index: dev/ic/rtl8169.c
 ===================================================================
 RCS file: /cvsroot/src/sys/dev/ic/rtl8169.c,v
 retrieving revision 1.131
 diff -u -r1.131 rtl8169.c
 --- dev/ic/rtl8169.c   9 Apr 2010 10:40:59 -0000       1.131
 +++ dev/ic/rtl8169.c   29 Jun 2010 10:48:07 -0000
 @@ -1739,7 +1739,7 @@
        if ((sc->sc_quirk & RTKQ_8169NONS) != 0)
                cfg |= (0x1 << 14);
  
 -      if ((ifp->if_capenable & ETHERCAP_VLAN_HWTAGGING) != 0)
 +      if ((sc->ethercom.ec_capenable & ETHERCAP_VLAN_HWTAGGING) != 0)
                cfg |= RE_CPLUSCMD_VLANSTRIP;
        if ((ifp->if_capenable & (IFCAP_CSUM_IPv4_Rx |
             IFCAP_CSUM_TCPv4_Rx | IFCAP_CSUM_UDPv4_Rx)) != 0)
 ================
 
 
 
 
 From: Mihai Chelaru <mihai.chelaru%NGNetworks.ro@localhost>
 Subject: Re: kern/38871 (vlans don't work on bge interface)
 Date: Mon, 21 Jun 2010 10:55:02 +0000 (UTC)
 
 > The following reply was made to PR kern/38871; it has been noted by GNATS.
 > 
 > From: Mihai Chelaru <mihai.chelaru%NGNetworks.ro@localhost>
 > To: gnats-bugs%NetBSD.org@localhost
 > Cc: dholland%NetBSD.org@localhost, kern-bug-people%netbsd.org@localhost, 
 >  netbsd-bugs%netbsd.org@localhost, gnats-admin%netbsd.org@localhost, 
 > apb%cequrux.com@localhost
 > Subject: Re: kern/38871 (vlans don't work on bge interface)
 > Date: Mon, 21 Jun 2010 13:50:48 +0300
 > 
 >  On 06/21/10 06:00, dholland%NetBSD.org@localhost wrote:
 >  > Synopsis: vlans don't work on bge interface
 >  > 
 >  > Responsible-Changed-From-To: port-i386-maintainer->kern-bug-people
 >  > Responsible-Changed-By: dholland%NetBSD.org@localhost
 >  > Responsible-Changed-When: Mon, 21 Jun 2010 03:00:44 +0000
 >  > Responsible-Changed-Why:
 >  > bring this to wider attention (doesn't appear to be i386-specific)
 >  > 
 >  > 
 >  > State-Changed-From-To: feedback->open
 >  > State-Changed-By: dholland%NetBSD.org@localhost
 >  > State-Changed-When: Mon, 21 Jun 2010 03:00:44 +0000
 >  > State-Changed-Why:
 >  > submitter can't test.
 >  > 
 >  > Does anyone out there have a bge(4) and vlan environment?
 >  > 
 >  > 
 >  > 
 >  > 
 >  
 >  
 >  # uname -r
 >  5.99.29
 >  # tcpdump -plnvvvex -i vlan0 port not ssh
 >  tcpdump: listening on vlan0, link-type EN10MB (Ethernet), capture size
 >  96 bytes
 >  13:41:11.863747 00:22:15:80:ac:e8 > ff:ff:ff:ff:ff:ff, ethertype ARP
 >  (0x0806), length 64: arp who-has 5.5.5.1 tell 5.5.5.2
 >  ...
 


Home | Main Index | Thread Index | Old Index