Commit Graph

15560 Commits

Author SHA1 Message Date
Renato Westphal
fcb7bffdda lib: introduce new YANG helper function
One use case for the new yang_data_list_find() function is to find
input parameters in RPC northbound callbacks easily, without the
need to iterate over the input parameters manually.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
02fe07c7b8 lib: constify a few parameters in the VRF code
Parameters should be const whenever possible to improve code
readability and remove the need to cast away the constness of
const arguments.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
5c84b9a581 ripngd: remove the ripng global variable
This is the last step to make ripngd ready for multi-instance
support.

Remove the ripng global variable and add a "ripng" parameter
to all functions that need to know the RIPng instance they are
working on. On some functions, retrieve the RIPng instance from
the interface variable when it exists (this assumes interfaces can
pertain to one RIPng instance at most, which is ok for VRF support).

In preparation for the next commits (VRF support), add a "vrd_id"
member to the ripng structure, and use ripng->vrf_id instead of
VRF_DEFAULT wherever possible.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
26c6be9314 ripngd: move "ripng_offset_list_master" to the ripng structure
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
56bf1cb2c3 ripdng: clear list of peers when RIPng is deconfigured
This is an old standing bug where the list of RIPng peers wasn't
cleared after deconfiguring RIPng, which caused the existing peers
to still be present on a newly configured RIPng instance (except
when the timed out after ~3 minutes). Fix this.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
ecece94cf1 ripngd: move "peer_list" to the ripng structure
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
0c32404fdd ripngd: move "Vripng_passive_interface" to the ripng structure
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
29b94d5884 ripngd: move "ripng_enable_network" to the ripng structure
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
b0ba762f66 ripngd: move "ripng_enable_if" to the ripng structure
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
a9caf6e939 ripngd: simplify cleaning up of routing instance
* Call ripng_clean() only when RIPng is configured, this way we can
  remove one indentation level from this function.
* ripng_redistribute_clean() is only called on shutdown, so there's
  no need to call ripng_redistribute_withdraw() there since the RIPng
  table is already cleaned up elsewhere.
* Deallocate the ripng structure only at the end of the function. This
  prepares the ground for the next commits where all global variables
  will be moved to the ripng structure.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
045c5389c2 ripd: remove the rip global variable
This is the last step to make ripd ready for multi-instance support.

Remove the rip global variable and add a "rip" parameter to all
functions that need to know the RIP instance they are working
on. On some functions, retrieve the RIP instance from the interface
variable when it exists (this assumes interfaces can pertain to
one RIP instance at most, which is ok for VRF support).

In preparation for the next commits (VRF support), add a "vrd_id"
member to the rip structure, and use rip->vrf_id instead of
VRF_DEFAULT wherever possible.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
711915d2cd ripd: clear list of peers when RIP is deconfigured
This is an old standing bug where the list of RIP peers wasn't
cleared after deconfiguring RIP, which caused the existing peers
to still be present on a newly configured RIP instance (except when
the timed out after ~3 minutes). Fix this.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
2826309c11 ripd: move "rip_distance_table" to the rip structure
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
c08a21077f ripd: move global counters to the rip structure
The only sideeffect of this change is that these counters will be
reset when RIP is deconfigured and then configured again, but this
shouldn't be a problem as the RIP MIB isn't specific about this.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
241987a816 ripd: remove dead code
None of these variables or functions were being used since the
initial revision ~16 years ago. It's safe to say we can remove
them now.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
3f21c8c4cb ripd: move "rip_offset_list_master" to the rip structure
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
29e897ad33 ripd: move "peer_list" to the rip structure
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
5a29c0d5c4 ripd: move "Vrip_passive_nondefault" to the rip structure
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
1205fdc482 ripd: move "rip_enable_network" to the rip structure
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
ca04690261 ripd: move "rip_enable_interface" to the rip structure
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
2d2eaa1366 ripd: simplify cleaning up of routing instance
* Call rip_clean() only when RIP is configured, this way we can
  remove one indentation level from this function.
* rip_redistribute_clean() is only called on shutdown, so there's
  no need to call rip_redistribute_withdraw() there since the RIP
  table is already cleaned up elsewhere.
* There's no need to clean up the "rip->neighbor" nodes manually before
  calling route_table_finish().
* Deallocate the rip structure only at the end of the function. This
  prepares the ground for the next commits where all global variables
  will be moved to the rip structure.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
