Skip to content

Commit

Permalink
Merge pull request #3487 from samboyles1/master
Browse files Browse the repository at this point in the history
Improve efficiency of lxc_ifname_alnum_case_sensitive
  • Loading branch information
Christian Brauner committed Jul 17, 2020
2 parents 19be19a + 4810a7a commit 8bbca3c
Showing 1 changed file with 2 additions and 18 deletions.
20 changes: 2 additions & 18 deletions src/lxc/network.c
Expand Up @@ -2754,9 +2754,7 @@ static const char padchar[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM
char *lxc_ifname_alnum_case_sensitive(char *template)
{
int ret;
struct netns_ifaddrs *ifa, *ifaddr;
char name[IFNAMSIZ];
bool exists = false;
size_t i = 0;
#ifdef HAVE_RAND_R
unsigned int seed;
Expand All @@ -2770,18 +2768,11 @@ char *lxc_ifname_alnum_case_sensitive(char *template)
if (strlen(template) >= IFNAMSIZ)
return NULL;

/* Get all the network interfaces. */
ret = netns_getifaddrs(&ifaddr, -1, &(bool){false});
if (ret < 0)
return log_error_errno(NULL, errno, "Failed to get network interfaces");

/* Generate random names until we find one that doesn't exist. */
for (;;) {
name[0] = '\0';
(void)strlcpy(name, template, IFNAMSIZ);

exists = false;

for (i = 0; i < strlen(name); i++) {
if (name[i] == 'X') {
#ifdef HAVE_RAND_R
Expand All @@ -2792,18 +2783,11 @@ char *lxc_ifname_alnum_case_sensitive(char *template)
}
}

for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
if (!strcmp(ifa->ifa_name, name)) {
exists = true;
break;
}
}

if (!exists)
if (if_nametoindex(name) == 0) {
break;
}
}

netns_freeifaddrs(ifaddr);
(void)strlcpy(template, name, strlen(template) + 1);

return template;
Expand Down

0 comments on commit 8bbca3c

Please sign in to comment.