From nobody Sun Jun 20 16:37:44 2021 X-Original-To: freebsd-hackers@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 A947C11D16A1; Sun, 20 Jun 2021 16:37:48 +0000 (UTC) (envelope-from rozhuk.im@gmail.com) Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4G7JHJ0M7vz3tgV; Sun, 20 Jun 2021 16:37:47 +0000 (UTC) (envelope-from rozhuk.im@gmail.com) Received: by mail-ed1-x534.google.com with SMTP id s6so15615651edu.10; Sun, 20 Jun 2021 09:37:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:date:to:cc:subject:message-id:in-reply-to:references :mime-version; bh=Xv46+qxLS2N9hxnsGg8VhaKXXOkMqe+E7YNcCMLe4hk=; b=B9xMRcpNM+TccWwGipA3emPeee6xF5a15S0tesrx3mw6gsRtuTSETBMAA68Z9WYJz/ 4lKtcHl/UmPTCI+weX8q1tl3WEGJ4mXz67E25Jx/WLdLw/kc654By5z7920qYTlR7hbd rdIwb9GEW4Jb0eOy092/LhlyxZmRhElyKKGg1ueQd9BHlNVBB+pHRgfh9lOmFecyPPzq vH7yCzijjF5pB03vhKtu9fPCWBRwCVXfj909GJmTdKpxhKVrTMaGYI/xHunAUKHeT8al jsNWUsB0uIQQ0MmEjyvQgu4a74ltKi2WZ4pRzlVOjHShBgdYTGbtx5A3464mxXOKHnyF 8KBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:date:to:cc:subject:message-id:in-reply-to :references:mime-version; bh=Xv46+qxLS2N9hxnsGg8VhaKXXOkMqe+E7YNcCMLe4hk=; b=nBE8A0AjdsJI52VO9/1skmm84A9feHiQIctZG3qGFFA1CrC+QsqiKiEtsoDC287ryl iUbkdZfTwe7Lgq0e83aH2dl3OEYdKU1/sm8bzK60RbC5hDIhjnlIhieCC+0T+RgIt+tA A6c/pK9ZPDETFnkoUBuW0684+ewdVbEGlfPlKW9MxVCraQZLr2/8PTqj1Q5TTid3repZ H65Atj7KxVAmpbqZVdVdlRYiwjRFCNmsRsU50iGwhpyC0ZKmSGg7bQSnNSHR08m+nLSN 9GT01LhRG/cNk3ytMN1R5P7h+syzS4zn2znvJukf6Z9+7n/FUw2rNTfr+XpaZFJYlwbj FssQ== X-Gm-Message-State: AOAM533SId4sJtjGosQOMwJWkzG1GJGHJ/MjM2Y30v6heSGpOu/GKJeC fyFhFtEGCvscWaz+0tGttk1jBet1gv7ZqA== X-Google-Smtp-Source: ABdhPJyG3F6u2jMVYt0jlnZg83HFAK+bF45RuQKIi1HjcMjgCBiHlxbR/Sk+6LPh0fBhSoMyWPUxmw== X-Received: by 2002:a05:6402:27d0:: with SMTP id c16mr16176751ede.60.1624207066617; Sun, 20 Jun 2021 09:37:46 -0700 (PDT) Received: from rimwks.local ([2001:470:1f15:3d8:7285:c2ff:fe37:5722]) by smtp.gmail.com with ESMTPSA id j1sm8893387eds.27.2021.06.20.09.37.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 20 Jun 2021 09:37:46 -0700 (PDT) From: Rozhuk Ivan X-Google-Original-From: Rozhuk Ivan Date: Sun, 20 Jun 2021 19:37:44 +0300 To: "dmilith ." Cc: freebsd-net@freebsd.org, freebsd-hackers@FreeBSD.org Subject: Re: How to run script on network address change? Message-ID: <20210620193744.39eae64f@rimwks.local> In-Reply-To: References: <20210620165215.0f3dd15c@rimwks.local> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; amd64-portbld-freebsd13.0) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/M9MCt26LwExmTW7V=bzbtL8" X-Rspamd-Queue-Id: 4G7JHJ0M7vz3tgV X-Spamd-Bar: - Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20161025 header.b=B9xMRcpN; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of rozhukim@gmail.com designates 2a00:1450:4864:20::534 as permitted sender) smtp.mailfrom=rozhukim@gmail.com X-Spamd-Result: default: False [-1.00 / 15.00]; RCVD_VIA_SMTP_AUTH(0.00)[]; TO_DN_SOME(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36]; HAS_ATTACHMENT(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; DKIM_TRACE(0.00)[gmail.com:+]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; FREEMAIL_TO(0.00)[gmail.com]; FROM_EQ_ENVFROM(0.00)[]; SUBJECT_ENDS_QUESTION(1.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; TAGGED_FROM(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; ARC_NA(0.00)[]; RBL_DBL_DONT_QUERY_IPS(0.00)[2a00:1450:4864:20::534:from]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20161025]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; NEURAL_SPAM_SHORT(1.00)[1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; MIME_GOOD(-0.10)[multipart/mixed,text/plain,text/x-patch]; SPAMHAUS_ZRD(0.00)[2a00:1450:4864:20::534:from:127.0.2.255]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::534:from]; RCVD_TLS_ALL(0.00)[]; MAILMAN_DEST(0.00)[freebsd-net,freebsd-hackers] X-ThisMailContainsUnwantedMimeParts: N --MP_/M9MCt26LwExmTW7V=bzbtL8 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline On Sun, 20 Jun 2021 16:23:38 +0200 "dmilith ." wrote: > Have you tried `route monitor`? No, and I do not want keep running some daemon that will parse output. But thanks, I found good place to add devctl_notify() calls. Now devd have new events. run: ifconfig lan0 alias 192.168.1.1/24 ifconfig lan0 -alias 192.168.1.1 ifconfig lan0 inet6 1111:: devd output: !system=IFNET subsystem=lan0 type=ADDR_ADD 192.168.1.1 !system=IFNET subsystem=lan0 type=ADDR_DEL 192.168.1.1 !system=IFNET subsystem=lan0 type=ADDR_ADD 1111:: And even for netif rename: ifconfig lan0 name lan1 ifconfig lan1 name lan0 devd output: !system=IFNET subsystem=lan0 type=RENAME lan1 !system=IFNET subsystem=lan1 type=RENAME lan0 --MP_/M9MCt26LwExmTW7V=bzbtL8 Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=18a08c5f17.patch From 18a08c5f17d3b54f029a4e8c9ffbcd1370dbf3b1 Mon Sep 17 00:00:00 2001 From: Rozhuk Ivan Date: Sun, 20 Jun 2021 19:10:36 +0300 Subject: [PATCH] sys/net/if.c: add RENAME devctl event !system=IFNET subsystem=lan0 type=RENAME lan1 !system=IFNET subsystem=lan1 type=RENAME lan0 --- sys/net/if.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/net/if.c b/sys/net/if.c index f6926c43ef9..8c8a7f6f4f0 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -2681,6 +2681,7 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td) EVENTHANDLER_INVOKE(ifnet_departure_event, ifp); if_printf(ifp, "changing name to '%s'\n", new_name); + devctl_notify("IFNET", ifp->if_xname, "RENAME", new_name); IF_ADDR_WLOCK(ifp); strlcpy(ifp->if_xname, new_name, sizeof(ifp->if_xname)); --MP_/M9MCt26LwExmTW7V=bzbtL8 Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=ece5aba37a.patch From ece5aba37afe51e7ffa1ec14b4cf9b3430a608b4 Mon Sep 17 00:00:00 2001 From: Rozhuk Ivan Date: Sun, 20 Jun 2021 19:22:55 +0300 Subject: [PATCH] sys/net/route.c: add devctl event handler ifconfig lan0 alias 192.168.1.1/24 ifconfig lan0 -alias 192.168.1.1 output: !system=IFNET subsystem=lan0 type=ADDR_ADD 192.168.1.1 !system=IFNET subsystem=lan0 type=ADDR_DEL 192.168.1.1 --- sys/net/route.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/sys/net/route.c b/sys/net/route.c index f07cb3f6581..4c1fed90caa 100644 --- a/sys/net/route.c +++ b/sys/net/route.c @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -67,6 +68,7 @@ #include #include +#include VNET_PCPUSTAT_DEFINE(struct rtstat, rtstat); @@ -693,6 +695,8 @@ rt_maskedcopy(struct sockaddr *src, struct sockaddr *dst, struct sockaddr *netma int rt_addrmsg(int cmd, struct ifaddr *ifa, int fibnum) { + struct sockaddr *sa = ifa->ifa_addr; + struct ifnet *ifp = ifa->ifa_ifp; KASSERT(cmd == RTM_ADD || cmd == RTM_DELETE, ("unexpected cmd %d", cmd)); @@ -701,6 +705,24 @@ rt_addrmsg(int cmd, struct ifaddr *ifa, int fibnum) EVENTHANDLER_DIRECT_INVOKE(rt_addrmsg, ifa, cmd); +#ifdef INET + if (sa->sa_family == AF_INET) { + char addrstr[INET_ADDRSTRLEN]; + inet_ntoa_r((((struct sockaddr_in*)sa)->sin_addr), + addrstr); + devctl_notify("IFNET", ifp->if_xname, + (cmd == RTM_ADD) ? "ADDR_ADD" : "ADDR_DEL", addrstr); + } +#endif +#ifdef INET6 + if (sa->sa_family == AF_INET6) { + char addrstr[INET6_ADDRSTRLEN]; + ip6_sprintf(addrstr, IFA_IN6(ifa)); + devctl_notify("IFNET", ifp->if_xname, + (cmd == RTM_ADD) ? "ADDR_ADD" : "ADDR_DEL", addrstr); + } +#endif + if (V_rt_add_addr_allfibs) fibnum = RT_ALL_FIBS; return (rtsock_addrmsg(cmd, ifa, fibnum)); --MP_/M9MCt26LwExmTW7V=bzbtL8--