tc: Hotwire cbq/u32 support and include traffic policers

Change-Id: I98a02e52d83dfb953fa7a09a17b01f3852d96374
Signed-off-by: San Mehat <san@google.com>
diff --git a/tc/Android.mk b/tc/Android.mk
index da2b358..4a63875 100644
--- a/tc/Android.mk
+++ b/tc/Android.mk
@@ -3,7 +3,7 @@
 include $(CLEAR_VARS)
 LOCAL_SRC_FILES :=  tc.c tc_qdisc.c q_cbq.c tc_util.c tc_class.c tc_core.c m_action.c \
                     m_estimator.c tc_filter.c tc_monitor.c tc_stab.c tc_cbq.c \
-                    tc_estimator.c
+                    tc_estimator.c f_u32.c m_police.c
 
 LOCAL_MODULE := tc
 
diff --git a/tc/tc.c b/tc/tc.c
index eccd84d..68a6a75 100644
--- a/tc/tc.c
+++ b/tc/tc.c
@@ -44,6 +44,11 @@
 static struct qdisc_util * qdisc_list;
 static struct filter_util * filter_list;
 
+#ifdef ANDROID
+extern struct qdisc_util cbq_qdisc_util;
+extern struct filter_util u32_filter_util;
+#endif
+
 static int print_noqopt(struct qdisc_util *qu, FILE *f,
 			struct rtattr *opt)
 {
@@ -97,6 +102,14 @@
 	char buf[256];
 	struct qdisc_util *q;
 
+#ifdef ANDROID
+	if (!strcmp(str, "cbq"))
+		return &cbq_qdisc_util;
+	else {
+		fprintf(stderr, "Android does not support '%s'\n", str);
+		return NULL;
+	}
+#endif
 	for (q = qdisc_list; q; q = q->next)
 		if (strcmp(q->id, str) == 0)
 			return q;
@@ -142,6 +155,14 @@
 	void *dlh;
 	char buf[256];
 	struct filter_util *q;
+#ifdef ANDROID
+	if (!strcmp(str, "u32"))
+		return &u32_filter_util;
+	else {
+		fprintf(stderr, "Android does not support '%s'\n", str);
+		return NULL;
+	}
+#endif
 
 	for (q = filter_list; q; q = q->next)
 		if (strcmp(q->id, str) == 0)