Commit Graph

90 Commits

Author SHA1 Message Date
Philippe Guibert
0e4864eaf0 zebra: do not update link if interface is veth interface
when interface is a virtual ethernet interface, then there is no need to
update link pointer of interface.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-29 11:34:08 +02:00
Philippe Guibert
680c278fb8 zebra: when veth link is used across vrf, the link may not be good
This function is changed so that the interface index is searched across
the correct namespace.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-27 17:03:22 +02:00
David Lamparter
633fc9b133 *: frr_elevate_privs whitespace fixes
(... and one superfluous variable removed)

Signed-off-by: David Lamparter <equinox@diac24.net>
2018-08-14 20:02:05 +00:00
David Lamparter
01b9e3fd0d *: use frr_elevate_privs() (1/2: coccinelle)
Signed-off-by: David Lamparter <equinox@diac24.net>
2018-08-14 20:02:05 +00:00
Quentin Young
af4c27286d *: rename zlog_fer -> flog_err
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
4d43f68aeb lib, zebra: Add LIB_ERR_INTERFACE
Add a error type that allows us to track bad interface states.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
174482ef37 bgpd, lib, zebra: Convert LIB_ERR_PRIVILEGES
For all the places we zlog_err about raising/lowering privileges, use
zlog_ferr.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Renato Westphal
c3d098ab30
Merge pull request #2726 from sworleys/Netlink-Filter-AFI
zebra: Ignore AF_ETHERNET and AF_MPLS in route change as well
2018-08-06 20:26:46 -03:00
Stephen Worley
2e2b0fb3c2
Merge branch 'master' into Netlink-Prefix-Len-Check 2018-07-26 15:34:56 -04:00
Stephen Worley
e17d9b2dfe zebra: Make prefix length check return error
Prefix length validation checks should be returning an error
rather than 0. Switch to that and make them error messages.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2018-07-26 15:10:53 -04:00
Stephen Worley
8122787440 zebra: Format log for address family check
Switched the address family check to use unsigned format.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2018-07-25 14:08:24 -04:00
Renato Westphal
5d13cd0a93
Merge pull request #2699 from sworleys/Netlink-MTU-Check
zebra: Add check for mtu on netlink RTM_NEWLINK
2018-07-24 17:04:47 -03:00
Stephen Worley
758297039c Change log statements to use unsigned format
Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2018-07-24 11:14:07 -04:00
Stephen Worley
930571d24f zebra: Add check for prefix length from kernel messages
Zebra needed a check that varifies the prefix length
of an address is a valid length when receiving route
changes and interface address changes.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2018-07-23 14:21:59 -04:00
Stephen Worley
d23b983bd4 zebra: Add check for mtu on netlink RTM_NEWLINK
Zebra needed a check for mtu from the message it
received from the kernel before adding the new link.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2018-07-23 12:17:45 -04:00
Stephen Worley
8a1b681cba zebra: Add address family filters
The zebra netlink socket was attempting to read netlink
messages with invalid address families in a couple areas.
Added filters and warn messages.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2018-07-23 12:11:02 -04:00
F. Aragon
2e1cc43679
eigrpd lib pimd zebra: dead code (PVS-Studio)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-07-06 01:10:15 +02:00
Donald Sharp
9bdf861803 zebra: Add error messages in places where we have a decode problem
When we receive a netlink message from the kernel we have
handler functions for when we send a netlink command, if these
return a failure ( < 0 ) then we output that we had a parse
issue.  But if all we get is:

2018-06-21T23:47:45.298156+00:00 qct-ix1-08 zebra[1484]: netlink-cmd (NS 0) filter function error

Then it is not very useful to figure out *where* the error happened.

Add more error code when in a decode path to hopefully allow us
to figure out where this message is coming from.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-25 10:02:48 -04:00
Renato Westphal
452c9b503b zebra: remove unnecessary preprocessor check
The IFLA_INFO_SLAVE_KIND constant is always defined now that we imported
our own copies of the Linux kernel headers. Remove the preprocessor
checks since they aren't necessary anymore.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-06-07 15:45:33 -03:00
Russ White
e73f79ac4c
Merge pull request #2283 from donaldsharp/ignore_some_more
zebra: netlink cleanups
2018-05-27 11:02:15 -04:00
Arthur Jones
0f08a57a07 zebra/if_netlink: trivial cleanup of IFLA_WIRELESS
With:
	commit ba7773964c
	Author: Renato Westphal <renato@opensourcerouting.org>
	Date:   Wed Sep 20 22:12:56 2017 -0300

We added our own copy of if_link.h (among others).  This
file unconditionally defines IFLA_WIRELESS, so we don't need
the conditional defines in the if_netlink.c code...

