From nobody Sun Apr 09 13:53:57 2023 X-Original-To: dev-commits-src-branches@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 4PvYVY3LyQz44VPF; Sun, 9 Apr 2023 13:53:57 +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 4PvYVY2m0qz43LQ; Sun, 9 Apr 2023 13:53:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1681048437; 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=sItm5jT7Et47IMbgvH/GnbuGMZAjaCvF5GE9c6tyyOk=; b=aqDWAeZfV3eQtNHdjd2wP/YxCYjKHBmEDqqsr6lS+7WMHuDLrXTYI9jMCfdaitjX24+2/M 1Yxmir7UL69Nc7lX2yne7v/mJL8A5ctm3/VsoGAVoD559lYdND7RNhgg1gUZEbT4cVCany oCGVr3VS5f4km4NCfIXjj0Ngqwwk1UHwZJrWMOSFXCSEUTR/vOUayeW82Vp0Ck3WnXpAL6 B4dhNljs6LErAafzPgmLKlRQE8JPXc9ZOmz2ay/hHuISJHjyxFBc8Lzg2/VqO2TlVtG2Jr uzG1dXrhk8CNV9xHBnZNFeYJ7M9nbCWxf3aMVpzjgPvSNNtPthdVLR9TJslUfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1681048437; 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=sItm5jT7Et47IMbgvH/GnbuGMZAjaCvF5GE9c6tyyOk=; b=YbYIlydi64GauPBq4MVcHRQW4xs1Oq6dJf6aw4bgpMjOdS+qe982txx8cccaOnpFCPRaVi WiG7cgxpF4xm+G9J+qU2DdL9yPZIaIA5/FlKCvoE1aGVBZsSzYiAoeOaRI8y9YaKtgK7KZ iakzw+OnRgERQ3OK7gkJ3uJO5oL3I7ztGm4Ke4n715tQ9w8fAntBq5yZMqru11YSjayuzH HjZyANBVbO69jRYeKY4WEa0+C87T7gtxl+p7WJx6tr9HLj+w9AUut5tzmX1CWUiKeWdYK5 IqJwZbLNQEJltM4DUdT4EdyOFpHDcP1vbdrTWEy1Cv0I5eF5PAQBv6j9yOeyNw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1681048437; a=rsa-sha256; cv=none; b=m3O5DPhXL2qbSpbprcKuXIDqOu1HOiw/0eCCyhssvM9mIlDmCu3rEnuZozUWH6OKA9mLWT HQJ+3LGESJ0mLh9qnvGUYV1EZtV3qvjfyIXNiKG2PCpGTDd2cI72euzxqLqtRaHRbefn8P Z665t7Hqom4XQpMBiWaUb4eNMUH9I34QVYUHlVJgsDqzcO6Ycyi5y7/bUM8PJ8jgg1hyCD TUT9A6vy3b2BNfJFbtAiRCCXfbnh7hbdGIKnspXnCSZ0xuyWk5DOaR1W+lCyvMwHSPtd0L EkpgksThavnq4FrFfXhhfohX4+LYIIChBXUR1xIzxzjQu0+jIFyaDM0eS1UN0w== 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 4PvYVY1ltzz19fp; Sun, 9 Apr 2023 13:53:57 +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 339DrvNF019681; Sun, 9 Apr 2023 13:53:57 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 339Drv1O019680; Sun, 9 Apr 2023 13:53:57 GMT (envelope-from git) Date: Sun, 9 Apr 2023 13:53:57 GMT Message-Id: <202304091353.339Drv1O019680@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: "Alexander V. Chernikov" Subject: git: 6cee6af2064a - stable/13 - netlink: add standrard ifaddr/neigh parsers to snl(3). List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@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/stable/13 X-Git-Reftype: branch X-Git-Commit: 6cee6af2064ae0c60221238904dd2c6420845128 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by melifaro: URL: https://cgit.FreeBSD.org/src/commit/?id=6cee6af2064ae0c60221238904dd2c6420845128 commit 6cee6af2064ae0c60221238904dd2c6420845128 Author: Alexander V. Chernikov AuthorDate: 2023-03-26 09:04:41 +0000 Commit: Alexander V. Chernikov CommitDate: 2023-04-09 13:53:39 +0000 netlink: add standrard ifaddr/neigh parsers to snl(3). MFC after: 2 weeks (cherry picked from commit 9a11f3dff991bac89afb5f74a476e765abdbd1d1) --- sys/netlink/netlink_snl_route_parsers.h | 57 ++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/sys/netlink/netlink_snl_route_parsers.h b/sys/netlink/netlink_snl_route_parsers.h index a370f89fb9e3..ba9ead461c80 100644 --- a/sys/netlink/netlink_snl_route_parsers.h +++ b/sys/netlink/netlink_snl_route_parsers.h @@ -198,6 +198,7 @@ struct snl_parsed_link_simple { uint32_t ifi_index; uint32_t ifla_mtu; uint16_t ifi_type; + uint32_t ifi_flags; char *ifla_ifname; }; @@ -210,14 +211,68 @@ static struct snl_attr_parser _nla_p_link_s[] = { static struct snl_field_parser _fp_p_link_s[] = { {.off_in = _IN(ifi_index), .off_out = _OUT(ifi_index), .cb = snl_field_get_uint32 }, {.off_in = _IN(ifi_type), .off_out = _OUT(ifi_type), .cb = snl_field_get_uint16 }, + {.off_in = _IN(ifi_flags), .off_out = _OUT(ifi_flags), .cb = snl_field_get_uint32 }, }; #undef _IN #undef _OUT SNL_DECLARE_PARSER(snl_rtm_link_parser_simple, struct ifinfomsg, _fp_p_link_s, _nla_p_link_s); +struct snl_parsed_neigh { + uint8_t ndm_family; + uint8_t ndm_flags; + uint16_t ndm_state; + uint32_t nda_ifindex; + 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 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_IFINDEX, .off = _OUT(nda_ifindex), .cb = snl_attr_get_uint32 }, +}; +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 }, +}; +#undef _IN +#undef _OUT +SNL_DECLARE_PARSER(snl_rtm_neigh_parser, struct ndmsg, _fp_p_neigh_s, _nla_p_neigh_s); + +struct snl_parsed_addr { + uint8_t ifa_family; + uint8_t ifa_prefixlen; + uint32_t ifa_index; + struct sockaddr *ifa_local; + struct sockaddr *ifa_address; + struct sockaddr *ifa_broadcast; + char *ifa_label; +}; + +#define _IN(_field) offsetof(struct ifaddrmsg, _field) +#define _OUT(_field) offsetof(struct snl_parsed_addr, _field) +static struct snl_attr_parser _nla_p_addr_s[] = { + { .type = IFA_ADDRESS, .off = _OUT(ifa_address), .cb = snl_attr_get_ip }, + { .type = IFA_LOCAL, .off = _OUT(ifa_local), .cb = snl_attr_get_ip }, + { .type = IFA_LABEL, .off = _OUT(ifa_label), .cb = snl_attr_get_string }, + { .type = IFA_BROADCAST, .off = _OUT(ifa_broadcast), .cb = snl_attr_get_ip }, +}; +static struct snl_field_parser _fp_p_addr_s[] = { + {.off_in = _IN(ifa_family), .off_out = _OUT(ifa_family), .cb = snl_field_get_uint8 }, + {.off_in = _IN(ifa_prefixlen), .off_out = _OUT(ifa_prefixlen), .cb = snl_field_get_uint8 }, + {.off_in = _IN(ifa_index), .off_out = _OUT(ifa_index), .cb = snl_field_get_uint32 }, +}; +#undef _IN +#undef _OUT +SNL_DECLARE_PARSER(snl_rtm_addr_parser, struct ifaddrmsg, _fp_p_addr_s, _nla_p_addr_s); + 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_link_parser, &snl_rtm_link_parser_simple, &snl_rtm_neigh_parser, + &snl_rtm_addr_parser, }; #endif