aboutsummaryrefslogtreecommitdiffstats
path: root/epan/ftypes
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2023-04-17 15:57:21 +0100
committerJoão Valverde <j@v6e.pt>2023-04-19 15:12:25 +0000
commit8bea87c3dc428f1b66d2e2bcc75644c4203be8c1 (patch)
treeb31457c578b9d515c78500afb7eb8e8f68efb16e /epan/ftypes
parentba514011e55ea4f0cf0c7c4d35ce3c00146a9aef (diff)
ftypes: Add a setter/getter for FT_IPv6
Diffstat (limited to 'epan/ftypes')
-rw-r--r--epan/ftypes/ftype-ipv6.c25
-rw-r--r--epan/ftypes/ftypes-int.h4
-rw-r--r--epan/ftypes/ftypes.c16
-rw-r--r--epan/ftypes/ftypes.h6
4 files changed, 39 insertions, 12 deletions
diff --git a/epan/ftypes/ftype-ipv6.c b/epan/ftypes/ftype-ipv6.c
index 7ebc171899..20c402743f 100644
--- a/epan/ftypes/ftype-ipv6.c
+++ b/epan/ftypes/ftype-ipv6.c
@@ -15,13 +15,6 @@
#include <epan/addr_resolv.h>
#include <epan/to_str.h>
-static void
-ipv6_fvalue_set(fvalue_t *fv, const guint8 *value)
-{
- memcpy(fv->value.ipv6.addr.bytes, value, FT_IPv6_LEN);
- fv->value.ipv6.prefix = 128;
-}
-
static gboolean
ipv6_from_literal(fvalue_t *fv, const char *s, gboolean allow_partial_value _U_, gchar **err_msg)
{
@@ -95,10 +88,18 @@ ipv6_to_repr(wmem_allocator_t *scope, const fvalue_t *fv, ftrepr_t rtype _U_, in
return repr;
}
-static const guint8 *
-value_get(fvalue_t *fv)
+static void
+ipv6_set(fvalue_t *fv, const ws_in6_addr *value)
+{
+ memcpy(&fv->value.ipv6.addr, value, FT_IPv6_LEN);
+ fv->value.ipv6.prefix = 128;
+}
+
+
+static const ws_in6_addr *
+ipv6_get(fvalue_t *fv)
{
- return fv->value.ipv6.addr.bytes;
+ return &fv->value.ipv6.addr;
}
static const guint8 bitmasks[9] =
@@ -203,8 +204,8 @@ ftype_register_ipv6(void)
NULL, /* val_to_uinteger64 */
NULL, /* val_to_sinteger64 */
- { .set_value_bytes = ipv6_fvalue_set }, /* union set_value */
- { .get_value_bytes = value_get }, /* union get_value */
+ { .set_value_ipv6 = ipv6_set }, /* union set_value */
+ { .get_value_ipv6 = ipv6_get }, /* union get_value */
cmp_order,
NULL, /* XXX, cmp_contains, needed? ipv4 doesn't support it */
diff --git a/epan/ftypes/ftypes-int.h b/epan/ftypes/ftypes-int.h
index f8a0d6ed04..d9af0d6e5a 100644
--- a/epan/ftypes/ftypes-int.h
+++ b/epan/ftypes/ftypes-int.h
@@ -45,6 +45,7 @@ typedef void (*FvalueSetSignedIntegerFunc)(fvalue_t*, gint32);
typedef void (*FvalueSetUnsignedInteger64Func)(fvalue_t*, guint64);
typedef void (*FvalueSetSignedInteger64Func)(fvalue_t*, gint64);
typedef void (*FvalueSetFloatingFunc)(fvalue_t*, gdouble);
+typedef void (*FvalueSetIpv6)(fvalue_t*, const ws_in6_addr *);
typedef const guint8 *(*FvalueGetBytesFunc)(fvalue_t*);
typedef const e_guid_t *(*FvalueGetGuidFunc)(fvalue_t*);
@@ -56,6 +57,7 @@ typedef gint32 (*FvalueGetSignedIntegerFunc)(fvalue_t*);
typedef guint64 (*FvalueGetUnsignedInteger64Func)(fvalue_t*);
typedef gint64 (*FvalueGetSignedInteger64Func)(fvalue_t*);
typedef double (*FvalueGetFloatingFunc)(fvalue_t*);
+typedef const ws_in6_addr *(*FvalueGetIpv6)(fvalue_t*);
typedef enum ft_result (*FvalueCmp)(const fvalue_t*, const fvalue_t*, int*);
typedef enum ft_result (*FvalueContains)(const fvalue_t*, const fvalue_t*, gboolean*);
@@ -95,6 +97,7 @@ struct _ftype_t {
FvalueSetUnsignedInteger64Func set_value_uinteger64;
FvalueSetSignedInteger64Func set_value_sinteger64;
FvalueSetFloatingFunc set_value_floating;
+ FvalueSetIpv6 set_value_ipv6;
} set_value;
union {
@@ -108,6 +111,7 @@ struct _ftype_t {
FvalueGetUnsignedInteger64Func get_value_uinteger64;
FvalueGetSignedInteger64Func get_value_sinteger64;
FvalueGetFloatingFunc get_value_floating;
+ FvalueGetIpv6 get_value_ipv6;
} get_value;
FvalueCmp cmp_order;
diff --git a/epan/ftypes/ftypes.c b/epan/ftypes/ftypes.c
index 9b57c2ec12..2fc86379e2 100644
--- a/epan/ftypes/ftypes.c
+++ b/epan/ftypes/ftypes.c
@@ -793,6 +793,14 @@ fvalue_set_floating(fvalue_t *fv, gdouble value)
fv->ftype->set_value.set_value_floating(fv, value);
}
+void
+fvalue_set_ipv6(fvalue_t *fv, const ws_in6_addr *value)
+{
+ ws_assert(fv->ftype->ftype == FT_IPv6);
+ ws_assert(fv->ftype->set_value.set_value_ipv6);
+ fv->ftype->set_value.set_value_ipv6(fv, value);
+}
+
const guint8 *
fvalue_get_bytes(fvalue_t *fv)
{
@@ -909,6 +917,14 @@ fvalue_get_floating(fvalue_t *fv)
return fv->ftype->get_value.get_value_floating(fv);
}
+WS_DLL_PUBLIC const ws_in6_addr *
+fvalue_get_ipv6(fvalue_t *fv)
+{
+ ws_assert(fv->ftype->ftype == FT_IPv6);
+ ws_assert(fv->ftype->get_value.get_value_ipv6);
+ return fv->ftype->get_value.get_value_ipv6(fv);
+}
+
ft_bool_t
fvalue_eq(const fvalue_t *a, const fvalue_t *b)
{
diff --git a/epan/ftypes/ftypes.h b/epan/ftypes/ftypes.h
index 3f8c3375d6..ba2b514762 100644
--- a/epan/ftypes/ftypes.h
+++ b/epan/ftypes/ftypes.h
@@ -394,6 +394,9 @@ fvalue_set_sinteger64(fvalue_t *fv, gint64 value);
void
fvalue_set_floating(fvalue_t *fv, gdouble value);
+void
+fvalue_set_ipv6(fvalue_t *fv, const ws_in6_addr *value);
+
WS_DLL_PUBLIC
const guint8 *
fvalue_get_bytes(fvalue_t *fv);
@@ -435,6 +438,9 @@ fvalue_get_sinteger64(fvalue_t *fv);
WS_DLL_PUBLIC double
fvalue_get_floating(fvalue_t *fv);
+WS_DLL_PUBLIC const ws_in6_addr *
+fvalue_get_ipv6(fvalue_t *fv);
+
ft_bool_t
fvalue_eq(const fvalue_t *a, const fvalue_t *b);