Commit Graph

18604 Commits

Author SHA1 Message Date
Renato Westphal
eba4e1ea9f vtysh: add the "show yang operational-data" command
The right way to implement this command in vtysh is the following:
* Send the command to each running FRR daemon;
* Collect the command output from each daemon;
* Parse the text outputs into libyang lyd_node structures. Then merge
  all these data trees into a single one. Finally, print the merged
  data trees to the standard output (libyang will take care of
  combining duplicate nodes as necessary).

What this commit does is to allow vtysh to send the "show yang
operational-data" command to a single daemon only (the last
parameter).  It's a quick workaround to allow us to write topotests
using YANG-modeled data until we do the real thing (full vtysh
northbound integration).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-09-23 09:38:05 -03:00
Renato Westphal
8f4f95e08a tests: remove more topotest backward-compatibility cruft
This isn't necessary anymore since topotest was integrated into
the FRR repo.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-09-23 09:38:05 -03:00
Renato Westphal
aec5ef490c isisd, yang: implement read-only list of adjacencies
The new "adjacency-state" grouping is almost a 1:1 copy of the
same grouping from the IETF IS-IS module, except for the "usage"
and "lastuptime" leafs that were skipped (more work needs to be
done to support those).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-09-23 09:38:05 -03:00
Renato Westphal
4ad771401e vtysh: add the "debug northbound" command
This command is defined in the lib/northbound_cli.c file, which
is not being parsed by vtysh since most commands from there need
special handling in the context of vtysh. The "debug northbound"
command, however, can be made available to vtysh without problems.
Introduce a new DEFUNSH to do that.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-09-23 09:38:05 -03:00
Renato Westphal
e206450bd9 yang: create new interface-config grouping in the frr-isisd module
Do this to better separate config data from state data (coming in
the next commits) like done in the IETF IS-IS module.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-09-23 09:38:05 -03:00
Lou Berger
05916dd519 topotest: bgp_l3vpn_to_bgp_vrf allow for different interface output
Signed-off-by: Lou Berger <lberger@labn.net>
2019-09-22 13:06:48 -04:00
Donatas Abraitis
7d7828cf25
Merge pull request #5031 from donaldsharp/ip_protocol_doc_update
user: Update `ip protocol...` command documentation
2019-09-22 11:23:02 +03:00
Donald Sharp
563018b90d user: Update ip protocol... command documentation
Update documentation to reflect on the ground behavior.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-20 15:16:36 -04:00
Donald Sharp
0eb194f478
Merge pull request #4893 from pguibert6WIND/interface_zapi_update
Interface zapi update
2019-09-20 14:59:01 -04:00
Donald Sharp
da44fd80f0 configure: Update versioning
We have pulled the 7.2 branch let's update the master branch
to say it's 7.3

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-20 14:36:01 -04:00
Renato Westphal
60aecb43e8
Merge pull request #4529 from donaldsharp/vrf_conversions
Vrf conversions
2019-09-20 14:56:44 -03:00
Martin Winter
8790f67192
Merge pull request #5024 from donaldsharp/send_that_error_bgp
bgpd: Invalid NH's should send an apropriate reason code
2019-09-20 15:58:51 +02:00
Donald Sharp
7decb30c20 bgpd: Invalid NH's should send an apropriate reason code
RFC 4271 sec 6.3 p33, In the case of a BGP_NEXTHOP attribute with an
incorrect value, FRR is supposed to send a notification
and include 'Corresponding type, length and value of the NEXT_HOP
attribute in the notification data.

Fixes: #4997
Signed-off-by: Nikos <ntriantafillis@gmail.com>
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-20 06:41:02 -04:00
Donald Sharp
9c821adaa6
Merge pull request #5019 from karamalla0406/vrf_name_json
zebra: Added vrfname to route prefix dictionary
2019-09-19 19:14:06 -04:00
Kishore Aramalla
c1066ba002 zebra: Added vrfname to route prefix dictionary
Route prefix dictionary contains vrf ID only.
Added vrfName to the route prefix dictionary.

