From 960fd5b3d010cf60e2089c59d5b51b2c55cbd8fe Mon Sep 17 00:00:00 2001 From: Pyun YongHyeon Date: Tue, 21 Nov 2006 04:23:52 +0000 Subject: [PATCH] o Correctly set IFCAP_VLAN_HWCSUM as re(4) can do VLAN tagging/checksum offloading in hardware. o Correctly set media header length for VLAN. --- sys/dev/re/if_re.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c index 5ef8995f750..e9ca0f16c53 100644 --- a/sys/dev/re/if_re.c +++ b/sys/dev/re/if_re.c @@ -1257,14 +1257,10 @@ re_attach(dev) ifp->if_mtu = ETHERMTU; ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; ifp->if_ioctl = re_ioctl; - ifp->if_capabilities = IFCAP_VLAN_MTU; ifp->if_start = re_start; ifp->if_hwassist = RE_CSUM_FEATURES; - ifp->if_capabilities |= IFCAP_HWCSUM|IFCAP_VLAN_HWTAGGING; + ifp->if_capabilities = IFCAP_HWCSUM; ifp->if_capenable = ifp->if_capabilities; -#ifdef DEVICE_POLLING - ifp->if_capabilities |= IFCAP_POLLING; -#endif ifp->if_watchdog = re_watchdog; ifp->if_init = re_init; IFQ_SET_MAXLEN(&ifp->if_snd, RL_IFQ_MAXLEN); @@ -1279,6 +1275,21 @@ re_attach(dev) */ ether_ifattach(ifp, eaddr); + /* VLAN capability setup */ + ifp->if_capabilities |= IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING; + if (ifp->if_capabilities & IFCAP_HWCSUM) + ifp->if_capabilities |= IFCAP_VLAN_HWCSUM; + ifp->if_capenable = ifp->if_capabilities; +#ifdef DEVICE_POLLING + ifp->if_capabilities |= IFCAP_POLLING; +#endif + /* + * Tell the upper layer(s) we support long frames. + * Must appear after the call to ether_ifattach() because + * ether_ifattach() sets ifi_hdrlen to the default value. + */ + ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header); + #ifdef RE_DIAG /* * Perform hardware diagnostic on the original RTL8169. @@ -2542,6 +2553,7 @@ re_ioctl(ifp, command, data) } if (reinit && ifp->if_drv_flags & IFF_DRV_RUNNING) re_init(sc); + VLAN_CAPABILITIES(ifp); } break; default: