]> git.proxmox.com Git - mirror_frr.git/blobdiff - isisd/isis_csm.c
zebra, lib: fix the ZEBRA_INTERFACE_VRF_UPDATE zapi message
[mirror_frr.git] / isisd / isis_csm.c
index 90272d68b26f878fe1f66075de2207910ff8a222..e50f57ae1d2f9624c7802f04e1288a15d8d05f7a 100644 (file)
@@ -2,17 +2,17 @@
  * IS-IS Rout(e)ing protocol - isis_csm.c
  *                             IS-IS circuit state machine
  * Copyright (C) 2001,2002    Sampo Saaristo
- *                            Tampere University of Technology      
+ *                            Tampere University of Technology
  *                            Institute of Communications Engineering
  *
- * This program is free software; you can redistribute it and/or modify it 
- * under the terms of the GNU General Public Licenseas published by the Free 
- * Software Foundation; either version 2 of the License, or (at your option) 
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public Licenseas published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
  * any later version.
  *
- * This program is distributed in the hope that it will be useful,but WITHOUT 
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
+ * This program is distributed in the hope that it will be useful,but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  * more details.
  *
  * You should have received a copy of the GNU General Public License along
@@ -37,7 +37,6 @@
 #include "isisd/isis_common.h"
 #include "isisd/isis_flags.h"
 #include "isisd/isis_circuit.h"
-#include "isisd/isis_tlv.h"
 #include "isisd/isis_lsp.h"
 #include "isisd/isis_pdu.h"
 #include "isisd/isis_network.h"
 #include "isisd/isisd.h"
 #include "isisd/isis_csm.h"
 #include "isisd/isis_events.h"
+#include "isisd/isis_errors.h"
 
 extern struct isis *isis;
 
-static const char *csm_statestr[] = {
-  "C_STATE_NA",
-  "C_STATE_INIT",
-  "C_STATE_CONF",
-  "C_STATE_UP"
-};
+static const char *csm_statestr[] = {"C_STATE_NA", "C_STATE_INIT",
+                                    "C_STATE_CONF", "C_STATE_UP"};
 
 #define STATE2STR(S) csm_statestr[S]
 
 static const char *csm_eventstr[] = {
-  "NO_STATE",
-  "ISIS_ENABLE",
-  "IF_UP_FROM_Z",
-  "ISIS_DISABLE",
-  "IF_DOWN_FROM_Z",
+       "NO_STATE",     "ISIS_ENABLE",    "IF_UP_FROM_Z",
+       "ISIS_DISABLE", "IF_DOWN_FROM_Z",
 };
 
 #define EVENT2STR(E) csm_eventstr[E]
 
 struct isis_circuit *