Issue: https://github.com/FRRouting/frr/issues/2299
Signed-off-by: Arthur Jones <arthur.jones@riverbed.com>
2018-05-25 14:34:32 -07:00
Donald Sharp
2414abd3b0 zebra: Remove unnecessary function parameter
The snl variable is no longer needed to be passed around, so
remove it from the calling path.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-05-24 09:14:43 -04:00
Philippe Guibert
5efbf31054 zebra: avoid case where same interface pointer returned
When checking for a duplicate interface in an other NETNS, one may find
an interface in default VRF. That interface may have been moved to that
default VRF, for further action. Prevent from doing any action at this
point.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-05-04 16:50:47 +02:00
Philippe Guibert
9373219c67 zebra: improve logs when replacing interface to an other netns
The log information is better displated.
Also the variable name fits better with other_ifp, than with old_ifp.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-05-04 16:50:47 +02:00
Donald Sharp
60c0687a9a zebra: Fix crash with certain types of tunnels
Zebra did not have a handler for tunnels in v6 for
some reason.  Add code to handle the broadcast address
for both addition and deletion.

This appears to fix the crash.  There might still need
to be some work to make the code `work` properly for
this type of tunnel.

Fixes: #2063
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-15 10:57:19 -04:00
Renato Westphal
02031f109e
Merge pull request #1927 from pguibert6WIND/issue_1926
zebra: delete interface that disappeared
2018-04-03 21:41:12 -03:00
Russ White
d77d48b9ac
Merge pull request #1966 from donaldsharp/vrf_late_to_the_party
zebra: Set table id *before* we enable the vrf
2018-03-30 10:51:38 -04:00
Quentin Young
d7c0a89a3a
*: use C99 standard fixed-width integer types
The following types are nonstandard:
- u_char
- u_short
- u_int
- u_long
- u_int8_t
- u_int16_t
- u_int32_t

Replace them with the C99 standard types:
- uint8_t
- unsigned short
- unsigned int
- unsigned long
- uint8_t
- uint16_t
- uint32_t

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-27 15:13:34 -04:00
Philippe Guibert
b53686c52a zebra: delete interface that disappeared
When moving interfaces to an other place, like other netns, the
remaining interface is still present, with inactive status.
Now, that interface is deleted from the list, if the interface appears
on an other netns. If not, the interface is kept.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-03-26 11:31:44 +02:00
Donald Sharp
593406a133 zebra: Set table id *before* we enable the vrf
The table id of the vrf is being given to us as part
of the vrf creation netlink callback.  Unfortunately it
was being set in the zvrf *after* the vrf_enable callback.

This didn't used to matter until we started having config data
stored on the side that we needed to act on when the vrf
came up enough to start working.

So when we were storing static routes and installing them
they were being pushed into the default table for non-default
vrf's.

Ticket: CM-19141
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-25 19:35:27 -04:00
Arthur Jones
ba85366ad3 zebra/if_netlink: compile under musl-libc
musl-libc is a lightweight libc used by alpine linux:

https://www.musl-libc.org/

AFAICT, this is the only change to the source needed to get
basic frr support compiling on musl.

Two changes in one patch, get ethhdr from netinet/if_ether.h
and replace the only __caddr_t I could find in the source base
with caddr_t.

Testing done:

Compiled apk packages using a docker environment (patches
coming soon) also compiled redhat and debian using a similar
docker environment (RFC patches for those changes are queued
up too)...

Issue: https://github.com/FRRouting/frr/issues/1859
Signed-off-by: Arthur Jones <arthur.jones@riverbed.com>
2018-03-09 15:20:14 -08:00
Chirag Shah
b0fa6f6a10 zebra: set vrf as loopback upon interface add
Move setting vrf loopback flag on ifp after
zebra vrf type is set (ziftype).

Zebra connected not to announce unnumbered for
VRF interface (similar to loopback).

Ticket:CM-19914

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com
2018-03-08 12:44:19 -08:00
Lou Berger
996c93142d *: conform with COMMUNITY.md formatting rules, via 'make indent'
Signed-off-by: Lou Berger <lberger@labn.net>
2018-03-06 14:04:32 -05:00
Philippe Guibert
0f4977c668 lib: add vrf-lite bind capability to vrf APIs
Because socket creation is tightly linked with socket binding for vrf
lite, the proposal is made to extend socket creation APIs and to create
a new API called vrf_bind that applies to vrf lite. The passed interface
name is the interface that will be bound to the socket passed.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
516d7591d6 lib: add vrf_ioctl API
That API can be used to wrap the ioctl call with various vrf instances.
This permits transparently doing the ioctl() call without taking into
consideration the vrf backend kind.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
0268f30e3c zebra: speed ioctl read() with interfaces from various NETNS
When interfaces are located on different NETNS ( different VRF), then a
switch from netns context is necessary when calling setns(). The VRF
apis to switch and switch back are called, so that the ioctl will work
accordingly.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
fe533c564e zebra: socket operations stick to namespace if necessary
Upon following calls: interface poll, address poll, route poll, and
ICMPv6 handling, each new Namespace is being parsed. For that, the
socket operations need to switch from one NS to one other, to get the
necessary information.

