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_zebra.c b/ospfd/ospf_zebra.c
index 8468aed..300103e 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -168,7 +168,6 @@
                          zebra_size_t length)
 {
   struct interface *ifp;
-  struct interface if_tmp;
   struct ospf_interface *oi;
   struct route_node *rn;
 
@@ -181,6 +180,7 @@
   if (if_is_operative (ifp))
     {
       /* Temporarily keep ifp values. */
+      struct interface if_tmp;
       memcpy (&if_tmp, ifp, sizeof (struct interface));
 
       zebra_interface_if_set_value (zclient->ibuf, ifp);
@@ -196,6 +196,16 @@
 
           ospf_if_recalculate_output_cost (ifp);
         }
+
+      if (if_tmp.mtu != ifp->mtu)
+        {
+          if (IS_DEBUG_OSPF (zebra, ZEBRA_INTERFACE))
+            zlog_debug ("Zebra: Interface[%s] MTU change %u -> %u.",
+                       ifp->name, if_tmp.mtu, ifp->mtu);
+
+	  /* Must reset the interface (simulate down/up) when MTU changes. */
+          ospf_if_reset(ifp);
+	}
       return 0;
     }