diff options
author | Donald Sharp <sharpd@cumulusnetworks.com> | 2018-03-19 14:04:17 +0100 |
---|---|---|
committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2018-04-06 19:22:43 +0200 |
commit | b13e5ad68a740b66c921c5ab1314e0898f0ed310 (patch) | |
tree | f08e165c4507040ecfd17ec9c10b109f5b5fa941 /pbrd/pbr_vty.c | |
parent | lib: Add hash and use const a bit more intelligently (diff) | |
download | frr-b13e5ad68a740b66c921c5ab1314e0898f0ed310.tar.xz frr-b13e5ad68a740b66c921c5ab1314e0898f0ed310.zip |
pbrd: Remove pbr_events
The pbr_events.c file was a mistake in that it overly complicated
the code and made it hard to think about what was happening.
Remove all the events and just do the work where needed.
Additionally rethink the sending of the pbr map to
zebra and only send one notification at a time instead
of having the sending function attempt to figure out
what to do.
Clean up some of the no form of commands to make them
work properly.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Diffstat (limited to 'pbrd/pbr_vty.c')
-rw-r--r-- | pbrd/pbr_vty.c | 65 |
1 files changed, 22 insertions, 43 deletions
diff --git a/pbrd/pbr_vty.c b/pbrd/pbr_vty.c index 6787edbe0..042d94064 100644 --- a/pbrd/pbr_vty.c +++ b/pbrd/pbr_vty.c @@ -33,7 +33,6 @@ #include "pbrd/pbr_map.h" #include "pbrd/pbr_zebra.h" #include "pbrd/pbr_vty.h" -#include "pbrd/pbr_event.h" #include "pbrd/pbr_debug.h" #ifndef VTYSH_EXTRACT_PL #include "pbrd/pbr_vty_clippy.c" @@ -65,7 +64,6 @@ DEFUN_NOSH(no_pbr_map, no_pbr_map_cmd, "no pbr-map WORD [seq (1-65535)]", const char *pbrm_name = argv[2]->arg; uint32_t seqno = 0; struct pbr_map *pbrm = pbrm_find(pbrm_name); - struct pbr_event *pbre; struct pbr_map_sequence *pbrms; struct listnode *node, *next_node; @@ -77,20 +75,12 @@ DEFUN_NOSH(no_pbr_map, no_pbr_map_cmd, "no pbr-map WORD [seq (1-65535)]", return CMD_SUCCESS; } - if (seqno) { - pbrms = pbrms_get(pbrm->name, seqno); - pbrms->reason |= PBR_MAP_DEL_SEQUENCE_NUMBER; - } else { - for (ALL_LIST_ELEMENTS(pbrm->seqnumbers, node, next_node, - pbrms)) { - if (pbrms) - pbrms->reason |= PBR_MAP_DEL_SEQUENCE_NUMBER; - } - } + for (ALL_LIST_ELEMENTS(pbrm->seqnumbers, node, next_node, pbrms)) { + if (seqno && pbrms->seqno != seqno) + continue; - pbre = pbr_event_new(PBR_MAP_DELETE, pbrm_name); - pbre->seqno = seqno; - pbr_event_enqueue(pbre); + pbr_map_delete(pbrms); + } return CMD_SUCCESS; } @@ -104,7 +94,6 @@ DEFPY(pbr_map_match_src, pbr_map_match_src_cmd, "v6 Prefix\n") { struct pbr_map_sequence *pbrms = VTY_GET_CONTEXT(pbr_map_sequence); - struct pbr_event *pbre; if (!no) { if (!pbrms->src) @@ -115,9 +104,7 @@ DEFPY(pbr_map_match_src, pbr_map_match_src_cmd, pbrms->src = 0; } - pbre = pbr_event_new(PBR_MAP_MODIFY, pbrms->parent->name); - pbre->seqno = pbrms->seqno; - pbr_event_enqueue(pbre); + pbr_map_check(pbrms); return CMD_SUCCESS; } @@ -131,7 +118,6 @@ DEFPY(pbr_map_match_dst, pbr_map_match_dst_cmd, "v6 Prefix\n") { struct pbr_map_sequence *pbrms = VTY_GET_CONTEXT(pbr_map_sequence); - struct pbr_event *pbre; if (!no) { if (!pbrms->dst) @@ -139,12 +125,10 @@ DEFPY(pbr_map_match_dst, pbr_map_match_dst_cmd, prefix_copy(pbrms->dst, prefix); } else { prefix_free(pbrms->dst); - pbrms->dst = 0; + pbrms->dst = NULL; } - pbre = pbr_event_new(PBR_MAP_MODIFY, pbrms->parent->name); - pbre->seqno = pbrms->seqno; - pbr_event_enqueue(pbre); + pbr_map_check(pbrms); return CMD_SUCCESS; } @@ -158,7 +142,6 @@ DEFPY(pbr_map_nexthop_group, pbr_map_nexthop_group_cmd, { struct pbr_map_sequence *pbrms = VTY_GET_CONTEXT(pbr_map_sequence); struct nexthop_group_cmd *nhgc; - struct pbr_event *pbre; nhgc = nhgc_find(name); if (!nhgc) { @@ -169,8 +152,7 @@ DEFPY(pbr_map_nexthop_group, pbr_map_nexthop_group_cmd, if (no) { if (pbrms->nhgrp_name && strcmp(name, pbrms->nhgrp_name) == 0) - pbre = pbr_event_new(PBR_MAP_NHG_DELETE, - pbrms->parent->name); + pbr_map_delete_nexthop_group(pbrms); else { vty_out(vty, "Nexthop Group specified: %s does not exist to remove", @@ -188,12 +170,9 @@ DEFPY(pbr_map_nexthop_group, pbr_map_nexthop_group_cmd, return CMD_SUCCESS; } pbrms->nhgrp_name = XSTRDUP(MTYPE_TMP, name); - pbre = pbr_event_new(PBR_MAP_NHG_ADD, pbrms->parent->name); + pbr_map_check(pbrms); } - pbre->seqno = pbrms->seqno; - pbr_event_enqueue(pbre); - return CMD_SUCCESS; } @@ -212,7 +191,6 @@ DEFPY(pbr_map_nexthop, pbr_map_nexthop_cmd, struct vrf *vrf; struct nexthop nhop; struct nexthop *nh; - struct pbr_event *pbre; if (pbrms->nhgrp_name) { vty_out(vty, @@ -282,14 +260,8 @@ DEFPY(pbr_map_nexthop, pbr_map_nexthop_cmd, } if (no) { - if (nh) { - // nexthop_del(pbrms->nhg, nh); - // nexthop_free(nh); - pbre = pbr_event_new(PBR_MAP_NEXTHOP_DELETE, - pbrms->parent->name); - pbre->seqno = pbrms->seqno; - pbr_event_enqueue(pbre); - } + if (nh) + pbr_nht_delete_individual_nexthop(pbrms); } else if (!nh) { if (pbrms->nhg->nexthop) { @@ -304,9 +276,8 @@ DEFPY(pbr_map_nexthop, pbr_map_nexthop_cmd, memcpy(nh, &nhop, sizeof(nhop)); nexthop_add(&pbrms->nhg->nexthop, nh); - pbre = pbr_event_new(PBR_MAP_NEXTHOP_ADD, pbrms->parent->name); - pbre->seqno = pbrms->seqno; - pbr_event_enqueue(pbre); + pbr_nht_add_individual_nexthop(pbrms); + pbr_map_check(pbrms); } return CMD_SUCCESS; @@ -363,6 +334,14 @@ DEFPY (pbr_policy, pbrm = pbrm_find(mapname); + if (!pbr_ifp) { + /* + * Some one could have fat fingered the interface + * name + */ + pbr_ifp = pbr_if_new(ifp); + } + if (no) { if (strcmp(pbr_ifp->mapname, mapname) == 0) { strcpy(pbr_ifp->mapname, ""); |