As of now, there is a crash when dumping interfaces, through show
running-config.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
78dd30b263 zebra: add a runtime flag to enable vrf with netns
The netns backend is chosen by VRF if a runtime flag named vrfwnetns is
selected when running zebra.
In the case the NETNS backend is chosen, in some case the VRFID value is
being assigned the value of the NSID. Within the perimeter of that work,
this is why the vrf_lookup_by_table function is extended with a new
parameter.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:10:41 +01:00
Donald Sharp
dc7b3caefb zebra: Add one-shot thread to recheck speed
There are certain interfaces that when brought up and we receive
the netlink notification about it, the speed of the interface is
not set correctly.  This creates a one-shot thread that will
wait 15 seconds and then requery the speed and if it is different
it will renotify the running daemons.

The kernel should notify us on speed changes, unfortunately this
is not done currently via a netlink message as you would think.
As I understand it there is some in-fighting about the proper
way to approach this issue and due to the way the kernel release
cycle works we are a ways off from getting this fixed.  This
is a `hack` to make us work correctly while we wait for the
true answer.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-11 09:52:34 -05:00
Philippe Guibert
e86b71f142 zebra: ipv6 addressing uses netlink socket instead of standard ioctl
It is possible to configure IPv6 addresses from interfaces by using
netlink socket, intead of using standard sockets.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-12-13 16:54:10 +01:00
Fatih USTA
4268e09e2f
Centos5 Build problem fixed 2017-11-14 12:36:05 +03:00
Donald Sharp
48884c6b9f zebra: Allow IFLA_IFALIAS to set ifp->desc
The linux kernel passes the IFLA_IFALIAS value.  Allow
zebra to read and set the description appropriately.

Currently I don't set the value down into the kernel.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-28 06:58:18 -04:00
Renato Westphal
ba7773964c build: include our own copies of some linux kernel headers
This is the definitive solution to avoid build issues on old Linux
systems, where the system kernel headers might not contain some constants
or macros used by FRR (e.g. MPLS_IPTUNNEL_DST, introduced on 2015).

This is the same strategy adopted by other projects, like iproute2,
libnl, lldpd, strongswan, etc. These header files don't need to be in
sync with upstream, they only need to be updated when necessary (e.g. if
we want to use a new feature introduced by a recent kernel).

Fixes #962 using the solution suggested by David Lamparter.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-24 09:20:12 -02:00
Renato Westphal
ff880b78ef *: introduce new rb-tree to optimize interface lookup by ifindex
Performance tests showed that, when running on a system with a large
number of interfaces, some daemons would spend a considerable amount
of time in the if_lookup_by_index() function. Introduce a new rb-tree
to solve this problem.

With this change, we need to use the if_set_index() function whenever
we want to change the ifindex of an interface. This is necessary to
ensure that the 'ifaces_by_index' rb-tree is updated accordingly. The
return value of all insert/remove operations in the interface rb-trees
is checked to ensure that an error is logged if a corruption is
detected.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-10 09:05:02 -03:00
Renato Westphal
bcc245799b lib: nuke the if_*_by_name_len() functions
Make use of strnlen() and strlcpy() so we can get rid of these
convoluted if_*_by_name_len() functions.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-10 09:01:24 -03:00
Renato Westphal
b3c18264e4 Merge pull request #1079 from qlyoung/fix-style-a
*: fix style
2017-08-31 13:22:55 -03:00
Jafar Al-Gharaibeh
959768e8d0 Merge pull request #1044 from donaldsharp/combination
Coverity Cleanup of Stuff
2017-08-31 10:25:55 -05:00
Quentin Young
60466a63f2
*: fix style
Fixes style nits introduced by recent pull requests.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-30 11:27:11 -04:00
David Lamparter
608105a73e zebra: drop IPv6 "broadcast" and "peer" addr code
There is no such thing as an IPv6 "broadcast" or "peer" address.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-28 05:52:06 +02:00
David Lamparter
e8d19a0507 zebra: netlink backend support setting a P-t-P address
add a few bits to properly set a pointopoint address via netlink. the
structures have all the neccessary support, just need to send the proper
message bits to the kernel.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-27 23:40:34 +02:00