summaryrefslogtreecommitdiffstats
path: root/ldpd/adjacency.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2019-09-04zebra: move EVPN VTEP programming to dataplaneMark Stapp7-56/+105
Move VTEP install/uninstall to the zebra dataplane. Remove synch kernel-facing apis and helper functions. Signed-off-by: Mark Stapp <mjs@voltanet.io>
2019-09-04isisd: Enabling build with opensslMichal Ruprich2-0/+19
Similar to PR #4677, I am enabling the openssl library for md5 authentication in IS-IS Signed-off-by: Michal Ruprich <michalruprich@gmail.com>
2019-09-04lib: Fix erroneously setting pointer values_cnt as NULLBi-Ruei, Chiu1-1/+1
It should be : *values_cnt = 0; not values_cnt = 0; Signed-off-by: Bi-Ruei, Chiu <biruei.chiu@gmail.com>
2019-09-04eigrpd: Fix SA issue with setting but not usingDonald Sharp1-1/+1
We assign a value to the eigrp data structure and then immediately overwrite it in the for loop. No need to do a eigrp_lookup. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-04doc: Update pbr to reflect new mark match command.Donald Sharp1-0/+6
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-03pbrd: initial fwmark support for pbr matches #4460Marcin Matląg4-7/+41
Adds support to specify marks in pbr-map match clause. Marks should be provided as decimal (unsigned int). Currently supported on Linux only. Attempting to configure marks on other platform will result in: "pbr marks are not supported on this platform" Signed-off-by: Marcin Matlag <marcin.matlag@gmail.com> Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
2019-09-03bgpd: Fixes to error message printed for failed peeringsDinesh G Dutt4-3/+13
There was a silly bug introduced when the command to show failed sessions was added. A missing "," caused the wrong error message to be printed. Debugging this led down a path that: - Led to discovering one more error message that needed to be added - Providing the error code along with the string in the JSON output to allow programs to key off numbers rather than strings. - Fixing the missing "," - Changing the error message to "Waiting for Peer IPv6 LLA" to make it clear that we're waiting for the link local addr. Signed-off-by: Dinesh G Dutt <5016467+ddutt@users.noreply.github.com>
2019-09-03zebra: use GNU_LINUX instead of LINUXJafar Al-Gharaibeh1-1/+1
Everywhere else in the code we use GNU_LINUX, that is the symbol we actualy define in the configuration. Don't rely on compiler's built-in symbols. Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
2019-09-03vtysh, lib: allow regexp in `find` commandQuentin Young2-14/+118
¯\_(ツ)_/¯ Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-09-03doc: add frr_{each,with} to coding styleDavid Lamparter1-0/+22
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2019-09-03*: frr_elevate_privs -> frr_with_privsDavid Lamparter41-103/+96
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2019-09-03tools: extend checkpatch.pl for frr_{with,each}David Lamparter1-2/+27
For frr_each, just fix some existing warnings; for frr_with_* add a warning indicating that braces should always be used. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2019-09-03doc: add developer docs for frr_with_mutexDavid Lamparter3-0/+75
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2019-09-03lib: add frr_with_mutex() block-wrapperDavid Lamparter19-306/+221
frr_with_mutex(...) { ... } locks and automatically unlocks the listed mutex(es) when the block is exited. This adds a bit of safety against forgetting the unlock in error paths & co. and makes the code a slight bit more readable. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2019-09-03lib: add some macro helpersDavid Lamparter1-0/+43
Macro soup, now with 50% more macros. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2019-09-03bfdd: close bfd echo sockets, upon vrf disablePhilippe Guibert1-0/+2
upon vrf disable, an event informs bfd daemon that the vrf contexts should be removed. in the case a vrf backend is netns based, all sockets opened under that netns have to be closed. otherwise it is impossible for the system to completely close the network namespace. that implies that some interfaces may not be deleted, and may not be given back to default vrf. PR=65291 Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com> Acked-by: Julien Floret <julien.floret@6wind.com>
2019-09-03*: Convert some route map functions to return the enumDonald Sharp7-41/+120
Conver these functions: route_map_add_match route_map_delete_match route_map_add_set route_map_delete_set To return the `enum rmap_compile_rets` and ensure all functions that use this code handle all the enumerated possible returns. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-03lib: Cleanup return codes to use enum valuesDonald Sharp1-6/+6
A couple functions in routemap.c were returning 0/1 that were being mapped into the appropriate enum values on the calling functions to check return values. This matches the return values to the actual enum for future readability. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-03tests: Fix topojson address-family configurationAshish Pant1-3/+3
Signed-off-by: Ashish Pant <ashish12pant@gmail.com> address-family configuration was commented out in earlier commit by mistake. Re-enabling it now.
2019-09-03tests: Fix topojson static route testsAshish Pant3-3/+3
Signed-off-by: Ashish Pant <ashish12pant@gmail.com> Fix static route test in bgp-basic-functionality-topo1 and example-topojson-test after lib changes Add example-topojson-test to ignore from pytest.ini
2019-09-03tests: Add ecmp test casesAshish Pant5-18/+3099
Signed-off-by: Ashish Pant <ashish12pant@gmail.com> Adds ecmp test case for ibgp and ebgp topology.
2019-09-02bgpd: Add Established and Dropped counts to JSON output of bgp summaryDinesh G Dutt1-0/+4
Based on a suggestion by Donald Sharp, this patch adds the counts of the number of times a BGP peering session has transitioned from Estd->NotEstd and from NotEstd->Estd to the JSON output only of the "show [ip] bgp [vrf <vrf>] summary" command. The idea is that even if the current session is well and up, but a sessions has trasnitionined in and out of Estd state multiple times, its worth noting that. We cannot change the non-JSON output as easily, and so this command only addresses the JSON part for now. The fields added are the ones that were provided only as part of the "show bgp neighbor" command. Signed-off-by: Dinesh G Dutt <5016467+ddutt@users.noreply.github.com>
2019-09-02zebra/fpm: deprecation warning for protobufDavid Lamparter1-0/+3
We agreed on this several weeks ago on the weekly call, I just forgot to actually put it in a PR... A call for any Protobuf FPM users to raise their hand came up empty on both the mailing list as well as Slack. Let's see if this gets any response. If not, it'll be time to remove Protobuf FPM. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2019-09-02build: only build without libcap on requestDavid Lamparter1-0/+14
Linux FRR builds without libcap are massively slow due to the signal-based UID/GID synchronization across threads. This disables the automatic fallback to build without libcap; it can still be requested with "--disable-capabilities" but if the option isn't given in either direction and we can't find libcap that's an error now. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2019-09-02isisd: fix northbound circuit deletionEmanuele Di Pascale1-14/+1
circuit deletion was being enforced by sending a fake IF_DOWN_FROM_Z event for the circuit interface. This created a problem when the circuit was enabled again, since isisd internal state machine was expecting to see an IF_UP_FROM_Z that never came, as the interface had not actually gone down. As a consequence, disabling + re-enabling isis on an interface or area would leave interfaces in a CONFIG state, and adjacencies were not restored. Fix this by following the state machine and simply disabling circuits rather than attempting to delete them forcefully. Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2019-09-02bgpd: Add a new command to only show failed peeringsDinesh G Dutt6-203/+349
In a data center, having 32-128 peers is not uncommon. In such a situation, to find a peer that has failed and why is several commands. This hinders both the automatability of failure detection and the ease/speed with which the reason can be found. To simplify this process of catching a failure and its cause quicker, this patch does the following: 1. Created a new function, bgp_show_failed_summary to display the failed summary output for JSON and vty 2. Created a new function to display the reset code/subcode. This is now used in the failed summary code and in the show neighbors code 3. Added a new variable failedPeers in all the JSON outputs, including the vanilla "show bgp summary" family. This lists the failed session count. 4. Display peer, dropped count, estd count, uptime and the reason for failure as the output of "show bgp summary failed" family of commands 5. Added three resset codes for the case where we're waiting for NHT, waiting for peer IPv6 addr, waiting for VRF to init. This also counts the case where only one peer has advertised an AFI/SAFI. The new command has the optional keyword "failed" added to the classical summary command. The changes affect only one existing output, that of "show [ip] bgp neighbors <nbr>". As we track the lack of NHT resolution for a peer or the lack of knowing a peer IPv6 addr, the output of that command will show a "waiting for NHT" etc. as the last reset reason. This patch includes update to the documentation too. Signed-off-by: Dinesh G Dutt <5016467+ddutt@users.noreply.github.com>
2019-08-31tests: Update Dockerfile to a valid libyang versionStephen Worley1-4/+4
The built docker container was installing an old version of libyang. Updated it to point to the most recent build for Debian. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2019-08-30ospfd: Cleanup oi->obuf to always be createdDonald Sharp3-58/+17
This looks like a finish up of the partial cleanup that ocurred at some point in time in the past. When we alloc oi also always alloc the oi->obuf. When we delete oi always delete the oi->obuf right before. This cleans up a bunch of code to be simpler and hopefully easier to follow. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-30ospfd: tighten up what functions can be used outside of ospf_packet.cDonald Sharp2-10/+4
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-30ospfd: Do not turn on write thread unless we have something in itDonald Sharp2-7/+20
I am rarely seeing this crash: r2: ospfd crashed. Core file found - Backtrace follows: [New LWP 32748] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1". Core was generated by `/usr/lib/frr/ospfd'. Program terminated with signal SIGABRT, Aborted. 2019-08-29 15:59:36,149 ERROR: assert failed at "test_ospf_sr_topo1/test_memory_leak": Which translates to this code: node = listhead(ospf->oi_write_q); assert(node); oi = listgetdata(node); assert(oi); So if we get into ospf_write without anything on the oi_write_q we are stopping the program. This is happening because in ospf_ls_upd_queue_send we are calling ospf_write. Imagine that we have a interface already on the on_write_q and then ospf_write handles the packet send for all functions. We are not clearing the t_write thread and we are popping and causing a crash. Additionally modify OSPF_ISM_WRITE_ON(O) to not just blindly turn on the t_write thread. Only do so if we have data. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com> ospfd: Remove redundant asserts assert(oi) is impossible all listgetdata(node) directly proceeding it already asserts here, besides a node cannot be created with a null pointer! If list_isempty is called directly before the listhead call it is impossilbe that we do not have a valid pointer here. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-30build: Fix checks for c_aresMartin Winter1-4/+4
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2019-08-30build: make BMP optionalDavid Lamparter2-13/+49
Sigh. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2019-08-30bgpd/bmp: BMP implementationDavid Lamparter13-288/+2444
This implements BMP. There's no fine-grained history here, the non-BMP preparations are already split out from here so all that remains is BMP proper. Signed-off-by: David Lamparter <equinox@diac24.net>
2019-08-30bgpd/bmp: convert BMP code into moduleDavid Lamparter6-14/+19
This is mostly here for documentation purposes to show how some code is converted into a module. Signed-off-by: David Lamparter <equinox@diac24.net>
2019-08-30bgpd/bmp: use bgp packet dump hookDavid Lamparter3-6/+7
Signed-off-by: David Lamparter <equinox@diac24.net>
2019-08-30bgpd/bmp: Initial BMP implementation.Yasuhiro Ohara7-0/+602
This is the initial BMP skeleton from Yasuhiro Ohara. (License/Signoff note: code published on github as GPLv2+.) Signed-off-by: David Lamparter <equinox@diac24.net>
2019-08-30bgpd: add timestamp to bgp_adj_inDavid Lamparter2-0/+4
If we reject a received update in a filter, it never turns into a bgp_path_info but stays in adj_in. For that case, we don't have any timestamp for the update. Currently, this isn't visible anywhere; BMP will make use of this timestamp (and we can add a CLI option if we want.) Signed-off-by: David Lamparter <equinox@diac24.net>
2019-08-30lib: add monotime_to_realtime()David Lamparter1-0/+14
Signed-off-by: David Lamparter <equinox@diac24.net>
2019-08-30lib: add pull-driven data write handlerDavid Lamparter3-0/+387
This - mostly intended for BMP - implements a pull-driven write buffer filled on demand by a callback with some reasonable buffering logic. I don't expect it to be that useful in other places, but it's not BMP specific so it's properly split off in its own place. Signed-off-by: David Lamparter <equinox@diac24.net>
2019-08-29tests: Ensure topotests are actually waiting appropriately for peers to come upDonald Sharp3-15/+15
The FRR bgp topotests are employing a luCommand that looks for bgp peering to be up on the first router with a `wait` sub-command. Please note that a variety of tests are using this. This wait command has a variety of time outs being used `30`, `90`, and `300`. BGP peering with how we compile it have very long timers and 30( and possibly 90) seconds is clearly not enough when we are waiting, given the nature of our test beds. Additionally we were employing a model where once the first summary command succeeded we automatically assumed that all subsuquent summary commands( to look at other routers ) would not need to possibly wait. This is insufficient in that if I have multiple peerings in multiple vrf's there is no guarantee that one router peers being up will be sufficient information to know that all the other routers peers are up. Modify the test cases to be a bit more conformant about this and to allow peer checks to actually wait a reasonable amount of time for all peers to have a chance to come up. Signed-off-by: Donald Sharp <sharpdc@cumulusnetworks.com>
2019-08-28tests: Modify docker build for local to have dev buildDonald Sharp1-0/+1
Allow a local build of a frr docker container to be built with `--enable-dev-build`. This allows better decodes of symbols which could be useful when you are trying to fix something that is broken inside the docker container. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-28lib: Stop arm crash on shutdownDonald Sharp1-3/+2
Arm platforms are crashing in our topotests with this callstack; 50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. [Current thread is 1 (Thread 0xffffabb591d0 (LWP 18947))] (gdb) bt file=file@entry=0xaaaadfed1e48 "lib/memory.c", line=line@entry=80, function=function@entry=0xaaaadfed1db8 <__func__.10514> "mt_count_free") at lib/log.c:837 (gdb) So we are crashing because we are attempting to free a mtype that has no allocations associated with it. I added this debug code: @@ -227,7 +230,9 @@ static void rcu_bump(void) struct rcu_next *rn; rn = XMALLOC(MTYPE_RCU_NEXT, sizeof(*rn)); - + zlog_debug("RCU_BUMP"); + mtype_dump(MTYPE_RCU_THREAD); + mtype_dump(MTYPE_RCU_NEXT); /* note: each RCUA_NEXT item corresponds to exactly one seqno bump. * This means we don't need to communicate which seqno is which * RCUA_NEXT, since we really don't care. and added a mtype_dump function: +void mtype_dump(struct memtype *mt) +{ + zlog_debug("%s: %d", mt->name, (int)mt->n_alloc); +} Which resulted in this output: 2019/08/28 15:41:11 BGP: RCU_BUMP 2019/08/28 15:41:11 BGP: RCU thread: 3 2019/08/28 15:41:11 BGP: RCU thread: 3 If we look at the defintion of the two static memory types: DEFINE_MTYPE_STATIC(LIB, RCU_THREAD, "RCU thread") DEFINE_MTYPE_STATIC(LIB, RCU_NEXT, "RCU sequence barrier") I would have expected the output to be: RCU_BUMP RCU thread: 3 RCU sequence barrier: X instead. As a thought experiment I reduced the number of static memory types to 1 in the file and the crash stopped happening. I suspect we have a systematic error on arm in lib/memory.h due to the asm code. I am going to leave that alone for the moment ( and leave the crash issue open ), but see if we can get this code change into the system so that our CI system becomes happy again. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-28zebra: nht resolution default configurable per vrfPhilippe Guibert6-32/+39
even if vty commands were available, the default resolution command was working only for the first vrf configured. others were ignored. Also, for nexthop, resolution was working for all vrfs, and not the specific one. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2019-08-28bgpd: update rpki documentationMarcel Röthke1-25/+0
Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
2019-08-27bgpd: Shut off keepalives as soon as we shutdown a peerDonald Sharp1-0/+2
We have this crash: 2019-08-18T07:58:44.831656-04:00 rch2-140-fwK2b bgpd[1791]: %NOTIFICATION: sent to neighbor 10.73.248.8 4/0 (Hold Timer Expired) 0 bytes 2019-08-18T07:58:44.832164-04:00 rch2-140-fwK2b bgpd[1791]: Assertion `!((peer->thread_flags) & ((1 << 0)))' failed in file bgpd.c, line 2173, function peer_delete 2019-08-18T07:58:44.832548-04:00 rch2-140-fwK2b bgpd[1791]: Backtrace for 11 stack frames: 2019-08-18T07:58:44.832942-04:00 rch2-140-fwK2b bgpd[1791]: [bt 0] /usr/lib/libfrr.so.0(zlog_backtrace+0x3a) [0x7f5503c7c31a] 2019-08-18T07:58:44.833311-04:00 rch2-140-fwK2b bgpd[1791]: [bt 1] /usr/lib/libfrr.so.0(_zlog_assert_failed+0x61) [0x7f5503c7c891] 2019-08-18T07:58:44.833684-04:00 rch2-140-fwK2b bgpd[1791]: [bt 2] /usr/lib/frr/bgpd(peer_delete+0x4d5) [0x1432ceea15] 2019-08-18T07:58:44.834095-04:00 rch2-140-fwK2b bgpd[1791]: [bt 3] /usr/lib/frr/bgpd(+0x430e9) [0x1432cfc0e9] 2019-08-18T07:58:44.834479-04:00 rch2-140-fwK2b bgpd[1791]: [bt 4] /usr/lib/frr/bgpd(bgp_event_update+0x121) [0x1432cfe1c1] 2019-08-18T07:58:44.834852-04:00 rch2-140-fwK2b bgpd[1791]: [bt 5] /usr/lib/frr/bgpd(+0x453f1) [0x1432cfe3f1] 2019-08-18T07:58:44.835388-04:00 rch2-140-fwK2b bgpd[1791]: [bt 6] /usr/lib/libfrr.so.0(thread_call+0x60) [0x7f5503c9e3c0] 2019-08-18T07:58:44.835829-04:00 rch2-140-fwK2b bgpd[1791]: [bt 7] /usr/lib/libfrr.so.0(frr_run+0xb8) [0x7f5503c79de8] 2019-08-18T07:58:44.836292-04:00 rch2-140-fwK2b bgpd[1791]: [bt 8] /usr/lib/frr/bgpd(main+0x229) [0x1432ce4a69] 2019-08-18T07:58:44.836729-04:00 rch2-140-fwK2b bgpd[1791]: [bt 9] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5) [0x7f550271bb45] 2019-08-18T07:58:44.837198-04:00 rch2-140-fwK2b bgpd[1791]: [bt 10] /usr/lib/frr/bgpd(+0x2cefc) [0x1432ce5efc] 2019-08-18T07:58:44.837670-04:00 rch2-140-fwK2b bgpd[1791]: Current thread function (bgp_holdtime_timer), scheduled from file bgp_fsm.c, line 380 This is the code: bgp_reads_off(peer); bgp_writes_off(peer); assert(!CHECK_FLAG(peer->thread_flags, PEER_THREAD_WRITES_ON)); assert(!CHECK_FLAG(peer->thread_flags, PEER_THREAD_READS_ON)); The line crashing is the first assert. We know in bgp_writes_off we unset this flag: void bgp_writes_off(struct peer *peer) { struct frr_pthread *fpt = bgp_pth_io; assert(fpt->running); thread_cancel_async(fpt->master, &peer->t_write, NULL); THREAD_OFF(peer->t_generate_updgrp_packets); UNSET_FLAG(peer->thread_flags, PEER_THREAD_WRITES_ON); } We also know that the keepalives are not being turned off until we call bgp_fsm_change_status(peer, Deleted); later in the function. We know that the keepalive pthread will write to individual peers and issue a bgp_write_on(), which sets this flag. Modify the code base so that we explicitly turn off the keepalives immediately before the turning of writes off. Ticket: CM-26119 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-27*: Start process of possibly deprecating SolarisDonald Sharp2-0/+10
The FRR community has run into an issue where keeping up our CI system to work with solaris has become a fairly large burden. We have also sent emails and asked around and have not found anyone standing up saying that they are using Solaris. Given the fact that we do not have any comprehensive testing being done w/ solaris and the fact that we are getting a steady stream of new features that will never work on solaris and we cannot find anyone to say that they are using it. Let's start the drawn out process of deprecating the code. If in the mean-time someone comes forward with the fact that they are using it we can then not deprecate it. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-27isisd: check MTU when configuring circuitEmanuele Di Pascale1-19/+54
as part of the 'ip router isis TAG' command we were not validating the MTU of the interface against the minimum LSP MTU of the area. This could cause an assertion when the circuit is created in the APPLY phase. Fixes issue #4825 Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2019-08-27bgpd: Eliminate all incorrect formulations of afi/safi in JSONDinesh G Dutt7-129/+157
In a number of places, the JSON output had invalid key names for AFI/SAFI. For example, the key name in JSON was "IPv4 Unicast" which is invalid as a JSON Key name. Many JSON tools such as those used in Ansible, jq etc. all fail to parse the output in these scenarios. The valid name is ipv4Unicast. There's already a routine afi_safi_json() defined to handle this change, but it was not consistently called. The non-JSON version was called afi_safi_print() and it merely returned the CLI version of the string, didn't print anything. This patch deals with this issue by: - Renaming afi_safi_print to get_afi_safi_str() - get_afi_safi_str takes an additional param, for_json which if true will return the JSON-valid string - Renaming afi_safi_json to get_afi_safi_json_str() - Creating a new routine get_afi_safi_vty_str() for printing to vty - Consistently using get_afi_safi_str() with the appropriate for_json value Signed-off-by: Dinesh G Dutt <5016467+ddutt@users.noreply.github.com>
2019-08-27pimd: sh config is showing detail debug, though not configuredSatheesh Kumar K2-2/+5
Original Idea is to display normal & detailed debugs when detailed debug alone is configured. because of this "sh debugs" are showing wrong Information, because same macro is used to disply the configured debugs. that means even if Normal debug is configured, detailed macro returns TRUE. To avoid this ambiguity check whetehr detailed debug is configured or not during dumping configured debugs. In all other places using old macro. Signed-off-by: Satheesh Kumar K <sathk@cumulusnetworks.com>
2019-08-26bgpd: Update doc for some as-path route-map commandsDonald Sharp1-7/+12
Update the documentation for some as-path route-map commands. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>