From: Sergey Ryazanov Date: Sun, 22 Nov 2020 17:39:21 +0000 (+0300) Subject: ip: add IP_LIB_DIR environment variable X-Git-Tag: v5.11.0~32^2~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d7190d4ced59858f17da2ad7ce7e503a91ee7e44;p=thirdparty%2Fiproute2.git ip: add IP_LIB_DIR environment variable Do not hardcode /usr/lib/ip as a path and allow libraries path configuration in run-time. Signed-off-by: Sergey Ryazanov Signed-off-by: David Ahern --- diff --git a/ip/ip.c b/ip/ip.c index 466dbb526..40d2998ae 100644 --- a/ip/ip.c +++ b/ip/ip.c @@ -26,6 +26,10 @@ #include "rt_names.h" #include "bpf_util.h" +#ifndef LIBDIR +#define LIBDIR "/usr/lib" +#endif + int preferred_family = AF_UNSPEC; int human_readable; int use_iec; @@ -42,6 +46,17 @@ bool do_all; struct rtnl_handle rth = { .fd = -1 }; +const char *get_ip_lib_dir(void) +{ + const char *lib_dir; + + lib_dir = getenv("IP_LIB_DIR"); + if (!lib_dir) + lib_dir = LIBDIR "/ip"; + + return lib_dir; +} + static void usage(void) __attribute__((noreturn)); static void usage(void) diff --git a/ip/ip_common.h b/ip/ip_common.h index d604f7554..227eddd3b 100644 --- a/ip/ip_common.h +++ b/ip/ip_common.h @@ -27,6 +27,8 @@ struct link_filter { int target_nsid; }; +const char *get_ip_lib_dir(void); + int get_operstate(const char *name); int print_linkinfo(struct nlmsghdr *n, void *arg); int print_addrinfo(struct nlmsghdr *n, void *arg); diff --git a/ip/iplink.c b/ip/iplink.c index f5766c395..27c9be442 100644 --- a/ip/iplink.c +++ b/ip/iplink.c @@ -34,9 +34,6 @@ #include "namespace.h" #define IPLINK_IOCTL_COMPAT 1 -#ifndef LIBDIR -#define LIBDIR "/usr/lib" -#endif #ifndef GSO_MAX_SIZE #define GSO_MAX_SIZE 65536 @@ -157,7 +154,7 @@ struct link_util *get_link_kind(const char *id) if (strcmp(l->id, id) == 0) return l; - snprintf(buf, sizeof(buf), LIBDIR "/ip/link_%s.so", id); + snprintf(buf, sizeof(buf), "%s/link_%s.so", get_ip_lib_dir(), id); dlh = dlopen(buf, RTLD_LAZY); if (dlh == NULL) { /* look in current binary, only open once */