-isis_csm_state_change (int event, struct isis_circuit *circuit, void *arg)
+isis_csm_state_change(int event, struct isis_circuit *circuit, void *arg)
 {
-  int old_state;
+       int old_state;
 
-  old_state = circuit ? circuit->state : C_STATE_NA;
-  if (isis->debugs & DEBUG_EVENTS)
-    zlog_debug ("CSM_EVENT: %s", EVENT2STR (event));
+       old_state = circuit ? circuit->state : C_STATE_NA;
+       if (isis->debugs & DEBUG_EVENTS)
+               zlog_debug("CSM_EVENT: %s", EVENT2STR(event));
 
-  switch (old_state)
-    {
-    case C_STATE_NA:
-      if (circuit)
-       zlog_warn ("Non-null circuit while state C_STATE_NA");
-      assert (circuit == NULL);
-      switch (event)
-       {
-       case ISIS_ENABLE:
-         circuit = isis_circuit_new ();
-         isis_circuit_configure (circuit, (struct isis_area *) arg);
-         circuit->state = C_STATE_CONF;
-         break;
-       case IF_UP_FROM_Z:
-         circuit = isis_circuit_new ();
-         isis_circuit_if_add (circuit, (struct interface *) arg);
-         listnode_add (isis->init_circ_list, circuit);
-         circuit->state = C_STATE_INIT;
-         break;
-       case ISIS_DISABLE:
-         zlog_warn ("circuit already disabled");
-         break;
-       case IF_DOWN_FROM_Z:
-         zlog_warn ("circuit already disconnected");
-         break;
-       }
-      break;
-    case C_STATE_INIT:
-      assert (circuit);
-      switch (event)
-       {
-       case ISIS_ENABLE:
-         isis_circuit_configure (circuit, (struct isis_area *) arg);
-         if (isis_circuit_up (circuit) != ISIS_OK)
-           {
-             isis_circuit_deconfigure (circuit, (struct isis_area *) arg);
-             break;
-           }
-         circuit->state = C_STATE_UP;
-         isis_event_circuit_state_change (circuit, circuit->area, 1);
-         listnode_delete (isis->init_circ_list, circuit);
-         break;
-       case IF_UP_FROM_Z:
-          assert (circuit);
-         zlog_warn ("circuit already connected");
-         break;
-       case ISIS_DISABLE:
-         zlog_warn ("circuit already disabled");
-         break;
-       case IF_DOWN_FROM_Z:
-         isis_circuit_if_del (circuit, (struct interface *) arg);
-         listnode_delete (isis->init_circ_list, circuit);
-         isis_circuit_del (circuit);
-         circuit = NULL;
-         break;
-       }
-      break;
-    case C_STATE_CONF:
-      assert (circuit);
-      switch (event)
-       {
-       case ISIS_ENABLE:
-         zlog_warn ("circuit already enabled");
-         break;
-       case IF_UP_FROM_Z:
-         isis_circuit_if_add (circuit, (struct interface *) arg);
-         if (isis_circuit_up (circuit) != ISIS_OK)
-           {
-             zlog_err("Could not bring up %s because of invalid config.",
-                      circuit->interface->name);
-             zlog_err("Clearing config for %s. Please re-examine it.",
-                      circuit->interface->name);
-             if (circuit->ip_router)
-               {
-                 circuit->ip_router = 0;
-                 circuit->area->ip_circuits--;
-               }
-             if (circuit->ipv6_router)
-               {
-                 circuit->ipv6_router = 0;
-                 circuit->area->ipv6_circuits--;
-               }
-             circuit_update_nlpids(circuit);
-             isis_circuit_deconfigure(circuit, circuit->area);
-             listnode_add (isis->init_circ_list, circuit);
-             circuit->state = C_STATE_INIT;
-             break;
-           }
-         circuit->state = C_STATE_UP;
-         isis_event_circuit_state_change (circuit, circuit->area, 1);
-         break;
-       case ISIS_DISABLE:
-         isis_circuit_deconfigure (circuit, (struct isis_area *) arg);
-         isis_circuit_del (circuit);
-         circuit = NULL;
-         break;
-       case IF_DOWN_FROM_Z:
-         zlog_warn ("circuit already disconnected");
-         break;
-       }
-      break;
-    case C_STATE_UP:
-      assert (circuit);
-      switch (event)
-       {
-       case ISIS_ENABLE:
-         zlog_warn ("circuit already configured");
-         break;
-       case IF_UP_FROM_Z:
-         zlog_warn ("circuit already connected");
-         break;
-       case ISIS_DISABLE:
-         isis_circuit_down (circuit);
-         isis_circuit_deconfigure (circuit, (struct isis_area *) arg);
-         circuit->state = C_STATE_INIT;
-         isis_event_circuit_state_change (circuit,
-                                           (struct isis_area *)arg, 0);
-         listnode_add (isis->init_circ_list, circuit);
-         break;
-       case IF_DOWN_FROM_Z:
-         isis_circuit_down (circuit);
-          isis_circuit_if_del (circuit, (struct interface *) arg);
-         circuit->state = C_STATE_CONF;
-         isis_event_circuit_state_change (circuit, circuit->area, 0);
-         break;
-       }
-      break;
+       switch (old_state) {
+       case C_STATE_NA:
+               if (circuit)
+                       zlog_warn("Non-null circuit while state C_STATE_NA");
+               assert(circuit == NULL);
+               switch (event) {
+               case ISIS_ENABLE:
+                       circuit = isis_circuit_new();
+                       isis_circuit_configure(circuit,
+                                              (struct isis_area *)arg);
+                       circuit->state = C_STATE_CONF;
+                       break;
+               case IF_UP_FROM_Z:
+                       circuit = isis_circuit_new();
+                       isis_circuit_if_add(circuit, (struct interface *)arg);
+                       listnode_add(isis->init_circ_list, circuit);
+                       circuit->state = C_STATE_INIT;
+                       break;
+               case ISIS_DISABLE:
+                       zlog_warn("circuit already disabled");
+                       break;
+               case IF_DOWN_FROM_Z:
+                       zlog_warn("circuit already disconnected");
+                       break;
+               }
+               break;
+       case C_STATE_INIT:
+               assert(circuit);
+               switch (event) {
+               case ISIS_ENABLE:
+                       isis_circuit_configure(circuit,
+                                              (struct isis_area *)arg);
+                       if (isis_circuit_up(circuit) != ISIS_OK) {
+                               isis_circuit_deconfigure(
+                                       circuit, (struct isis_area *)arg);
+                               break;
+                       }
+                       circuit->state = C_STATE_UP;
+                       isis_event_circuit_state_change(circuit, circuit->area,
+                                                       1);
+                       listnode_delete(isis->init_circ_list, circuit);
+                       break;
+               case IF_UP_FROM_Z:
+                       assert(circuit);
+                       zlog_warn("circuit already connected");
+                       break;
+               case ISIS_DISABLE:
+                       zlog_warn("circuit already disabled");
+                       break;
+               case IF_DOWN_FROM_Z:
+                       isis_circuit_if_del(circuit, (struct interface *)arg);
+                       listnode_delete(isis->init_circ_list, circuit);
+                       isis_circuit_del(circuit);
+                       circuit = NULL;
+                       break;
+               }
+               break;
+       case C_STATE_CONF:
+               assert(circuit);
+               switch (event) {
+               case ISIS_ENABLE:
+                       zlog_warn("circuit already enabled");
+                       break;
+               case IF_UP_FROM_Z:
+                       isis_circuit_if_add(circuit, (struct interface *)arg);
+                       if (isis_circuit_up(circuit) != ISIS_OK) {
+                               flog_err(
+                                       EC_ISIS_CONFIG,
+                                       "Could not bring up %s because of invalid config.",
+                                       circuit->interface->name);
+                               flog_err(
+                                       EC_ISIS_CONFIG,
+                                       "Clearing config for %s. Please re-examine it.",
+                                       circuit->interface->name);
+                               if (circuit->ip_router) {
+                                       circuit->ip_router = 0;
+                                       circuit->area->ip_circuits--;
+                               }
+                               if (circuit->ipv6_router) {
+                                       circuit->ipv6_router = 0;
+                                       circuit->area->ipv6_circuits--;
+                               }
+                               circuit_update_nlpids(circuit);
+                               isis_circuit_deconfigure(circuit,
+                                                        circuit->area);
+                               listnode_add(isis->init_circ_list, circuit);
+                               circuit->state = C_STATE_INIT;
+                               break;
+                       }
+                       circuit->state = C_STATE_UP;
+                       isis_event_circuit_state_change(circuit, circuit->area,
+                                                       1);
+                       break;
+               case ISIS_DISABLE:
+                       isis_circuit_deconfigure(circuit,
+                                                (struct isis_area *)arg);
+                       isis_circuit_del(circuit);
+                       circuit = NULL;
+                       break;
+               case IF_DOWN_FROM_Z:
+                       zlog_warn("circuit already disconnected");
+                       break;
+               }
+               break;
+       case C_STATE_UP:
+               assert(circuit);
+               switch (event) {
+               case ISIS_ENABLE:
+                       zlog_warn("circuit already configured");
+                       break;
+               case IF_UP_FROM_Z:
+                       zlog_warn("circuit already connected");
+                       break;
+               case ISIS_DISABLE:
+                       isis_circuit_down(circuit);
+                       isis_circuit_deconfigure(circuit,
+                                                (struct isis_area *)arg);
+                       circuit->state = C_STATE_INIT;
+                       isis_event_circuit_state_change(
+                               circuit, (struct isis_area *)arg, 0);
+                       listnode_add(isis->init_circ_list, circuit);
+                       break;
+               case IF_DOWN_FROM_Z:
+                       isis_circuit_down(circuit);
+                       isis_circuit_if_del(circuit, (struct interface *)arg);
+                       circuit->state = C_STATE_CONF;
+                       isis_event_circuit_state_change(circuit, circuit->area,
+                                                       0);
+                       break;
+               }
+               break;
 
-    default:
-      zlog_warn ("Invalid circuit state %d", old_state);
-    }
+       default:
+               zlog_warn("Invalid circuit state %d", old_state);
+       }
 
-  if (isis->debugs & DEBUG_EVENTS)
-    zlog_debug ("CSM_STATE_CHANGE: %s -> %s ", STATE2STR (old_state),
-               circuit ? STATE2STR (circuit->state) : STATE2STR (C_STATE_NA));
+       if (isis->debugs & DEBUG_EVENTS)
+               zlog_debug("CSM_STATE_CHANGE: %s -> %s ", STATE2STR(old_state),
+                          circuit ? STATE2STR(circuit->state)
+                                  : STATE2STR(C_STATE_NA));
 
-  return circuit;
+       return circuit;
 }