diff options
-rw-r--r-- | epan/dissectors/packet-netlink-netfilter.c | 20 | ||||
-rw-r--r-- | epan/dissectors/packet-netlink.h | 13 | ||||
-rw-r--r-- | epan/dissectors/packet-nflog.c | 17 |
3 files changed, 39 insertions, 11 deletions
diff --git a/epan/dissectors/packet-netlink-netfilter.c b/epan/dissectors/packet-netlink-netfilter.c index b9e7ebc2f0..de3f5cf527 100644 --- a/epan/dissectors/packet-netlink-netfilter.c +++ b/epan/dissectors/packet-netlink-netfilter.c @@ -318,8 +318,8 @@ static header_field_info hfi_nfq_config_command_command NETLINK_NETFILTER_HFI_IN VALS(nfq_config_command_vals), 0x00, NULL, HFILL }; static header_field_info hfi_nfq_config_command_pf NETLINK_NETFILTER_HFI_INIT = - { "Protocol family", "netlink-netfilter.queue.config.command.pf", FT_UINT16, BASE_DEC | BASE_EXT_STRING, - &linux_af_vals_ext, 0x00, NULL, HFILL }; + { "Protocol family", "netlink-netfilter.queue.config.command.pf", FT_UINT16, BASE_DEC, + VALS(nfproto_family_vals), 0x00, NULL, HFILL }; static header_field_info hfi_nfq_config_params_copyrange NETLINK_NETFILTER_HFI_INIT = { "Copy range", "netlink-netfilter.queue.config.params.copy_range", FT_UINT32, BASE_HEX, @@ -446,6 +446,18 @@ static const value_string nfq_hooks_vals[] = { { 0, NULL } }; +const value_string nfproto_family_vals[] = { + { WS_NFPROTO_UNSPEC, "Unspecified" }, + { WS_NFPROTO_INET, "IPv4/IPv6" }, + { WS_NFPROTO_IPV4, "IPv4" }, + { WS_NFPROTO_ARP, "ARP" }, + { WS_NFPROTO_NETDEV, "Netdev" }, + { WS_NFPROTO_BRIDGE, "Bridge" }, + { WS_NFPROTO_IPV6, "IPv6" }, + { WS_NFPROTO_DECNET, "DECNET" }, + { 0, NULL } +}; + static const value_string nfq_ctinfo_vals[] = { { WS_IP_CT_ESTABLISHED, "ESTABLISHED" }, { WS_IP_CT_RELATED, "RELATED" }, @@ -863,8 +875,8 @@ static header_field_info hfi_ipset_attr_typename NETLINK_NETFILTER_HFI_INIT = NULL, 0x0, NULL, HFILL }; static header_field_info hfi_ipset_attr_family NETLINK_NETFILTER_HFI_INIT = - { "Address family", "netlink-netfilter.ipset.family", FT_UINT8, BASE_DEC | BASE_EXT_STRING, - &linux_af_vals_ext, 0x00, NULL, HFILL }; + { "Settype family", "netlink-netfilter.ipset.family", FT_UINT8, BASE_DEC, + VALS(nfproto_family_vals), 0x00, NULL, HFILL }; static header_field_info hfi_ipset_attr_flags NETLINK_NETFILTER_HFI_INIT = { "Flags", "netlink-netfilter.ipset.flags", FT_UINT32, BASE_HEX, diff --git a/epan/dissectors/packet-netlink.h b/epan/dissectors/packet-netlink.h index 673fd019ad..361aaaf429 100644 --- a/epan/dissectors/packet-netlink.h +++ b/epan/dissectors/packet-netlink.h @@ -82,6 +82,19 @@ enum { WS_NLMSG_MIN_TYPE = 0x10 /** type < WS_NLMSG_MIN_TYPE are reserved */ }; +/* from <linux/netfilter.h>. Looks like AF_xxx, except for NFPROTO_ARP */ +enum ws_nfproto { + WS_NFPROTO_UNSPEC = 0, + WS_NFPROTO_INET = 1, + WS_NFPROTO_IPV4 = 2, + WS_NFPROTO_ARP = 3, + WS_NFPROTO_NETDEV = 5, + WS_NFPROTO_BRIDGE = 7, + WS_NFPROTO_IPV6 = 10, + WS_NFPROTO_DECNET = 12, +}; +extern const value_string nfproto_family_vals[]; + #define PACKET_NETLINK_MAGIC 0x4A5ACCCE struct packet_netlink_data { diff --git a/epan/dissectors/packet-nflog.c b/epan/dissectors/packet-nflog.c index 046667e537..381ddada16 100644 --- a/epan/dissectors/packet-nflog.c +++ b/epan/dissectors/packet-nflog.c @@ -25,9 +25,10 @@ #include "config.h" #include <epan/packet.h> -#include <epan/aftypes.h> #include <wiretap/wtap.h> +#include "packet-netlink.h" + void proto_register_nflog(void); void proto_reg_handoff_nflog(void); @@ -84,7 +85,7 @@ static header_field_info *hfi_nflog = NULL; /* Header */ static header_field_info hfi_nflog_family NFLOG_HFI_INIT = - { "Family", "nflog.family", FT_UINT8, BASE_DEC | BASE_EXT_STRING, &linux_af_vals_ext, 0x00, NULL, HFILL }; + { "Family", "nflog.family", FT_UINT8, BASE_DEC, VALS(nfproto_family_vals), 0x00, NULL, HFILL }; static header_field_info hfi_nflog_version NFLOG_HFI_INIT = { "Version", "nflog.version", FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL }; @@ -132,12 +133,12 @@ dissect_nflog(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U int offset = 0; tvbuff_t *next_tvb = NULL; - int aftype; + int pf; col_set_str(pinfo->cinfo, COL_PROTOCOL, "NFLOG"); col_clear(pinfo->cinfo, COL_INFO); - aftype = tvb_get_guint8(tvb, 0); + pf = tvb_get_guint8(tvb, 0); /* Header */ if (proto_field_is_referenced(tree, hfi_nflog->id)) { @@ -237,11 +238,13 @@ dissect_nflog(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U } if (next_tvb) { - switch (aftype) { - case LINUX_AF_INET: + switch (pf) { + /* Note: NFPROTO_INET is not supposed to appear here, it is mapped + * to NFPROTO_IPV4 or NFPROTO_IPV6 */ + case WS_NFPROTO_IPV4: call_dissector(ip_handle, next_tvb, pinfo, tree); break; - case LINUX_AF_INET6: + case WS_NFPROTO_IPV6: call_dissector(ip6_handle, next_tvb, pinfo, tree); break; default: |