Commit Graph

72 Commits

Author SHA1 Message Date
Rafael Zalamena
e99d81a374
Merge pull request #6738 from deastoe/frr-reload-log-level
tools: frr-reload: more detailed log level control
2020-08-20 13:42:34 +00:00
Quentin Young
9d9adc84c7
Merge pull request #6343 from opensourcerouting/watchfrr-n-20200505
watchfrr: add `-N` and `--netns` options
2020-07-22 12:07:14 -04:00
David Lamparter
a0a7dead0b tools/frr-reload.py: support -N pathspace
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2020-07-22 12:56:04 +02:00
Don Slice
eb9113dfe3 tools: fix more frr-reload vrf static errors
Reported that in certain config changes, a static intended for the
default table would be duplicated into a vrf context.  Determined
that we still weren't keeping or adding the exit-vrf command when
necessary to keep the contexts straight.  Added logic to look for
the failing circumstances and add or remove the delete of the
exit-vrf command as needed.

Signed-off-by: Don Slice <dslice@nvidia.com>
2020-07-17 16:45:54 +00:00
Duncan Eastoe
6eee4767d0 tools: frr-reload: log exclusively through logger
In several instances a call to log.error() is preceded by a print()
for the same message. To prevent duplicate messages these print()
calls are removed.

To maintain (very) similar behaviour we add a StreamHandler to the
logger, when doing logging to a file (ie. --reload without --stdout),
which additionally sends error and above logs to STDOUT without any
metadata (exactly as they did before, with print()).

There is one subtle change - the log from Vtysh.is_config_available()
is now preceded with the "vtysh 'configure' returned" text, whereas
previously only the output from vtysh was sent to STDOUT.

Furthermore any error logs which weren't previously explicitly logged
to STDOUT will now be.

Signed-off-by: Duncan Eastoe <duncan.eastoe@att.com>
2020-07-15 12:44:20 +01:00
Duncan Eastoe
9c782ad2a4 tools: frr-reload: more detailed log level control
Add a "--log-level" option to frr-reload to set the maximum message
level to be logged. When the option is not used, the level is set to
info as before.

The existing --debug option is synonymous with --log-level=debug and
these options are therefore mutually exclusive.

Signed-off-by: Duncan Eastoe <duncan.eastoe@att.com>
2020-07-14 19:05:17 +01:00
Paul Manley
1c23a0aaa1 tools: create sub-context for bfd peers
add lines starting with 'peer' to the list of sub-contexts that are handled by frr-reload.py.

https://github.com/FRRouting/frr/issues/6511#issuecomment-655163833

Signed-off-by: Paul Manley <paul.manley@wholefoods.com>
2020-07-09 11:21:16 -05:00
Donald Sharp
e238920df0 tools: Fix reload with 'ipv6 address...' in interface
When you have this configuration:

int foo
  ipv6 address fd01:0:0:1::1/64

And issue a reload statement, FRR-reload
is reducing the code to a
`no ipv6 address fd01:0:0:1::/64`
and then issuing a:
`ipv6 address fd01:0:0:1::/64`

The end result is of course that the foo
interface now has two v6 addresses on it.

The brilliance of this is of course if you
happen to have two systems that are connected
over an interface, and you issue a reload command.
They both get fd01:0:0:1::/64 as an ipv6 address
and DAD detection kicks in and stomps on your stuff.

Put a special hey don't munch the v6 address line
in a reload situation.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-06-24 14:30:49 -04:00
Jafar Al-Gharaibeh
5f26363bda
Merge pull request #6614 from qlyoung/fix-evpnmh-reload
tools: 'evpn mh' is a new one-line context
2020-06-18 23:41:55 -05:00
Quentin Young
a840a40df4 tools: 'evpn mh' is a new one-line context
frr-reload.py needs to know about config-level commands, otherwise it
assumes they are contexts

Ticket: CM-30128
Ticket: CM-30077
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2020-06-18 17:00:51 -04:00
Emanuele Di Pascale
7e7fedcb40 tools: fix frr-reload.py daemon option
the refactored frr-reload.py is adding 'no-header' to the
'show running' command of vtysh, but if a daemon is specified
the no-header option should only be added after the daemon name.

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2020-06-15 14:58:22 +02:00
David Lamparter
fa18c6bbda tools/frr-reload: --vty_socket arg
After the cleanup, adding this doesn't require updating a zillion
locations in the code anymore, just one :)

