summaryrefslogtreecommitdiff
path: root/lib/netdev-linux.c
diff options
context:
space:
mode:
authorJesse Gross <jesse@nicira.com>2010-05-14 13:54:16 -0700
committerJesse Gross <jesse@nicira.com>2010-05-18 12:57:25 -0700
commit2158888d8d8f3b4c00dcf979390a19fa7fcf7942 (patch)
treeb60e6cb26c9f354511a709aa6e108192d4aa1bcd /lib/netdev-linux.c
parent43694e2a8d950f62781ec6dc613b5dac32de35fd (diff)
downloadopenvswitch-2158888d8d8f3b4c00dcf979390a19fa7fcf7942.tar.gz
patch: Remove veth driver.
Now that we have a new patch implementation, remove the veth driver and its userspace components. Then rename 'patchnew' to 'patch'. The new implementation is a drop-in replacement for the old one.
Diffstat (limited to 'lib/netdev-linux.c')
-rw-r--r--lib/netdev-linux.c208
1 files changed, 0 insertions, 208 deletions
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
index e9fabc5b8..b8d24ed99 100644
--- a/lib/netdev-linux.c
+++ b/lib/netdev-linux.c
@@ -90,10 +90,6 @@ struct tap_state {
int fd;
};
-struct patch_state {
- char *peer;
-};
-
struct netdev_dev_linux {
struct netdev_dev netdev_dev;
@@ -115,7 +111,6 @@ struct netdev_dev_linux {
union {
struct tap_state tap;
- struct patch_state patch;
} state;
};
@@ -243,123 +238,6 @@ netdev_linux_cache_cb(const struct rtnetlink_change *change,
}
}
-static int
-if_up(const char *name)
-{
- struct ifreq ifr;
-
- strncpy(ifr.ifr_name, name, sizeof ifr.ifr_name);
- ifr.ifr_flags = IFF_UP;
-
- if (ioctl(af_inet_sock, SIOCSIFFLAGS, &ifr) == -1) {
- VLOG_DBG_RL(&rl, "%s: failed to bring device up: %s",
- name, strerror(errno));
- return errno;
- }
-
- return 0;
-}
-
-/* A veth may be created using the 'command' "+<name>,<peer>". A veth may
- * be destroyed by using the 'command' "-<name>", where <name> can be
- * either side of the device.
- */
-static int
-modify_veth(const char *format, ...)
-{
- FILE *veth_file;
- va_list args;
- int retval;
-
- veth_file = fopen("/sys/class/net/veth_pairs", "w");
- if (!veth_file) {
- VLOG_WARN_RL(&rl, "could not open veth device. Are you running a "
- "supported XenServer with the kernel module loaded?");
- return ENODEV;
- }
- setvbuf(veth_file, NULL, _IONBF, 0);
-
- va_start(args, format);
- retval = vfprintf(veth_file, format, args);
- va_end(args);
-
- fclose(veth_file);
- if (retval < 0) {
- VLOG_WARN_RL(&rl, "could not destroy patch: %s", strerror(errno));
- return errno;
- }
-
- return 0;
-}
-
-static int
-create_patch(const char *name, const char *peer)
-{
- int retval;
- struct netdev_dev *peer_nd;
-
-
- /* Only create the veth if the peer didn't already do it. */
- peer_nd = netdev_dev_from_name(peer);
- if (peer_nd) {
- if (!strcmp("patch", netdev_dev_get_type(peer_nd))) {
- struct netdev_dev_linux *ndl = netdev_dev_linux_cast(peer_nd);
- if (!strcmp(name, ndl->state.patch.peer)) {
- return 0;
- } else {
- VLOG_WARN_RL(&rl, "peer '%s' already paired with '%s'",
- peer, ndl->state.patch.peer);
- return EINVAL;
- }
- } else {
- VLOG_WARN_RL(&rl, "peer '%s' exists and is not a patch", peer);
- return EINVAL;
- }
- }
-
- retval = modify_veth("+%s,%s", name, peer);
- if (retval) {
- return retval;
- }
-
- retval = if_up(name);
- if (retval) {
- return retval;
- }
-
- retval = if_up(peer);
- if (retval) {
- return retval;
- }
-
- return 0;
-}
-
-static int
-setup_patch(const char *name, const struct shash *args, char **peer_)
-{
- const char *peer;
-
- peer = shash_find_data(args, "peer");
- if (!peer) {
- VLOG_WARN("patch type requires valid 'peer' argument");
- return EINVAL;
- }
-
- if (shash_count(args) > 1) {
- VLOG_WARN("patch type takes only a 'peer' argument");
- return EINVAL;
- }
-
- if (strlen(peer) >= IFNAMSIZ) {
- VLOG_WARN_RL(&rl, "patch 'peer' arg too long");
- return EINVAL;
- }
-
- *peer_ = xstrdup(peer);
- return create_patch(name, peer);
-}
-
/* Creates the netdev device of 'type' with 'name'. */
static int
netdev_linux_create_system(const char *name, const char *type OVS_UNUSED,
@@ -444,28 +322,6 @@ error:
return error;
}
-static int
-netdev_linux_create_patch(const char *name, const char *type OVS_UNUSED,
- const struct shash *args, struct netdev_dev **netdev_devp)
-{
- struct netdev_dev_linux *netdev_dev;
- char *peer = NULL;
- int error;
-
- error = setup_patch(name, args, &peer);
- if (error) {
- free(peer);
- return error;
- }
-
- netdev_dev = xzalloc(sizeof *netdev_dev);
- netdev_dev->state.patch.peer = peer;
- netdev_dev_init(&netdev_dev->netdev_dev, name, &netdev_patch_class);
- *netdev_devp = &netdev_dev->netdev_dev;
-
- return 0;
-}
-
static void
destroy_tap(struct netdev_dev_linux *netdev_dev)
{
@@ -476,19 +332,6 @@ destroy_tap(struct netdev_dev_linux *netdev_dev)
}
}
-static void
-destroy_patch(struct netdev_dev_linux *netdev_dev)
-{
- const char *name = netdev_dev_get_name(&netdev_dev->netdev_dev);
- struct patch_state *state = &netdev_dev->state.patch;
-
- /* Only destroy veth if 'peer' doesn't exist as an existing netdev. */
- if (!netdev_dev_from_name(state->peer)) {
- modify_veth("-%s", name);
- }
- free(state->peer);
-}
-
/* Destroys the netdev device 'netdev_dev_'. */
static void
netdev_linux_destroy(struct netdev_dev *netdev_dev_)
@@ -504,8 +347,6 @@ netdev_linux_destroy(struct netdev_dev *netdev_dev_)
}
} else if (!strcmp(type, "tap")) {
destroy_tap(netdev_dev);
- } else if (!strcmp(type, "patch")) {
- destroy_patch(netdev_dev);
}
free(netdev_dev);
@@ -1844,55 +1685,6 @@ const struct netdev_class netdev_tap_class = {
netdev_linux_poll_remove,
};
-const struct netdev_class netdev_patch_class = {
- "patch",
-
- netdev_linux_init,
- netdev_linux_run,
- netdev_linux_wait,
-
- netdev_linux_create_patch,
- netdev_linux_destroy,
- NULL, /* reconfigure */
-
- netdev_linux_open,
- netdev_linux_close,
-
- NULL, /* enumerate */
-
- netdev_linux_recv,
- netdev_linux_recv_wait,
- netdev_linux_drain,
-
- netdev_linux_send,
- netdev_linux_send_wait,
-
- netdev_linux_set_etheraddr,
- netdev_linux_get_etheraddr,
- netdev_linux_get_mtu,
- netdev_linux_get_ifindex,
- netdev_linux_get_carrier,
- netdev_linux_get_stats,
- NULL, /* set_stats */
-
- netdev_linux_get_features,
- netdev_linux_set_advertisements,
- netdev_linux_get_vlan_vid,
- netdev_linux_set_policing,
-
- netdev_linux_get_in4,
- netdev_linux_set_in4,
- netdev_linux_get_in6,
- netdev_linux_add_router,
- netdev_linux_get_next_hop,
- netdev_linux_arp_lookup,
-
- netdev_linux_update_flags,
-
- netdev_linux_poll_add,
- netdev_linux_poll_remove,
-};
-
static int
get_stats_via_netlink(int ifindex, struct netdev_stats *stats)