netdev: Add 'patch' userspace implementation.
[sliver-openvswitch.git] / datapath / linux-2.6 / compat-2.6 / veth.c
index 3cda336..26d8dd9 100644 (file)
@@ -437,31 +437,30 @@ static ssize_t veth_store_veth_pairs(struct class *cls, const char *buffer,
 {
        int c = *buffer++;
        int retval;
-       printk("1\n");
        if (c == '+') {
                char devname[IFNAMSIZ + 1] = "";
                char peername[IFNAMSIZ + 1] = "";
                char *comma = strchr(buffer, ',');
-               printk("2\n");
                if (!comma)
                        goto err_no_cmd;
                strncat(devname, buffer,
                        min_t(int, sizeof devname, comma - buffer));
                strncat(peername, comma + 1,
                        min_t(int, sizeof peername, strcspn(comma + 1, "\n")));
-               printk("3 '%s' '%s'\n", devname, peername);
                if (!dev_valid_name(devname) || !dev_valid_name(peername))
                        goto err_no_cmd;
-               printk("4\n");
                rtnl_lock();
                retval = veth_newlink(devname, peername);
                rtnl_unlock();
                return retval ? retval : count;
        } else if (c == '-') {
+               char devname[IFNAMSIZ + 1] = "";
                struct net_device *dev;
 
+               strncat(devname, buffer,
+                       min_t(int, sizeof devname, strcspn(buffer, "\n")));
                rtnl_lock();
-               dev = dev_get_by_name(buffer);
+               dev = __dev_get_by_name(devname);
                if (!dev)
                        retval = -ENODEV;
                else if (dev->init != veth_dev_init)
@@ -527,7 +526,17 @@ static __init int veth_init(void)
 
 static __exit void veth_exit(void)
 {
+       struct veth_priv *p, *n;
+
+       rtnl_lock();
+
+       list_for_each_entry_safe(p, n, &veth_list, list)
+               veth_dellink(p->dev);
+
+       rtnl_unlock();
+
        unregister_netdevice_notifier(&veth_notifier_block);
+       veth_destroy_sysfs();
 }
 
 module_init(veth_init);