if (netdev->priv.veth_attr.pair[0] == '\0' &&
netdev->priv.veth_attr.veth1[0] == '\0') {
- char *tmp;
-
- tmp = lxc_mkifname(template);
- if (!tmp)
+ if (!lxc_mkifname(template))
goto out_unlock;
- strcpy(netdev->priv.veth_attr.veth1, tmp);
- free(tmp);
+ strcpy(netdev->priv.veth_attr.veth1, template);
}
}
static char *get_new_nicname(char *br, int pid, char **cnic)
{
int ret;
- char *nicname;
- char template[IFNAMSIZ];
+ char nicname[IFNAMSIZ];
- ret = snprintf(template, sizeof(template), "vethXXXXXX");
- if (ret < 0 || (size_t)ret >= sizeof(template))
+ ret = snprintf(nicname, sizeof(nicname), "vethXXXXXX");
+ if (ret < 0 || (size_t)ret >= sizeof(nicname))
return NULL;
- nicname = lxc_mkifname(template);
- if (!nicname)
+ if (!lxc_mkifname(nicname))
return NULL;
if (!create_nic(nicname, br, pid, cnic)) {
- free(nicname);
return NULL;
}
- return nicname;
+ return strdup(nicname);
}
struct entry_line {
out_delete:
if (netdev->ifindex != 0)
lxc_netdev_delete_by_name(veth1);
- if (netdev->priv.veth_attr.pair != veth1)
- free(veth1);
- free(veth2);
return -1;
}
if (err) {
ERROR("Failed to create macvlan interface \"%s\" on \"%s\": %s",
peer, netdev->link, strerror(-err));
- goto out;
+ goto on_error;
}
netdev->ifindex = if_nametoindex(peer);
if (!netdev->ifindex) {
ERROR("Failed to retrieve ifindex for \"%s\"", peer);
- goto out;
+ goto on_error;
}
if (netdev->upscript) {
err = run_script(handler->name, "net", netdev->upscript, "up",
"macvlan", netdev->link, (char*) NULL);
if (err)
- goto out;
+ goto on_error;
}
DEBUG("Instantiated macvlan \"%s\" with ifindex is %d and mode %d",
peer, netdev->ifindex, netdev->priv.macvlan_attr.mode);
return 0;
-out:
+
+on_error:
lxc_netdev_delete_by_name(peer);
- free(peer);
return -1;
}
static const char padchar[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-char *lxc_mkifname(const char *template)
+char *lxc_mkifname(char *template)
{
- int ifexists = 0;
- size_t i = 0;
- char *name = NULL;
unsigned int seed;
FILE *urandom;
struct ifaddrs *ifa, *ifaddr;
+ char name[IFNAMSIZ];
+ bool exists = false;
+ size_t i = 0;
if (strlen(template) >= IFNAMSIZ)
return NULL;
/* Generate random names until we find one that doesn't exist. */
while (true) {
- ifexists = 0;
- name = strdup(template);
-
- if (name == NULL)
- return NULL;
+ name[0] = '\0';
+ strcpy(name, template);
+ exists = false;
for (i = 0; i < strlen(name); i++) {
if (name[i] == 'X') {
#ifdef HAVE_RAND_R
- name[i] = padchar[rand_r(&seed) %
- (strlen(padchar) - 1)];
+ name[i] = padchar[rand_r(&seed) % (strlen(padchar) - 1)];
#else
name[i] = padchar[rand() % (strlen(padchar) - 1)];
#endif
}
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
- if (strcmp(ifa->ifa_name, name) == 0) {
- ifexists = 1;
+ if (!strcmp(ifa->ifa_name, name)) {
+ exists = true;
break;
}
}
- if (ifexists == 0)
+ if (!exists)
break;
-
- free(name);
}
freeifaddrs(ifaddr);
- return name;
+ return strcpy(template, name);
}
int setup_private_host_hw_addr(char *veth1)