From nobody Tue Apr 25 11:15:35 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Q5KDS0RC4z473km; Tue, 25 Apr 2023 11:15:36 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Q5KDR6jfTz45g3; Tue, 25 Apr 2023 11:15:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1682421335; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=JcyJoHa/0081pogOsXAGwz86Z60lPmDUnhIpP9tTdyg=; b=AYngmW5cilKBQfFAwMRuRUvGLx3WBTWywSc2gNIkNwChGJ02Xb4kQSS1VWkBg59F4A23yO un1ZaQsn9RXQn9dnVsPHPggRyHhnIxfKRjn/3lKaN5UwnCz5s4h4dxl0EljvM4ZNNXx1Ik wxEFJn3u7kguv6UgnyDkfWp8ylEi7DoaiNbOC/ogVMKAJJ2+gT3dGmSdTS3bUmeTS9G3+1 XW83RhwY7DsV8VptG6WAKvFviGL+/c2VozEsRW1kBf6BlsGN4FEhIdg68wsB2frWJskr5x 1w6y6Nc17lbUC+Lh79Kn371453CKitz18J4qcA7VNvS3ksvwQLWnGpD8oIKliA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1682421335; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=JcyJoHa/0081pogOsXAGwz86Z60lPmDUnhIpP9tTdyg=; b=uQkxag9Kl0e9TOw73wl3oUOZzg5razCHAHByngw0bePCAO72Wc/hMFlW3RVWFpFi8Ax76j 7dqpbQr2nUfZQhzGepam1y2VZ1o7coL8+MVR+zugc+c73QY6P/zq14FVb8BTHdR6RBbvg/ 9k3d58dvMCVAi3EJt/G+6e2pv48gaVmyqTPeY4/rxaWRD8yKnl4DjAiBAxpmG7jnY8zUjT fxI8/Cc1XSAT3lAnNzrQsrbiiRkvBMPBMHmRsG40bzpnXXVXgY8CReLosAqMw7lsvfffz3 7OQofhz7wI3xm87pqucbqXoadyZkkCBwtXv5pt7IrBD7w9l6RMdFmmxuN530Sw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1682421335; a=rsa-sha256; cv=none; b=cpwu0bo214xQ8GuUH180VrUKIhBMV4KDWYSX7UCjda0Zj8F8+zUkZgVPXz+NAY+N7EJCJT gAvka0WpVEsFd3GiBzrmunRlZnHfIYJyEN/YSypR0sF8x8kM4uWpI1DWi2Ly0xMqijXw54 nZkMC3qCJccmcCMWhCBhhuFMBi4B0I4ezSu7ZAIWfjBJdvxWJSscgi4HcJ0+2osJg+7kDI 7ah9mmqY6nnP5Ls3/84IupGYwbDjBdz18Jyy6P6zl6YSVmnG69XqWO1tFqb83ZCYyHl2Ii 44PWL2Jii31DHDube/q+4+TM7A/F3SQveg2Sa8rKWBWCYOiv8HOTfSIBpLzo+Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Q5KDR5qMRz14TP; Tue, 25 Apr 2023 11:15:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 33PBFZgr012841; Tue, 25 Apr 2023 11:15:35 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 33PBFZt0012840; Tue, 25 Apr 2023 11:15:35 GMT (envelope-from git) Date: Tue, 25 Apr 2023 11:15:35 GMT Message-Id: <202304251115.33PBFZt0012840@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: "Alexander V. Chernikov" Subject: git: 5af9ad5359cb - main - netlink: add snl(3) support for dumping nexthops and neighbors List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: melifaro X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5af9ad5359cbbd0c82fcfdec9ea667adb10d15a3 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by melifaro: URL: https://cgit.FreeBSD.org/src/commit/?id=5af9ad5359cbbd0c82fcfdec9ea667adb10d15a3 commit 5af9ad5359cbbd0c82fcfdec9ea667adb10d15a3 Author: Alexander V. Chernikov AuthorDate: 2023-04-25 11:14:12 +0000 Commit: Alexander V. Chernikov CommitDate: 2023-04-25 11:14:12 +0000 netlink: add snl(3) support for dumping nexthops and neighbors MFC after: 2 weeks --- sys/netlink/netlink_snl_route_parsers.h | 58 +++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/sys/netlink/netlink_snl_route_parsers.h b/sys/netlink/netlink_snl_route_parsers.h index 1d6680cb5597..94dc20861c3f 100644 --- a/sys/netlink/netlink_snl_route_parsers.h +++ b/sys/netlink/netlink_snl_route_parsers.h @@ -29,6 +29,7 @@ #include #include +#include /* TODO: this file should be generated automatically */ @@ -224,21 +225,31 @@ struct snl_parsed_neigh { uint8_t ndm_flags; uint16_t ndm_state; uint32_t nda_ifindex; + uint32_t nda_probes; + uint32_t ndaf_next_ts; struct sockaddr *nda_dst; struct nlattr *nda_lladdr; }; #define _IN(_field) offsetof(struct ndmsg, _field) #define _OUT(_field) offsetof(struct snl_parsed_neigh, _field) +static const struct snl_attr_parser _nla_p_neigh_fbsd[] = { + { .type = NDAF_NEXT_STATE_TS, .off = _OUT(ndaf_next_ts), .cb = snl_attr_get_uint32 }, +}; +SNL_DECLARE_ATTR_PARSER(_neigh_fbsd_parser, _nla_p_neigh_fbsd); + static struct snl_attr_parser _nla_p_neigh_s[] = { { .type = NDA_DST, .off = _OUT(nda_dst), .cb = snl_attr_get_ip }, { .type = NDA_LLADDR , .off = _OUT(nda_lladdr), .cb = snl_attr_get_nla }, + { .type = NDA_PROBES, .off = _OUT(nda_probes), .cb = snl_attr_get_uint32 }, { .type = NDA_IFINDEX, .off = _OUT(nda_ifindex), .cb = snl_attr_get_uint32 }, + { .type = NDA_FREEBSD, .arg = &_neigh_fbsd_parser, .cb = snl_attr_get_nested }, }; static struct snl_field_parser _fp_p_neigh_s[] = { {.off_in = _IN(ndm_family), .off_out = _OUT(ndm_family), .cb = snl_field_get_uint8 }, {.off_in = _IN(ndm_flags), .off_out = _OUT(ndm_flags), .cb = snl_field_get_uint8 }, {.off_in = _IN(ndm_state), .off_out = _OUT(ndm_state), .cb = snl_field_get_uint16 }, + {.off_in = _IN(ndm_ifindex), .off_out = _OUT(nda_ifindex), .cb = snl_field_get_uint32 }, }; #undef _IN #undef _OUT @@ -271,10 +282,53 @@ static struct snl_field_parser _fp_p_addr_s[] = { #undef _OUT SNL_DECLARE_PARSER(snl_rtm_addr_parser, struct ifaddrmsg, _fp_p_addr_s, _nla_p_addr_s); + +struct snl_parsed_nhop { + uint32_t nha_id; + uint8_t nha_blackhole; + uint8_t nha_groups; + uint8_t nhaf_knhops; + uint8_t nhaf_family; + uint32_t nha_oif; + struct sockaddr *nha_gw; + uint8_t nh_family; + uint8_t nh_protocol; + uint32_t nhaf_table; + uint32_t nhaf_kid; + uint32_t nhaf_aif; +}; + +#define _IN(_field) offsetof(struct nhmsg, _field) +#define _OUT(_field) offsetof(struct snl_parsed_nhop, _field) +static struct snl_attr_parser _nla_p_nh_fbsd[] = { + { .type = NHAF_KNHOPS, .off = _OUT(nhaf_knhops), .cb = snl_attr_get_flag }, + { .type = NHAF_TABLE, .off = _OUT(nhaf_table), .cb = snl_attr_get_uint32 }, + { .type = NHAF_KID, .off = _OUT(nhaf_kid), .cb = snl_attr_get_uint32 }, + { .type = NHAF_AIF, .off = _OUT(nhaf_aif), .cb = snl_attr_get_uint32 }, +}; +SNL_DECLARE_ATTR_PARSER(_nh_fbsd_parser, _nla_p_nh_fbsd); + +static const struct snl_field_parser _fp_p_nh[] = { + { .off_in = _IN(nh_family), .off_out = _OUT(nh_family), .cb = snl_field_get_uint8 }, + { .off_in = _IN(nh_protocol), .off_out = _OUT(nh_protocol), .cb = snl_field_get_uint8 }, +}; + +static const struct snl_attr_parser _nla_p_nh[] = { + { .type = NHA_ID, .off = _OUT(nha_id), .cb = snl_attr_get_uint32 }, + { .type = NHA_BLACKHOLE, .off = _OUT(nha_blackhole), .cb = snl_attr_get_flag }, + { .type = NHA_OIF, .off = _OUT(nha_oif), .cb = snl_attr_get_uint32 }, + { .type = NHA_GATEWAY, .off = _OUT(nha_gw), .cb = snl_attr_get_ip }, + { .type = NHA_FREEBSD, .arg = &_nh_fbsd_parser, .cb = snl_attr_get_nested }, +}; +#undef _IN +#undef _OUT +SNL_DECLARE_PARSER(snl_nhmsg_parser, struct nhmsg, _fp_p_nh, _nla_p_nh); + static const struct snl_hdr_parser *snl_all_route_parsers[] = { &_metrics_mp_nh_parser, &_mpath_nh_parser, &_metrics_parser, &snl_rtm_route_parser, - &snl_rtm_link_parser, &snl_rtm_link_parser_simple, &snl_rtm_neigh_parser, - &snl_rtm_addr_parser, + &snl_rtm_link_parser, &snl_rtm_link_parser_simple, + &_neigh_fbsd_parser, &snl_rtm_neigh_parser, + &snl_rtm_addr_parser, &_nh_fbsd_parser, &snl_nhmsg_parser, }; #endif