[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/iproute2/iproute2-3.4.0/tc/m_ematch.h b/ap/app/iproute2/iproute2-3.4.0/tc/m_ematch.h
new file mode 100755
index 0000000..5036e9b
--- /dev/null
+++ b/ap/app/iproute2/iproute2-3.4.0/tc/m_ematch.h
@@ -0,0 +1,111 @@
+#ifndef __TC_EMATCH_H_
+#define __TC_EMATCH_H_
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "utils.h"
+#include "tc_util.h"
+
+#define EMATCHKINDSIZ 16
+
+struct bstr
+{
+	char	*data;
+	unsigned int	len;
+	int		quoted;
+	struct bstr	*next;
+};
+
+extern struct bstr * bstr_alloc(const char *text);
+
+static inline struct bstr * bstr_new(char *data, unsigned int len)
+{
+	struct bstr *b = calloc(1, sizeof(*b));
+
+	if (b == NULL)
+		return NULL;
+
+	b->data = data;
+	b->len = len;
+
+	return b;
+}
+
+static inline int bstrcmp(struct bstr *b, const char *text)
+{
+	int len = strlen(text);
+	int d = b->len - len;
+
+	if (d == 0)
+		return strncmp(b->data, text, len);
+
+	return d;
+}
+
+static inline struct bstr *bstr_next(struct bstr *b)
+{
+	return b->next;
+}
+
+extern unsigned long bstrtoul(const struct bstr *b);
+extern void bstr_print(FILE *fd, const struct bstr *b, int ascii);
+
+
+struct ematch
+{
+	struct bstr	*args;
+	int		index;
+	int		inverted;
+	int		relation;
+	int		child_ref;
+	struct ematch	*child;
+	struct ematch	*next;
+};
+
+static inline struct ematch * new_ematch(struct bstr *args, int inverted)
+{
+	struct ematch *e = calloc(1, sizeof(*e));
+
+	if (e == NULL)
+		return NULL;
+
+	e->args = args;
+	e->inverted = inverted;
+
+	return e;
+}
+
+extern void print_ematch_tree(const struct ematch *tree);
+
+
+struct ematch_util
+{
+	char			kind[EMATCHKINDSIZ];
+	int			kind_num;
+	int	(*parse_eopt)(struct nlmsghdr *,struct tcf_ematch_hdr *,
+			      struct bstr *);
+	int	(*print_eopt)(FILE *, struct tcf_ematch_hdr *, void *, int);
+	void	(*print_usage)(FILE *);
+	struct ematch_util	*next;
+};
+
+static inline int parse_layer(struct bstr *b)
+{
+	if (*((char *) b->data) == 'l')
+		return TCF_LAYER_LINK;
+	else if (*((char *) b->data) == 'n')
+		return TCF_LAYER_NETWORK;
+	else if (*((char *) b->data) == 't')
+		return TCF_LAYER_TRANSPORT;
+	else
+		return INT_MAX;
+}
+
+extern int em_parse_error(int err, struct bstr *args, struct bstr *carg,
+		   struct ematch_util *, char *fmt, ...);
+extern int print_ematch(FILE *, const struct rtattr *);
+extern int parse_ematch(int *, char ***, int, struct nlmsghdr *);
+
+#endif