struct isis_circuit *
isis_circuit_create (struct isis_area *area, struct interface *ifp)
{
- struct isis_circuit *circuit;
- circuit = isis_csm_state_change (ISIS_ENABLE, NULL, area);
+ struct isis_circuit *circuit = circuit_scan_by_ifp (ifp);
+ if (circuit && circuit->area)
+ return NULL;
+ circuit = isis_csm_state_change (ISIS_ENABLE, circuit, area);
assert (circuit->state == C_STATE_CONF || circuit->state == C_STATE_UP);
isis_circuit_if_bind (circuit, ifp);
return circuit;
/* Prevent more than one area per circuit */
circuit = circuit_scan_by_ifp (ifp);
- if (circuit)
+ if (circuit && circuit->area)
{
- if (circuit->ip_router == 1)
+ if (strcmp (circuit->area->area_tag, area_tag))
{
- if (strcmp (circuit->area->area_tag, area_tag))
- {
- vty_out (vty, "ISIS circuit is already defined on %s%s",
- circuit->area->area_tag, VTY_NEWLINE);
- return CMD_ERR_NOTHING_TODO;
- }
- return CMD_SUCCESS;
+ vty_out (vty, "ISIS circuit is already defined on %s%s",
+ circuit->area->area_tag, VTY_NEWLINE);
+ return CMD_ERR_NOTHING_TODO;
}
}
if (!area)
area = isis_area_create (area_tag);
- if (!circuit)
+ if (!circuit || !circuit->area)
circuit = isis_circuit_create (area, ifp);
bool ip = circuit->ip_router, ipv6 = circuit->ipv6_router;