Skip to content

Commit

Permalink
dummy: fixed to use overlooked numdummies=0 option
Browse files Browse the repository at this point in the history
This avoids the bugs and races caused by the workaround
attempt in commit 45c698f of pull request #511 / 0.6.16.
  • Loading branch information
mtomaschewski authored and wipawel committed Feb 18, 2015
1 parent 42ed081 commit 0d464e2
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 39 deletions.
44 changes: 5 additions & 39 deletions src/ifconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,12 @@
#ifndef TUNNEL4_MODULE_NAME
#define TUNNEL4_MODULE_NAME "tunnel4"
#endif

#ifndef DUMMY_MODULE_NAME
#define DUMMY_MODULE_NAME "dummy"
#endif
#ifndef DUMMY_MODULE_OPTS
#define DUMMY_MODULE_OPTS "numdummies=0"
#endif

static int __ni_netdev_update_addrs(ni_netdev_t *dev,
const ni_addrconf_lease_t *old_lease,
Expand All @@ -109,7 +111,6 @@ static int __ni_rtnl_link_change(ni_netdev_t *dev, const ni_netdev_t *cfg);

static int __ni_rtnl_link_change_mtu(ni_netdev_t *dev, unsigned int mtu);
static int __ni_rtnl_link_change_hwaddr(ni_netdev_t *dev, const ni_hwaddr_t *hwaddr);
static int __ni_rtnl_link_rename(unsigned int ifindex, const char *oldname, const char *newname);

static int __ni_rtnl_link_up(const ni_netdev_t *, const ni_netdev_req_t *);
static int __ni_rtnl_link_down(const ni_netdev_t *);
Expand Down Expand Up @@ -858,7 +859,6 @@ int
ni_system_dummy_create(ni_netconfig_t *nc, const ni_netdev_t *cfg,
ni_netdev_t **dev_ret)
{
unsigned int dummy0[2] = { 0, 0 };
ni_netdev_t *dev;
int err;

Expand All @@ -881,42 +881,8 @@ ni_system_dummy_create(ni_netconfig_t *nc, const ni_netdev_t *cfg,
return -NI_ERROR_DEVICE_EXISTS;
}

if (!dummy0[0] && ni_modprobe(DUMMY_MODULE_NAME, NULL) < 0)
ni_warn("failed to load %s module", DUMMY_MODULE_NAME);

dummy0[1] = if_nametoindex("dummy0");
if (dummy0[1] && !dummy0[0]) {
ni_debug_ifconfig("%s: using modprobe created dummy0[%u]",
cfg->name, dummy0[1]);

if (!ni_string_eq("dummy0", cfg->name)) {
if ((err = __ni_rtnl_link_rename(dummy0[1], "dummy0", cfg->name)) < 0)
return err;
}

if (!(dev = ni_netdev_new(cfg->name, dummy0[1]))) {
ni_error("%s: unable to allocate %s netdev structure for index %u: %m",
cfg->name, "dummy", dummy0[1]);
return -1;
}

__ni_device_refresh_link_info(nc, &dev->link);
dev->created = 1;
dev->link.ifflags &= ~(NI_IFF_DEVICE_UP | NI_IFF_LINK_UP | NI_IFF_NETWORK_UP);
ni_netconfig_device_append(nc, ni_netdev_get(dev));

*dev_ret = dev;
if (dev->link.type != NI_IFTYPE_DUMMY) {
ni_error("%s: created %s interface, but found a %s type at index %u",
cfg->name, "dummy", ni_linktype_type_to_name(dev->link.type),
dummy0[1]);
return -NI_ERROR_DEVICE_EXISTS;
}
ni_debug_ifconfig("%s: created %s interface with index %u",
dev->name, ni_linktype_type_to_name(dev->link.type),
dev->link.ifindex);
return 0;
}
if (ni_modprobe(DUMMY_MODULE_NAME, DUMMY_MODULE_OPTS) < 0)
ni_warn("failed to load %s network driver module", DUMMY_MODULE_NAME);

ni_debug_ifconfig("%s: creating dummy interface", cfg->name);

Expand Down
1 change: 1 addition & 0 deletions src/kernel.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ extern int __ni_tuntap_create(const ni_netdev_t *);
extern char * __ni_ppp_create_device(ni_ppp_t *, const char *);

extern int __ni_netdev_rename(const char *old_name, const char *new_name);
extern int __ni_rtnl_link_rename(unsigned int ifindex, const char *oldname, const char *newname);

extern const void * __ni_nla_get_data(size_t, const struct nlattr *);
extern int __ni_nla_get_addr(int, ni_sockaddr_t *, const struct nlattr *);
Expand Down

0 comments on commit 0d464e2

Please sign in to comment.