Date: Sun, 20 Jun 2021 19:37:44 +0300 From: Rozhuk Ivan <rozhuk.im@gmail.com> To: "dmilith ." <dmilith@gmail.com> 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: <CAJQ5JngsD4VTkoPQW4xE%2BfLOAA4L-JBeYcHeaFSs4LNzQNL6Ag@mail.gmail.com> References: <20210620165215.0f3dd15c@rimwks.local> <CAJQ5JngsD4VTkoPQW4xE%2BfLOAA4L-JBeYcHeaFSs4LNzQNL6Ag@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--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 ." <dmilith@gmail.com> 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 <rozhuk.im@gmail.com> 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 <rozhuk.im@gmail.com> 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 <sys/syslog.h> #include <sys/sysproto.h> #include <sys/proc.h> +#include <sys/devctl.h> #include <sys/domain.h> #include <sys/eventhandler.h> #include <sys/kernel.h> @@ -67,6 +68,7 @@ #include <netinet/in.h> #include <netinet/ip_mroute.h> +#include <netinet6/in6_var.h> 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--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20210620193744.39eae64f>