static struct netdev_dev_tunnel *
netdev_dev_tunnel_cast(const struct netdev_dev *netdev_dev)
{
- assert(is_tunnel_class(netdev_dev_get_class(netdev_dev)));
+ ovs_assert(is_tunnel_class(netdev_dev_get_class(netdev_dev)));
return CONTAINER_OF(netdev_dev, struct netdev_dev_tunnel, netdev_dev);
}
netdev_tunnel_cast(const struct netdev *netdev)
{
struct netdev_dev *netdev_dev = netdev_get_dev(netdev);
- assert(is_tunnel_class(netdev_dev_get_class(netdev_dev)));
+ ovs_assert(is_tunnel_class(netdev_dev_get_class(netdev_dev)));
return CONTAINER_OF(netdev, struct netdev_tunnel, netdev);
}
if (netdev_dev->valid_remote_ip)
smap_add_format(args, "remote_ip", IP_FMT,
- IP_ARGS(&netdev_dev->remote_addr.sin_addr));
+ IP_ARGS(netdev_dev->remote_addr.sin_addr.s_addr));
if (netdev_dev->valid_remote_port)
smap_add_format(args, "remote_port", "%"PRIu16,
ntohs(netdev_dev->remote_addr.sin_port));
for (;;) {
ssize_t retval;
retval = recv(dev->sockfd, buffer, size, MSG_TRUNC);
- VLOG_DBG("%s: recv(%"PRIxPTR", %"PRIu64", MSG_TRUNC) = %"PRId64,
+ VLOG_DBG("%s: recv(%"PRIxPTR", %zu, MSG_TRUNC) = %zd",
netdev_get_name(netdev_), (uintptr_t)buffer, size, retval);
if (retval >= 0) {
dev->stats.rx_packets++;
for (;;) {
ssize_t retval;
retval = send(dev->sockfd, buffer, size, 0);
- VLOG_DBG("%s: send(%"PRIxPTR", %"PRIu64") = %"PRId64,
+ VLOG_DBG("%s: send(%"PRIxPTR", %zu) = %zd",
netdev_get_name(netdev_), (uintptr_t)buffer, size, retval);
if (retval >= 0) {
dev->stats.tx_packets++;
- dev->stats.tx_bytes++;
+ dev->stats.tx_bytes += retval;
if (retval != size) {
- VLOG_WARN_RL(&rl, "sent partial Ethernet packet (%"PRId64" bytes of "
- "%"PRIu64") on %s", retval, size, netdev_get_name(netdev_));
+ VLOG_WARN_RL(&rl, "sent partial Ethernet packet (%zd bytes of "
+ "%zu) on %s", retval, size, netdev_get_name(netdev_));
dev->stats.tx_errors++;
}
return 0;
unixctl_command_reply(conn, buf);
}
+static void
+netdev_tunnel_get_tx_bytes(struct unixctl_conn *conn,
+ int argc OVS_UNUSED, const char *argv[], void *aux OVS_UNUSED)
+{
+ struct netdev_dev_tunnel *tunnel_dev;
+ char buf[128];
+
+ tunnel_dev = shash_find_data(&tunnel_netdev_devs, argv[1]);
+ if (!tunnel_dev) {
+ unixctl_command_reply_error(conn, "no such tunnel netdev");
+ return;
+ }
+
+ sprintf(buf, "%"PRIu64, tunnel_dev->stats.tx_bytes);
+ unixctl_command_reply(conn, buf);
+}
+
+static void
+netdev_tunnel_get_rx_bytes(struct unixctl_conn *conn,
+ int argc OVS_UNUSED, const char *argv[], void *aux OVS_UNUSED)
+{
+ struct netdev_dev_tunnel *tunnel_dev;
+ char buf[128];
+
+ tunnel_dev = shash_find_data(&tunnel_netdev_devs, argv[1]);
+ if (!tunnel_dev) {
+ unixctl_command_reply_error(conn, "no such tunnel netdev");
+ return;
+ }
+
+ sprintf(buf, "%"PRIu64, tunnel_dev->stats.rx_bytes);
+ unixctl_command_reply(conn, buf);
+}
+
static int
netdev_tunnel_init(void)
{
unixctl_command_register("netdev-tunnel/get-port", "NAME",
1, 1, netdev_tunnel_get_port, NULL);
+ unixctl_command_register("netdev-tunnel/get-tx-bytes", "NAME",
+ 1, 1, netdev_tunnel_get_tx_bytes, NULL);
+ unixctl_command_register("netdev-tunnel/get-rx-bytes", "NAME",
+ 1, 1, netdev_tunnel_get_rx_bytes, NULL);
return 0;
}
netdev_tunnel_destroy,
netdev_tunnel_get_config,
netdev_tunnel_set_config,
+ NULL, /* get_tunnel_config */
netdev_tunnel_open,
netdev_tunnel_close,