X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fnetdev-linux.c;h=49475360db0344bf834bd6847c9006a3280b7855;hb=a79c50f3df6197381c0ad8e91216ba2c5253473d;hp=a100898a5d2c3fe695852822658d23a25422aee6;hpb=f8500004409c30ff929b8cff367a39dab76f85c6;p=openvswitch diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index a100898a..49475360 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -802,9 +802,9 @@ netdev_linux_recv(struct netdev *netdev_, void *data, size_t size) } for (;;) { - ssize_t retval = read(netdev->fd, data, size); + ssize_t retval = recv(netdev->fd, data, size, MSG_TRUNC); if (retval >= 0) { - return retval; + return retval <= size ? retval : -EMSGSIZE; } else if (errno != EINTR) { if (errno != EAGAIN) { VLOG_WARN_RL(&rl, "error receiving Ethernet packet on %s: %s", @@ -1030,6 +1030,10 @@ netdev_linux_set_mtu(const struct netdev *netdev_, int mtu) 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"); @@ -1244,8 +1248,8 @@ get_stats_via_vport(const struct netdev *netdev_, error = netdev_vport_get_stats(netdev_, stats); if (error) { - VLOG_WARN_RL(&rl, "%s: obtaining netdev stats via vport failed %d", - netdev_get_name(netdev_), error); + VLOG_WARN_RL(&rl, "%s: obtaining netdev stats via vport failed " + "(%s)", netdev_get_name(netdev_), strerror(error)); } netdev_dev->have_vport_stats = !error; netdev_dev->cache_valid |= VALID_HAVE_VPORT_STATS;