mirror_frr/isisd
Lakshman Krishnamoorthy b68885f9b7 lib: Introducing a 3rd state for route-map match cmd: RMAP_NOOP
Introducing a 3rd state for route_map_apply library function: RMAP_NOOP

Traditionally route map MATCH rule apis  were designed to return
a binary response, consisting of either RMAP_MATCH or RMAP_NOMATCH.
(Route-map SET rule apis return RMAP_OKAY or RMAP_ERROR).
Depending on this response, the following statemachine decided the
course of action:

State1:
If match cmd returns RMAP_MATCH then, keep existing behaviour.
If routemap type is PERMIT, execute set cmds or call cmds if applicable,
otherwise PERMIT!
Else If routemap type is DENY, we DENYMATCH right away

State2:
If match cmd returns RMAP_NOMATCH, continue on to next route-map. If there
are no other rules or if all the rules return RMAP_NOMATCH, return DENYMATCH

We require a 3rd state because of the following situation:

The issue - what if, the rule api needs to abort or ignore a rule?:
"match evpn vni xx" route-map filter can be applied to incoming routes
regardless of whether the tunnel type is vxlan or mpls.
This rule should be N/A for mpls based evpn route, but applicable to only
vxlan based evpn route.
Also, this rule should be applicable for routes with VNI label only, and
not for routes without labels. For example, type 3 and type 4 EVPN routes
do not have labels, so, this match cmd should let them through.

Today, the filter produces either a match or nomatch response regardless of
whether it is mpls/vxlan, resulting in either permitting or denying the
route.. So an mpls evpn route may get filtered out incorrectly.
Eg: "route-map RM1 permit 10 ; match evpn vni 20" or
"route-map RM2 deny 20 ; match vni 20"

With the introduction of the 3rd state, we can abort this rule check safely.
How? The rules api can now return RMAP_NOOP to indicate
that it encountered an invalid check, and needs to abort just that rule,
but continue with other rules.

As a result we have a 3rd state:
State3:
If match cmd returned RMAP_NOOP
Then, proceed to other route-map, otherwise if there are no more
rules or if all the rules return RMAP_NOOP, then, return RMAP_PERMITMATCH.

