From nobody Fri Jan 13 21:25:41 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 4NtvbV007tz2ql87; Fri, 13 Jan 2023 21:25:41 +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 4NtvbT6Y6Pz43ZT; Fri, 13 Jan 2023 21:25:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1673645141; 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=6IdyAwXHTF/3QXtMTcmWHeyRgDq41UOAuCDs1yc72hk=; b=rFNgL4EkNcu25NTwcBUGh5Ktqfvfa71LoJ5fLplA+GJkHeC4OnROUZbus5QoRdkeBwPJoS R625hhm68WpapUIj7fPYq62C7jcCVd90Vx4C07XVxBTcJZlBSJRbl74ZyMkESENuVcDoNo jXI/MN8AJ2lAGAgLOqnsL2oYPA6/lfMpclsPs0ZT9jgVzhl1wIzjC37Fc0/pPo6JtsJYim jRCHEJf3/0Bl2PtdARqNkC6Ql2na0LV2rjNv/AWfT9oRwVp54T+4P6kbChgGhV7gBP2BYL aUlJNTQ2SRwB9nJZmSJfwD1i+bhUpfd0WKZ/UY1a97zRehP/gDmQ8HIWG3hrQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1673645141; 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=6IdyAwXHTF/3QXtMTcmWHeyRgDq41UOAuCDs1yc72hk=; b=PUHnjlTJdwBzGn0zwRDH17pwLERW3KFaDo4GOIwD26vxeS/u9tZDK2aDjZfyWmQmp3slGB nKvBKL9EVsaO10vDKjHzP0ZTPFDQi6j6m4qarCt7YeA6hI/Vqz4GvQRxaWIx1gJpxqXnCp EbIdKxfVbHJ+Gwq6iMTQ/UeGDBTpzUSIWo9mBs/s1in51113hEyNtPGtbIrwgWBijaMoP6 1COHCXTBChRcFWSyY26Y/rzRJCkATDukMQwbXKOWUBgZOZMhYWbw9zg9fhXmO1RB3byKwo XMB+jTgcABvHWCB05po1nRBcPgnRMqQG0dSAn5Q53DNApeBNvLkM73SYk6yhkA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1673645141; a=rsa-sha256; cv=none; b=ynrYlgyxEy17v+1THj43NWx1TLkXR0A1ZubYAu688Ev+U1pc4HgZrqG9Kr5wGEexwAqBv2 m7+Fr1oeS6dY9voW3pYa71LrBc7GzRDJJag7vonzSmZJLEfjHKhwgdX4b0c3REp9iUsT74 YPBab7iMc5VJ1jrZElPqnx3yeFsFpoU0kotkrH14uG0AqlByN3D0HSHMcwKPHGH2lUywGd hmwGh64OL5JgXG6yU+A0IPAIxIdAKUBS+sPhSyeY2B+gL4+z3Ipb0Tg3kHD9qZ8Jh9eDGG mtiqZzM5oKpEreN9BsNSJgnahDf8ZNPsDFUndMDwEVwveeIafqUyiIF2Ca03/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 4NtvbT5f9NzN2Q; Fri, 13 Jan 2023 21:25:41 +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 30DLPfNX042199; Fri, 13 Jan 2023 21:25:41 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 30DLPfFj042198; Fri, 13 Jan 2023 21:25:41 GMT (envelope-from git) Date: Fri, 13 Jan 2023 21:25:41 GMT Message-Id: <202301132125.30DLPfFj042198@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: f5de03cb2c69 - stable/13 - rtsock: subscribe to ifnet eventhandlers instead of direct calls. 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: f5de03cb2c693e8eb3170992d3aab8cd1a940478 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by melifaro: URL: https://cgit.FreeBSD.org/src/commit/?id=f5de03cb2c693e8eb3170992d3aab8cd1a940478 commit f5de03cb2c693e8eb3170992d3aab8cd1a940478 Author: Alexander V. Chernikov AuthorDate: 2022-08-11 20:09:45 +0000 Commit: Alexander V. Chernikov CommitDate: 2023-01-13 21:24:11 +0000 rtsock: subscribe to ifnet eventhandlers instead of direct calls. Stop treating rtsock as a "special" consumer and use already-provided ifaddr arrival/departure notifications. MFC after: 2 weeks Test Plan: ``` 21:05 [0] m@devel0 route -n monitor -> ifconfig vtnet0.2 create got message of size 24 on Tue Aug 9 21:05:44 2022 RTM_IFANNOUNCE: interface arrival/departure: len 24, if# 3, what: arrival got message of size 168 on Tue Aug 9 21:05:54 2022 RTM_IFINFO: iface status change: len 168, if# 3, link: up, flags: -> ifconfig vtnet0.2 destroy got message of size 24 on Tue Aug 9 21:05:54 2022 RTM_IFANNOUNCE: interface arrival/departure: len 24, if# 3, what: departure ``` Reviewed By: glebius Differential Revision: https://reviews.freebsd.org/D36095 MFC after: 2 weeks (cherry picked from commit d8b42ddcac5cb86af679968d09c45c9a7cc3e4fb) --- sys/net/if.c | 9 --------- sys/net/route.h | 1 - sys/net/rtsock.c | 17 ++++++++++++++++- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/sys/net/if.c b/sys/net/if.c index bcebd84306c8..d42b642e8d18 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -1006,9 +1006,6 @@ if_attach_internal(struct ifnet *ifp, int vmove, struct if_clone *ifc) EVENTHANDLER_INVOKE(ifnet_arrival_event, ifp); if (IS_DEFAULT_VNET(curvnet)) devctl_notify("IFNET", ifp->if_xname, "ATTACH", NULL); - - /* Announce the interface. */ - rt_ifannouncemsg(ifp, IFAN_ARRIVAL); } static void @@ -1258,8 +1255,6 @@ if_detach_internal(struct ifnet *ifp, int vmove, struct if_clone **ifcp) #endif if_purgemaddrs(ifp); - /* Announce that the interface is gone. */ - rt_ifannouncemsg(ifp, IFAN_DEPARTURE); EVENTHANDLER_INVOKE(ifnet_departure_event, ifp); if (IS_DEFAULT_VNET(curvnet)) devctl_notify("IFNET", ifp->if_xname, "DETACH", NULL); @@ -2691,8 +2686,6 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td) */ ifp->if_flags |= IFF_RENAMING; - /* Announce the departure of the interface. */ - rt_ifannouncemsg(ifp, IFAN_DEPARTURE); EVENTHANDLER_INVOKE(ifnet_departure_event, ifp); if_printf(ifp, "changing name to '%s'\n", new_name); @@ -2721,8 +2714,6 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td) IF_ADDR_WUNLOCK(ifp); EVENTHANDLER_INVOKE(ifnet_arrival_event, ifp); - /* Announce the return of the interface. */ - rt_ifannouncemsg(ifp, IFAN_ARRIVAL); ifp->if_flags &= ~IFF_RENAMING; break; diff --git a/sys/net/route.h b/sys/net/route.h index 53b54493b6c4..a2394d54b92f 100644 --- a/sys/net/route.h +++ b/sys/net/route.h @@ -415,7 +415,6 @@ struct ifmultiaddr; struct rib_head; void rt_ieee80211msg(struct ifnet *, int, void *, size_t); -void rt_ifannouncemsg(struct ifnet *, int); void rt_ifmsg(struct ifnet *); void rt_missmsg(int, struct rt_addrinfo *, int, int); void rt_missmsg_fib(int, struct rt_addrinfo *, int, int, int); diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index 85f1c2472742..0a5a58ad3c05 100644 --- a/sys/net/rtsock.c +++ b/sys/net/rtsock.c @@ -198,6 +198,7 @@ static int route_output(struct mbuf *m, struct socket *so, ...); static void rt_getmetrics(const struct rtentry *rt, const struct nhop_object *nh, struct rt_metrics *out); static void rt_dispatch(struct mbuf *, sa_family_t); +static void rt_ifannouncemsg(struct ifnet *ifp, int what); static int handle_rtm_get(struct rt_addrinfo *info, u_int fibnum, struct rt_msghdr *rtm, struct rib_cmd_info *rc); static int update_rtm_from_rc(struct rt_addrinfo *info, @@ -263,6 +264,20 @@ VNET_SYSUNINIT(vnet_rts_uninit, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, vnet_rts_uninit, 0); #endif +static void +rts_handle_ifnet_arrival(void *arg __unused, struct ifnet *ifp) +{ + rt_ifannouncemsg(ifp, IFAN_ARRIVAL); +} +EVENTHANDLER_DEFINE(ifnet_arrival_event, rts_handle_ifnet_arrival, NULL, 0); + +static void +rts_handle_ifnet_departure(void *arg __unused, struct ifnet *ifp) +{ + rt_ifannouncemsg(ifp, IFAN_DEPARTURE); +} +EVENTHANDLER_DEFINE(ifnet_departure_event, rts_handle_ifnet_departure, NULL, 0); + static int raw_input_rts_cb(struct mbuf *m, struct sockproto *proto, struct sockaddr *src, struct rawcb *rp) @@ -2169,7 +2184,7 @@ rt_ieee80211msg(struct ifnet *ifp, int what, void *data, size_t data_len) * This is called to generate routing socket messages indicating * network interface arrival and departure. */ -void +static void rt_ifannouncemsg(struct ifnet *ifp, int what) { struct mbuf *m;