for (;;) {
ssize_t retval = recv(netdev->fd, data, size, MSG_TRUNC);
- if (retval > size) {
- /* Received packet was longer than supplied buffer. */
- return -EMSGSIZE;
- } else if (retval >= 0) {
- return retval;
+ if (retval >= 0) {
+ return retval <= size ? retval : -EMSGSIZE;
} else if (errno != EINTR) {
if (errno != EAGAIN) {
VLOG_WARN_RL(&rl, "error receiving Ethernet packet on %s: %s",
struct ifreq ifr;
int error;
+ if (netdev_dev->cache_valid & VALID_MTU &&
+ netdev_dev->mtu == mtu) {
+ return 0;
+ }
ifr.ifr_mtu = mtu;
error = netdev_linux_do_ioctl(netdev_get_name(netdev_), &ifr,
SIOCSIFMTU, "SIOCSIFMTU");