From 343a51702656a6476e37cfb84609a82155c7fc5e Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Tue, 16 Jul 2019 19:03:55 +0200 Subject: src: store expr, not dtype to track data in sets This will be needed once we add support for the 'typeof' keyword to handle maps that could e.g. store 'ct helper' "type" values. Instead of: set foo { type ipv4_addr . mark; this would allow set foo { typeof(ip saddr) . typeof(ct mark); (exact syntax TBD). This would be needed to allow sets that store variable-sized data types (string, integer and the like) that can't be used at at the moment. Adding special data types for everything is problematic due to the large amount of different types needed. For anonymous sets, e.g. "string" can be used because the needed size can be inferred from the statement, e.g. 'osf name { "Windows", "Linux }', but in case of named sets that won't work because 'type string' lacks the context needed to derive the size information. With 'typeof(osf name)' the context is there, but at the moment it won't help because the expression is discarded instantly and only the data type is retained. Signed-off-by: Florian Westphal --- include/datatype.h | 1 - include/netlink.h | 1 - include/rule.h | 6 ++---- 3 files changed, 2 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/include/datatype.h b/include/datatype.h index 49b8f608..04b4892b 100644 --- a/include/datatype.h +++ b/include/datatype.h @@ -293,7 +293,6 @@ concat_subtype_lookup(uint32_t type, unsigned int n) extern const struct datatype * set_datatype_alloc(const struct datatype *orig_dtype, unsigned int byteorder); -extern void set_datatype_destroy(const struct datatype *dtype); extern void time_print(uint64_t msec, struct output_ctx *octx); extern struct error_record *time_parse(const struct location *loc, diff --git a/include/netlink.h b/include/netlink.h index 53a55b61..d02533ec 100644 --- a/include/netlink.h +++ b/include/netlink.h @@ -189,6 +189,5 @@ int netlink_events_trace_cb(const struct nlmsghdr *nlh, int type, struct netlink_mon_handler *monh); enum nft_data_types dtype_map_to_kernel(const struct datatype *dtype); -const struct datatype *dtype_map_from_kernel(enum nft_data_types type); #endif /* NFTABLES_NETLINK_H */ diff --git a/include/rule.h b/include/rule.h index dadeb4b9..ce1f40db 100644 --- a/include/rule.h +++ b/include/rule.h @@ -283,8 +283,7 @@ extern struct rule *rule_lookup_by_index(const struct chain *chain, * @gc_int: garbage collection interval * @timeout: default timeout value * @key: key expression (data type, length)) - * @datatype: mapping data type - * @datalen: mapping data len + * @data: mapping data expression * @objtype: mapping object type * @init: initializer * @rg_cache: cached range element (left) @@ -301,8 +300,7 @@ struct set { uint32_t gc_int; uint64_t timeout; struct expr *key; - const struct datatype *datatype; - unsigned int datalen; + struct expr *data; uint32_t objtype; struct expr *init; struct expr *rg_cache; -- cgit v1.2.3