summaryrefslogtreecommitdiff
path: root/isisd
diff options
context:
space:
mode:
authorhasso <hasso>2004-12-29 20:06:41 +0000
committerhasso <hasso>2004-12-29 20:06:41 +0000
commitb30c5e67a20b1a092faa56fe349171eb1da386b0 (patch)
tree9bc23b582e4c159ae41310cf1900b2e42f932af2 /isisd
parentd44debedf53b85c989b72fe7c6924ffc1e7e625b (diff)
Really fix crashes now. Revert isis_circuit_update_params() part of previous
commit. Replace all if_is_up() calls with if_is_operative().
Diffstat (limited to 'isisd')
-rw-r--r--isisd/ChangeLog3
-rw-r--r--isisd/isis_circuit.c7
-rw-r--r--isisd/isis_zebra.c14
3 files changed, 11 insertions, 13 deletions
diff --git a/isisd/ChangeLog b/isisd/ChangeLog
index e883faa0..21453077 100644
--- a/isisd/ChangeLog
+++ b/isisd/ChangeLog
@@ -2,7 +2,8 @@
* isis_circuit.c, isis_csm.c, isis_zebra.c: Don't crash during
interface up/down events. I'm not sure whether logic is correct
- though. Needs rethink anyway, seems.
+ though. Needs rethink anyway, seems. Replace if_is_up() with
+ if_is_operative() and add some more.
2004-12-24 Hasso Tepper <hasso at quagga.net>
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c
index ca5befbd..1a98a633 100644
--- a/isisd/isis_circuit.c
+++ b/isisd/isis_circuit.c
@@ -430,12 +430,7 @@ void
isis_circuit_update_params (struct isis_circuit *circuit,
struct interface *ifp)
{
- /* HT: It can happen at the moment during interface up event because we
- * actually delete circuit during interface down event. Should be really
- * cleaned up. TODO */
- /* assert (circuit); */
- if (!circuit)
- return;
+ assert (circuit);
if (circuit->circuit_id != ifp->ifindex)
{
diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c
index bcd00184..6d9e61f8 100644
--- a/isisd/isis_zebra.c
+++ b/isisd/isis_zebra.c
@@ -70,7 +70,7 @@ isis_zebra_if_add (int command, struct zclient *zclient, zebra_size_t length)
zlog_debug ("Zebra I/F add: %s index %d flags %ld metric %d mtu %d",
ifp->name, ifp->ifindex, ifp->flags, ifp->metric, ifp->mtu);
- if (if_is_up (ifp))
+ if (if_is_operative (ifp))
isis_csm_state_change (IF_UP_FROM_Z, circuit_scan_by_ifp (ifp), ifp);
return 0;
@@ -88,7 +88,7 @@ isis_zebra_if_del (int command, struct zclient *zclient, zebra_size_t length)
if (!ifp)
return 0;
- if (if_is_up (ifp))
+ if (if_is_operative (ifp))
zlog_warn ("Zebra: got delete of %s, but interface is still up",
ifp->name);
@@ -132,7 +132,7 @@ isis_zebra_if_state_up (int command, struct zclient *zclient,
if (!ifp)
return 0;
- if (if_is_up (ifp))
+ if (if_is_operative (ifp))
{
zebra_interface_if_set_value (zclient->ibuf, ifp);
/* HT: This is wrong actually. We can't assume that circuit exist
@@ -159,7 +159,7 @@ isis_zebra_if_state_down (int command, struct zclient *zclient,
if (ifp == NULL)
return 0;
- if (if_is_up (ifp))
+ if (if_is_operative (ifp))
{
zebra_interface_if_set_value (zclient->ibuf, ifp);
isis_csm_state_change (IF_DOWN_FROM_Z, circuit_scan_by_ifp (ifp), ifp);
@@ -193,7 +193,8 @@ isis_zebra_if_address_add (int command, struct zclient *zclient,
zlog_debug ("connected IPv6 address %s", buf);
#endif /* HAVE_IPV6 */
#endif /* EXTREME_DEBUG */
- isis_circuit_add_addr (circuit_scan_by_ifp (c->ifp), c);
+ if (if_is_operative (c->ifp))
+ isis_circuit_add_addr (circuit_scan_by_ifp (c->ifp), c);
return 0;
}
@@ -229,7 +230,8 @@ isis_zebra_if_address_del (int command, struct zclient *client,
#endif /* HAVE_IPV6 */
#endif /* EXTREME_DEBUG */
- isis_circuit_del_addr (circuit_scan_by_ifp (ifp), c);
+ if (if_is_operative (ifp))
+ isis_circuit_del_addr (circuit_scan_by_ifp (ifp), c);
connected_free (c);
return 0;