/* Create tap device. */
ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
- error = netdev_linux_do_ioctl(&netdev->netdev, &ifr,
- TUNSETIFF, "TUNSETIFF");
- if (error) {
+ strncpy(ifr.ifr_name, suffix, sizeof ifr.ifr_name);
+ if (ioctl(netdev->tap_fd, TUNSETIFF, &ifr) == -1) {
+ VLOG_WARN("%s: creating tap device failed: %s", suffix,
+ strerror(errno));
+ error = errno;
goto error;
}
if (netdev->tap_fd < 0) {
/* Device was opened with NETDEV_ETH_TYPE_NONE. */
- return EAGAIN;
+ return -EAGAIN;
}
for (;;) {
VLOG_WARN_RL(&rl, "error receiving Ethernet packet on %s: %s",
strerror(errno), netdev_get_name(netdev_));
}
- return errno;
+ return -errno;
}
}
}
"openvswitch");
}
}
+
+ netdev->cache->valid |= VALID_IS_INTERNAL;
}
if (netdev->cache->is_internal) {
if (!attrs[IFLA_STATS]) {
VLOG_WARN_RL(&rl, "RTM_GETLINK reply lacks stats");
+ ofpbuf_delete(reply);
return EPROTO;
}
stats->tx_heartbeat_errors = rtnl_stats->tx_heartbeat_errors;
stats->tx_window_errors = rtnl_stats->tx_window_errors;
+ ofpbuf_delete(reply);
+
return 0;
}