diff --git a/src/lxc/confile.c b/src/lxc/confile.c index 43b68bdd41..c55ea78729 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -48,6 +48,7 @@ #include "config.h" #include "confile.h" #include "confile_utils.h" +#include <../include/netns_ifaddrs.h> #include "log.h" #include "lxcseccomp.h" #include "network.h" @@ -55,12 +56,6 @@ #include "storage.h" #include "utils.h" -#if HAVE_IFADDRS_H -#include -#else -#include <../include/ifaddrs.h> -#endif - #if HAVE_SYS_PERSONALITY_H #include #endif @@ -324,14 +319,14 @@ static int set_config_net_flags(const char *key, const char *value, static int create_matched_ifnames(const char *value, struct lxc_conf *lxc_conf, struct lxc_netdev *netdev) { - struct ifaddrs *ifaddr, *ifa; + struct netns_ifaddrs *ifaddr, *ifa; int n; int ret = 0; const char *type_key = "lxc.net.type"; const char *link_key = "lxc.net.link"; const char *tmpvalue = "phys"; - if (getifaddrs(&ifaddr) == -1) { + if (netns_getifaddrs(&ifaddr, -1, &(bool){false}) < 0) { SYSERROR("Get network interfaces failed"); return -1; } @@ -359,7 +354,7 @@ static int create_matched_ifnames(const char *value, struct lxc_conf *lxc_conf, } } - freeifaddrs(ifaddr); + netns_freeifaddrs(ifaddr); ifaddr = NULL; return ret; diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index a6a7df2127..412fe0456c 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -53,6 +53,7 @@ #include "confile_utils.h" #include "criu.h" #include "error.h" +#include <../include/netns_ifaddrs.h> #include "initutils.h" #include "log.h" #include "lxc.h" @@ -78,12 +79,6 @@ #include #endif -#if HAVE_IFADDRS_H -#include -#else -#include <../include/ifaddrs.h> -#endif - #if IS_BIONIC #include <../include/lxcmntent.h> #else @@ -2327,7 +2322,7 @@ static char **do_lxcapi_get_interfaces(struct lxc_container *c) if (pid == 0) { /* child */ int ret = 1, nbytes; - struct ifaddrs *interfaceArray = NULL, *tempIfAddr = NULL; + struct netns_ifaddrs *interfaceArray = NULL, *tempIfAddr = NULL; /* close the read-end of the pipe */ close(pipefd[0]); @@ -2338,7 +2333,7 @@ static char **do_lxcapi_get_interfaces(struct lxc_container *c) } /* Grab the list of interfaces */ - if (getifaddrs(&interfaceArray)) { + if (netns_getifaddrs(&interfaceArray, -1, &(bool){false})) { SYSERROR("Failed to get interfaces list"); goto out; } @@ -2357,7 +2352,7 @@ static char **do_lxcapi_get_interfaces(struct lxc_container *c) out: if (interfaceArray) - freeifaddrs(interfaceArray); + netns_freeifaddrs(interfaceArray); /* close the write-end of the pipe, thus sending EOF to the reader */ close(pipefd[1]); @@ -2429,7 +2424,7 @@ static char **do_lxcapi_get_ips(struct lxc_container *c, const char *interface, int ret = 1; char *address = NULL; void *tempAddrPtr = NULL; - struct ifaddrs *interfaceArray = NULL, *tempIfAddr = NULL; + struct netns_ifaddrs *interfaceArray = NULL, *tempIfAddr = NULL; /* close the read-end of the pipe */ close(pipefd[0]); @@ -2440,7 +2435,7 @@ static char **do_lxcapi_get_ips(struct lxc_container *c, const char *interface, } /* Grab the list of interfaces */ - if (getifaddrs(&interfaceArray)) { + if (netns_getifaddrs(&interfaceArray, -1, &(bool){false})) { SYSERROR("Failed to get interfaces list"); goto out; } @@ -2496,7 +2491,7 @@ static char **do_lxcapi_get_ips(struct lxc_container *c, const char *interface, out: if (interfaceArray) - freeifaddrs(interfaceArray); + netns_freeifaddrs(interfaceArray); /* close the write-end of the pipe, thus sending EOF to the reader */ close(pipefd[1]); diff --git a/src/lxc/network.c b/src/lxc/network.c index 8bfe6a1a2f..62fdd90973 100644 --- a/src/lxc/network.c +++ b/src/lxc/network.c @@ -48,6 +48,7 @@ #include "af_unix.h" #include "conf.h" #include "config.h" +#include <../include/netns_ifaddrs.h> #include "file_utils.h" #include "log.h" #include "macro.h" @@ -55,12 +56,6 @@ #include "nl.h" #include "utils.h" -#if HAVE_IFADDRS_H -#include -#else -#include <../include/ifaddrs.h> -#endif - #ifndef HAVE_STRLCPY #include "include/strlcpy.h" #endif @@ -1950,7 +1945,7 @@ static const char padchar[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char *lxc_mkifname(char *template) { int ret; - struct ifaddrs *ifa, *ifaddr; + struct netns_ifaddrs *ifa, *ifaddr; char name[IFNAMSIZ]; bool exists = false; size_t i = 0; @@ -1967,7 +1962,7 @@ char *lxc_mkifname(char *template) return NULL; /* Get all the network interfaces. */ - ret = getifaddrs(&ifaddr); + ret = netns_getifaddrs(&ifaddr, -1, &(bool){false}); if (ret < 0) { SYSERROR("Failed to get network interfaces"); return NULL; @@ -2001,7 +1996,7 @@ char *lxc_mkifname(char *template) break; } - freeifaddrs(ifaddr); + netns_freeifaddrs(ifaddr); (void)strlcpy(template, name, strlen(template) + 1); return template; diff --git a/src/lxc/tools/lxc_device.c b/src/lxc/tools/lxc_device.c index e2f576d714..1d0c404150 100644 --- a/src/lxc/tools/lxc_device.c +++ b/src/lxc/tools/lxc_device.c @@ -30,15 +30,10 @@ #include #include "arguments.h" +#include "../../include/netns_ifaddrs.h" #include "log.h" #include "utils.h" -#if HAVE_IFADDRS_H -#include -#else -#include "../include/ifaddrs.h" -#endif - lxc_log_define(lxc_device, lxc); static bool is_interface(const char *dev_name, pid_t pid); @@ -73,7 +68,7 @@ static bool is_interface(const char *dev_name, pid_t pid) } if (p == 0) { - struct ifaddrs *interfaceArray = NULL, *tempIfAddr = NULL; + struct netns_ifaddrs *interfaceArray = NULL, *tempIfAddr = NULL; if (!switch_to_ns(pid, "net")) { ERROR("Failed to enter netns of container"); @@ -81,7 +76,7 @@ static bool is_interface(const char *dev_name, pid_t pid) } /* Grab the list of interfaces */ - if (getifaddrs(&interfaceArray)) { + if (netns_getifaddrs(&interfaceArray, -1, &(bool){false})) { ERROR("Failed to get interfaces list"); _exit(-1); }