X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fnetdev-vport.c;h=58858f90fe23bc2f03e05d6e5c6c35e50f043181;hb=79903dd171cd7bdbb52710b98dbaa5de1537de87;hp=a81262a6cae5caa92d028b45ce73709bf964298f;hpb=777ece0952d1087e2ac1c3aa33e9dda1fe60add6;p=openvswitch diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index a81262a6..58858f90 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -158,6 +158,40 @@ netdev_vport_get_stats(const struct netdev *netdev, struct netdev_stats *stats) return 0; } +int +netdev_vport_set_stats(struct netdev *netdev, const struct netdev_stats *stats) +{ + struct odp_vport_stats_req ovsr; + int err; + + ovs_strlcpy(ovsr.devname, netdev_get_name(netdev), sizeof ovsr.devname); + + ovsr.stats.rx_packets = stats->rx_packets; + ovsr.stats.tx_packets = stats->tx_packets; + ovsr.stats.rx_bytes = stats->rx_bytes; + ovsr.stats.tx_bytes = stats->tx_bytes; + ovsr.stats.rx_errors = stats->rx_errors; + ovsr.stats.tx_errors = stats->tx_errors; + ovsr.stats.rx_dropped = stats->rx_dropped; + ovsr.stats.tx_dropped = stats->tx_dropped; + ovsr.stats.collisions = stats->collisions; + ovsr.stats.rx_over_err = stats->rx_over_errors; + ovsr.stats.rx_crc_err = stats->rx_crc_errors; + ovsr.stats.rx_frame_err = stats->rx_frame_errors; + + err = netdev_vport_do_ioctl(ODP_VPORT_STATS_SET, &ovsr); + + /* If the vport layer doesn't know about the device, that doesn't mean it + * doesn't exist (after all were able to open it when netdev_open() was + * called), it just means that it isn't attached and we'll be getting + * stats a different way. */ + if (err == ENODEV) { + err = EOPNOTSUPP; + } + + return err; +} + int netdev_vport_update_flags(struct netdev *netdev OVS_UNUSED, enum netdev_flags off, enum netdev_flags on OVS_UNUSED,