diff options
author | yongari <yongari@FreeBSD.org> | 2006-11-21 04:23:52 +0000 |
---|---|---|
committer | yongari <yongari@FreeBSD.org> | 2006-11-21 04:23:52 +0000 |
commit | 31dadd4d684390cafbda57c8ff033ff9812b64a0 (patch) | |
tree | 4e15d613bf215592a5c6cecf31fcc626f74434cb /sys/dev | |
parent | 8a793a6af6814354bd74ee44c8342ed495f3f46e (diff) | |
download | FreeBSD-src-31dadd4d684390cafbda57c8ff033ff9812b64a0.zip FreeBSD-src-31dadd4d684390cafbda57c8ff033ff9812b64a0.tar.gz |
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.
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/re/if_re.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c index 5ef8995..e9ca0f1 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: |