From nobody Sun Mar 26 09:05:33 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 4PkqmG0yMDz41XRC; Sun, 26 Mar 2023 09:05:34 +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 4PkqmG0R4dz4DvM; Sun, 26 Mar 2023 09:05:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679821534; 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=xDIQLxSW+CR7mE8a19796XkbA484fV5pUyEvH+rMc6o=; b=oV+WVNr/hI0eStKBOdsTMiXQZEtmxU7ryDBn1yWocG3OIaLggmtiIySwRdfWySpcKY0teW l2V9EbSOtEyWNMzCoGvF1IavmCRcd2j3dCve1OoqV2Nxpw3kS7HEv8xwkEetCXt+wBuwKm HbxGJstfQLW68nPLY38JAafJDEBIhsIKvR/L+PF3UXi5ZPnPF4Svz5SC9Gto3AORZ3o28M 6lROIi3ZNrmdDzd53MjQ80zvvdp/kAoFBwB2VxhdnD0U+J5WWKv4Bobf42k3JilqGn0bOJ 2DTVUrgANrhFSd48+tKO6Yvch28dnJ/FA24oxk/oRVdPy8HmeBQsuuzHQXySJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1679821534; 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=xDIQLxSW+CR7mE8a19796XkbA484fV5pUyEvH+rMc6o=; b=X8KB1C4Wo2znfELtw2sWlBti5u0uNenfw3AeLGz/C5T9QKr3DCCawZKoVUGFJoDb1u7qvl OU1TyTcdC1ze9qOxpYbIvpra019otGRVYdFNYs3RuDqvvwUfhrqpPU9uu6RG9d8WUNU1Ur Ad4ITvrY+ixY02P6NzAAfqZHkiqo2HtRuAGDxkqka2MgKyqbMaFykW+mBYnyIJW/uJAfVt stCp2Cala/B3h7xC5/kGA9yHi+AHs0nuOAQ+UrBK9Ia66H4pjISqcx+V1SyCAv6zOJTAQu jhWb1pZqVmyjtGxNdmWhsiu8qYBEHrUrD27IFi+a+sRJXAUhQK3+7nt6EUAEZQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1679821534; a=rsa-sha256; cv=none; b=s6Nt3MsexaWDLCihVwIXbaewwFB2h2N+dKXapK8kWss4duDkZNMFFYNnPbRW7enn6yC8qn 1ZTKAM2d5ZPCHXFb/BH2Ilhibq/C5ee8V73+5xsTzDOYkOWklAKCoLeOi9a8xro+jFL4hR JdrUHDWS/5BoiMWonIqbjLiFlH77EP+ZdENTnrQpFsPvCHeR8rOXJihKoBuvJ/C1QGtIkX fJWKQIRr9BzRob6eEvJn0H8nIH71xtUhuY66OSNwdLJ4V3UOsJ2dA2WoC7quc1x0/attk/ ZP8whcevdmieyA68UgdcyDEAqdZsx6CBpxnAvzBJyI1Ys/Ke/2p55KNfkn/dWw== 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 4PkqmF6crCzZjl; Sun, 26 Mar 2023 09:05:33 +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 32Q95X7H056875; Sun, 26 Mar 2023 09:05:33 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 32Q95X10056874; Sun, 26 Mar 2023 09:05:33 GMT (envelope-from git) Date: Sun, 26 Mar 2023 09:05:33 GMT Message-Id: <202303260905.32Q95X10056874@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: 9a11f3dff991 - main - netlink: add standrard ifaddr/neigh parsers to snl(3). 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: 9a11f3dff991bac89afb5f74a476e765abdbd1d1 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by melifaro: URL: https://cgit.FreeBSD.org/src/commit/?id=9a11f3dff991bac89afb5f74a476e765abdbd1d1 commit 9a11f3dff991bac89afb5f74a476e765abdbd1d1 Author: Alexander V. Chernikov AuthorDate: 2023-03-26 09:04:41 +0000 Commit: Alexander V. Chernikov CommitDate: 2023-03-26 09:04:41 +0000 netlink: add standrard ifaddr/neigh parsers to snl(3). MFC after: 2 weeks --- 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