summaryrefslogtreecommitdiffstats
path: root/isisd/isisd.h (follow)
Commit message (Collapse)AuthorAgeFilesLines
* isisd: IS-IS-SR preparation for master 3/5Olivier Dugeon2020-05-141-0/+6
| | | | | | Add debug macro and debug messages Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
* isisd: add support for segment routingRenato Westphal2020-04-301-0/+8
| | | | | | | | | | | | | | | | | | | | | | This is an implementation of the IS-IS SR draft [1] for FRR. The following features are supported: * IPv4 and IPv6 Prefix-SIDs; * IPv4 and IPv6 Adj-SIDs and LAN-Adj-SIDs; * Index and absolute labels; * The no-php and explicit-null Prefix-SID flags; * Full integration with the Label Manager. Known limitations: * No support for Anycast-SIDs; * No support for the SID/Label Binding TLV (required for LDP interop). * No support for persistent Adj-SIDs; * No support for multiple SRGBs. [1] draft-ietf-isis-segment-routing-extensions-25 Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com> Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* isisd: remove refcount from the isis_nexthop structureRenato Westphal2020-04-301-1/+0
| | | | | | | | | | | | | | | | | isisd implements an optimization that allows multiple routes to share the same nexthop (using a refcount) in order to save memory. Now that SR support is coming, however, it will be necessary to embed additional SR-related information inside the isis_nexthop structure. But this can only be done if the nexthops aren't shared among routes anymore. Removing this memory optimization should have minimal impact since the isis_nexthop structure is really small. On large networks with thousands of routes, the memory saving would be in the order of a few kilobytes. Not something we should be concerned about nowadays. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* isisd: split northbound callbacks into multiple filesRenato Westphal2019-10-301-46/+0
| | | | | | | | | | | | | | | | | Rearrange the isisd northbound callbacks as following: * isis_nb.h: prototypes of all northbound callbacks. * isis_nb.c: definition of all northbound callbacks and their associated YANG data paths. * isis_nb_config.c: implementation of YANG configuration nodes. * isis_nb_state.c: implementation of YANG state nodes. * isis_nb_notifications.c: implementation of YANG notifications. This should help to keep to code more organized and easier to maintain. No behavior changes intended. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* Merge pull request #4529 from donaldsharp/vrf_conversionsRenato Westphal2019-09-201-1/+2
|\ | | | | Vrf conversions
| * isisd: Add vrf_id to the main isis structureDonald Sharp2019-09-101-1/+2
| | | | | | | | Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
* | isisd: remove leftover from old dict codeRenato Westphal2019-09-171-1/+0
|/ | | | | | This is unnecessary since commit 4bef0ec4fbe was merged. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* isisd: unify isis_nexthop and isis_nexthop6 into a single structRenato Westphal2019-08-211-2/+1
| | | | | | | This unification allows us to write code that works for both IPv4 and IPv6, reducing duplication. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
* Merge pull request #3045 from opensourcerouting/atomsLou Berger2019-04-301-3/+3
|\ | | | | READY: lists/skiplists/rb-trees new API & sequence lock & atomic lists
| * isisd: replace dict_* with DECLARE_RBTREEDavid Lamparter2019-04-271-3/+3
| | | | | | | | | | | | | | | | Historically, isisd has been carrying around its own red-black tree to manage its LSP DB in. This replaces that with the newly-added DECLARE_RBTREE_*. This allows completely removing the dict_* code. Signed-off-by: David Lamparter <equinox@diac24.net>
* | isisd: Add IS-IS-TE support per AreaOlivier Dugeon2019-04-251-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | Solve issue #4032 - Change MPLS-TE from global to per Area - Add new mpls_te_area structure to area in replacement of global variable isisMPLS_TE - Move mpls-te from global to instance in frr-isisd.yang - Change code in isis_te.c, isis_northbound.c, isis_cli.c, isis_pdu.c, isis_lsp.c and isis_zebra.c accordingly Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
* | Revert "isisd: Add IS-IS-TE support per Area"Russ White2019-04-231-2/+0
| |
* | Issue #4032: Add IS-IS-TE support per AreaOlivier Dugeon2019-04-151-0/+2
|/ | | | | | | | | | | - Change MPLS-TE from global to per Area - Add new mpls_te_area structure to area in replacement of global variable isisMPLS_TE - Move mpls-te frmo global to instance in frr-isisd.yang - Change code in isis_te.c, isis_northbound.c, isis_cli.c, isis_pdu.c, isis_lsp.c and isis_zebra.c accordingly Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
* isisd: implemented the 'own-lsp-purge' notificationEmanuele Di Pascale2018-12-181-0/+3
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implemented the 'sequence-number-skipped' notificationEmanuele Di Pascale2018-12-181-0/+2
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: add the 'lsp-error-detected' notificationEmanuele Di Pascale2018-12-181-0/+3
| | | | | | | | | | | | Note that we do not return the actual tlv_type and offset of the erroneous TLV. This is because unpacking tlvs currently uses a chain of function calls, where the notification can only be sent at the start of the chain, but the tlv_type and offset information are only available at the end. Unless we change the code to propagate those values, we have no way to feed them to the notification. So these leafs are not generated. Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'version-skew' notificationEmanuele Di Pascale2018-12-181-0/+2
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'id-len-mismatch' notificationEmanuele Di Pascale2018-12-181-0/+2
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'lsp-generation' notificationEmanuele Di Pascale2018-12-181-0/+2
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'lsp-received' notificationEmanuele Di Pascale2018-12-181-0/+3
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'area-mismatch' notificationEmanuele Di Pascale2018-12-181-0/+2
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'rejected-adjacency' notificationEmanuele Di Pascale2018-12-181-0/+3
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'adjacency-state-change' notificationEmanuele Di Pascale2018-12-181-0/+2
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the authentication failure notificationsEmanuele Di Pascale2018-12-181-0/+6
| | | | | | | | | the original isisd code did not distinguish between authentication_failure and authentication_type_failure, so additional code had to be added to differentiate between the two and to return the raw_pdu as requested by the IETF YANG model. Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement 'max-area-addresses-mismatch' notificationEmanuele Di Pascale2018-12-181-0/+3
| | | | | | | | | | | Note that the original IETF YANG model also included a requirement to throttle such notifications so that they would not be sent more often than once every 5 seconds. I did not implement any throttling mechanism yet, mostly because I am not sure whether this limit should apply to the entire isis daemon, to each area, to each neighbor etc. Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'attempt-to-exceed-max-sequence' notificationEmanuele Di Pascale2018-12-181-0/+2
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'corrupted-lsp-detected' notificationEmanuele Di Pascale2018-12-181-0/+2
| | | | | | | However it is not currently called anywhere, as I could not find a place in the code where it felt appropriate. Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'if-state-change' notificationEmanuele Di Pascale2018-12-181-0/+2
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'lsp-too-large' notificationEmanuele Di Pascale2018-12-181-0/+2
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: implement the 'database-overload' notificationEmanuele Di Pascale2018-12-181-0/+3
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: retrofit the 'metric-style' commandEmanuele Di Pascale2018-12-181-0/+7
| | | | | | | Note that some of the validation checks that were previously executed in the code have been moved to the YANG model. Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: retrofit 'router isis' and 'ip router isis' cmdsEmanuele Di Pascale2018-12-181-0/+2
| | | | | | | | | | | | | | | | | | These are complex commands to retrofit, partly due to the number of different callbacks they touch. Additionally, in FRR adding an interface to an IS-IS area that does not exist also creates that area. To make sure that this behavior is kept, while at the same time keeping the northbound api consistent, we need to take extra care to call the appropriate callbacks to update the YANG tree. Note that many callbacks rely on the existence of the corresponding IS-IS area; when these callbacks are joined together in a single transaction, we need to ensure that the area creation is performed first, or the config will fail. For this reason, the isis instance create callback has been given a slightly lower priority than the others. Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd, yang: add configuration model and callback stubsEmanuele Di Pascale2018-12-181-0/+3
| | | | Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
* isisd: Provide statistics over number of generated purgesChristian Franke2018-12-071-0/+1
| | | | Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: Provide statistics over number of LSP regenerationsChristian Franke2018-12-071-0/+1
| | | | Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: Provide statistics about retransmitted LSPsChristian Franke2018-12-071-0/+1
| | | | Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: Provide statistics about sent/received PDU countChristian Franke2018-12-071-0/+4
| | | | Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: Move code to find LSP out of show databaseChristian Franke2018-12-071-0/+1
| | | | | | | | | Finding an LSP by its id is useful not only for the `show isis database` command. So move it out into its own function to make it reusable. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: Provide better flooding debuggingChristian Franke2018-12-071-1/+1
| | | | | | Show from where LSP flooding is triggered. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: Add debug output for tx-queuesChristian Franke2018-12-071-0/+1
| | | | | | | To allow easier debugging of LSP transmission scheduling, add a debug mode where all tx-queue insertions/deletions are logged. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: Remove unused debug flagsChristian Franke2018-11-081-17/+11
| | | | Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: delay lsp regeneration while events are still coming inChristian Franke2018-10-241-0/+1
| | | | | | | | | | | | | | | When there is a stream of events coming in, where IS-IS learns about a lot of updates, IS-IS would regenerate its LSPs before the updates have been processed completely. This causes suboptimal convergence because the intermediate state will be flooded. Only after the configured `lsp_gen_interval`, a new update with the correct and final state will be generated. Resolve this by holding off LSP generation while there are still events coming in. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: Combine lsp_l1/l2_refreshChristian Franke2018-10-241-0/+7
| | | | | | | | lsp_l1_refresh and lsp_l2_refresh are identical apart from the hardcoded IS-IS level they are referring to. So merge them and pass the level as part of the argument. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: Add debugging for BFDChristian Franke2018-10-051-0/+1
| | | | Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: add purge originator identification supportChristian Franke2018-09-051-0/+1
| | | | | | | Implement RFC 6232, optionally allowing to flood isisd's NET and hostname in purges it originates. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* fabricd: add flooding algorithm debuggingChristian Franke2018-09-051-0/+1
| | | | | | | Add a command `debug openfabric flooding` to allow verification of correct operation of the OpenFabric flooding optimization algorithm. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* fabricd: adjacency formation optimization as per section 2.4Christian Franke2018-09-051-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | OpenFabric changes IS-IS's initial database synchronization. While regular IS-IS will simultaneuously exchange LSPs with all neighboring routers during startup, this is considered too much churn for a densely connected fabric. To mitigate this, OpenFabric prescribes that a router should only bring up an adjacency with a single neighbor and perform a full synchronization with that neighbor, before bringing up further adjacencies. This is implemented by having a field `initial_sync_state` in the fabricd datastructure which tracks whether an initial sync is still pending, currently in progress, or complete. When an initial sync is pending, the state will transition to the in-progress state when the first IIH is received. During this state, all IIHs from other routers are ignored. Any IIHs transmitted on any link other than the one to the router with which we are performing the initial sync will always report the far end as DOWN in their threeway handshake state, avoiding the formation of additional adjacencies. The state will be left if all the SRM and SSN flags on the initial-sync circuit are cleared (meaning that initial sync has completed). This is checked in `lsp_tick`. When this condition occurrs, we progress to the initial-sync-complete state, allowing other adjacencies to form. The state can also be left if the initial synchronization is taking too long to succeed, for whatever reason. In that case, we fall back to the initial-sync-pending state and will reattempt initial synchronization with a different neighbor. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isis: Cleanup CLI, split into parts which are shared, fabricd and isisdChristian Franke2018-09-051-1/+0
| | | | | | | | Remove isis_vty.c and create three new files isis_vty_common.c, isis_vty_fabricd.c and isis_vty_isisd.c which are built into both daemons, only fabricd and only isisd, respectively. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* fabricd: add new daemon as build of isisdChristian Franke2018-09-051-0/+18
| | | | | | | fabricd is built using the sources of isisd. To allow differentiation in the code, -DFABRICD=1 is added to its preprocessor flags. Signed-off-by: Christian Franke <chris@opensourcerouting.org>
* isisd: make spf code dst-src awareChristian Franke2018-08-031-0/+1
| | | | | | | Take the source-prefix sub-TLV into consideration when running SPF and support creation/deletion of dst-src routes as result. Signed-off-by: Christian Franke <chris@opensourcerouting.org>