2005-03-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

	* rt_netlink.c: (netlink_link_change) If the status of an
	  operative interface changes (e.g. MTU changes), the client
	  daemons should be notified by calling zebra_interface_up_update.
	  Previously, the information was being updated in zebra's
	  interface structure, but the clients were not notified of
	  changes to an operative interface.
	* ospf_zebra.c: (ospf_interface_state_up) If the MTU of an operative
	  interface changes, print a debug message and call ospf_if_reset()
	  to simulate down/up on the interface.
	* ospf_interface.h: Declare new function ospf_if_reset().
	* ospf_interface.c: (ospf_if_reset) New function to call ospf_if_down
	  and ospf_if_up for all ospf interfaces attached to an interface.
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index df71fad..b76abe5 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -102,6 +102,25 @@
     }
 }
 
+/* Simulate down/up on the interface.  This is needed, for example, when 
+   the MTU changes. */
+void
+ospf_if_reset(struct interface *ifp)
+{
+  struct route_node *rn;
+  
+  for (rn = route_top (IF_OIFS (ifp)); rn; rn = route_next (rn))
+    {
+      struct ospf_interface *oi;
+      
+      if ( (oi = rn->info) == NULL)
+	continue;
+
+      ospf_if_down(oi);
+      ospf_if_up(oi);
+    }
+}
+
 void
 ospf_if_reset_variables (struct ospf_interface *oi)
 {