diff options
author | João Valverde <j@v6e.pt> | 2023-04-17 15:57:21 +0100 |
---|---|---|
committer | João Valverde <j@v6e.pt> | 2023-04-19 15:12:25 +0000 |
commit | 8bea87c3dc428f1b66d2e2bcc75644c4203be8c1 (patch) | |
tree | b31457c578b9d515c78500afb7eb8e8f68efb16e /epan/ftypes | |
parent | ba514011e55ea4f0cf0c7c4d35ce3c00146a9aef (diff) |
ftypes: Add a setter/getter for FT_IPv6
Diffstat (limited to 'epan/ftypes')
-rw-r--r-- | epan/ftypes/ftype-ipv6.c | 25 | ||||
-rw-r--r-- | epan/ftypes/ftypes-int.h | 4 | ||||
-rw-r--r-- | epan/ftypes/ftypes.c | 16 | ||||
-rw-r--r-- | epan/ftypes/ftypes.h | 6 |
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); |