Add TC_LIB_DIR environment variable.

Don't hardcode /usr/lib/tc as a path

Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
diff --git a/tc/q_netem.c b/tc/q_netem.c
index 67a2ff3..f08b9c1 100644
--- a/tc/q_netem.c
+++ b/tc/q_netem.c
@@ -60,7 +60,7 @@
 	char *line = NULL;
 	char name[128];
 
-	snprintf(name, sizeof(name), "/usr/lib/tc/%s.dist", type);
+	snprintf(name, sizeof(name), "%s/%s.dist", get_tc_lib(), type);
 	if ((f = fopen(name, "r")) == NULL) {
 		fprintf(stderr, "No distribution data for %s (%s: %s)\n",
 			type, name, strerror(errno));
diff --git a/tc/tc.c b/tc/tc.c
index 6672e18..f23ba04 100644
--- a/tc/tc.c
+++ b/tc/tc.c
@@ -99,7 +99,7 @@
 		if (strcmp(q->id, str) == 0)
 			return q;
 
-	snprintf(buf, sizeof(buf), "/usr/lib/tc/q_%s.so", str);
+	snprintf(buf, sizeof(buf), "%s/q_%s.so", get_tc_lib(), str);
 	dlh = dlopen(buf, RTLD_LAZY);
 	if (!dlh) {
 		/* look in current binary, only open once */
@@ -145,7 +145,7 @@
 		if (strcmp(q->id, str) == 0)
 			return q;
 
-	snprintf(buf, sizeof(buf), "/usr/lib/tc/f_%s.so", str);
+	snprintf(buf, sizeof(buf), "%s/f_%s.so", get_tc_lib(), str);
 	dlh = dlopen(buf, RTLD_LAZY);
 	if (dlh == NULL) {
 		dlh = BODY;
diff --git a/tc/tc_util.c b/tc/tc_util.c
index a7e4257..cdbae42 100644
--- a/tc/tc_util.c
+++ b/tc/tc_util.c
@@ -24,6 +24,17 @@
 #include "utils.h"
 #include "tc_util.h"
 
+const char *get_tc_lib(void)
+{
+	const char *lib_dir;
+
+	lib_dir = getenv("TC_LIB_DIR");
+	if (!lib_dir)
+		lib_dir = "/usr/lib/tc";
+
+	return lib_dir;
+}
+
 int get_qdisc_handle(__u32 *h, const char *str)
 {
 	__u32 maj;
diff --git a/tc/tc_util.h b/tc/tc_util.h
index eade72d..120d6ce 100644
--- a/tc/tc_util.h
+++ b/tc/tc_util.h
@@ -38,6 +38,8 @@
 	int     (*print_xstats)(struct action_util *au, FILE *f, struct rtattr *xstats);
 };
 
+extern const char *get_tc_lib(void);
+
 extern struct qdisc_util *get_qdisc_kind(const char *str);
 extern struct filter_util *get_filter_kind(const char *str);