netlink: changes to match Linux kernel v5.4 netlink interface

Changes consist of:
- Addition of new enum values
- Header file references now point to kernel sources
- Dissection of few more fields
- Fixes to some dissections

Change-Id: I4cda045153ab0971b0b09ce59a7363238fe627ee
Reviewed-on: https://code.wireshark.org/review/35571
Reviewed-by: Jaap Keuter <jaap.keuter@xs4all.nl>
Petri-Dish: Jaap Keuter <jaap.keuter@xs4all.nl>
Tested-by: Petri Dish Buildbot
Reviewed-by: Michael Mann <mmann78@netscape.net>
This commit is contained in:
Jaap Keuter 2019-12-27 23:36:56 +01:00 committed by Michael Mann
parent fe9ee2c9b9
commit 96965c6b4a
6 changed files with 192 additions and 53 deletions

View File

@ -14,8 +14,8 @@
/* net_dm (network drop monitor) is a netlink-based protocol via which alerts
* about dropped packets are sent to user space
*
* Relevant header file:
* https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git/tree/include/uapi/linux/net_dropmon.h
* Relevant Linux kernel header file:
* include/uapi/linux/net_dropmon.h
*
* Man page:
* man 1 dropwatch

View File

@ -37,7 +37,7 @@ static header_field_info *hfi_netlink_netfilter = NULL;
#define NETLINK_NETFILTER_HFI_INIT HFI_INIT(proto_netlink_netfilter)
/* nfnetlink subsystems from <linux/netfilter/nfnetlink.h> */
/* nfnetlink subsystems from <include/uapi/linux/netfilter/nfnetlink.h> */
enum {
WS_NFNL_SUBSYS_NONE = 0,
WS_NFNL_SUBSYS_CTNETLINK = 1,
@ -51,15 +51,16 @@ enum {
WS_NFNL_SUBSYS_CTHELPER = 9,
WS_NFNL_SUBSYS_NFTABLES = 10,
WS_NFNL_SUBSYS_NFT_COMPAT = 11,
WS_NFNL_SUBSYS_COUNT = 12,
};
/* nfnetlink ULOG subsystem types from <linux/netfilter/nfnetlink_log.h> */
/* nfnetlink ULOG subsystem types from <include/uapi/linux/netfilter/nfnetlink_log.h> */
enum ws_nfulnl_msg_types {
WS_NFULNL_MSG_PACKET = 0,
WS_NFULNL_MSG_CONFIG = 1
};
/* Macros for "hook function responses" from <linux/netfilter.h> */
/* Macros for "hook function responses" from <include/uapi/linux/netfilter.h> */
enum ws_verdict_types {
WS_NF_DROP = 0,
WS_NF_ACCEPT = 1,
@ -77,7 +78,7 @@ enum ws_nf_inet_hooks {
WS_NF_INET_POST_ROUTING = 4,
};
/* from <linux/netfilter/nf_conntrack_common.h> */
/* from <include/uapi/linux/netfilter/nf_conntrack_common.h> */
enum ws_ip_conntrack_info {
WS_IP_CT_ESTABLISHED,
WS_IP_CT_RELATED,
@ -117,6 +118,8 @@ enum ws_ip_conntrack_status {
WS_IPS_UNTRACKED = (1 << WS_IPS_UNTRACKED_BIT),
WS_IPS_HELPER_BIT = 13,
WS_IPS_HELPER = (1 << WS_IPS_HELPER_BIT),
WS_IPS_OFFLOAD_BIT = 14,
WS_IPS_OFFLOAD = (1 << WS_IPS_OFFLOAD_BIT),
};
enum nfexp_flags {
@ -125,13 +128,13 @@ enum nfexp_flags {
WS_NF_CT_EXPECT_USERSPACE = (1 << 2),
};
/* from <linux/netfilter/nf_conntrack_tuple_common.h> */
/* from <include/uapi/linux/netfilter/nf_conntrack_tuple_common.h> */
enum ws_ip_conntrack_dir {
WS_IP_CT_DIR_ORIGINAL = 0,
WS_IP_CT_DIR_REPLY = 1,
};
/* nfnetlink QUEUE subsystem types from <linux/netfilter/nfnetlink_queue.h> */
/* nfnetlink QUEUE subsystem types from <include/uapi/linux/netfilter/nfnetlink_queue.h> */
enum ws_nfqnl_msg_types {
WS_NFQNL_MSG_PACKET = 0,
WS_NFQNL_MSG_VERDICT = 1,
@ -186,7 +189,7 @@ enum ws_nfqnl_attr_config {
WS_NFQA_CFG_FLAGS = 5,
};
/* from <linux/netfilter/nfnetlink_conntrack.h> */
/* from <include/uapi/linux/netfilter/nfnetlink_conntrack.h> */
enum ws_ctattr_tuple {
WS_CTA_TUPLE_UNSPEC = 0,
WS_CTA_TUPLE_IP = 1,
@ -238,6 +241,7 @@ enum ws_ctattr_expect {
};
enum ws_ctattr_expect_nat {
WS_CTA_EXPECT_NAT_UNSPEC = 0,
WS_CTA_EXPECT_NAT_DIR = 1,
WS_CTA_EXPECT_NAT_TUPLE = 2,
};
@ -267,6 +271,7 @@ enum ws_ctattr_type {
WS_CTA_MARK_MASK = 21,
WS_CTA_LABELS = 22,
WS_CTA_LABELS_MASK = 23,
WS_CTA_SYNPROXY = 24,
};
enum ws_ctattr_help {
@ -276,12 +281,13 @@ enum ws_ctattr_help {
};
enum ws_ctattr_seqadj {
WS_CTA_SEQADJ_UNSPEC = 0,
WS_CTA_SEQADJ_CORRECTION_POS = 1,
WS_CTA_SEQADJ_OFFSET_BEFORE = 2,
WS_CTA_SEQADJ_OFFSET_AFTER = 3,
};
/* from <linux/netfilter/ipset/ip_set.h> */
/* from <include/uapi/linux/netfilter/ipset/ip_set.h> */
enum ws_ipset_cmd {
WS_IPSET_CMD_NONE = 0,
WS_IPSET_CMD_PROTOCOL = 1,
@ -297,6 +303,8 @@ enum ws_ipset_cmd {
WS_IPSET_CMD_TEST = 11,
WS_IPSET_CMD_HEADER = 12,
WS_IPSET_CMD_TYPE = 13,
WS_IPSET_CMD_GET_BYNAME = 14,
WS_IPSET_CMD_GET_BYINDEX = 15,
};
/* Attributes at command level */
@ -311,6 +319,7 @@ enum ws_ipset_attr {
WS_IPSET_ATTR_ADT = 8,
WS_IPSET_ATTR_LINENO = 9,
WS_IPSET_ATTR_PROTOCOL_MIN = 10,
WS_IPSET_ATTR_INDEX = 11,
};
/* CADT-specific attributes (Create/Abstract Data Type) */
@ -577,6 +586,7 @@ static const value_string nfct_attr_vals[] = {
{ WS_CTA_MARK_MASK, "Mark mask" },
{ WS_CTA_LABELS, "LABELS" },
{ WS_CTA_LABELS_MASK, "LABELS_MASK" },
{ WS_CTA_SYNPROXY, "SYNPROXY" },
{ 0, NULL }
};
@ -587,6 +597,7 @@ static const value_string nfct_help_attr_vals[] = {
};
static const value_string nfct_seqadj_attr_vals[] = {
{ WS_CTA_SEQADJ_UNSPEC, "Unspecified" },
{ WS_CTA_SEQADJ_CORRECTION_POS, "Correction position" },
{ WS_CTA_SEQADJ_OFFSET_BEFORE, "Offset before" },
{ WS_CTA_SEQADJ_OFFSET_AFTER, "Offset after" },
@ -672,7 +683,13 @@ static header_field_info hfi_nfct_attr_status_flag_helper NETLINK_NETFILTER_HFI_
FT_UINT32, BASE_DEC, NULL, WS_IPS_HELPER,
"Conntrack got a helper explicitly attached via CT target", HFILL };
static header_field_info hfi_nfct_attr_status_flag_offload NETLINK_NETFILTER_HFI_INIT =
{ "Offload", "netlink-netfilter.ct_attr.status.offload",
FT_UINT32, BASE_DEC, NULL, WS_IPS_OFFLOAD,
NULL, HFILL };
static const int *hfi_nfct_attr_status_flags[] = {
&hfi_nfct_attr_status_flag_offload.id,
&hfi_nfct_attr_status_flag_helper.id,
&hfi_nfct_attr_status_flag_untracked.id,
&hfi_nfct_attr_status_flag_template.id,
@ -1494,6 +1511,8 @@ static const value_string ipset_command_vals[] = {
{ WS_IPSET_CMD_TEST, "Test an element in a set" },
{ WS_IPSET_CMD_HEADER, "Get set header data only" },
{ WS_IPSET_CMD_TYPE, "Get set type" },
{ WS_IPSET_CMD_GET_BYNAME, "Get set by name" },
{ WS_IPSET_CMD_GET_BYINDEX, "Get set by index" },
{ 0, NULL }
};
@ -1508,6 +1527,7 @@ static const value_string ipset_attr_vals[] = {
{ WS_IPSET_ATTR_ADT, "Multiple data containers" },
{ WS_IPSET_ATTR_LINENO, "Restore lineno" },
{ WS_IPSET_ATTR_PROTOCOL_MIN, "Minimal supported version number" },
{ WS_IPSET_ATTR_INDEX, "Index" },
{ 0, NULL }
};
@ -1799,6 +1819,7 @@ dissect_ipset_attrs(tvbuff_t *tvb, void *data, proto_tree *tree, int nla_type, i
case WS_IPSET_ATTR_LINENO:
case WS_IPSET_ATTR_PROTOCOL_MIN:
case WS_IPSET_ATTR_INDEX:
/* TODO */
return 0;
}
@ -1827,6 +1848,7 @@ static const value_string netlink_netfilter_subsystem_vals[] = {
{ WS_NFNL_SUBSYS_CTHELPER, "Connection Tracking Helpers" },
{ WS_NFNL_SUBSYS_NFTABLES, "Netfilter tables" },
{ WS_NFNL_SUBSYS_NFT_COMPAT, "x_tables compatibility layer for nf_tables" },
{ WS_NFNL_SUBSYS_COUNT, "Count" },
{ 0, NULL }
};
@ -1944,6 +1966,7 @@ proto_register_netlink_netfilter(void)
&hfi_nfct_attr_status_flag_template,
&hfi_nfct_attr_status_flag_untracked,
&hfi_nfct_attr_status_flag_helper,
&hfi_nfct_attr_status_flag_offload,
&hfi_nfct_attr_timeout,
&hfi_nfct_attr_id,
&hfi_nfct_help_attr,

View File

@ -1,4 +1,4 @@
/* packet-netlin-route.c
/* packet-netlink-route.c
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
@ -32,7 +32,7 @@ struct netlink_route_info {
};
enum {
/* rtnetlink values for nlmsghdr.nlmsg_type from <linux/rtnetlink.h> */
/* rtnetlink values for nlmsghdr.nlmsg_type from <include/uapi/linux/rtnetlink.h> */
WS_RTM_NEWLINK = 16,
WS_RTM_DELLINK = 17,
WS_RTM_GETLINK = 18,
@ -74,6 +74,7 @@ enum {
WS_RTM_GETDCB = 78,
WS_RTM_SETDCB = 79,
WS_RTM_NEWNETCONF = 80,
WS_RTM_DELNETCONF = 81,
WS_RTM_GETNETCONF = 82,
WS_RTM_NEWMDB = 84,
WS_RTM_DELMDB = 85,
@ -83,9 +84,16 @@ enum {
WS_RTM_GETNSID = 90,
WS_RTM_NEWSTATS = 92,
WS_RTM_GETSTATS = 94,
WS_RTM_NEWCACHEREPORT = 96,
WS_RTM_NEWCHAIN = 100,
WS_RTM_DELCHAIN = 101,
WS_RTM_GETCHAIN = 102,
WS_RTM_NEWNEXTHOP = 104,
WS_RTM_DELNEXTHOP = 105,
WS_RTM_GETNEXTHOP = 106,
};
/* values for rta_type (network interface) from <linux/if_link.h> */
/* values for rta_type (network interface) from </include/uapi/linux/if_link.h> */
enum ws_ifla_attr_type {
WS_IFLA_UNSPEC = 0,
WS_IFLA_ADDRESS = 1,
@ -131,9 +139,17 @@ enum ws_ifla_attr_type {
WS_IFLA_GSO_MAX_SIZE = 41,
WS_IFLA_PAD = 42,
WS_IFLA_XDP = 43,
WS_IFLA_EVENT = 44,
WS_IFLA_NEW_NETNSID = 45,
WS_IFLA_IF_NETNSID = 46,
WS_IFLA_CARRIER_UP_COUNT = 47,
WS_IFLA_CARRIER_DOWN_COUNT = 48,
WS_IFLA_NEW_IFINDEX = 49,
WS_IFLA_MIN_MTU = 50,
WS_IFLA_MAX_MTU = 51,
};
/* values for rta_type (ip address) from <linux/if_addr.h> */
/* values for rta_type (ip address) from <include/uapi/linux/if_addr.h> */
enum ws_ifa_attr_type {
WS_IFA_UNSPEC = 0,
WS_IFA_ADDRESS = 1,
@ -144,9 +160,11 @@ enum ws_ifa_attr_type {
WS_IFA_CACHEINFO = 6,
WS_IFA_MULTICAST = 7,
WS_IFA_FLAGS = 8,
WS_IFA_RT_PRIORITY = 9,
WS_IFA_TARGET_NETNSID = 10,
};
/* values for rta_type (route) from <linux/rtnetlink.h> */
/* values for rta_type (route) from <include/uapi/linux/rtnetlink.h> */
enum ws_rta_attr_type {
WS_RTA_UNSPEC = 0,
WS_RTA_DST = 1,
@ -173,10 +191,16 @@ enum ws_rta_attr_type {
WS_RTA_ENCAP = 22,
WS_RTA_EXPIRES = 23,
WS_RTA_PAD = 24,
WS_RTA_UID = 25,
WS_RTA_TTL_PROPAGATE = 26,
WS_RTA_IP_PROTO = 27,
WS_RTA_SPORT = 28,
WS_RTA_DPORT = 29,
WS_RTA_NH_ID = 30,
};
/* values for rtmsg.rtm_protocol from <linux/rtnetlink.h> */
/* values for rtmsg.rtm_protocol from <include/uapi/linux/rtnetlink.h> */
enum {
/* kernel */
WS_RTPROT_UNSPEC = 0,
@ -196,9 +220,14 @@ enum {
WS_RTPROT_DHCP = 16,
WS_RTPROT_MROUTED = 17,
WS_RTPROT_BABEL = 42,
WS_RTPROT_BGP = 186,
WS_RTPROT_ISIS = 187,
WS_RTPROT_OSPF = 188,
WS_RTPROT_RIP = 189,
WS_RTPROT_EIGRP = 192,
};
/* values for rtmsg.rtm_scope from <linux/rtnetlink.h> */
/* values for rtmsg.rtm_scope from <include/uapi/linux/rtnetlink.h> */
enum {
WS_RT_SCOPE_UNIVERSE = 0,
/* ... user defined (/etc/iproute2/rt_scopes) ... */
@ -208,7 +237,7 @@ enum {
WS_RT_SCOPE_NOWHERE = 255
};
/* values for rtmsg.rtm_type from <linux/rtnetlink.h> */
/* values for rtmsg.rtm_type from <include/uapi/linux/rtnetlink.h> */
enum {
WS_RTN_UNSPEC = 0,
WS_RTN_UNICAST = 1,
@ -224,7 +253,7 @@ enum {
WS_RTN_XRESOLVE = 11
};
/* values for ifinfomsg.ifi_flags <linux/if.h> */
/* values for ifinfomsg.ifi_flags <include/uapi/linux/if.h> */
enum {
WS_IFF_UP = 0x1,
WS_IFF_BROADCAST = 0x2,
@ -247,7 +276,7 @@ enum {
WS_IFF_ECHO = 0x40000
};
/* values for ifaddrmsg.ifa_flags <linux/if_addr.h> */
/* values for ifaddrmsg.ifa_flags <include/uapi/linux/if_addr.h> */
enum {
WS_IFA_F_SECONDARY = 0x01,
WS_IFA_F_NODAD = 0x02,
@ -263,7 +292,7 @@ enum {
WS_IFA_F_STABLE_PRIVACY = 0x800,
};
/* values for ndmsg.ndm_state <linux/neighbour.h> */
/* values for ndmsg.ndm_state <include/uapi/linux/neighbour.h> */
enum {
WS_NUD_INCOMPLETE = 0x01,
WS_NUD_REACHABLE = 0x02,
@ -273,10 +302,11 @@ enum {
WS_NUD_FAILED = 0x20,
/* Dummy states */
WS_NUD_NOARP = 0x40,
WS_NUD_PERMANENT = 0x80
WS_NUD_PERMANENT = 0x80,
WS_NUD_NONE = 0x00
};
/* values for ifla.operstate <uapi/linux/if.h> */
/* values for ifla.operstate <include/uapi/linux/if.h> */
enum {
WS_IF_OPER_UNKNOWN,
WS_IF_OPER_NOTPRESENT,
@ -379,7 +409,7 @@ hfi_netlink_route_ifi_flags_label(char *label, guint32 value)
{ WS_IFF_LOWER_UP, "LOWER_UP" },
{ WS_IFF_DORMANT, "DORMANT" },
{ WS_IFF_ECHO, "ECHO" },
{ 0x00, NULL }
{ 0, NULL }
};
char tmp[16];
@ -402,6 +432,8 @@ static header_field_info hfi_netlink_route_ifi_flags_iff_broadcast NETLINK_ROUTE
{ "Broadcast", "netlink-route.ifi_flags.iff_broadcast", FT_BOOLEAN, 32,
TFS(&tfs_valid_invalid), WS_IFF_BROADCAST, NULL, HFILL };
/* TODO: Other flags */
static header_field_info hfi_netlink_route_ifi_change NETLINK_ROUTE_HFI_INIT =
{ "Device change flags", "netlink-route.ifi_change", FT_UINT32, BASE_DEC,
NULL, 0x00, NULL, HFILL };
@ -491,6 +523,14 @@ static const value_string netlink_route_ifla_attr_vals[] = {
{ WS_IFLA_GSO_MAX_SIZE, "Maximum GSO size" },
{ WS_IFLA_PAD, "IFLA_PAD" },
{ WS_IFLA_XDP, "IFLA_XDP" },
{ WS_IFLA_EVENT, "IFLA_EVENT" },
{ WS_IFLA_NEW_NETNSID, "IFLA_NEW_NETNSID" },
{ WS_IFLA_IF_NETNSID, "IFLA_IF_NETNSID" },
{ WS_IFLA_CARRIER_UP_COUNT, "Carrier up count" },
{ WS_IFLA_CARRIER_DOWN_COUNT, "Carrier down count" },
{ WS_IFLA_NEW_IFINDEX, "IFLA_NEW_IFINDEX" },
{ WS_IFLA_MIN_MTU, "Minimum MTU" },
{ WS_IFLA_MAX_MTU, "Maximum MTU" },
{ 0, NULL }
};
@ -569,6 +609,22 @@ static header_field_info hfi_netlink_route_ifla_broadcast NETLINK_ROUTE_HFI_INIT
{ "Broadcast", "netlink-route.ifla_broadcast", FT_BYTES, SEP_COLON,
NULL, 0x00, NULL, HFILL };
static header_field_info hfi_netlink_route_ifla_carrier_up_count NETLINK_ROUTE_HFI_INIT =
{ "Carrier changes to up", "netlink-route.ifla_carrier_up_count", FT_UINT32, BASE_DEC,
NULL, 0x00, NULL, HFILL };
static header_field_info hfi_netlink_route_ifla_carrier_down_count NETLINK_ROUTE_HFI_INIT =
{ "Carrier changes to down", "netlink-route.ifla_carrier_down_count", FT_UINT32, BASE_DEC,
NULL, 0x00, NULL, HFILL };
static header_field_info hfi_netlink_route_ifla_min_mtu NETLINK_ROUTE_HFI_INIT =
{ "Minimum MTU of device", "netlink-route.ifla_min_mtu", FT_UINT32, BASE_DEC,
NULL, 0x00, NULL, HFILL };
static header_field_info hfi_netlink_route_ifla_max_mtu NETLINK_ROUTE_HFI_INIT =
{ "Maximum MTU of device", "netlink-route.ifla_max_mtu", FT_UINT32, BASE_DEC,
NULL, 0x00, NULL, HFILL };
static header_field_info hfi_netlink_route_ifla_map_memstart NETLINK_ROUTE_HFI_INIT =
{ "Memory start", "netlink-route.ifla_map.mem_start", FT_UINT64, BASE_HEX,
@ -821,6 +877,23 @@ dissect_netlink_route_ifla_attrs(tvbuff_t *tvb, struct netlink_route_info *info,
proto_tree_add_item(tree, &hfi_netlink_route_ifla_map_dma, tvb, offset + 26, 1, info->encoding);
proto_tree_add_item(tree, &hfi_netlink_route_ifla_map_port, tvb, offset + 27, 1, info->encoding);
return 1;
case WS_IFLA_CARRIER_UP_COUNT:
proto_item_append_text(tree, ": %u", tvb_get_letohl(tvb, offset));
proto_tree_add_item(tree, &hfi_netlink_route_ifla_carrier_up_count, tvb, offset, len, info->encoding);
return 1;
case WS_IFLA_CARRIER_DOWN_COUNT:
proto_item_append_text(tree, ": %u", tvb_get_letohl(tvb, offset));
proto_tree_add_item(tree, &hfi_netlink_route_ifla_carrier_down_count, tvb, offset, len, info->encoding);
return 1;
case WS_IFLA_MIN_MTU:
proto_item_append_text(tree, ": %u", tvb_get_letohl(tvb, offset));
proto_tree_add_item(tree, &hfi_netlink_route_ifla_min_mtu, tvb, offset, len, info->encoding);
return 1;
case WS_IFLA_MAX_MTU:
proto_item_append_text(tree, ": %u", tvb_get_letohl(tvb, offset));
proto_tree_add_item(tree, &hfi_netlink_route_ifla_max_mtu, tvb, offset, len, info->encoding);
return 1;
default:
return 0;
}
@ -852,7 +925,7 @@ hfi_netlink_route_ifa_flags_label(char *label, guint32 value)
{ WS_IFA_F_NOPREFIXROUTE, "noprefixroute" },
{ WS_IFA_F_MCAUTOJOIN, "autojoin" },
{ WS_IFA_F_STABLE_PRIVACY, "stable_privacy" },
{ 0x00, NULL }
{ 0, NULL }
};
char tmp[16];
@ -911,6 +984,8 @@ static const value_string netlink_route_ifa_attr_vals[] = {
{ WS_IFA_CACHEINFO, "Address information" },
{ WS_IFA_MULTICAST, "Multicast address" },
{ WS_IFA_FLAGS, "Address flags" },
{ WS_IFA_RT_PRIORITY, "IFA_RT_PRIORITY" },
{ WS_IFA_TARGET_NETNSID, "IFA_TARGET_NETNSID" },
{ 0, NULL }
};
@ -950,12 +1025,14 @@ dissect_netlink_route_ifa_attrs(tvbuff_t *tvb, struct netlink_route_info *info _
proto_tree_add_item(tree, &hfi_netlink_route_ifa_flags32, tvb, offset, 4, info->encoding);
return 1;
case WS_IFA_ADDRESS:
case WS_IFA_LOCAL:
case WS_IFA_BROADCAST:
if (len == 4) {
proto_item_append_text(tree, ": %s", tvb_ip_to_str(tvb, offset));
proto_tree_add_item(tree, &hfi_netlink_route_ifa_addr4, tvb, offset, len, info->encoding);
proto_tree_add_item(tree, &hfi_netlink_route_ifa_addr4, tvb, offset, len, ENC_BIG_ENDIAN);
} else {
proto_item_append_text(tree, ": %s", tvb_ip6_to_str(tvb, offset));
proto_tree_add_item(tree, &hfi_netlink_route_ifa_addr6, tvb, offset, len, info->encoding);
proto_tree_add_item(tree, &hfi_netlink_route_ifa_addr6, tvb, offset, len, ENC_BIG_ENDIAN);
}
return 1;
default:
@ -1001,7 +1078,12 @@ static const value_string hfi_netlink_route_rt_protocol_vals[] = {
{ WS_RTPROT_DHCP, "DHCP client" },
{ WS_RTPROT_MROUTED, "Multicast daemon" },
{ WS_RTPROT_BABEL, "Babel daemon" },
{ 0x00, NULL }
{ WS_RTPROT_BGP, "BGP" },
{ WS_RTPROT_ISIS, "ISIS" },
{ WS_RTPROT_OSPF, "OSPF" },
{ WS_RTPROT_RIP, "RIP" },
{ WS_RTPROT_EIGRP, "EIGRP" },
{ 0, NULL }
};
static value_string_ext hfi_netlink_route_rt_protocol_vals_ext =
VALUE_STRING_EXT_INIT(hfi_netlink_route_rt_protocol_vals);
@ -1016,7 +1098,7 @@ static const value_string netlink_route_rt_scope_vals[] = {
{ WS_RT_SCOPE_LINK, "route on this link" },
{ WS_RT_SCOPE_HOST, "route on the local host" },
{ WS_RT_SCOPE_NOWHERE, "destination doesn't exist" },
{ 0x00, NULL }
{ 0, NULL }
};
static header_field_info hfi_netlink_route_rt_scope NETLINK_ROUTE_HFI_INIT =
@ -1036,7 +1118,7 @@ static const value_string netlink_route_rt_type_vals[] = {
{ WS_RTN_THROW, "Routing lookup in another table" },
{ WS_RTN_NAT, "Netwrk address translation rule" },
{ WS_RTN_XRESOLVE, "Use external resolver" },
{ 0x00, NULL }
{ 0, NULL }
};
static header_field_info hfi_netlink_route_rt_type NETLINK_ROUTE_HFI_INIT =
@ -1111,6 +1193,12 @@ static const value_string netlink_route_rta_attr_vals[] = {
{ WS_RTA_ENCAP, "RTA_ENCAP" },
{ WS_RTA_EXPIRES, "RTA_EXPIRES" },
{ WS_RTA_PAD, "RTA_PAD" },
{ WS_RTA_UID, "RTA_UID" },
{ WS_RTA_TTL_PROPAGATE, "RTA_TTL_PROPAGATE" },
{ WS_RTA_IP_PROTO, "RTA_IP_PROTO" },
{ WS_RTA_SPORT, "RTA_SPORT" },
{ WS_RTA_DPORT, "RTA_DPORT" },
{ WS_RTA_NH_ID, "RTA_NH_ID" },
{ 0, NULL }
};
@ -1165,6 +1253,7 @@ static void
hfi_netlink_route_nd_states_label(char *label, guint32 value)
{
static const value_string flags_vals[] = {
{ WS_NUD_NONE, "NONE" },
{ WS_NUD_INCOMPLETE, "INCOMPLETE" },
{ WS_NUD_REACHABLE, "REACHABLE" },
{ WS_NUD_STALE, "STALE" },
@ -1173,7 +1262,7 @@ hfi_netlink_route_nd_states_label(char *label, guint32 value)
{ WS_NUD_FAILED, "FAILED" },
{ WS_NUD_NOARP, "NOARP" },
{ WS_NUD_PERMANENT, "PERMAMENT" },
{ 0x00, NULL }
{ 0, NULL }
};
char tmp[16];
@ -1265,6 +1354,7 @@ static const value_string netlink_route_type_vals[] = {
{ WS_RTM_GETDCB, "Get Data Center Bridging" },
{ WS_RTM_SETDCB, "Set Data Center Bridging" },
{ WS_RTM_NEWNETCONF, "RTM_NEWNETCONF" },
{ WS_RTM_DELNETCONF, "RTM_DELNETCONF" },
{ WS_RTM_GETNETCONF, "RTM_GETNETCONF" },
{ WS_RTM_NEWMDB, "Add multicast database entry" },
{ WS_RTM_DELMDB, "Delete multicast database entry" },
@ -1274,6 +1364,13 @@ static const value_string netlink_route_type_vals[] = {
{ WS_RTM_GETNSID, "Get network namespace ID" },
{ WS_RTM_NEWSTATS, "New link statistics" },
{ WS_RTM_GETSTATS, "Get link statistics" },
{ WS_RTM_NEWCACHEREPORT,"New cache report" },
{ WS_RTM_NEWCHAIN, "New chain" },
{ WS_RTM_DELCHAIN, "Delete chain" },
{ WS_RTM_GETCHAIN, "Get chain" },
{ WS_RTM_NEWNEXTHOP, "New next hop" },
{ WS_RTM_DELNEXTHOP, "Delete next hop" },
{ WS_RTM_GETNEXTHOP, "Get next hop" },
{ 0, NULL }
};
static value_string_ext netlink_route_type_vals_ext = VALUE_STRING_EXT_INIT(netlink_route_type_vals);
@ -1381,6 +1478,10 @@ proto_register_netlink_route(void)
&hfi_netlink_route_ifla_carrier_changes,
&hfi_netlink_route_ifla_hwaddr,
&hfi_netlink_route_ifla_broadcast,
&hfi_netlink_route_ifla_carrier_up_count,
&hfi_netlink_route_ifla_carrier_down_count,
&hfi_netlink_route_ifla_min_mtu,
&hfi_netlink_route_ifla_max_mtu,
/* Interface map */
&hfi_netlink_route_ifla_map_memstart,
&hfi_netlink_route_ifla_map_memend,
@ -1438,7 +1539,6 @@ proto_register_netlink_route(void)
&hfi_netlink_route_rta_attr_type,
&hfi_netlink_route_rta_iif,
&hfi_netlink_route_rta_oif,
/* Neighbor */
&hfi_netlink_route_nd_family,
&hfi_netlink_route_nd_index,

View File

@ -38,17 +38,17 @@ static header_field_info *hfi_netlink_sock_diag = NULL;
enum {
/* sock diag values for nlmsghdr.nlmsg_type from: */
/* <linux/inet_diag.h> (compat) */
/* <include/uapi/linux/inet_diag.h> (compat) */
WS_TCPDIAG_GETSOCK = 18,
WS_DCCPDIAG_GETSOCK = 19,
/* <linux/sock_diag.h> */
/* <include/uapi/linux/sock_diag.h> */
WS_SOCK_DIAG_BY_FAMILY = 20,
WS_SOCK_DESTROY = 21
};
enum {
/* <bits/socket_type.h> */
/* </usr/include/<platform>/bits/socket_type.h> */
WS_SOCK_STREAM = 1,
WS_SOCK_DGRAM = 2,
WS_SOCK_RAW = 3,
@ -62,28 +62,30 @@ enum {
/* SOCK_NONBLOCK = 00004000 */
enum ws_unix_diag_show_mask {
/* show mask for unix diag from <linux/unix_diag.h> */
/* show mask for unix diag from <include/uapi/linux/unix_diag.h> */
WS_UDIAG_SHOW_NAME = 0x01,
WS_UDIAG_SHOW_VFS = 0x02,
WS_UDIAG_SHOW_PEER = 0x04,
WS_UDIAG_SHOW_ICONS = 0x08,
WS_UDIAG_SHOW_RQLEN = 0x10,
WS_UDIAG_SHOW_MEMINFO = 0x20
WS_UDIAG_SHOW_MEMINFO = 0x20,
WS_UDIAG_SHOW_UID = 0X40
};
enum ws_unix_diag_attr_type {
/* netlink attributes for unix diag from <linux/unix_diag.h> */
/* netlink attributes for unix diag from <include/uapi/linux/unix_diag.h> */
WS_UNIX_DIAG_NAME = 0,
WS_UNIX_DIAG_VFS = 1,
WS_UNIX_DIAG_PEER = 2,
WS_UNIX_DIAG_ICONS = 3,
WS_UNIX_DIAG_RQLEN = 4,
WS_UNIX_DIAG_MEMINFO = 5,
WS_UNIX_DIAG_SHUTDOWN = 6
WS_UNIX_DIAG_SHUTDOWN = 6,
WS_UNIX_DIAG_UID = 7
};
enum ws_inet_diag_attr_type {
/* netlink attributes for inet diag from <linux/inet_diag.h> */
/* netlink attributes for inet diag from <include/uapi/linux/inet_diag.h> */
WS_INET_DIAG_NONE = 0,
WS_INET_DIAG_MEMINFO = 1,
WS_INET_DIAG_INFO = 2,
@ -101,25 +103,30 @@ enum ws_inet_diag_attr_type {
WS_INET_DIAG_PAD = 14,
WS_INET_DIAG_MARK = 15,
WS_INET_DIAG_BBRINFO = 16,
WS_INET_DIAG_CLASS_ID = 17,
WS_INET_DIAG_MD5SIG = 18,
WS_INET_DIAG_ULP_INFO = 19,
};
enum ws_netlink_diag_show_type {
/* show mask for netlink diag from <linux/netlink_diag.h> */
/* show mask for netlink diag from <include/uapi/linux/netlink_diag.h> */
WS_NDIAG_SHOW_MEMINFO = 0x01,
WS_NDIAG_SHOW_GROUPS = 0x02,
WS_NDIAG_SHOW_RING_CFG = 0x04
WS_NDIAG_SHOW_RING_CFG = 0x04,
WS_NDIAG_SHOW_FLAGS = 0X08,
};
enum ws_netlink_diag_attr_type {
/* netlink attributes for netlink diag from <linux/netlink_diag.h> */
/* netlink attributes for netlink diag from <include/uapi/linux/netlink_diag.h> */
WS_NETLINK_DIAG_MEMINFO = 0,
WS_NETLINK_DIAG_GROUPS = 1,
WS_NETLINK_DIAG_RX_RING = 2,
WS_NETLINK_DIAG_TX_RING = 3
WS_NETLINK_DIAG_TX_RING = 3,
WS_NETLINK_DIAG_FLAGS = 4,
};
enum ws_packet_diag_show_mask {
/* show mask for packet diag from <linux/packet_diag.h> */
/* show mask for packet diag from <include/uapi/linux/packet_diag.h> */
WS_PACKET_SHOW_INFO = 0x01,
WS_PACKET_SHOW_MCLIST = 0x02,
WS_PACKET_SHOW_RING_CFG = 0x04,
@ -129,7 +136,7 @@ enum ws_packet_diag_show_mask {
};
enum ws_packet_diag_attr_type {
/* netlink attributes for packet diag from <linux/packet_diag.h> */
/* netlink attributes for packet diag from <include/uapi/linux/packet_diag.h> */
WS_PACKET_DIAG_INFO = 0,
WS_PACKET_DIAG_MCLIST = 1,
WS_PACKET_DIAG_RX_RING = 2,
@ -141,7 +148,7 @@ enum ws_packet_diag_attr_type {
};
enum {
/* based on kernel include <net/tcp_states.h> with WS_ without TCP_ (it's not only used by tcp) */
/* based on kernel include <include/net/tcp_states.h> with WS_ without TCP_ (it's not only used by tcp) */
WS_ESTABLISHED = 1,
WS_SYN_SENT = 2,
WS_SYN_RECV = 3,

View File

@ -49,6 +49,7 @@ static const value_string netlink_family_vals[] = {
{ WS_NETLINK_ECRYPTFS, "ecryptfs" },
{ WS_NETLINK_RDMA, "RDMA" },
{ WS_NETLINK_CRYPTO, "Crypto layer" },
{ WS_NETLINK_SMC, "SMC monitoring" },
{ 0, NULL }
};
@ -382,7 +383,7 @@ dissect_netlink_header(tvbuff_t *tvb, proto_tree *tree, int offset, int encoding
hdr_flags = tvb_get_guint16(tvb, offset, encoding);
if ((hdr_flags & WS_NLM_F_REQUEST) && (hdr_flags & 0x0f00)) {
/* XXX detect based on the protocol family and message type
/* TODO detect based on the protocol family and message type
* whether this is a GET, NEW or regular request. */
proto_tree_add_bitmask(fh_hdr, tvb, offset, &hfi_netlink_hdr_flags,
ett_netlink_hdr_flags, netlink_header_get_flags, encoding);

View File

@ -12,7 +12,7 @@
#include <epan/value_string.h>
/* from <linux/netlink.h> prefixed with WS_ */
/* from <include/uapi/linux/netlink.h> prefixed with WS_ */
enum {
WS_NETLINK_ROUTE = 0,
WS_NETLINK_UNUSED = 1,
@ -35,10 +35,11 @@ enum {
WS_NETLINK_SCSITRANSPORT = 18,
WS_NETLINK_ECRYPTFS = 19,
WS_NETLINK_RDMA = 20,
WS_NETLINK_CRYPTO = 21
WS_NETLINK_CRYPTO = 21,
WS_NETLINK_SMC = 22
};
/* from <linux/netlink.h> prefixed with WS_ */
/* from <include/uapi/linux/netlink.h> prefixed with WS_ */
enum {
WS_NLM_F_REQUEST = 1, /* It is request message.*/
WS_NLM_F_MULTI = 2, /* Multipart message, terminated by NETLINK_MSG_DONE */
@ -56,7 +57,14 @@ enum {
WS_NLM_F_REPLACE = 0x100, /* Override existing */
WS_NLM_F_EXCL = 0x200, /* Do not touch, if it exists */
WS_NLM_F_CREATE = 0x400, /* Create, if it does */
WS_NLM_F_APPEND = 0x800 /* Add to end of list */
WS_NLM_F_APPEND = 0x800, /* Add to end of list */
/* Modifiers to DELETE request */
WS_NLM_F_NONREC = 0x100, /* Do not delete recursively */
/* Flags for ACK message */
WS_NLM_F_CAPPED = 0x100, /* request was capped */
WS_NLM_F_ACK_TLVS = 0x200 /* extended ACK TLVs were included */
};
@ -70,7 +78,7 @@ 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 */
/* from <include/uapi/linux/netfilter.h>. Looks like AF_xxx, except for NFPROTO_ARP */
enum ws_nfproto {
WS_NFPROTO_UNSPEC = 0,
WS_NFPROTO_INET = 1,