diff options
author | Igor Ryzhov <iryzhov@nfware.com> | 2021-04-28 00:57:21 +0200 |
---|---|---|
committer | Igor Ryzhov <iryzhov@nfware.com> | 2021-04-29 16:05:21 +0200 |
commit | bcf220815632500f9646cb0b4c13f498afa4edf6 (patch) | |
tree | c886adf613df11059b980959086bd59c3491f013 /isisd/isisd.h | |
parent | isisd: update link params after circuit is up (diff) | |
download | frr-bcf220815632500f9646cb0b4c13f498afa4edf6.tar.xz frr-bcf220815632500f9646cb0b4c13f498afa4edf6.zip |
isisd: allow arbitrary order of area/interface configuration
Currently we don't allow to configure the interface before the area is
configured. This approach has the following issues:
1. The area config can be deleted even when we have an interface config
relying on it. The code is not ready for that - we'll have a whole
bunch of stale pointers if user does that.
2. The code doesn't correctly process the event of changing the VRF for
an interface. There is no mechanism to ensure that the area exists
in the new VRF so currently the circuit still stays in the old VRF.
This commit allows an arbitrary order of area/interface configuration.
There is no more need to configure the area before configuring the
interface.
This change fixes both the issues.
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
Diffstat (limited to 'isisd/isisd.h')
-rw-r--r-- | isisd/isisd.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/isisd/isisd.h b/isisd/isisd.h index fd0e73eb3..79717b0cb 100644 --- a/isisd/isisd.h +++ b/isisd/isisd.h @@ -89,7 +89,6 @@ struct isis { uint8_t sysid[ISIS_SYS_ID_LEN]; /* SystemID for this IS */ uint32_t router_id; /* Router ID from zebra */ struct list *area_list; /* list of IS-IS areas */ - struct list *init_circ_list; uint8_t max_area_addrs; /* maximumAreaAdresses */ struct area_addr *man_area_addrs; /* manualAreaAddresses */ time_t uptime; /* when did we start */ @@ -244,7 +243,6 @@ DECLARE_MTYPE(ISIS_AREA_ADDR); /* isis_area->area_addrs */ DECLARE_HOOK(isis_area_overload_bit_update, (struct isis_area * area), (area)); void isis_terminate(void); -void isis_finish(struct isis *isis); void isis_master_init(struct thread_master *master); void isis_vrf_link(struct isis *isis, struct vrf *vrf); void isis_vrf_unlink(struct isis *isis, struct vrf *vrf); @@ -257,6 +255,13 @@ void isis_init(void); void isis_vrf_init(void); struct isis *isis_new(const char *vrf_name); +void isis_finish(struct isis *isis); + +void isis_area_add_circuit(struct isis_area *area, + struct isis_circuit *circuit); +void isis_area_del_circuit(struct isis_area *area, + struct isis_circuit *circuit); + struct isis_area *isis_area_create(const char *, const char *); struct isis_area *isis_area_lookup(const char *, vrf_id_t vrf_id); struct isis_area *isis_area_lookup_by_vrf(const char *area_tag, |