Date: Sat, 6 Dec 2008 11:22:05 +0900 From: Pyun YongHyeon <pyunyh@gmail.com> To: Vladimir Ermakov <samflanker@gmail.com> Cc: freebsd-net@freebsd.org Subject: Re: vlan support trouble in if_sis driver ? Message-ID: <20081206022205.GD22093@cdnetworks.co.kr> In-Reply-To: <49392FDD.8050209@gmail.com> References: <49392FDD.8050209@gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--1LKvkjL3sHcu1TtY Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Fri, Dec 05, 2008 at 04:42:53PM +0300, Vladimir Ermakov wrote: > Hello > > Using sis card (SiS 900) > sis0: <SiS 900 10/100BaseTX> port 0xe800-0xe8ff mem > 0xed160000-0xed160fff irq 19 at device 4.0 on pci0 > > # uname -a > FreeBSD damask 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 > UTC 2008 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386 > > # netstat -bin > Name Mtu Network Address Ipkts Ierrs Ibytes > Opkts Oerrs Obytes Coll > sis0 1500 <Link#1> 00:0d:61:xx:xx:xx 356 4 > 40934 155 0 29276 0 > em0 1500 <Link#2> 00:02:55:xx:xx:xx 0 0 > 0 0 0 0 0 > lo0 16384 <Link#3> 0 0 > 0 0 0 0 0 > lo0 16384 fe80:3::1/64 fe80:3::1 0 - > 0 0 - 0 - > lo0 16384 ::1/128 ::1 0 - > 0 0 - 0 - > lo0 16384 127.0.0.0/8 127.0.0.1 0 - > 0 0 - 0 - > vlan0 1500 <Link#4> 00:02:55:xx:xx:xx 0 0 > 0 0 0 0 0 > vlan1 1500 <Link#5> 00:0d:61:xx:xx:xx 255 0 > 29543 155 0 28656 0 > > # ifconfig sis0 > sis0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 > options=8<VLAN_MTU> > ether 00:0d:61:xx:xx:xx > media: Ethernet autoselect (100baseTX <full-duplex>) > status: active > # ifconfig vlan1 > vlan1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 > ether 00:0d:61:xx:xx:xx > inet 192.168.1.221 netmask 0xffffff80 broadcast 192.168.1.255 > media: Ethernet autoselect (100baseTX <full-duplex>) > status: active > vlan: 12 parent interface: sis0 > > noticed the following troubles with using interface vlan1 (vlandev sis0): > - can not download a file using fget tool > - increases Ierrs on the physical interface sis0 > > this bug in if_sis driver ? I don't have sis(4) hardwares so I'm not sure it's bug. Since you see Ierrs on parent interface sis0, I guess the hardware might set a giant bit when it receives VLAN frames. Driver might think it received errored frames which in turn make driver drop these VLAN frames. Would you try attached patch?(Just compile tested). -- Regards, Pyun YongHyeon --1LKvkjL3sHcu1TtY Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="sis.vlan.patch" Index: sys/dev/sis/if_sisreg.h =================================================================== --- sys/dev/sis/if_sisreg.h (revision 185658) +++ sys/dev/sis/if_sisreg.h (working copy) @@ -348,6 +348,11 @@ #define SIS_RXSTAT_OVERRUN 0x02000000 #define SIS_RXSTAT_RX_ABORT 0x04000000 +#define SIS_RXSTAT_ERROR(x) \ + ((x) & (SIS_RXSTAT_RX_ABORT | SIS_RXSTAT_OVERRUN | \ + SIS_RXSTAT_GIANT | SIS_RXSTAT_SYMBOLERR | SIS_RXSTAT_RUNT | \ + SIS_RXSTAT_CRCERR | SIS_RXSTAT_ALIGNERR)) + #define SIS_DSTCLASS_REJECT 0x00000000 #define SIS_DSTCLASS_UNICAST 0x00800000 #define SIS_DSTCLASS_MULTICAST 0x01000000 Index: sys/dev/sis/if_sis.c =================================================================== --- sys/dev/sis/if_sis.c (revision 185658) +++ sys/dev/sis/if_sis.c (working copy) @@ -1432,7 +1432,11 @@ * it should simply get re-used next time this descriptor * comes up in the ring. */ - if (!(rxstat & SIS_CMDSTS_PKT_OK)) { + if ((ifp->if_capenable & IFCAP_VLAN_MTU) != 0 && + total_len <= (ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN - + ETHER_CRC_LEN)) + rxstat &= ~SIS_RXSTAT_GIANT; + if (SIS_RXSTAT_ERROR(rxstat) != 0) { ifp->if_ierrors++; if (rxstat & SIS_RXSTAT_COLL) ifp->if_collisions++; --1LKvkjL3sHcu1TtY--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20081206022205.GD22093>