{
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)
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);