[netfilter-cvslog] r3292 - in trunk/nfsim: core/ipv4 tools

rusty at netfilter.org rusty at netfilter.org
Sun Nov 21 05:12:07 CET 2004


Author: rusty at netfilter.org
Date: 2004-11-21 05:12:06 +0100 (Sun, 21 Nov 2004)
New Revision: 3292

Modified:
   trunk/nfsim/core/ipv4/ipv4.c
   trunk/nfsim/core/ipv4/ipv4.h
   trunk/nfsim/tools/ifconfig.c
Log:
Initialize route->gateway on creation.
Call notifiers on ifconfig commands.


Modified: trunk/nfsim/core/ipv4/ipv4.c
===================================================================
--- trunk/nfsim/core/ipv4/ipv4.c	2004-11-20 18:47:40 UTC (rev 3291)
+++ trunk/nfsim/core/ipv4/ipv4.c	2004-11-21 04:12:06 UTC (rev 3292)
@@ -50,6 +50,7 @@
 	route->netmask = indev->ifa_list->ifa_mask;
 	route->network = indev->ifa_list->ifa_address & indev->ifa_list->ifa_mask;
 	route->interface = indev->dev;
+	route->gateway = indev->ifa_list->ifa_address;
 	list_add_tail(&route->entry, &routes);
 }
 
@@ -95,7 +96,13 @@
 	return notifier_chain_unregister(&inetaddr_chain, nb);
 }
 
+int __call_inetaddr_notifier(unsigned long val, struct in_ifaddr *ifa)
+{
+	struct notifier_block *nb = inetaddr_chain;
 
+	return notifier_call_chain(&nb, val, ifa);
+}
+
 int ip_rcv_finish(struct sk_buff *skb)
 {
 	if (!skb->dst &&

Modified: trunk/nfsim/core/ipv4/ipv4.h
===================================================================
--- trunk/nfsim/core/ipv4/ipv4.h	2004-11-20 18:47:40 UTC (rev 3291)
+++ trunk/nfsim/core/ipv4/ipv4.h	2004-11-21 04:12:06 UTC (rev 3292)
@@ -527,6 +527,7 @@
 	
 int register_inetaddr_notifier(struct notifier_block *nb);
 int unregister_inetaddr_notifier(struct notifier_block *nb);
+int __call_inetaddr_notifier(unsigned long, struct in_ifaddr *ifa);
 
 static inline int register_netdevice_notifier(struct notifier_block *nb)
 {

Modified: trunk/nfsim/tools/ifconfig.c
===================================================================
--- trunk/nfsim/tools/ifconfig.c	2004-11-20 18:47:40 UTC (rev 3291)
+++ trunk/nfsim/tools/ifconfig.c	2004-11-21 04:12:06 UTC (rev 3292)
@@ -70,6 +70,7 @@
 			return false;
 		}
 		ifaddr->ifa_address = ifaddr->ifa_local;
+		__call_inetaddr_notifier(NETDEV_UP, ifaddr);
 	}
 	
 	if (!--argc)
@@ -131,6 +132,7 @@
 
 	indev->ifa_list = talloc(indev, struct in_ifaddr);
 	indev->ifa_list->ifa_next = NULL;
+	indev->ifa_list->ifa_dev = indev;
 	indev->dev = dev;
 
 	if (!set_device(dev, argc, argv)) {
@@ -146,6 +148,7 @@
 static bool ifconfig(int argc, char **argv)
 {
 	struct net_device *dev;
+	struct in_device *indev;
 	
 	if (argc == 1) {
 		list_for_each_entry(dev, &interfaces, entry)
@@ -182,12 +185,15 @@
 		return ifshow(dev);
 	}
 
+	/* IP address either going down or changing. */
+	indev = dev->ip_ptr;
+	__call_inetaddr_notifier(NETDEV_DOWN, indev->ifa_list);
+
 	if (argc == 3 && !strncmp(argv[2], "down", 4)) {
 		list_del(&dev->entry);
 		talloc_free(dev);
 		return true;
 	}
-
 	return set_device(dev, argc-2, argv+2);
 }
 




More information about the netfilter-cvslog mailing list