summaryrefslogtreecommitdiff
path: root/staticd
AgeCommit message (Collapse)Author
2023-10-26isisd: staticd: need to link directly against libyangChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-10-10Revert "lib: register bgp link-state afi/safi"Donald Sharp
This reverts commit 1642a68d60cfade4b2fce72aaef58dea700c65c3.
2023-10-04staticd: Memory leak of string in staticdDonald Sharp
XSTRDUP and then calling strsep mangles the pointer returned by XSTRDUP. Keep a copy of the orig and when we are done, free that instead. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-09-26Merge pull request #12649 from louis-6wind/bgp-link-stateRuss White
bgpd: add basic support of BGP Link-State RFC7752
2023-09-20Merge pull request #14089 from dmytroshytyi-6WIND/srv6_multiple_segs_sidsRuss White
bgpd,doc,lib,sharpd,staticd,yang,zebra: SRv6 multiple segs SIDs
2023-09-20staticd: add vtysh srv6 multiple segs SIDsDmytro Shytyi
Append staticd vty with multiple segs SIDs. Signed-off-by: Dmytro Shytyi <dmytro.shytyi@6wind.com>
2023-09-20staticd: northbound srv6 hooks for segs stack yang modelDmytro Shytyi
Provive hooks for srv6 segs SIDs stack yang model. Signed-off-by: Dmytro Shytyi <dmytro.shytyi@6wind.com>
2023-09-20staticd: zebra, modify nexthop to support multiple srv6 segs SIDsDmytro Shytyi
Adapt the nexthop from 1 to multiple srv6 seg SIDs Signed-off-by: Dmytro Shytyi <dmytro.shytyi@6wind.com>
2023-09-20staticd: add srv6 static route seg informationDmytro Shytyi
Signed-off-by: Dmytro Shytyi <dmytro.shytyi@6wind.com>
2023-09-20staticd: Check against NULL before dereferencing vrfDonatas Abraitis
If VRF is not found by the given name, validate it and return an error. Fixes: 76b2bc97e738 ("staticd: Accept full blackhole typed keywords for ip_route_cmd") Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-09-18lib: register bgp link-state afi/safiLouis Scalbert
Register BGP Link-State AFI/SAFI values from RFC7752. Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com> Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2023-08-25staticd: Accept full blackhole typed keywords for ip_route_cmdDonatas Abraitis
Before this patch we allow entering next-hop interface address as any string. Like, we can type: `ip route 10.10.10.10/32 bla`, but this will create a blackhole route instead of using an interface `bla`. The same is with reject. After the patch: ``` $ vtysh -c 'con' -c 'ip route 10.10.10.100/32 bla' ERROR: SET_CONFIG request failed, Error: nexthop interface name must be (reject, blackhole) $ ip link show dev bla 472: bla: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000 link/ether fa:45:bd:f1:f8:f0 brd ff:ff:ff:ff:ff:ff $ vtysh -c 'sh run | include ip route' $ vtysh -c 'con' -c 'ip route 10.10.10.100/32 blac' $ vtysh -c 'sh run | include ip route' ip route 10.10.10.100/32 blackhole $ vtysh -c 'con' -c 'no ip route 10.10.10.100/32 blac' $ vtysh -c 'sh run | include ip route' $ vtysh -c 'con' -c 'ip route 10.10.10.100/32 blackhole' $ vtysh -c 'sh run | include ip route' ip route 10.10.10.100/32 blackhole $ vtysh -c 'con' -c 'no ip route 10.10.10.100/32 blackhole' $ vtysh -c 'sh run | include ip route' $ vtysh -c 'con' -c 'ip route 10.10.10.100/32 Null0' $ vtysh -c 'sh run | include ip route' ip route 10.10.10.100/32 Null0 $ vtysh -c 'con' -c 'no ip route 10.10.10.100/32 Null0' $ vtysh -c 'sh run | include ip route' $ ``` Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2023-08-04staticd: fix comparison of nexthop-vrfIgor Ryzhov
When displaying the configuration, the order of nexthop-vrf is wrong, because the default VRF is not displayed, but still compared as the word "default". Therefore it is placed in the middle of the list instead of always being the first one. Before the fix: ``` ip route 1.1.1.0/24 2.2.2.2 nexthop-vrf ccc ip route 1.1.1.0/24 2.2.2.2 ip route 1.1.1.0/24 2.2.2.2 nexthop-vrf eee ``` After the fix: ``` ip route 1.1.1.0/24 2.2.2.2 ip route 1.1.1.0/24 2.2.2.2 nexthop-vrf ccc ip route 1.1.1.0/24 2.2.2.2 nexthop-vrf eee ``` Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2023-06-27Merge pull request #13838 from ak503/static_bfd_vrfChristian Hopps
staticd: Fix bfd for static route in VRF
2023-06-23staticd: remove unused YANG moduleChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-06-23staticd: Fix bfd for static route in VRFDmitrii Turlupov
vrf BELLA ip route 1.1.1.1/32 192.168.1.1 bfd profile test exit-vrf Before patch: # do show bfd peers BFD Peers: peer 192.168.1.1 vrf default After patch: # do show bfd peers BFD Peers: peer 192.168.1.1 vrf BELLA Signed-off-by: Dmitrii Turlupov <turlupov@zts.ru>
2023-06-12staticd: staticd no longer loads config filesChristian Hopps
We need to ignore SIGHUP rather than reload config now. Signed-off-by: Christian Hopps <chopps@labn.net>
2023-06-04lib: mgmtd: remove abstraction layer and other cleanupChristian Hopps
Code is no longer using a global FE "client context", and instead creates client objects, rename the structure and it's uses to reflect this. Remove an obfuscating abstraction layer whose existence was entirely based on using a uintptr_t rather than a pointer to an declared-only struct. Change multi-duty "params" structure into a single duty callbacks one. Remove unsupported API code. Signed-off-by: Christian Hopps <chopps@labn.net>
2023-05-28staticd: remove connect notify function, not neededChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-05-28lib: msg: refactor common connection code from mgmtdChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-05-01mgmtd: fully implement debug flags for mgmtd and clientsChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-04-01mgmtd: lib: read transitioned daemons split config files in mgmtdChristian Hopps
When daemons transition to mgmtd they should stop reading their split config files, and let mgmtd do that, otherwise things can get out of sync. Signed-off-by: Christian Hopps <chopps@labn.net>
2023-03-24*: Convert event.h to frrevent.hDonald Sharp
We should probably prevent any type of namespace collision with something else. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-03-24*: Convert `struct event_master` to `struct event_loop`Donald Sharp
Let's find a better name for it. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-03-24*: Convert struct thread_master to struct event_master and it's ilkDonald Sharp
Convert the `struct thread_master` to `struct event_master` across the code base. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-03-24*: Rename thread.[ch] to event.[ch]Donald Sharp
This is a first in a series of commits, whose goal is to rename the thread system in FRR to an event system. There is a continual problem where people are confusing `struct thread` with a true pthread. In reality, our entire thread.c is an event system. In this commit rename the thread.[ch] files to event.[ch]. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-03-22lib: staticd: vtysh: apply frrbot style requirementsChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-03-22staticd: handle `distance` valueChristian Hopps
Signed-off-by: Christian Hopps <chopps@labn.net>
2023-03-21mgmtd: Enroll Staticd as a backend client for MGMTDChristian Hopps
This commmit introduces Staticd as a backend client for the MGMTd framework. All the static commands will be diverted to the MGMT daemon and will use the transactional model to make changes to the internal state. Similar mechanism can be used by other daemons to use the MGMT framework in the future. This commit includes the following functionalities in the changeset: 1. Diverts all the staticd (config only) commands to MGMTd. 2. Enrolls staticd as a backend client to use the MGMT framework. 3. Modify the staticd NB config handlers so that they can be compiled into a library and loaded in the MGMTd process context. Co-authored-by: Pushpasis Sarkar <pushpasis@gmail.com> Co-authored-by: Abhinay Ramesh <rabhinay@vmware.com> Co-authored-by: Ujwal P <ujwalp@vmware.com> Signed-off-by: Yash Ranjan <ranjany@vmware.com>
2023-03-21staticd: Tell bfd that we are shutting downDonald Sharp
Prevent a use after free and tell the bfd subsystem we are shutting down in staticd. ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460:==2264460==ERROR: AddressSanitizer: heap-use-after-free on address 0x61f000004698 at pc 0x7f65d1eb11b2 bp 0x7ffdbface490 sp 0x7ffdbface488 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460-READ of size 4 at 0x61f000004698 thread T0 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #0 0x7f65d1eb11b1 in zclient_bfd_command lib/bfd.c:307 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #1 0x7f65d1eb20f5 in _bfd_sess_send lib/bfd.c:507 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #2 0x7f65d20510aa in thread_call lib/thread.c:1989 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #3 0x7f65d2051f0a in _thread_execute lib/thread.c:2081 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #4 0x7f65d1eb271b in _bfd_sess_remove lib/bfd.c:544 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #5 0x7f65d1eb278d in bfd_sess_free lib/bfd.c:553 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #6 0x7f65d1eb5400 in bfd_protocol_integration_finish lib/bfd.c:1029 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #7 0x7f65d1f42f77 in hook_call_frr_fini lib/libfrr.c:41 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #8 0x7f65d1f494a1 in frr_fini lib/libfrr.c:1199 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #9 0x563b7abefd76 in sigint staticd/static_main.c:70 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #10 0x7f65d200ef91 in frr_sigevent_process lib/sigevent.c:115 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #11 0x7f65d204fac6 in thread_fetch lib/thread.c:1758 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #12 0x7f65d1f49377 in frr_run lib/libfrr.c:1184 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #13 0x563b7abefed1 in main staticd/static_main.c:160 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #14 0x7f65d1b92d09 in __libc_start_main ../csu/libc-start.c:308 ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- #15 0x563b7abefa99 in _start (/usr/lib/frr/staticd+0x15a99) ./bfd_topo3.test_bfd_topo3/r4.staticd.asan.2264460- Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-09*: remove some leftover license blurbsDavid Lamparter
The regex'ing left some paragraphs that didn't exactly match. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2023-02-09*: auto-convert to SPDX License IDsDavid Lamparter
Done with a combination of regex'ing and banging my head against a wall. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2023-01-31staticd: Add missing enum's to switch statementDonald Sharp
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-01-31Merge pull request #12695 from opensourcerouting/format-warningsDonald Sharp
build: `-Wformat-nonliteral -Wformat-security`
2023-01-27*: fix non-const northbound XPath format stringsDavid Lamparter
Passing a pre-formatted buffer in these places needs a `"%s"` in front so it doesn't get formatted twice. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2023-01-24lib: remove concurrent nexthop zapi (un)registrationLouis Scalbert
Daemons like staticd already implement nexthop zapi (un)registration. b7ca809d1c ("lib: BFD automatic source selection") has implemented a concurrent nexthop (un)registration. Some nexthop could be unregistred by the bfd whereas they were still needed by the daemon. Let the deamons deal with nexthop zapi (un)registration. Fixes: b7ca809d1c ("lib: BFD automatic source selection") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2023-01-24lib: do not reopen a zclient socket for bfdLouis Scalbert
b7ca809d1c ("lib: BFD automatic source selection") has added a dedicated zclient socket for nht tracking. Since the bfd lib is used by daemons that already has a zclient socket, those daemons has now a second zclient socket. However, zebra does not distinguish the two zclient sessions. For example, the interfaces are asked a second via zebra_message_send(zclient, ZEBRA_INTERFACE_ADD, VRF_DEFAULT) in zclient_start(). As a result, callbacks functions like bgp_ifp_create() are called a second time, which causes some processing overhead and might cause bugs. Re-use the existing zclient socket for nht tracking. Note that BFD automatic source selection is only currently implemented in staticd. Other daemons will require to add the following in their ZEBRA_NEXTHOP_UPDATE callback function: > if (zclient->bfd_integration) > bfd_nht_update(&matched, &nhr); Fixes: b7ca809d1c ("lib: BFD automatic source selection") Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
2023-01-13staticd: add debug static bfd commandPhilippe Guibert
This command helps in troubleshooting static bfd feature. Add traces upon bfd events. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com> Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2023-01-13staticd: fix bug on route reinstallationRafael Zalamena
When configuring a route with multiple next hops on boot and the interface is missing the route never shows up (even after interface is properly learned). Fix: force route clean up by uninstalling it and putting it back entirely instead of just updating the missing next hop. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2023-01-13staticd: add command to show monitored routesRafael Zalamena
Add command to visualize all monitored routes and their state. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2023-01-13lib,staticd: BFD integration CLI commandsRafael Zalamena
Implement the static route monitoring feature with BFD integration. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2023-01-13staticd: BFD integration northbound supportRafael Zalamena
Implement all BFD integration northbound callbacks and integrate BFD with `staticd` route installation procedure. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2022-12-16lib, staticd: return values even after an assertDonald Sharp
When compiling with -fsanitize=thread. I started getting this error: staticd/static_zebra.c: In function ‘static_zebra_nht_get_prefix’: staticd/static_zebra.c:316:1: error: control reaches end of non-void function [-Werror=return-type] 316 | } | ^ Just to make future efforts still work, let's just make the compiler happy. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-11-28Merge pull request #12405 from opensourcerouting/static-improvDonald Sharp
staticd: improve CLI/northbound translation code
2022-11-25staticd: improve CLI/northbound translation codeRafael Zalamena
Simplify all DEFUNs by moving all logic to the northbound translation function and transforming all function parameters into a single structure. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2022-11-25staticd: Do not crash when modifying an existing static route with colorDonatas Abraitis
``` $ vtysh -c 'conf' -c 'ip route 192.168.0.0/32 192.168.10.65 color 123' $ vtysh -c 'show ip route 192.168.0.0/32 json' | jq '."192.168.0.0/32"[0].nexthops[0].srteColor' 123 $ vtysh -c 'conf' -c 'ip route 192.168.0.0/32 192.168.10.65' $ vtysh -c 'show ip route 192.168.0.0/32 json' | jq '."192.168.0.0/32"[0].nexthops[0].srteColor' 0 ``` Before this patch: ``` STATIC: Received signal 6 at 1666938633 (si_addr 0x4e1a, PC 0x7f295139c438); aborting... STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(zlog_backtrace_sigsafe+0x70) [0x7f29519ef0a0] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(zlog_signal+0xec) [0x7f29519ef28c] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(+0xccee2) [0x7f2951a1aee2] STATIC: /lib/x86_64-linux-gnu/libpthread.so.0(+0x11390) [0x7f2951742390] STATIC: /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x38) [0x7f295139c438] STATIC: /lib/x86_64-linux-gnu/libc.so.6(abort+0x16a) [0x7f295139e03a] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(_zlog_assert_failed+0xe6) [0x7f2951a46766] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(+0xae7ee) [0x7f29519fc7ee] STATIC: /home/u1/mGIT/frr-master/staticd/.libs/lt-staticd(routing_control_plane_protocols_control_plane_protocol_staticd_route_list_src_ STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(+0xaf264) [0x7f29519fd264] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(+0xafb4f) [0x7f29519fdb4f] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(nb_candidate_commit_apply+0x33) [0x7f29519fde33] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(nb_candidate_commit+0x9e) [0x7f29519fdf6e] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(+0xb0469) [0x7f29519fe469] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(+0xb3055) [0x7f2951a01055] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(nb_cli_apply_changes+0xd8) [0x7f2951a01358] STATIC: /home/u1/mGIT/frr-master/staticd/.libs/lt-staticd() [0x407ec2] STATIC: /home/u1/mGIT/frr-master/staticd/.libs/lt-staticd() [0x40a307] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(+0x74923) [0x7f29519c2923] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(cmd_execute_command+0xe4) [0x7f29519c2aa4] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(cmd_execute+0xc9) [0x7f29519c2c49] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(+0xe4184) [0x7f2951a32184] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(+0xe4436) [0x7f2951a32436] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(+0xe6fcc) [0x7f2951a34fcc] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(thread_call+0x98) [0x7f2951a2cc28] STATIC: /home/u1/mGIT/frr-master/lib/.libs/libfrr.so.0(frr_run+0xe8) [0x7f29519e7518] STATIC: /home/u1/mGIT/frr-master/staticd/.libs/lt-staticd(main+0xda) [0x40572a] STATIC: /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0) [0x7f2951387840] STATIC: /home/u1/mGIT/frr-master/staticd/.libs/lt-staticd(_start+0x29) [0x4058e9] STATIC: in thread vtysh_read scheduled from lib/vty.c:2710 vty_event() ``` Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
2022-10-26build, vtysh: extract vtysh commands from .xrefDavid Lamparter
Rather than running selected source files through the preprocessor and a bunch of perl regex'ing to get the list of all DEFUNs, use the data collected in frr.xref. This not only eliminates issues we've been having with preprocessor failures due to nonexistent header files, but is also much faster. Where extract.pl would take 5s, this now finishes in 0.2s. And since this is a non-parallelizable build step towards the end of the build (dependent on a lot of other things being done already), the speedup is actually noticeable. Also files containing CLI no longer need to be listed in `vtysh_scan` since the .xref data covers everything. `#ifndef VTYSH_EXTRACT_PL` checks are equally obsolete. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-10-12staticd: Clean up zclient on shutdownDonald Sharp
The zclient data structure was not being cleaned up on shutdown. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-10-07*: Create and use infrastructure to show debugs in libDonald Sharp
There are lib debugs being set but never show up in `show debug` commands because there was no way to show that they were being used. Add a bit of infrastructure to allow this and then use it for `debug route-map` Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-08-08staticd: When changing the underlying nh ensure it is reinstalledDonald Sharp
There exists some nexthop attributes that are not the unique part of the nexthop and if you change the static route with those values then the route is not being updated in zebra with the new values: Example of brokenness: eva# conf eva(config)# ip route 1.2.3.9/32 192.168.119.1 enp39s0 label 16020 eva(config)# do show ip route 1.2.3.9 Routing entry for 1.2.3.9/32 Known via "static", distance 1, metric 0, best Last update 00:00:05 ago * 192.168.119.1, via enp39s0, label 16020, weight 1 eva(config)# ip route 1.2.3.9/32 192.168.119.1 enp39s0 label 16040 eva(config)# do show ip route 1.2.3.9 Routing entry for 1.2.3.9/32 Known via "static", distance 1, metric 0, best Last update 00:00:12 ago * 192.168.119.1, via enp39s0, label 16020, weight 1 Fixed behavior: eva# conf eva(config)# ip route 1.2.3.10/32 192.168.119.1 enp39s0 label 16020 eva(config)# do show ip route 1.2.3.10 Routing entry for 1.2.3.10/32 Known via "static", distance 1, metric 0, best Last update 00:00:04 ago * 192.168.119.1, via enp39s0, label 16020, weight 1 eva(config)# ip route 1.2.3.10/32 192.168.119.1 enp39s0 label 16040 eva(config)# do show ip route 1.2.3.10 Routing entry for 1.2.3.10/32 Known via "static", distance 1, metric 0, best Last update 00:00:01 ago * 192.168.119.1, via enp39s0, label 16040, weight 1 I've gone through most of the items in staticd that can change the nexthop Signed-off-by: Donald Sharp <sharpd@nvidia.com>