X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Fdp_sysfs_if.c;fp=datapath%2Fbrc_sysfs_if.c;h=95c26dc420bf8b325662d8b1b572530effddd497;hb=8fef8c7121222233075a03d57db7e0b48d5f6be5;hp=7a9b8b8956013e1e2a274185d49484dfdf0775a6;hpb=6dd3fad481b5d801695c2b0529c7d37cac2c9b19;p=sliver-openvswitch.git diff --git a/datapath/brc_sysfs_if.c b/datapath/dp_sysfs_if.c similarity index 89% rename from datapath/brc_sysfs_if.c rename to datapath/dp_sysfs_if.c index 7a9b8b895..95c26dc42 100644 --- a/datapath/brc_sysfs_if.c +++ b/datapath/dp_sysfs_if.c @@ -18,7 +18,7 @@ #include #include #include -#include "brc_sysfs.h" +#include "dp_sysfs.h" #include "datapath.h" #ifdef CONFIG_SYSFS @@ -266,77 +266,64 @@ struct sysfs_ops brport_sysfs_ops = { .store = brport_store, }; -static void release_nbp(struct kobject *kobj) -{ - struct net_bridge_port *p - = container_of(kobj, struct net_bridge_port, kobj); - kfree(p); -} - -struct kobj_type brport_ktype = { - .sysfs_ops = &brport_sysfs_ops, - .release = release_nbp -}; - /* * Add sysfs entries to ethernet device added to a bridge. * Creates a brport subdirectory with bridge attributes. * Puts symlink in bridge's brport subdirectory */ -int brc_sysfs_add_if(struct net_bridge_port *p) +int dp_sysfs_add_if(struct net_bridge_port *p) { struct datapath *dp = p->dp; struct brport_attribute **a; int err; - err = kobject_init_and_add(&p->kobj, &brport_ktype, - &(p->dev->NETDEV_DEV_MEMBER.kobj), - SYSFS_BRIDGE_PORT_ATTR); + /* Create /sys/class/net//brport directory. */ + err = kobject_add(&p->kobj, &p->dev->NETDEV_DEV_MEMBER.kobj, + SYSFS_BRIDGE_PORT_ATTR); if (err) goto err; + /* Create symlink from /sys/class/net//brport/bridge to + * /sys/class/net/. */ err = sysfs_create_link(&p->kobj, &dp->ports[ODPP_LOCAL]->dev->NETDEV_DEV_MEMBER.kobj, - SYSFS_BRIDGE_PORT_LINK); + SYSFS_BRIDGE_PORT_LINK); /* "bridge" */ if (err) goto err_del; + /* Populate /sys/class/net//brport directory with files. */ for (a = brport_attrs; *a; ++a) { err = sysfs_create_file(&p->kobj, &((*a)->attr)); if (err) goto err_del; } -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25) + /* Create symlink from /sys/class/net//brif/ to + * /sys/class/net//brport. */ err = sysfs_create_link(&dp->ifobj, &p->kobj, p->dev->name); -#else - err = sysfs_create_link(dp->ifobj, &p->kobj, p->dev->name); -#endif if (err) goto err_del; + strcpy(p->linkname, p->dev->name); kobject_uevent(&p->kobj, KOBJ_ADD); - return err; + return 0; err_del: kobject_del(&p->kobj); - kobject_put(&p->kobj); err: + p->linkname[0] = 0; return err; } -int brc_sysfs_del_if(struct net_bridge_port *p) +int dp_sysfs_del_if(struct net_bridge_port *p) { - struct net_device *dev = p->dev; - - kobject_uevent(&p->kobj, KOBJ_REMOVE); - kobject_del(&p->kobj); - - dev_put(dev); - - kobject_put(&p->kobj); - + if (p->linkname[0]) { + sysfs_remove_link(&p->dp->ifobj, p->linkname); + kobject_uevent(&p->kobj, KOBJ_REMOVE); + kobject_del(&p->kobj); + p->linkname[0] = '\0'; + } return 0; } #endif /* CONFIG_SYSFS */