2ae9e38fa7 ripngd: fix valgrind warning about uninitialized memory usage
Fixes the following warning when running ripngd with valgrind:
==38== Syscall param sendmsg(msg.msg_control) points to uninitialised
byte(s)
==38==    at 0x5EA1E47: sendmsg (sendmsg.c:28)
==38==    by 0x118C48: ripng_send_packet (ripngd.c:226)
==38==    by 0x11D1D6: ripng_request (ripngd.c:1924)
==38==    by 0x120BD8: ripng_interface_wakeup (ripng_interface.c:666)
==38==    by 0x4ECB4B4: thread_call (thread.c:1601)
==38==    by 0x4E8D9CE: frr_run (libfrr.c:1011)
==38==    by 0x1121C8: main (ripng_main.c:180)
==38==  Address 0xffefffc34 is on thread 1's stack
==38==  in frame #1, created by ripng_send_packet (ripngd.c:172)

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
bb5d09c90c ripd, ripngd: fix null pointer dereference in YANG RPCs
These RPCs should do nothing when RIP/RIPng aren't configured.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:15:41 -02:00
Renato Westphal
177a547ab2 doc: fix small inconsistencies in the table of zapi command values
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:06:00 -02:00
Renato Westphal
27ecbea30b zebra: send link parameters to zclients once they request interface info
We were sending ZEBRA_INTERFACE_LINK_PARAMS messages under the
following circumstances:
* New interface was created (via kernel or config);
* Interface went from down to up;
* Update in the link-params configuration.

Now also send ZEBRA_INTERFACE_LINK_PARAMS messages whenever a zclient
connects and sends a ZEBRA_INTERFACE_ADD request. Without this fix,
the client daemons don't receive interface link parameters if they
are configured in the zebra startup configuration.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:06:00 -02:00
Renato Westphal
edc127627d lib: use the correct VRF ID when parsing INTERFACE_LINK_PARAMS messages
Bug found during code inspection.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:06:00 -02:00
Renato Westphal
d763789879 lib: fix checking of clients subscribed to receive default routes
In these two functions, we were using VRF_DEFAULT instead of the
VRF ID passed as a parameter when checking if the given client
subscribed to receive default routes or not. This prevented the
"default-originate" command from ospfd/isisd from working correctly
under specific circumstances.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:06:00 -02:00
Renato Westphal
f20b478ef3 zebra: fix checking of clients subscribed to receive interface info
client->ifinfo is a VRF bitmap, hence we need to use
vrf_bitmap_check() to check if a client is subscribed to receive
interface information for a particular VRF. Just checking if
the client->ifinfo value is set will always succeed since it's
a pointer initialized by zserv_client_create(). With this fix,
we'll stop sending interface messages from all VRFs to all clients,
even those that didn't subscribe to it.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 16:06:00 -02:00
Renato Westphal
6f95d11a17 zebra: fix the "show ip import-check" command
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-18 14:21:42 -02:00
Emanuele Di Pascale
188823b080 ospfd: fix no virtual-link cmd
the  command was not checking
correctly in all cases whether the virtual link existed. This caused
bugs in some corner cases, e.g. when two virtual links were created,
one of them was deleted, and the second one was reset with no
authentication - this would instead create a new virtual link with
the area in decimal format.

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2019-01-18 12:43:35 +01:00
Mark Stapp
70fc94ca1d
Merge pull request #3625 from donaldsharp/clist_strlen
bgpd: Use string length not sizeof the array
2019-01-17 11:25:45 -05:00
Donald Sharp
a7e046a20a bgpd: Use string length not sizeof the array
strlen is the same as sizeof when the memory is dynamically allocated
but it is not the same when the memory being looked at is an array.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-01-16 20:43:53 -05:00
Rafael Zalamena
5414658aa5
Merge pull request #3624 from mjstapp/fix_ldpd_bind
ldpd: fix missing return value in bindany
2019-01-16 21:58:50 -02:00
Mark Stapp
c00ba1da70 ldpd: fix missing return value in bindany
One of the socket utilities was missing a return value in
one of its ifdef'd paths.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2019-01-16 16:35:10 -05:00
Donald Sharp
2a7d947108 doc: Update modules.rst to better represent what is needed
The modules.rst documents how to create a module, let's update
it a bit to reflect what an end user needs to do a bit more.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-01-16 09:32:06 -05:00
Chirag Shah
313919d6e3 ospfd: remove default origin max age lsa
default-information originate does not work
if config is removed and re-added.

Ticket:CM-20026
Testing Done:
Validate default-information originate config
removed and re-added, check ospf lsa database, and peer
route cache entry for default route.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2019-01-15 21:06:58 -08:00
Jafar Al-Gharaibeh
c5ef74c4bc
Merge pull request #3617 from donaldsharp/cleanup_old_stale_netlink
zebra: Cleanup unnecessary check
2019-01-15 11:53:49 -05:00
Lou Berger
9af649da4b
Merge pull request #3570 from donaldsharp/dire_warning
more doc stuff for configure
2019-01-15 11:44:25 -05:00
Lou Berger
5e686af495
Merge pull request #3610 from donaldsharp/bgp_default_doc
doc: Add `[no] bgp default ipv4-unicast` documentation
2019-01-15 10:27:09 -05:00
Lou Berger
07f451afef
Merge pull request #3532 from donaldsharp/community_list_speedup
bgp Community list speedup
2019-01-15 10:05:20 -05:00
Donald Sharp
62819462b7 zebra: Cleanup unnecessary check
We self include the enum that has the RTA_EXPIRES in it,
as such this will always be true.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-01-15 08:55:34 -05:00
Renato Westphal
d8e331eb0e
Merge pull request #3180 from qlyoung/prefixlen-u8-to-u16
lib: convert prefixlen to 16-bit integer
2019-01-15 00:39:39 -02:00
Donald Sharp
31107203da
Merge pull request #3611 from opensourcerouting/nb-fixes
Minor northbound fixes
2019-01-14 17:28:49 -05:00
Renato Westphal
0e3bfb0df7 doc: update build instructions for freebsd on how to obtain libyang
Unfortunately the first version of the FreeBSD libyang port contained
a bug in which the libyang pkginfo file wasn't being installed
correctly in the system, and this prevented the FRR build system from
detecting the library. This bug was already fixed months ago but some
FreeBSD package repositories still have the old bugged version of the
port. This means we can't suggest people to install libyang using
"pkg install" since this causes problems for most people. In this
case, suggest FreeBSD users to build and install libyang manually
as we suggest for other BSD platforms.

This commit should be reverted once all FreeBSD package repositories
are updated with the new version of the libyang port.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-14 16:34:33 -02:00
Renato Westphal
b44d0de576 lib: update suggestions related to some northbound errors
Since commit 3a11599c, the FRR YANG modules are embedded inside the
binaries and no longer need to be loaded from the file system. This
way, it's impossible for the FRR binaries and YANG modules to be out
of sync anymore. As such, update the suggestions of the northbound
error codes.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-14 16:33:37 -02:00
Renato Westphal
9f6de29901 lib: don't abort when incomplete xpath is given by the user
Instead of aborting when an incomplete xpath is given to the
nb_oper_data_iterate() function, just return an error so that the
callers have a chance to treat this error. Aborting based on invalid
user input is never the right thing to do.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-14 16:33:21 -02:00
Renato Westphal
f65fb6b4b4 lib: fix "use of uninitialised value" valgrind warning
When FRR is built without the --enable-config-rollbacks option,
the nb_db_transaction_save() function does nothing and the
"transaction_id" output parameter is left uninitialized. For
this reason, all northbound clients should initialize the
"transaction_id" argument before calling nb_candidate_commit() or
nb_candidate_commit_apply() (except when a NULL pointer is given,
which is the case of the confd and sysrepo plugins).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-14 16:32:23 -02:00
Renato Westphal
ec348d4344 lib: fix "may be used uninitialized" build warning
We are already handling all possible four cases from the "nb_event"
enumeration, so this problem can't happen in practice. Initialize the
"ref" variable to zero to silence the warning.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-14 16:30:39 -02:00
Renato Westphal
7fcb24bbaa zebra: reject routes without nexthops
Routes without nexthops don't make any sense, so we need to reject
them otherwise weird things can happen.

NOTE: blackhole routes aren't nexthop-less, they do have a single
nexthop of type NEXTHOP_TYPE_BLACKHOLE.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-14 15:58:26 -02:00
Renato Westphal
e4081c0e0b lib: add a few more sanity checks when encoding/decoding routes
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-01-14 15:58:26 -02:00