Partially derived from 6a00e91d99f7f98d857c2056d0dcfeba48966581

Originally-by: Emanuele Di Pascale <emanuele@voltanet.io>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2020-05-26 19:14:00 +02:00
David Lamparter
663ece2f6d tools/frr-reload: cleanup pass
- throw vtysh into a wrapper class
- ignore "username" commands
- use mark output on stdout
- some other random cleanups

Signed-off-by: David Lamparter <equinox@diac24.net>
2020-05-26 19:09:32 +02:00
Donald Sharp
b2be8c9286 tools: revert frr-reload.py remove stderr redirects"
This reverts commit 3fa139a65b.

This is being reverted because this commit completely
breaks the invocation of frr-reload.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-05-12 13:31:09 -04:00
Don Slice
ca7f04961d tools: fix frr traceback on bgp neighbor bfd deletion
Problem reported that with certain configs, when the user
deleted a "neighbor x.x.x.x bfd 4 100 100" statement from
frr.conf and then reloaded, a traceback was seen and the
deletion did not succeed.  Found that in some scenarios
it was possible to have something in lines_to_add that
was in a different context and when the re.search was
attempted, it found an empy line and was unhappy.  This
fix avoids trying to search in the wrong context.

Ticket: CM-29145
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2020-05-05 17:59:59 +00:00
Emanuele Di Pascale
e04ff92ed0 tools: fix frr-reload AF issue with ldpd
when removing a whole address-family block from ldpd config
we were erroneously trying to also remove each of the interface
sub-sub-contexts that belonged to it; this would effectively
re-enable the AF we just removed. Work around this by ignoring
these sub-sub-contexts if we detect that we are already
removing the parent block.

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2020-04-27 16:38:29 +02:00
Don Slice
6024e562c9 tools: improve frr-reload delete performance for some commands
Problem seen when deleting many static routes or access-lists due
to frr-reload.py issuing individual vtysh -c commands for every
line. On slow switches, this can take long enough for systemd to
time out the reload process and restart frr.  This fix uses add
logic for static routes, prefix-lists, and access-lists to gang
the changes together.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Ticket: CM-27856
2020-01-16 11:57:56 +00:00
David Lamparter
3fa139a65b tools/frr-reload.py: remove stderr redirects
These make no sense.  stderr=subprocess.STDOUT means that vtysh's stdout
and stderr are combined and returned by check_output.  We don't expect
errors in that, and we certainly don't log them.

Leaving vtysh's stderr as stderr is perfectly fine, it'll be captured
for logging just like stderr output from frr-reload.py.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2019-12-06 15:13:32 +01:00
Quentin Young
1d92edb209
Merge pull request #5224 from manuhalo/fix_frr_reload_paths
Fixes and extensions to frr_reload.py
2019-11-19 17:12:38 -05:00
Don Slice
deb2d4019e tools: resolve issue with bfd timer change fix in frr-reload.py
Found that while the previous fix solved the traceback and created
the correct configuration, it was doing a delete/add process rather
than just an add.  This was due to an incorrectly created search
string. This commit fixes that search string and testing verifies
that the correct thing is now being done.

Ticket: CM-27233
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2019-11-19 13:40:23 +00:00
Don Slice
c32ab5cfef tools: stop repeating lines to delete for multiple bfd timer changes
Problem reported with tracebacks seen when making multiple bfd timer
changes in frr.conf and applying via frr-reload.py.  Found that when
multiple bfd timer changes are made, the same line can be added for
deletion more than once, causing the traceback when the deletion is
performed.  This fix verifies the correct line is being appended for
deletion.

