diff options
| author | Pyun YongHyeon <yongari@FreeBSD.org> | 2009-12-20 19:45:46 +0000 |
|---|---|---|
| committer | Pyun YongHyeon <yongari@FreeBSD.org> | 2009-12-20 19:45:46 +0000 |
| commit | 33a0d70b864a6b53fe640f05c796fc78b4f0c267 (patch) | |
| tree | 05fd98c71ba8173fc6710b7c2e424db0f50547d1 /sys/dev/vge | |
| parent | 564340e7cf57a82382df8774612e01ba80478efc (diff) | |
Notes
Diffstat (limited to 'sys/dev/vge')
| -rw-r--r-- | sys/dev/vge/if_vge.c | 15 | ||||
| -rw-r--r-- | sys/dev/vge/if_vgevar.h | 1 |
2 files changed, 13 insertions, 3 deletions
diff --git a/sys/dev/vge/if_vge.c b/sys/dev/vge/if_vge.c index 5ad6ed8456f0..fa54bbe3fc1c 100644 --- a/sys/dev/vge/if_vge.c +++ b/sys/dev/vge/if_vge.c @@ -1013,7 +1013,8 @@ vge_attach(device_t dev) if (pci_find_extcap(dev, PCIY_EXPRESS, &cap) == 0) { sc->vge_flags |= VGE_FLAG_PCIE; sc->vge_expcap = cap; - } + } else + sc->vge_flags |= VGE_FLAG_JUMBO; if (pci_find_extcap(dev, PCIY_PMG, &cap) == 0) { sc->vge_flags |= VGE_FLAG_PMCAP; sc->vge_pmcap = cap; @@ -2221,9 +2222,17 @@ vge_ioctl(struct ifnet *ifp, u_long command, caddr_t data) switch (command) { case SIOCSIFMTU: - if (ifr->ifr_mtu > VGE_JUMBO_MTU) + VGE_LOCK(sc); + if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > VGE_JUMBO_MTU) error = EINVAL; - ifp->if_mtu = ifr->ifr_mtu; + else if (ifp->if_mtu != ifr->ifr_mtu) { + if (ifr->ifr_mtu > ETHERMTU && + (sc->vge_flags & VGE_FLAG_JUMBO) == 0) + error = EINVAL; + else + ifp->if_mtu = ifr->ifr_mtu; + } + VGE_UNLOCK(sc); break; case SIOCSIFFLAGS: VGE_LOCK(sc); diff --git a/sys/dev/vge/if_vgevar.h b/sys/dev/vge/if_vgevar.h index da8f6c51c86b..ca899cc5fc0a 100644 --- a/sys/dev/vge/if_vgevar.h +++ b/sys/dev/vge/if_vgevar.h @@ -187,6 +187,7 @@ struct vge_softc { #define VGE_FLAG_PCIE 0x0001 #define VGE_FLAG_MSI 0x0002 #define VGE_FLAG_PMCAP 0x0004 +#define VGE_FLAG_JUMBO 0x0008 #define VGE_FLAG_SUSPENDED 0x4000 #define VGE_FLAG_LINK 0x8000 int vge_expcap; |
