Module Name: src Committed By: roy Date: Fri Nov 12 16:30:27 UTC 2010
Modified Files: src/sys/net: link_proto.c route.h rtsock.c Log Message: Add RTM_CHGADDR to signal that an address on the interface has changed. This is mainly used for notifying userland about active link address changes. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/net/link_proto.c cvs rdiff -u -r1.75 -r1.76 src/sys/net/route.h cvs rdiff -u -r1.130 -r1.131 src/sys/net/rtsock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/link_proto.c diff -u src/sys/net/link_proto.c:1.5 src/sys/net/link_proto.c:1.6 --- src/sys/net/link_proto.c:1.5 Fri Nov 7 00:20:13 2008 +++ src/sys/net/link_proto.c Fri Nov 12 16:30:26 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: link_proto.c,v 1.5 2008/11/07 00:20:13 dyoung Exp $ */ +/* $NetBSD: link_proto.c,v 1.6 2010/11/12 16:30:26 roy Exp $ */ /*- * Copyright (c) 1982, 1986, 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: link_proto.c,v 1.5 2008/11/07 00:20:13 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: link_proto.c,v 1.6 2010/11/12 16:30:26 roy Exp $"); #include <sys/param.h> #include <sys/socket.h> @@ -189,6 +189,7 @@ if (!isactive && mkactive) { if_activate_sadl(ifp, ifa, nsdl); + rt_newaddrmsg(RTM_CHANGE, ifa, 0, NULL); error = ENETRESET; } break; Index: src/sys/net/route.h diff -u src/sys/net/route.h:1.75 src/sys/net/route.h:1.76 --- src/sys/net/route.h:1.75 Sat Jun 26 14:24:28 2010 +++ src/sys/net/route.h Fri Nov 12 16:30:26 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: route.h,v 1.75 2010/06/26 14:24:28 kefren Exp $ */ +/* $NetBSD: route.h,v 1.76 2010/11/12 16:30:26 roy Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -223,6 +223,7 @@ * address has changed */ #define RTM_IFINFO 0x14 /* iface/link going up/down etc. */ +#define RTM_CHGADDR 0x15 /* address has changed on iface */ #define RTV_MTU 0x1 /* init or lock _mtu */ #define RTV_HOPCOUNT 0x2 /* init or lock _hopcount */ Index: src/sys/net/rtsock.c diff -u src/sys/net/rtsock.c:1.130 src/sys/net/rtsock.c:1.131 --- src/sys/net/rtsock.c:1.130 Mon Jun 28 17:26:11 2010 +++ src/sys/net/rtsock.c Fri Nov 12 16:30:26 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.130 2010/06/28 17:26:11 kefren Exp $ */ +/* $NetBSD: rtsock.c,v 1.131 2010/11/12 16:30:26 roy Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.130 2010/06/28 17:26:11 kefren Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.131 2010/11/12 16:30:26 roy Exp $"); #include "opt_inet.h" #include "opt_mpls.h" @@ -589,6 +589,7 @@ case RTM_DELADDR: case RTM_NEWADDR: + case RTM_CHGADDR: len = sizeof(struct ifa_msghdr); break; @@ -680,6 +681,7 @@ case RTM_DELADDR: case RTM_NEWADDR: + case RTM_CHGADDR: len = sizeof(struct ifa_msghdr); break; #ifdef COMPAT_14 @@ -837,11 +839,16 @@ case cmdpass(RTM_ADD, 1): case cmdpass(RTM_CHANGE, 1): case cmdpass(RTM_DELETE, 2): - if (cmd == RTM_ADD) - ncmd = RTM_NEWADDR; - else + switch (cmd) { + case RTM_DELETE: ncmd = RTM_DELADDR; - + break; + case RTM_CHANGE: + ncmd = RTM_CHGADDR; + break; + default: + ncmd = RTM_NEWADDR; + } info.rti_info[RTAX_IFA] = sa = ifa->ifa_addr; info.rti_info[RTAX_IFP] = ifp->if_dl->ifa_addr; info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask;