diff options
Diffstat (limited to 'epan/dissectors')
-rw-r--r-- | epan/dissectors/packet-netlink-net_dm.c | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-netlink-netfilter.c | 39 | ||||
-rw-r--r-- | epan/dissectors/packet-netlink-route.c | 144 | ||||
-rw-r--r-- | epan/dissectors/packet-netlink-sock_diag.c | 37 | ||||
-rw-r--r-- | epan/dissectors/packet-netlink.c | 3 | ||||
-rw-r--r-- | epan/dissectors/packet-netlink.h | 18 |
6 files changed, 192 insertions, 53 deletions
diff --git a/epan/dissectors/packet-netlink-net_dm.c b/epan/dissectors/packet-netlink-net_dm.c index 64e462a212..c0a4c31c54 100644 --- a/epan/dissectors/packet-netlink-net_dm.c +++ b/epan/dissectors/packet-netlink-net_dm.c @@ -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 diff --git a/epan/dissectors/packet-netlink-netfilter.c b/epan/dissectors/packet-netlink-netfilter.c index 7f47c9e69c..66edc57127 100644 --- a/epan/dissectors/packet-netlink-netfilter.c +++ b/epan/dissectors/packet-netlink-netfilter.c @@ -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, diff --git a/epan/dissectors/packet-netlink-route.c b/epan/dissectors/packet-netlink-route.c index 734d4822e5..c9b904df0e 100644 --- a/epan/dissectors/packet-netlink-route.c +++ b/epan/dissectors/packet-netlink-route.c @@ -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, diff --git a/epan/dissectors/packet-netlink-sock_diag.c b/epan/dissectors/packet-netlink-sock_diag.c index 0a6ce59d94..6a079c841e 100644 --- a/epan/dissectors/packet-netlink-sock_diag.c +++ b/epan/dissectors/packet-netlink-sock_diag.c @@ -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, diff --git a/epan/dissectors/packet-netlink.c b/epan/dissectors/packet-netlink.c index 6cf6ea8d1b..6c222bdb05 100644 --- a/epan/dissectors/packet-netlink.c +++ b/epan/dissectors/packet-netlink.c @@ -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); diff --git a/epan/dissectors/packet-netlink.h b/epan/dissectors/packet-netlink.h index 07a2cc63eb..06b9172263 100644 --- a/epan/dissectors/packet-netlink.h +++ b/epan/dissectors/packet-netlink.h @@ -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, |