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;

Reply via email to