Ticket: CM-27233
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2019-11-13 15:19:36 +00:00
Emanuele Di Pascale
609ac8dd49 tools, vtysh: improved fix for ldpd ifaces
instead of suppressing the 'exit' markers at the end of each
'interface XXX' clause in the mpls ldp configuration, mark
those with a special marker 'exit-ldp-if' and teach the
reload script to correctly recognize the new sub-subcontext

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2019-11-12 15:36:15 +01:00
Emanuele Di Pascale
ccef6e47a3 tools, vtysh: fix ldpd + frr-reload.py
frr-reload.py has many special case rules that did not consider ldpd
at all. Specifically:

 1. The bulk of ldp configuration comes in a big 'mpls ldp' context, which was
    previously considered a single-line context as it started with 'mpls'. This
    rule should only apply to labels and lsps.
 2. ldp has a 'router-id' config line that fell into the same rule as the above
    one. It should not be considered a single-line context as more ldp
    configuration can follow.
 3. enabled interfaces should not end their context. A better fix
    would actually require popping a new context for each interface
    in case there is any interface-specific config, but at least this
    fix will address the most common use case.
 4. when declaring pseudowires, any line with 'member pseudowire XXX' should
    be considered a sub-context of the 'l2vpn YYY type ZZZ' context. Without
    this fix, changes in the first psuedowire declared would not correctly
    be processed (e.g. removing a 'control-word exclude' line would not
    be picked up).

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2019-10-29 10:32:38 +01:00
Emanuele Di Pascale
d9730542a9 tools: frr-reload.py for single daemon
allow frr-reload.py to be invoked with a --daemon option to specify
an individual daemon for which the configuration diff should be
computed. This is useful when integrated config is not used and we
want to apply a patch to a single daemon config file.

No attempt to integrate this with 'service frr reload' has been done.
Making watchfrr work with per-daemon config is outside the scope of
this simple patch.

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2019-10-29 10:32:38 +01:00
Emanuele Di Pascale
1a11d9cd1e tools: non hardcoded paths in frr-reload
allow command line parameters to specify different folder for
the vtysh binary,  config file location and temporary file.
Keep the old hardcoded paths as default values for those options
to preserve current functionality.

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2019-10-29 10:32:38 +01:00
Rafael Zalamena
55c8666a92 frr-reload.py: fix reload with different settings
Add `allow-external-route-update` and `domainname` to the one line
context list, otherwise reload will fail when those commands show up in
the running configuration.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2019-07-23 18:20:22 -03:00
Quentin Young
f9d31f6f6c tools: fix vrrp autoconfigure reload
Ticket: CM-24375
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-05-17 00:27:08 +00:00
Don Slice
ee951352d1 tools: frr-reload.py stop bouncing peers on bfd timer change
Problem reported that if a bgp neighbor had a bfd timer change
made in frr.conf and systemctl reload frr performed, the neighbor
with the timer changed bounced.  If the change is made in vtysh
by just adding the new timer values, no peer bounce occurs.  This
fix skips the delete part of the delete/add process in frr-reload
so the peers stay up.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2019-04-25 10:54:54 -07:00
Russ White
3f77bcdbe0
Merge pull request #3872 from dslicenc/frr-reload-vrf-context
tools: keep exit-vrf to change context correctly between vrfs
2019-02-27 11:16:38 -05:00
Don Slice
06ad470d7c tools: keep exit-vrf to change context correctly between vrfs
Discovered in testing that if a static route in the default table
was entered immediately after a vrf static block, the static route
intended for the default table was put in the vrf instead.  This
fix retains the "exit-vrf" statement which causes the following
static routes to appear in the default table correctly.

Ticket: CM-23985
Signed-off-by: Don Slice <dslice@cumulusnetwork.com>
2019-02-26 14:23:53 +00:00
Don Slice
348135a5da tools: fix blackhole static changes in frr-reload.py
Problem caused when nclu is used to create "ip route 1.1.1.0/24
blackhole" because frr-reload.py changed the line to Null0 instead
of blackhole.  If nclu tries to delete it using the same line as
entered, the commit fails since it doesn't match.

