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;