Signed-off-by: Kishore Aramalla <karamalla@vmware.com>
2019-09-19 14:28:11 -07:00
Donald Sharp
f3dbec60f2 zebra: Send RTPROT_ZEBRA for netlink messages missing this data
Update neighbor entries and rule entries to have the RTPROT_ZEBRA
protocol value.  So we can tell where things come from.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-19 16:05:39 -04:00
Donald Sharp
d3d7feb597 include: update include/linux
Newer versions of the linux kernel have made their way into the wild.
Update some headers.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-19 15:44:36 -04:00
Donatas Abraitis
e09295c426
Merge pull request #4875 from vishaldhingra/blackhole_type
Zebra: Rectifying the log messages.
2019-09-19 20:41:00 +03:00
Donald Sharp
26f8f6fe7f lib: delete interface if you can in upper level protocol
In an upper level protocol, delete the interface on notification
about deletion.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-19 13:34:06 -04:00
Donald Sharp
3c3c325203 *: Convert zapi->interface_delete to ifp callback
Convert the callback of the interface_delete to the new
ifp callback.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-19 13:34:06 -04:00
Donald Sharp
b0b69e59f4 *: Convert interface_down to interface down callback
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-19 13:34:06 -04:00
Donald Sharp
ddbf3e6060 *: Convert from ->interface_up to the interface callback
For all the places we have a zclient->interface_up convert
them to use the interface ifp_up callback instead.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-19 13:34:06 -04:00
Donald Sharp
ef7bd2a3d5 *: Switch all zclient->interface_add to interface create callback
Switch the zclient->interface_add functionality to have everyone
use the interface create callback in lib/if.c

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-19 13:34:06 -04:00
Donald Sharp
138c5a7450 *: Add infrastructure to support zapi interface callbacks
Start the conversion to allow zapi interface callbacks to be
controlled like vrf creation/destruction/change callbacks.

This will allow us to consolidate control into the interface.c
instead of having each daemon read the stream and react accordingly.
This will hopefully reduce a bunch of cut-n-paste stuff

Create 4 new callback functions that will be controlled by
lib/if.c

create -> A upper level protocol receives an interface creation event
The ifp is brand spanking newly created in the system.
up -> A upper level protocol receives a interface up event
This means the interface is up and ready to go.
down -> A upper level protocol receives a interface down
destroy -> A upper level protocol receives a destroy event
This means to delete the pointers associated with it.

At this point this is just boilerplate setup for future commits.
There is no new functionality.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-19 13:34:06 -04:00
Donald Sharp
1d311a05c9 lib, zebra: Allow for interface deletion when kernel event happens
When zebra gets a callback from the kernel that an interface has
actually been deleted *and* the end users has not configured
the interface, then allow for deletion of the interface from zebra.

This is especially important in a docker environment where containers
and their veth interfaces are treated as ephermeal.  FRR can quickly
have an inordinate amount of interfaces sitting around that are
not in the kernel and we have no way to clean them up either.

