summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epan/ftypes/ftype-ipv4.c19
-rwxr-xr-xtools/dftestlib/ipv4.py14
2 files changed, 31 insertions, 2 deletions
diff --git a/epan/ftypes/ftype-ipv4.c b/epan/ftypes/ftype-ipv4.c
index 8cedaa3257..3b6d5d93b8 100644
--- a/epan/ftypes/ftype-ipv4.c
+++ b/epan/ftypes/ftype-ipv4.c
@@ -169,6 +169,21 @@ cmp_bitwise_and(const fvalue_t *fv_a, const fvalue_t *fv_b)
return ((addr_a & addr_b) != 0);
}
+static guint
+len(fvalue_t *fv _U_)
+{
+ return 4;
+}
+
+static void
+slice(fvalue_t *fv, GByteArray *bytes, guint offset, guint length)
+{
+ guint8* data;
+ guint32 addr = ipv4_get_net_order_addr(&(fv->value.ipv4));
+ data = ((guint8*)&addr)+offset;
+ g_byte_array_append(bytes, data, length);
+}
+
void
ftype_register_ipv4(void)
{
@@ -198,8 +213,8 @@ ftype_register_ipv4(void)
NULL, /* cmp_contains */
NULL, /* cmp_matches */
- NULL,
- NULL,
+ len,
+ slice,
};
ftype_register(FT_IPv4, &ipv4_type);
diff --git a/tools/dftestlib/ipv4.py b/tools/dftestlib/ipv4.py
index 9c17e361db..6ccf4d76ce 100755
--- a/tools/dftestlib/ipv4.py
+++ b/tools/dftestlib/ipv4.py
@@ -120,4 +120,18 @@ class testIPv4(dftest.DFTest):
dfilter = "ip.src != 200.0.0.0/8"
self.assertDFilterCount(dfilter, 2)
+ def test_slice_1(self):
+ dfilter = "ip.src[0:2] == ac:19"
+ self.assertDFilterCount(dfilter, 1)
+ def test_slice_2(self):
+ dfilter = "ip.src[0:2] == 00:00"
+ self.assertDFilterCount(dfilter, 0)
+
+ def test_slice_3(self):
+ dfilter = "ip.src[2:2] == 64:0e"
+ self.assertDFilterCount(dfilter, 1)
+
+ def test_slice_4(self):
+ dfilter = "ip.src[2:2] == ff:ff"
+ self.assertDFilterCount(dfilter, 0)