Date: Thu, 2 Nov 2006 14:00:44 GMT From: Ruslan Ermilov <ru@FreeBSD.org> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/105054: vge driver sends VLAN IDs in wrong endian. Message-ID: <200611021400.kA2E0i7J043516@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/105054; it has been noted by GNATS. From: Ruslan Ermilov <ru@FreeBSD.org> To: Ian <yoitsmeremember@users.sourceforge.net> Cc: bug-followup@FreeBSD.org Subject: Re: kern/105054: vge driver sends VLAN IDs in wrong endian. Date: Thu, 2 Nov 2006 16:58:31 +0300 --jL2BoiuKMElzg3CS Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable I looked at the VIA provided Linux driver sources, and it appears that VTAG should be inserted in little-endian. Unfortunately, your suggested fix is incorrect. Please try the following patch instead (pick up the right version) and report back. This is for RELENG_6: %%% Index: if_vge.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/ncvs/src/sys/dev/vge/if_vge.c,v retrieving revision 1.14.2.8 diff -u -p -r1.14.2.8 if_vge.c --- if_vge.c 5 Sep 2006 07:06:15 -0000 1.14.2.8 +++ if_vge.c 2 Nov 2006 13:40:02 -0000 @@ -1490,8 +1490,7 @@ vge_rxeof(sc) } =20 if (rxstat & VGE_RDSTS_VTAG) { - VLAN_INPUT_TAG_NEW(ifp, m, - ntohs((rxctl & VGE_RDCTL_VLANID))); + VLAN_INPUT_TAG_NEW(ifp, m, rxctl & VGE_RDCTL_VLANID); if (m =3D=3D NULL) continue; } @@ -1819,7 +1818,7 @@ vge_encap(sc, m_head, idx) mtag =3D VLAN_OUTPUT_TAG(sc->vge_ifp, m_head); if (mtag !=3D NULL) sc->vge_ldata.vge_tx_list[idx].vge_ctl |=3D - htole32(htons(VLAN_TAG_VALUE(mtag)) | VGE_TDCTL_VTAG); + htole32((uint16_t)VLAN_TAG_VALUE(mtag) | VGE_TDCTL_VTAG); =20 sc->vge_ldata.vge_tx_list[idx].vge_sts |=3D htole32(VGE_TDSTS_OWN); =20 %%% This is for HEAD: %%% Index: if_vge.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/ncvs/src/sys/dev/vge/if_vge.c,v retrieving revision 1.26 diff -u -p -r1.26 if_vge.c --- if_vge.c 17 Sep 2006 13:33:29 -0000 1.26 +++ if_vge.c 2 Nov 2006 13:41:51 -0000 @@ -1490,8 +1490,7 @@ vge_rxeof(sc) } =20 if (rxstat & VGE_RDSTS_VTAG) { - m->m_pkthdr.ether_vtag =3D - ntohs((rxctl & VGE_RDCTL_VLANID)); + m->m_pkthdr.ether_vtag =3D rxctl & VGE_RDCTL_VLANID; m->m_flags |=3D M_VLANTAG; } =20 @@ -1816,7 +1815,7 @@ vge_encap(sc, m_head, idx) =20 if (m_head->m_flags & M_VLANTAG) sc->vge_ldata.vge_tx_list[idx].vge_ctl |=3D - htole32(htons(m_head->m_pkthdr.ether_vtag) | VGE_TDCTL_VTAG); + htole32(m_head->m_pkthdr.ether_vtag | VGE_TDCTL_VTAG); =20 sc->vge_ldata.vge_tx_list[idx].vge_sts |=3D htole32(VGE_TDSTS_OWN); =20 %%% Cheers, --=20 Ruslan Ermilov ru@FreeBSD.org FreeBSD committer --jL2BoiuKMElzg3CS Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (FreeBSD) iD8DBQFFSfmHqRfpzJluFF4RAvf0AJ9QVxk5QHLDcX4amiO3cANwablO+QCcDOTi fhfE2wnkrEoV7cNLzb3SaXU= =IpyW -----END PGP SIGNATURE----- --jL2BoiuKMElzg3CS--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200611021400.kA2E0i7J043516>