My expectation is that this will cause a second order crashes
in upper level protocols, but I am not sure how to catch these
and fix them now ( suggestions welcome ).  There are too many
use patterns and order based events that I cannot know for certain
that we are going to see any at all, until someone sees this problem
as a crash :(  I do not recommend that this be put in the current
stabilization branch and allow this to soak in master for some time
first.

Testing:

sharpd@donna ~/frr4> sudo ip link add vethdj type veth peer name vethjd
sharpd@donna ~/frr4> sudo ip link add vethaa type veth peer name vethab
sharpd@donna ~/frr4> sudo vtysh -c "show int brief"
Interface       Status  VRF             Addresses
---------       ------  ---             ---------
dummy1          down    default
enp0s3          up      default         10.0.2.15/24
enp0s8          up      default         192.168.209.2/24
enp0s9          up      default         192.168.210.2/24
enp0s10         up      default         192.168.212.4/24
lo              up      default         10.22.89.38/32
vethaa          down    default
vethab          down    default
vethdj          down    default
vethjd          down    default
virbr0          up      default         192.168.122.1/24
virbr0-nic      down    default

sharpd@donna ~/frr4> sudo ip link set vethaa up
sharpd@donna ~/frr4> sudo ip link set vethab up
sharpd@donna ~/frr4> sudo ip link del vethdj
sharpd@donna ~/frr4> sudo vtysh -c "show int brief"
Interface       Status  VRF             Addresses
---------       ------  ---             ---------
dummy1          down    default
enp0s3          up      default         10.0.2.15/24
enp0s8          up      default         192.168.209.2/24
enp0s9          up      default         192.168.210.2/24
enp0s10         up      default         192.168.212.4/24
lo              up      default         10.22.89.38/32
vethaa          up      default
vethab          up      default
virbr0          up      default         192.168.122.1/24
virbr0-nic      down    default

sharpd@donna ~/frr4> sudo ip link del vethaa
sharpd@donna ~/frr4> sudo vtysh -c "show int brief"
Interface       Status  VRF             Addresses
---------       ------  ---             ---------
dummy1          down    default
enp0s3          up      default         10.0.2.15/24
enp0s8          up      default         192.168.209.2/24
enp0s9          up      default         192.168.210.2/24
enp0s10         up      default         192.168.212.4/24
lo              up      default         10.22.89.38/32
virbr0          up      default         192.168.122.1/24
virbr0-nic      down    default

sharpd@donna ~/frr4> sudo ip link add vethaa type veth peer name vethab
sharpd@donna ~/frr4> sudo vtysh -c "show int brief"
Interface       Status  VRF             Addresses
---------       ------  ---             ---------
dummy1          down    default
enp0s3          up      default         10.0.2.15/24
enp0s8          up      default         192.168.209.2/24
enp0s9          up      default         192.168.210.2/24
enp0s10         up      default         192.168.212.4/24
lo              up      default         10.22.89.38/32
vethaa          down    default
vethab          down    default
virbr0          up      default         192.168.122.1/24
virbr0-nic      down    default

sharpd@donna ~/frr4> sudo vtysh -c "show run"
Building configuration...

Current configuration:
!
frr version 7.2-dev
frr defaults datacenter
hostname donna.cumulusnetworks.com
log stdout
no ipv6 forwarding
!
ip route 192.168.3.0/24 192.168.209.1
ip route 192.168.4.0/24 blackhole
ip route 192.168.5.0/24 192.168.209.1
ip route 192.168.6.0/24 192.168.209.1
ip route 192.168.7.0/24 99.99.99.99 nexthop-vrf EVA
ip route 192.168.8.0/24 192.168.209.1
ip route 4.5.6.7/32 12.13.14.15
!
interface dummy1
 ip address 12.13.14.15/32
!
interface vethaa
 description FROO
!
line vty
!
end
sharpd@donna ~/frr4> sudo ip link del vethaa
sharpd@donna ~/frr4> sudo vtysh -c "show int brief"
Interface       Status  VRF             Addresses
---------       ------  ---             ---------
dummy1          down    default
enp0s3          up      default         10.0.2.15/24
enp0s8          up      default         192.168.209.2/24
enp0s9          up      default         192.168.210.2/24
enp0s10         up      default         192.168.212.4/24
lo              up      default         10.22.89.38/32
vethaa          down    default
virbr0          up      default         192.168.122.1/24
virbr0-nic      down    default

sharpd@donna ~/frr4> sudo vtysh -c "show run"
Building configuration...

Current configuration:
!
frr version 7.2-dev
frr defaults datacenter
hostname donna.cumulusnetworks.com
log stdout
no ipv6 forwarding
!
ip route 192.168.3.0/24 192.168.209.1
ip route 192.168.4.0/24 blackhole
ip route 192.168.5.0/24 192.168.209.1
ip route 192.168.6.0/24 192.168.209.1
ip route 192.168.7.0/24 99.99.99.99 nexthop-vrf EVA
ip route 192.168.8.0/24 192.168.209.1
ip route 4.5.6.7/32 12.13.14.15
!
interface dummy1
 ip address 12.13.14.15/32
!
interface vethaa
 description FROO
!
line vty
!
end

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-19 13:34:06 -04:00
Donald Sharp
26f135777c zebra: Saving interface description makes no sense on deletion
We were storing the interface description irrelevant of whether
or not it was a newlink or dellink.  This makes no sense.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-09-19 13:33:23 -04:00
vdhingra
14a4d9d047 Zebra: Rectifying the log messages.
This change addresses the following :
1. Ensures zlog_debug should be under DEBUG macro check
2. Ensures zlog_err and zlog_warn wherever applicable.
3. Removed few posivite logs from fpm handling, whose frequency is high.

Signed-off-by: vishaldhingra <vdhingra@vmware.com>
2019-09-19 02:59:04 -07:00
Kishore Aramalla
0afbd728ed bgpd: Fixed 'show bgp l2vpn evpn json' to display all routes
Fixed the following:
1. Print the complete header for 'show bgp l2vpn evpn' command
2. Print the Route Distinguisher header
3. Print all relevant routes in json (some were being skipped)

Signed-off-by: Kishore Aramalla <karamalla@vmware.com>
2019-09-18 20:47:50 -07:00
Donald Sharp
16296beaa5
Merge pull request #4731 from mjstapp/fix_redist_update
zebra: redistribute deletes when updating selected route
2019-09-18 19:43:43 -04:00
Renato Westphal
312fbe4b60
Merge pull request #4990 from qlyoung/yang-iface-operdata
lib: add oper data cbs for ifaces
2019-09-18 19:41:27 -03:00
Donald Sharp
794759963d
Merge pull request #5004 from idryzhov/fix-vtysh-prefix-list
vtysh: fix multiple "no ip/ipv6 prefix-list sequence-number" lines in running-config
2019-09-18 17:38:00 -04:00
Quentin Young
f88647ef75 lib: add oper data cbs for ifaces
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-09-18 19:42:47 +00:00
Quentin Young
5d9a2c67a4
Merge pull request #5008 from opensourcerouting/nb-improvements
northbound fixes and enhancements
2019-09-18 15:42:06 -04:00
Renato Westphal
6f4e5eddc0 lib: add an exception in the northbound for operational data callbacks
During initialization, the northbound detects if any required
callback is missing (fatal error) or if any unneeded callback is
present (warning).

There are three callbacks, however, that should require special
handling: get_next(), get_keys() and lookup_entry().

These callbacks are normally unneeded for configuration lists. But,
if a configuration list is augmented with new state nodes by another
module, then the three callbacks mentioned above become required. In
this case, never log a warning when these callbacks are implemented
when they are not needed, since this depends on context (e.g. some
daemons might augment "frr-interface" while others don't).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-09-18 14:35:10 -03:00
Renato Westphal
6b5d6e2dbc lib: fix ordering issues in the northbound
When a configuration transaction is being performed, the northbound
uses a red-black tree to store the configuration changes that need to
be processed. The problem is that we were sorting the configuration
changes based on their XPaths (and callback priorities). This means
the original order of the changes wasn't being respected, which is
a problem for lists that use the "ordered-by user" statement. To
fix this, add a new "seq" member to the "nb_config_cb" structure
so that we can preserve the order of the configuration changes as
told by libyang.

Since none of the FRR modules use "ordered-by user" lists so far,
no daemon was affected by this problem.

Reported-by: Martin Winter <mwinter@opensourcerouting.org>
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-09-18 14:35:10 -03:00
Renato Westphal
6cd301e048 lib: fix corner case when iterating over YANG-modeled operational data
When updating the XPath during the iteration of operational data,
include the namespace of the augmenting module when necessary.

Reported-by: Quentin Young <qlyoung@cumulusnetworks.com>
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-09-18 14:35:10 -03:00
Renato Westphal
8685be73e0 Revert "lib: introduce a read-write lock for northbound configurations"
Adding a lock to protect the global running configuration doesn't
help much since the FRR daemons are not prepared to process
configuration changes in a pthread that is not the main one (a
whole lot of new protections would be necessary to prevent race
conditions).

This means the lock added by commit 83981138 only adds more
complexity for no benefit. Remove it now to simplify the code.

All northbound clients, including the gRPC one, should either run
in the main pthread or use synchronization primitives to process
configuration transactions in the main pthread.

This reverts commit 83981138fe.
2019-09-18 14:35:10 -03:00
Renato Westphal
34224f0c5c lib: introduce new 'pre_validate' northbound callback
This callback can be used to validate subsections of the
configuration being committed before validating the configuration
changes themselves. It's useful to perform more complex validations
that depend on the relationship between multiple nodes.

Only YANG-level validation (performed by libyang) and the
NB_EV_VALIDATE validation (that can be used to validate individual
configuration changes) proved to be insufficient in some cases.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-09-18 13:38:28 -03:00
Renato Westphal
eed84494b4 lib: add yang wrappers for IP prefixes
We had wrappers for IPv4 and IPv6 prefixes, but not for IP (version
agnostic) prefixes. This commit addresses this issue.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-09-18 13:38:28 -03:00
Donald Sharp
0a0d4f9e2e
Merge pull request #5006 from manuhalo/fix_ftn_uninstall
zebra: fix mpls ftn uninstall
2019-09-18 12:09:08 -04:00
Emanuele Di Pascale
90a570ed27 zebra: fix mpls ftn uninstall
when a client disconnects, we iterate over the routing table to
remove any label that originated from that client. However we
were erroneously passing the route type to the function, while
it was expecting the lsp type. As a result, for example, killing
ldpd would not remove the ldp labels from the routes.

Kudos to @rwestphal for pointing me to the source of the issue.

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2019-09-18 16:03:52 +02:00
Renato Westphal
41b209ce18
Merge pull request #5003 from manuhalo/fix_bgp_bmp_oot_build
bgpd: fix include path for bgp_bmp_clippy.c
2019-09-18 10:59:43 -03:00
Igor Ryzhov
c0e8367230 vtysh: fix multiple "no ip/ipv6 prefix-list sequence-number" lines in running-config
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2019-09-18 14:21:27 +03:00
Donald Sharp
5d83c731e3
Merge pull request #4984 from Alexis-ROYER/pim-doc#4965
[PIM] Confusing documentation for `ip pim sm` command (#4965)
2019-09-18 06:40:09 -04:00
Emanuele Di Pascale
33a9e19681 bgpd: fix include path for bgp_bmp_clippy.c
not using a relative path was breaking out-of-tree compilation

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2019-09-18 11:49:24 +02:00
Alexis Royer
a94dd7dd96 doc/user: Confusing documentation for ip pim sm
Modification of the documentation for the `ip pim sm` command in order to avoid the understanding of an incompatibility with IGMP on the interface.

Signed-off-by: Alexis Royer <alexis.royer@gmail.com>
2019-09-18 09:57:13 +02:00
Renato Westphal
957ef1c93a
Merge pull request #4966 from Orange-OpenSource/isis-TE
isisd: Update TLVs processing for TE, RI & SR
2019-09-17 20:49:52 -03:00
Russ White
65c600c731
Merge pull request #5001 from qlyoung/fix-frr-pthread-reachable-blocks
lib: clean up frr_pthread structs at exit
2019-09-17 19:21:16 -04:00
Donald Sharp
d487c49127
Merge pull request #4996 from opensourcerouting/build-tags
build: fix "make tags"
2019-09-17 19:07:39 -04:00
Julien Floret
594c287816 zebra: inform upper layer error when reading correct speed interface
speed interface is done 15 seconds after interface creation. during that
time, the vrf or the interface may have disappeared. to protect this,
return an error in case it is not possible to create a vrf socket or it
is not possible to get speed of an interface because of a missing
device.

Signed-off-by: Julien Floret <julien.floret@6wind.com>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2019-09-17 18:38:42 +02:00