blob: 96b20d5429575cae167a27cbd3d5d3ceaa77b49e [file] [log] [blame]
diff -Naur libnetfilter_conntrack-0.9.1.mod/include/internal/object.h libnetfilter_conntrack-0.9.1.mod1/include/internal/object.h
--- libnetfilter_conntrack-0.9.1.mod/include/internal/object.h 2013-04-10 14:25:03.000000000 +0530
+++ libnetfilter_conntrack-0.9.1.mod1/include/internal/object.h 2013-04-10 15:14:54.000000000 +0530
@@ -150,12 +150,19 @@
union __nfct_l4_src l4min, l4max;
};
+struct __nfct_comcerto_fp_info {
+ int ifindex;
+ int iif;
+ u_int32_t mark;
+};
+
struct nf_conntrack {
struct __nfct_tuple tuple[__DIR_MAX];
u_int32_t timeout;
u_int32_t mark;
u_int32_t secmark;
+ struct __nfct_comcerto_fp_info fp_info[__DIR_MAX];
u_int32_t status;
u_int32_t use;
u_int32_t id;
diff -Naur libnetfilter_conntrack-0.9.1.mod/include/libnetfilter_conntrack/libnetfilter_conntrack.h libnetfilter_conntrack-0.9.1.mod1/include/libnetfilter_conntrack/libnetfilter_conntrack.h
--- libnetfilter_conntrack-0.9.1.mod/include/libnetfilter_conntrack/libnetfilter_conntrack.h 2013-04-10 14:33:45.000000000 +0530
+++ libnetfilter_conntrack-0.9.1.mod1/include/libnetfilter_conntrack/libnetfilter_conntrack.h 2013-04-10 15:15:31.000000000 +0530
@@ -130,6 +130,12 @@
ATTR_SECCTX, /* string */
ATTR_TIMESTAMP_START, /* u64 bits, linux >= 2.6.38 */
ATTR_TIMESTAMP_STOP = 64, /* u64 bits, linux >= 2.6.38 */
+ ATTR_ORIG_COMCERTO_FP_IIF,
+ ATTR_ORIG_COMCERTO_FP_IFINDEX,
+ ATTR_ORIG_COMCERTO_FP_MARK,
+ ATTR_REPL_COMCERTO_FP_IIF,
+ ATTR_REPL_COMCERTO_FP_IFINDEX,
+ ATTR_REPL_COMCERTO_FP_MARK,
ATTR_MAX
};
diff -Naur libnetfilter_conntrack-0.9.1.mod/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h libnetfilter_conntrack-0.9.1.mod1/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h
--- libnetfilter_conntrack-0.9.1.mod/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h 2013-04-10 14:25:03.000000000 +0530
+++ libnetfilter_conntrack-0.9.1.mod1/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h 2013-04-10 15:16:58.000000000 +0530
@@ -47,6 +47,8 @@
CTA_ZONE,
CTA_SECCTX,
CTA_TIMESTAMP,
+ CTA_COMCERTO_FP_ORIG,
+ CTA_COMCERTO_FP_REPLY,
__CTA_MAX
};
#define CTA_MAX (__CTA_MAX - 1)
@@ -187,6 +189,15 @@
};
#define CTA_HELP_MAX (__CTA_HELP_MAX - 1)
+enum ctattr_comcerto_fp {
+ CTA_COMCERTO_FP_UNSPEC,
+ CTA_COMCERTO_FP_MARK,
+ CTA_COMCERTO_FP_IFINDEX,
+ CTA_COMCERTO_FP_IIF,
+ __CTA_COMCERTO_FP_MAX
+};
+#define CTA_COMCERTO_FP_MAX (__CTA_COMCERTO_FP_MAX - 1)
+
enum ctattr_secctx {
CTA_SECCTX_UNSPEC,
CTA_SECCTX_NAME,
diff -Naur libnetfilter_conntrack-0.9.1.mod/src/conntrack/getter.c libnetfilter_conntrack-0.9.1.mod1/src/conntrack/getter.c
--- libnetfilter_conntrack-0.9.1.mod/src/conntrack/getter.c 2013-04-10 14:25:03.000000000 +0530
+++ libnetfilter_conntrack-0.9.1.mod1/src/conntrack/getter.c 2013-04-10 15:18:48.000000000 +0530
@@ -332,6 +332,36 @@
return &ct->timestamp.stop;
}
+static const void *get_attr_orig_comcerto_fp_iif(const struct nf_conntrack *ct)
+{
+ return &ct->fp_info[__DIR_ORIG].iif;
+}
+
+static const void *get_attr_orig_comcerto_fp_ifindex(const struct nf_conntrack *ct)
+{
+ return &ct->fp_info[__DIR_ORIG].ifindex;
+}
+
+static const void *get_attr_orig_comcerto_fp_mark(const struct nf_conntrack *ct)
+{
+ return &ct->fp_info[__DIR_ORIG].mark;
+}
+
+static const void *get_attr_repl_comcerto_fp_iif(const struct nf_conntrack *ct)
+{
+ return &ct->fp_info[__DIR_REPL].iif;
+}
+
+static const void *get_attr_repl_comcerto_fp_ifindex(const struct nf_conntrack *ct)
+{
+ return &ct->fp_info[__DIR_REPL].ifindex;
+}
+
+static const void *get_attr_repl_comcerto_fp_mark(const struct nf_conntrack *ct)
+{
+ return &ct->fp_info[__DIR_REPL].mark;
+}
+
const get_attr get_attr_array[ATTR_MAX] = {
[ATTR_ORIG_IPV4_SRC] = get_attr_orig_ipv4_src,
[ATTR_ORIG_IPV4_DST] = get_attr_orig_ipv4_dst,
@@ -398,4 +428,10 @@
[ATTR_SECCTX] = get_attr_secctx,
[ATTR_TIMESTAMP_START] = get_attr_timestamp_start,
[ATTR_TIMESTAMP_STOP] = get_attr_timestamp_stop,
+ [ATTR_ORIG_COMCERTO_FP_IIF] = get_attr_orig_comcerto_fp_iif,
+ [ATTR_ORIG_COMCERTO_FP_IFINDEX] = get_attr_orig_comcerto_fp_ifindex,
+ [ATTR_ORIG_COMCERTO_FP_MARK] = get_attr_orig_comcerto_fp_mark,
+ [ATTR_REPL_COMCERTO_FP_IIF] = get_attr_repl_comcerto_fp_iif,
+ [ATTR_REPL_COMCERTO_FP_IFINDEX] = get_attr_repl_comcerto_fp_ifindex,
+ [ATTR_REPL_COMCERTO_FP_MARK] = get_attr_repl_comcerto_fp_mark,
};
diff -Naur libnetfilter_conntrack-0.9.1.mod/src/conntrack/parse.c libnetfilter_conntrack-0.9.1.mod1/src/conntrack/parse.c
--- libnetfilter_conntrack-0.9.1.mod/src/conntrack/parse.c 2013-04-10 14:25:03.000000000 +0530
+++ libnetfilter_conntrack-0.9.1.mod1/src/conntrack/parse.c 2013-04-10 15:20:28.000000000 +0530
@@ -473,6 +473,50 @@
}
}
+static void
+__parse_comcerto_fp(const struct nfattr *attr, struct nf_conntrack *ct, int dir)
+{
+ struct nfattr *tb[CTA_COMCERTO_FP_MAX];
+
+ nfnl_parse_nested(tb, CTA_COMCERTO_FP_MAX, attr);
+
+ if (tb[CTA_COMCERTO_FP_IIF-1]) {
+ ct->fp_info[dir].iif = *(u_int32_t *)NFA_DATA(tb[CTA_COMCERTO_FP_IIF-1]);
+ switch(dir) {
+ case __DIR_ORIG:
+ set_bit(ATTR_ORIG_COMCERTO_FP_IIF, ct->set);
+ break;
+ case __DIR_REPL:
+ set_bit(ATTR_REPL_COMCERTO_FP_IIF, ct->set);
+ break;
+ }
+ }
+
+ if (tb[CTA_COMCERTO_FP_IFINDEX-1]) {
+ ct->fp_info[dir].ifindex = *(u_int32_t *)NFA_DATA(tb[CTA_COMCERTO_FP_IFINDEX-1]);
+ switch(dir) {
+ case __DIR_ORIG:
+ set_bit(ATTR_ORIG_COMCERTO_FP_IFINDEX, ct->set);
+ break;
+ case __DIR_REPL:
+ set_bit(ATTR_REPL_COMCERTO_FP_IFINDEX, ct->set);
+ break;
+ }
+ }
+
+ if (tb[CTA_COMCERTO_FP_MARK-1]) {
+ ct->fp_info[dir].mark = *(u_int32_t *)NFA_DATA(tb[CTA_COMCERTO_FP_MARK-1]);
+ switch(dir) {
+ case __DIR_ORIG:
+ set_bit(ATTR_ORIG_COMCERTO_FP_MARK, ct->set);
+ break;
+ case __DIR_REPL:
+ set_bit(ATTR_REPL_COMCERTO_FP_MARK, ct->set);
+ break;
+ }
+ }
+}
+
void __parse_conntrack(const struct nlmsghdr *nlh,
struct nfattr *cda[],
struct nf_conntrack *ct)
@@ -532,6 +576,12 @@
set_bit(ATTR_SECMARK, ct->set);
}
+ if (cda[CTA_COMCERTO_FP_ORIG-1])
+ __parse_comcerto_fp(cda[CTA_COMCERTO_FP_ORIG-1], ct, __DIR_ORIG);
+
+ if (cda[CTA_COMCERTO_FP_REPLY-1])
+ __parse_comcerto_fp(cda[CTA_COMCERTO_FP_REPLY-1], ct, __DIR_REPL);
+
if (cda[CTA_COUNTERS_ORIG-1])
__parse_counters(cda[CTA_COUNTERS_ORIG-1], ct, __DIR_ORIG);