Signed-off-by: Lakshman Krishnamoorthy <lkrishnamoor@vmware.com>
2019-07-22 08:08:13 -07:00
..
.gitignore *: cleanup .gitignore files 2018-09-08 21:30:42 +02:00
AUTHORS Add support of Traffic Engineering to IS-IS 2016-09-03 11:05:50 -04:00
fabricd.c lib: hashing functions should take const arguments 2019-05-14 21:23:08 +00:00
fabricd.conf.sample fabricd: add new daemon as build of isisd 2018-09-05 11:38:12 +02:00
fabricd.h isisd: move old BFD command to fabricd only 2019-07-09 12:19:21 -03:00
isis_adjacency.c isisd: replace dict_* with DECLARE_RBTREE 2019-04-27 19:33:45 +02:00
isis_adjacency.h isisd: Register/deregister BFD peers for adjacencies 2018-10-05 14:07:51 +02:00
isis_bfd.c bfdd, lib, bgpd: add bfd cbit usage 2019-05-14 16:49:49 +02:00
isis_bfd.h isisd: Fix license header of bfd code 2018-10-12 18:56:07 +02:00
isis_bpf.c isisd: replace dict_* with DECLARE_RBTREE 2019-04-27 19:33:45 +02:00
isis_circuit.c *: rename new ForEach macros from the typesafe API 2019-05-21 15:59:08 -03:00
isis_circuit.h isisd: Add IS-IS-TE support per Area 2019-04-25 18:59:26 +02:00
isis_cli.c isisd: improvements based on feedback 2019-07-12 17:24:17 -03:00
isis_cli.h isisd: migrate BFD command to northbound 2019-07-09 13:22:46 -03:00
isis_common.h *: use C99 standard fixed-width integer types 2018-03-27 15:13:34 -04:00
isis_constants.h isisd: add send_hello_sched function 2018-12-04 16:13:24 +01:00
isis_csm.c isisd: replace dict_* with DECLARE_RBTREE 2019-04-27 19:33:45 +02:00
isis_csm.h *: reindent 2017-07-17 14:04:07 +02:00
isis_dlpi.c isisd: replace dict_* with DECLARE_RBTREE 2019-04-27 19:33:45 +02:00
isis_dr.c isisd: replace dict_* with DECLARE_RBTREE 2019-04-27 19:33:45 +02:00
isis_dr.h isisd: reduce code duplication for levels 2018-12-04 12:49:25 +01:00
isis_dynhn.c isisd: replace dict_* with DECLARE_RBTREE 2019-04-27 19:33:45 +02:00
isis_dynhn.h *: use C99 standard fixed-width integer types 2018-03-27 15:13:34 -04:00
isis_errors.c isisd: ISIS_[ERR|WARN] -> EC_ISIS 2018-09-13 19:12:08 +00:00
isis_errors.h isisd: ISIS_[ERR|WARN] -> EC_ISIS 2018-09-13 19:12:08 +00:00
isis_events.c isisd: replace dict_* with DECLARE_RBTREE 2019-04-27 19:33:45 +02:00
isis_events.h isisd: Replace isis_event_adjacency_state_change with a hook 2018-10-05 14:05:28 +02:00
isis_flags.c *: use C99 standard fixed-width integer types 2018-03-27 15:13:34 -04:00
isis_flags.h *: use C99 standard fixed-width integer types 2018-03-27 15:13:34 -04:00
isis_lsp.c *: rename new ForEach macros from the typesafe API 2019-05-21 15:59:08 -03:00
isis_lsp.h isisd: replace dict_* with DECLARE_RBTREE 2019-04-27 19:33:45 +02:00
isis_main.c isisd: move old BFD command to fabricd only 2019-07-09 12:19:21 -03:00
isis_memory.c isisd: rework complete, move "tlvs2" to "tlvs" 2017-08-03 11:34:04 +02:00
isis_memory.h isisd: rework complete, move "tlvs2" to "tlvs" 2017-08-03 11:34:04 +02:00
isis_misc.c isisd: fix printfrr derp 2019-07-03 15:15:26 +02:00
isis_misc.h lib: make "%Ld" work for int64_t 2019-06-12 19:35:43 +02:00
isis_mt.c isisd: Consider non-mt links usable when either v4 or v6 works 2018-11-20 19:20:47 +01:00
isis_mt.h isisd: Add a hook when writing interface config 2018-10-05 14:05:31 +02:00
isis_network.h *: use C99 standard fixed-width integer types 2018-03-27 15:13:34 -04:00
isis_northbound.c isisd: improvements based on feedback 2019-07-12 17:24:17 -03:00
isis_pdu_counter.c Minor adjustments to address CI warnings 2018-12-12 00:23:23 +00:00
isis_pdu_counter.h isisd: Provide statistics about sent/received PDU count 2018-12-07 19:45:14 +00:00
isis_pdu.c *: rename new ForEach macros from the typesafe API 2019-05-21 15:59:08 -03:00
isis_pdu.h isisd: Add debug output for tx-queues 2018-12-07 19:45:14 +00:00
isis_pfpacket.c isisd: support circuits with mtu > 8192 2019-05-23 15:50:31 +02:00
isis_redist.c isisd: replace dict_* with DECLARE_RBTREE 2019-04-27 19:33:45 +02:00
isis_redist.h isisd: retrofit the 'default-originate' command 2018-12-18 15:23:49 +01:00
isis_route.c isisd: del routes when area is unconfigured 2019-05-29 11:53:45 +02:00
isis_route.h isisd: make spf code dst-src aware 2018-08-03 13:25:39 +02:00
isis_routemap.c lib: Introducing a 3rd state for route-map match cmd: RMAP_NOOP 2019-07-22 08:08:13 -07:00
isis_routemap.h *: reindent 2017-07-17 14:04:07 +02:00
isis_spf_private.h lib: hashing functions should take const arguments 2019-05-14 21:23:08 +00:00
isis_spf.c isisd: replace dict_* with DECLARE_RBTREE 2019-04-27 19:33:45 +02:00
isis_spf.h isisd: Log SPF trigger source when debugging 2018-10-24 07:50:44 +02:00
isis_te.c Revert "Ospf missing interface handling 2" 2019-06-23 19:46:39 -04:00
isis_te.h isisd: Add IS-IS-TE support per Area 2019-04-25 18:59:26 +02:00
isis_tlvs.c isisd: The RFC states that v6 addresses are limited to 16 in a hello packet 2019-06-04 21:15:43 -04:00
isis_tlvs.h isisd: replace dict_* with DECLARE_RBTREE 2019-04-27 19:33:45 +02:00
isis_tx_queue.c lib: hashing functions should take const arguments 2019-05-14 21:23:08 +00:00
isis_tx_queue.h Minor adjustments to address CI warnings 2018-12-12 00:23:23 +00:00
isis_vty_fabricd.c isisd: move old BFD command to fabricd only 2019-07-09 12:19:21 -03:00
isis_zebra.c *: use ZAPI_CALLBACK_ARGS macro for zapi handlers 2019-05-03 20:57:35 +00:00
isis_zebra.h isisd: Add forward declaration of struct isis_route_info 2018-10-05 14:05:22 +02:00
isisd.c isisd: Remove unnecessary use of strcpy 2019-05-29 14:45:10 +02:00
isisd.conf.sample Isisd is now able to remove addresses from circuit and trigger LSP updates 2004-09-14 13:54:30 +00:00
isisd.h Merge pull request #3045 from opensourcerouting/atoms 2019-04-30 10:26:35 -04:00
iso_checksum.c *: use C99 standard fixed-width integer types 2018-03-27 15:13:34 -04:00
iso_checksum.h *: use C99 standard fixed-width integer types 2018-03-27 15:13:34 -04:00
Makefile build: non-recursive isisd 2017-08-04 11:09:50 +02:00
README More cleanup in isisd. 2005-01-01 21:12:56 +00:00
subdir.am isisd: move old BFD command to fabricd only 2019-07-09 12:19:21 -03:00

Constraints

  o Maximum number of interfaces 255