Ticket: CM-23986
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2019-02-26 14:08:27 +00:00
Don Slice
2a2b64e487 tools: stop frr-reload.py from trying to delete the vrf context
Problem seen when removing last config item under the vrf context,
where frr-reload.py tries instead to delete the vrf context itself.
Since that is not permitted on an active vrf, the command errors
out and nothing is deleted.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-12-14 13:11:05 +00:00
jpmondet
1c64265f86
frr-reload.py: Add python2 & python3 compatibility.
Signed-off-by: jpmondet <jp@mondet.org>
2018-09-26 21:45:33 +02:00
Don Slice
d60f480010 tools: correct frr-reload.py handling of bgp vni/exit-vni config
Problem reported that when a peer-group was added in certain
configurations, it would be rejected because of the order of the
commands put in by nclu. Issued turned out to be how frr-reload.py
was handling the sub-sub-context of the vni under the address-family
and subsequently how it handled the following exit-vni.

Ticket: CM-21996
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-08-10 09:59:24 -07:00
Don Slice
cc27402c4d tools: handle exit-vrf as end of context block
Ticket: CM-21048
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-07-19 18:38:54 +00:00
Christian Franke
6bd0508a89 tools/frr-reload.py: process vnc settings as sub-context
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2018-03-12 17:30:16 +01:00
Daniel Walton
9d877afc13 tools: frr-reload 'vni' keyword does not always create a sub-context
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2018-01-17 15:57:50 +00:00
Daniel Walton
b05a1d3c03 tools: frr-reload do not attempt deleting lines that cannot be deleted
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

There are several lines that we cannot do a "no" on
- frr version
- frr defaults
- password
- line vty

frr-reload should ignore these if asked to do a "no" on them
2017-11-10 18:30:25 +00:00
Daniel Walton
4c76e59220 tools: frr-reload remove Cumulus Linux release numbers from comments
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

The "3.0", etc in the comments were referring to Cumulus Linux 3.0 which
was confusing now that FRR has a 3.0
2017-11-10 17:57:42 +00:00
Daniel Walton
028bcc883f tools: frr-reload combine "'router bgp' and line" checks
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

We had multiple places checking for

    if ctx_keys[0].startswith('router bgp') and line

Combine these into a single check
2017-11-10 17:47:13 +00:00
Daniel Walton
c755f5c434 tools: frr-reload avoid del/add of BGP table-map
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2017-11-10 17:41:43 +00:00
Daniel Walton
89cca49b3a tools: frr-reload.py ignore multiple whitespaces
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

Without this fix frr-reload would do a del/add even if the only
difference were bogus whitespaces.

root@cel-redxp-10[nclu]# /usr/lib/frr/frr-reload.py --test
/etc/frr/frr.conf

Lines To Delete
===============

router bgp 100
 no bgp router-id 1.1.1.1

Lines To Add
============

router bgp 100
 bgp   router-id 1.1.1.1
root@cel-redxp-10[nclu]#
2017-11-10 17:19:08 +00:00
Daniel Walton
2f52ad9627 tools: frr-reload.py should exit(1) if vtysh config mode is locked
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2017-09-27 18:47:47 +00:00
Daniel Walton
478f9ce277 tools: frr-reload capture stderr so we can log it
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2017-09-19 13:54:35 +00:00
Daniel Walton
8ad1fe6cae tools: frr-reload support for "no no" scenario
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2017-09-19 13:06:49 +00:00
Daniel Walton
7918b33541 tools: frr-reload.py support for vni under 'address-family l2vpn evpn'
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2017-09-08 13:27:23 +00:00
Daniel Walton
596074af62 vtysh: vtysh -f FOO should exit non-zero if it hits an error
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

Today if we hit an error while apply the contents of file FOO that error
does not bubble up to a non-zero exit.
2017-08-16 20:22:59 +00:00
Daniel Walton
5014d96f0f bgpd, tools, vtysh: Handle config migration from 'address-family evpn' to 'address-family l2vpn evpn'
Ticket: CM-16747
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-08 10:28:50 -04:00
Jafar Al-Gharaibeh
1a8c43f114 tools: update to use FRR name
Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
2017-07-12 13:26:22 -05:00
David Lamparter
92eedda1fb Merge branch stable/2.0 into stable/3.0
Conflicts:
	bgpd/bgp_fsm.c
	ospf6d/ospf6_lsa.c
	ospfd/ospf_vty.c
	zebra/redistribute.c

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-18 12:23:13 +02:00