freebsd_network: Automatically switch to jumbo-sized MTUs if possible.
Unfortunately there is no way to ask if a device supports jumbo MTUs besides actually activating it. But that's fine, because for now, Haiku's own network stack does not actually support changing MTUs at the device level! Probably that should be fixed, too, but that is a problem for another day. With preceding commits, this fixes #17728, and all BSD network drivers will use jumbo frames if possible by default.
This commit is contained in:
parent
3ea7c99119
commit
44604448de
@ -236,7 +236,18 @@ compat_control(void *cookie, uint32 op, void *arg, size_t length)
|
||||
if (length < 4)
|
||||
return B_BAD_VALUE;
|
||||
|
||||
frameSize = ifp->if_mtu + ETHER_HDR_LEN;
|
||||
// This is (usually) only invoked during initialization to get the
|
||||
// maximum frame size. Thus we try to set the largest possible one,
|
||||
// as there is no way to determine what the driver might support.
|
||||
struct ifreq ifr;
|
||||
ifr.ifr_mtu = ETHERMTU_JUMBO;
|
||||
if (compat_control(cookie, SIOCSIFMTU, &ifr, sizeof(ifr)) != 0) {
|
||||
// Try again with 4K at least.
|
||||
ifr.ifr_mtu = 4096 - (ETHER_HDR_LEN + ETHER_CRC_LEN);
|
||||
compat_control(cookie, SIOCSIFMTU, &ifr, sizeof(ifr));
|
||||
}
|
||||
|
||||
frameSize = ifp->if_mtu + (ETHER_HDR_LEN + ETHER_CRC_LEN);
|
||||
return user_memcpy(arg, &frameSize, 4);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user