From nobody Wed May 10 09:57:49 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 4QGVnp2b7Mz49fV7; Wed, 10 May 2023 09:57:50 +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 4QGVnp22Yvz4WL7; Wed, 10 May 2023 09:57:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1683712670; 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=bp9N9wX4qeiTGsQYa7siDR1ukx9FKiUn04P7Lqn+o68=; b=BZrRJLd/ZJUKFGM+xgXav7KTLZM85B7zFn2/AYscSkeKQlRLrGPJN8nbAg11av8yk+D8KF pk4J+ImlseCHaOijCnDcRdCGsv9rk9XGOrzABzkGyTIvwzeOHERd5eXryaA+dL7QObXCoF +bgC73m5cDYpEO/jDTlj3a69rY8f3eTjRVbBh+G/xD0bh2oDveBu2IXrgJh4qxy3X60Yae JoQ4/Qeb/xY5pd4VgVGw5HN/1vaK/Fz1a/tvOFh9VsaT+VEisId836KfZXvsZacEak0CGJ HxQV/x/5udQWbxc8qLA8dGUh2bY+AW7oWSAhUdGNaUcLU6DDE/nXRlcT4R17zg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1683712670; 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=bp9N9wX4qeiTGsQYa7siDR1ukx9FKiUn04P7Lqn+o68=; b=pR8EAeD103tpm7ePTHyL6tr6qJbCL2qtZ6AlzMBSxnxITb5T4FoVVCXrubDAkRa6cVDOAY HMv1MdCDMN8lbWHVUiZgxIXY4UUaunMTSEoz21QUKm34D40d9MQFltOKnSZaUOyGCQGOns lfYBFhbOVV8S2sNhRseb3e2T4y8HN4a5oQ1IfbssnREDpqXGw51BtTwtEPfs/GFjVQVGRh uoHEV0EQcsWJWkJ2/K20UrKLczshXprEKi631esGPEQMflJ71wf/EEfZH0JTfsimISpKRi l9+wY4CHSgyw7ohnO7Zzws2V+10AK6bpbWUlBrNP0bZ2IZrBIdLCdfW/DTqLkg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1683712670; a=rsa-sha256; cv=none; b=Gym9EViDCPWprmhGgILNkdaBkGlXP92zEThxgQEsW8exa9MchgXRGte14uzLxeXNyG0Wx1 OGn9m/DF7ooxQgtukkw8hv5rDgffzVCpLqMfqAfsmrfwHsmu+9eaCE+xku7N44moxdq0aS 6mt6EF3EmGkW65sENOLtExBeEbEb3J9JmzvzCIi0YYsxH4RKeoZOnN4nztZHYY55Qcl2oW ZDtEzW3QLN0Lxgaw0cOLGtK5mpUr8VfaSVFwVHJzK1mkrfdMy/sewFKvVRCnunRjZKC5Vv 4w4zog3U4m4gCxkDCgapj5/+a2WqEPYHCWjw42+6MBkncMnvGiqAbQUw6EfZYQ== 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 4QGVnp0w6jz159K; Wed, 10 May 2023 09:57:50 +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 34A9vn8o041719; Wed, 10 May 2023 09:57:49 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 34A9vng5041718; Wed, 10 May 2023 09:57:49 GMT (envelope-from git) Date: Wed, 10 May 2023 09:57:49 GMT Message-Id: <202305100957.34A9vng5041718@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: 122487801670 - main - netlink: export carp VHID when dumping interface addresses. 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: 1224878016704f3e5a6b6953f3caed3e7840cefd Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by melifaro: URL: https://cgit.FreeBSD.org/src/commit/?id=1224878016704f3e5a6b6953f3caed3e7840cefd commit 1224878016704f3e5a6b6953f3caed3e7840cefd Author: Alexander V. Chernikov AuthorDate: 2023-05-10 08:44:47 +0000 Commit: Alexander V. Chernikov CommitDate: 2023-05-10 09:57:01 +0000 netlink: export carp VHID when dumping interface addresses. MFC after: 2 weeks --- sys/netlink/netlink_snl_route_parsers.h | 9 ++++++++- sys/netlink/route/iface.c | 12 ++++++++++++ sys/netlink/route/ifaddrs.h | 10 +++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/sys/netlink/netlink_snl_route_parsers.h b/sys/netlink/netlink_snl_route_parsers.h index 504b9c8737df..e50ad717e17f 100644 --- a/sys/netlink/netlink_snl_route_parsers.h +++ b/sys/netlink/netlink_snl_route_parsers.h @@ -302,15 +302,22 @@ struct snl_parsed_addr { struct sockaddr *ifa_address; struct sockaddr *ifa_broadcast; char *ifa_label; + uint32_t ifaf_vhid; }; #define _IN(_field) offsetof(struct ifaddrmsg, _field) #define _OUT(_field) offsetof(struct snl_parsed_addr, _field) +static const struct snl_attr_parser _nla_p_addr_fbsd[] = { + { .type = IFAF_VHID, .off = _OUT(ifaf_vhid), .cb = snl_attr_get_uint32 }, +}; +SNL_DECLARE_ATTR_PARSER(_addr_fbsd_parser, _nla_p_addr_fbsd); + static const 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_dup_string }, { .type = IFA_BROADCAST, .off = _OUT(ifa_broadcast), .cb = snl_attr_get_ip }, + { .type = IFA_FREEBSD, .arg = &_addr_fbsd_parser, .cb = snl_attr_get_nested }, }; static const struct snl_field_parser _fp_p_addr_s[] = { {.off_in = _IN(ifa_family), .off_out = _OUT(ifa_family), .cb = snl_field_get_uint8 }, @@ -385,7 +392,7 @@ 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, &_neigh_fbsd_parser, &snl_rtm_neigh_parser, - &snl_rtm_addr_parser, &_nh_fbsd_parser, &snl_nhmsg_parser, + &_addr_fbsd_parser, &snl_rtm_addr_parser, &_nh_fbsd_parser, &snl_nhmsg_parser, }; #endif diff --git a/sys/netlink/route/iface.c b/sys/netlink/route/iface.c index 816d6ff8632e..cc76410550f4 100644 --- a/sys/netlink/route/iface.c +++ b/sys/netlink/route/iface.c @@ -79,6 +79,9 @@ static SLIST_HEAD(, nl_cloner) nl_cloners = SLIST_HEAD_INITIALIZER(nl_cloners); static struct sx rtnl_cloner_lock; SX_SYSINIT(rtnl_cloner_lock, &rtnl_cloner_lock, "rtnl cloner lock"); +/* These are external hooks for CARP. */ +extern int (*carp_get_vhid_p)(struct ifaddr *); + /* * RTM_GETLINK request * sendto(3, {{len=32, type=RTM_GETLINK, flags=NLM_F_REQUEST|NLM_F_DUMP, seq=1641940952, pid=0}, @@ -795,6 +798,15 @@ dump_iface_addr(struct nl_writer *nw, struct ifnet *ifp, struct ifaddr *ifa, uint32_t val = 0; // ifa->ifa_flags; nlattr_add_u32(nw, IFA_FLAGS, val); + /* Store FreeBSD-specific attributes */ + int off = nlattr_add_nested(nw, IFA_FREEBSD); + if (off != 0) { + if (ifa->ifa_carp != NULL && carp_get_vhid_p != NULL) { + uint32_t vhid = (uint32_t)(*carp_get_vhid_p)(ifa); + nlattr_add_u32(nw, IFAF_VHID, vhid); + } + nlattr_set_len(nw, off); + } if (nlmsg_end(nw)) return (true); diff --git a/sys/netlink/route/ifaddrs.h b/sys/netlink/route/ifaddrs.h index 7ada8f22bf7b..cbf23fe54197 100644 --- a/sys/netlink/route/ifaddrs.h +++ b/sys/netlink/route/ifaddrs.h @@ -60,9 +60,17 @@ enum { IFA_FLAGS = 8, /* not supported */ IFA_RT_PRIORITY = 9, /* not supported */ IFA_TARGET_NETNSID = 10, /* not supported */ + IFA_FREEBSD = 11, /* nested, FreeBSD-specific */ __IFA_MAX, }; -#define IFA_MAX (__IFA_MAX - 1) +#define IFA_MAX (__IFA_MAX - 1) + +enum { + IFAF_UNSPEC, + IFAF_VHID = 1, /* u32: carp vhid */ + __IFAF_MAX, +}; +#define IFAF_MAX (__IFAF_MAX - 1) /* IFA_FLAGS attribute flags */ #define IFA_F_SECONDARY 0x0001