Commit Graph

4187 Commits

Author SHA1 Message Date
Mark Stapp
15869cd81d
Merge pull request #8035 from qlyoung/remove-more-sprintf
*: remove more sprintf()
2021-02-23 15:55:02 -05:00
Russ White
33d1282f3d
Merge pull request #8095 from idryzhov/fix-nb-stale-pointers
fix stale pointers in northbound nodes
2021-02-23 11:15:31 -05:00
Igor Ryzhov
2ada626940 lib: register dependency between control plane protocol and vrf nb nodes
When the control plane protocol is created, the vrf structure is
allocated, and its address is stored in the northbound node.
The vrf structure may later be deleted by the user, which will lead to
a stale pointer stored in this node.

Instead of this, allow daemons that use the vrf pointer to register the
dependency between the control plane protocol and vrf nodes. This will
guarantee that the nodes will always be created and deleted together, and
there won't be any stale pointers.

Add such registration to staticd and pimd.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-02-22 18:53:24 +03:00
Igor Ryzhov
09b150ef2a lib: add definitions for vrf xpaths
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-02-22 18:53:24 +03:00
Igor Ryzhov
f182d8d8a2 lib: add ability to register dependencies between northbound nodes
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-02-22 18:53:24 +03:00
Donald Sharp
5e8229578a lib: Reduce getrusage/monotime for event handling
When handling a large number of events at one time
FRR will call monotime and getrusage 2 times for each
event.  With this change modify the code to change
this to (X events / 2) + 1 calls of getrusage and monotime

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-02-22 09:20:33 -05:00
Emanuele Di Pascale
c364a0962b lib: fix c++ usage of zlog
Since some recent commit, building c++ code attempting to use zlog_debug
(or any other level) would fail with the following complaint:

lib/zlog.h:91:3: sorry, unimplemented: non-trivial designated
initializers not supported
   };
   ^
lib/zlog.h:105:26: note: in expansion of macro ‘_zlog_ref’
 #define zlog_debug(...)  _zlog_ref(LOG_DEBUG, __VA_ARGS__)

This is due to out-of-order initialization of the xrefdata struct
fields. Setting them all in the order in which they are defined
fixes the issue.

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2021-02-22 10:38:42 +01:00
Donald Sharp
f52aee04b3 lib: Free memory leak in error path in clippy
When running clippy, the main function in it's
error path could leak the memory pointed to by name.
Fix this.  This was/is reported by clang SA.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-02-20 07:40:01 -05:00
Quentin Young
0f3073387b lib: use right type for wconv() return val
Signed-off-by: Quentin Young <qlyoung@nvidia.com>
2021-02-19 11:58:11 -05:00
Donald Sharp
dc86ef74e6
Merge pull request #8079 from pjdruddy/pr-snmp-coverity
MPLSL3VPN snmp coverity fixes
2021-02-19 08:54:02 -05:00
Donald Sharp
c6b8506c6c
Merge pull request #8103 from mjstapp/fix_thread_awaken
lib: don't awaken from poll for every timer
2021-02-19 08:21:31 -05:00
Mark Stapp
e7d9e44b02 lib: pass the thread_master to process_timers()
Pass the thread_master pointer to process_timers() as we
do for other list-processing apis.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-02-18 09:42:03 -05:00
Mark Stapp
96fe578a64 lib: don't awaken from poll for every timer
Only ask the event-loop poll() to awaken if a newly-added timer
actually might have changed the required timeout. Also compute
timer deadline outside of mutex locks.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-02-18 09:42:03 -05:00
Mark Stapp
4322dea7e0 lib: remove unneeded arg from timer api
Timers are always type TIMER - remove 'type' arg from some
timer apis.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-02-18 09:42:03 -05:00
Mark Stapp
a582429008 lib: small code cleanup in thread.c
Fix an indentation in thread.c.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2021-02-18 09:41:38 -05:00
Quentin Young
4da4b9d4f1 lib: fix some misc SA warnings
- clippy.c: fix valid memleak
- defun_lex.l: suppress warnings in generated code
- northbound_cli.c: suppress warning in eldritch libyang macro

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
2021-02-17 17:01:06 -05:00
Pat Ruddy
5a224c19f1 bgpd, lib: add oid2in6_addr utility and use it
The existing code was using the oid2in_addr API to copy IPv6
addresses passing an IPv6 length. Create a utility to do this
properly and avoid annoying coverity with type checking.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-02-17 13:35:31 +00:00
David Lamparter
f1db813dbb *: fix format string SNAFUs
Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-16 00:47:51 +01:00
Donald Sharp
a6d1b6a043
Merge pull request #8075 from opensourcerouting/assorted-20210212
lib: bunch of random small fixes
2021-02-15 15:20:18 -05:00
David Lamparter
e0a5979d58 lib: fix CRNL causing empty prompt lines
CR, NL and CRNL are all OK, but CRNL shouldn't get treated as 2
newlines (which causes an empty command to be executed => empty prompt
line.)

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-15 01:29:44 +01:00
David Lamparter
ab699721a1 lib: stop parallel-passing vty_sock, detangle
The FDs are in struct vty, and there's ->fd and ->wfd, which shouldn't
be confused.  Passing vty_sock along separately just creates mixups.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-15 01:28:52 +01:00
Donald Sharp
97e21b4bd8 lib, bgpd: smux_trap return code is never used
The return code from smux_trap is never used.  If we have
never used it after all this time.  Remove the return from
the function.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-02-14 16:18:39 -05:00
David Lamparter
1d5453d607 *: remove tabs & newlines from log messages
Neither tabs nor newlines are acceptable in syslog messages.  They also
break line-based parsing of file logs.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-14 15:36:51 +01:00
Donatas Abraitis
44b0793e88
Merge pull request #8036 from qlyoung/disable-mallinfo
lib: support mallinfo2() if available
2021-02-13 10:46:15 +02:00
Quentin Young
78ae07dbca
Merge pull request #8039 from m-varasteh/master
[filter]: change return code for errors
2021-02-12 13:32:44 -05:00
David Lamparter
b6bc1ee8d3 lib: de-uglify -t option + log stdout combo
The logging code writes log messages with a `\n` line ending, meanwhile
the VTY code switches it so you need `\r\n`...

And we don't flush the newline after executing a command either.

After this patch, starting daemons like `zebra/zebra -t` should provide
a nice development/debugging experience with a VTY open right there on
stdio and `log stdout` interspersed.

(This is already documented in the man pages, it just looked like sh*t
previously since the log messages didn't newline correctly.)

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-12 19:29:36 +01:00
David Lamparter
877057b67a lib: have a lib_privs for ... lib privs
Logging code might want to raise privs for file operations.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-12 19:28:52 +01:00
David Lamparter
6e3253b979 lib: memorize what fds were open at startup
... in case the user does something like `zebra 3>logfile`.  Also useful
for some module purposes, maybe even feeding config at some point in the
future.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-12 19:28:22 +01:00
Quentin Young
51ab4dbaad lib: support mallinfo2()
mallinfo() is deprecated as of glibc 2.33 and emits a warning if used.
Support mallinfo2() if available.

Signed-off-by: Quentin Young <qlyoung@qlyoung.net>
2021-02-10 18:35:15 -05:00
Stephen Worley
3d26211e08
Merge pull request #7508 from sudhanshukumar22/zebra-vrf-delete
zebra: treat vrf add for existing vrf as update
2021-02-10 02:05:10 -05:00
Martin Winter
7a9c641d5c
Merge pull request #7917 from pjdruddy/l3vpn-mpls-snmp-upstream-1
L3vpn mpls snmp upstream 1
2021-02-10 01:37:58 +01:00
Quentin Young
7533cad751 *: remove more sprintf()
Should be just a couple non-development, non-test occurrences of this
function left now.

Signed-off-by: Quentin Young <qlyoung@qlyoung.net>
2021-02-09 15:40:40 -05:00
Igor Ryzhov
18e196f6fa vrf: use wrappers to change VRF_CONFIGURED flag
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-02-09 22:39:32 +03:00
Igor Ryzhov
966806294b vrf: mark vrf as configured when entering vrf node
The VRF must be marked as configured when user enters "vrf NAME" command.

Otherwise, the following problem occurs:

`ip link add red type vrf table 1`

  VRF structure is allocated.

`vtysh -c "conf t" -c "vrf red"`

  `lib_vrf_create` is called, and pointer to the VRF structure is stored
  to the nb_config_entry.

`ip link del red`

  VRF structure is freed (because it is not marked as configured), but
  the pointer is still stored in the nb_config_entry.

`vtysh -c "conf t" -c "no vrf red"`

  Nothing happens, because VRF structure doesn't exist. It means that
  `lib_vrf_destroy` is not called, and nb_config_entry still exists in
  the running config with incorrect pointer.

`ip link add red type vrf table 1`

  New VRF structure is allocated.

`vtysh -c "conf t" -c "vrf red"`

  `lib_vrf_create` is NOT called, because the nb_config_entry for that
  VRF name still exists in the running config.

After that all NB commands for this VRF will use incorrect pointer to
the freed VRF structure.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-02-09 21:38:45 +03:00
varasteh
b3511a7247 [filter]: change return code for errors
CMD_WARNING is replaced by CMD_WARNING_CONFIG_FAILED

Signed-off-by: varasteh <mahdy.varasteh@gmail.com>
2021-02-08 16:02:32 +03:30
Donald Sharp
37a74717c7 *: Fix usage of bfd_adj_event
Valgrind reports:

469901-==469901==
469901-==469901== Conditional jump or move depends on uninitialised value(s)
469901:==469901==    at 0x3A090D: bgp_bfd_dest_update (bgp_bfd.c:416)
469901-==469901==    by 0x497469E: zclient_read (zclient.c:3701)
469901-==469901==    by 0x4955AEC: thread_call (thread.c:1684)
469901-==469901==    by 0x48FF64E: frr_run (libfrr.c:1126)
469901-==469901==    by 0x213AB3: main (bgp_main.c:540)
469901-==469901==  Uninitialised value was created by a stack allocation
469901:==469901==    at 0x3A0725: bgp_bfd_dest_update (bgp_bfd.c:376)
469901-==469901==
469901-==469901== Conditional jump or move depends on uninitialised value(s)
469901:==469901==    at 0x3A093C: bgp_bfd_dest_update (bgp_bfd.c:421)
469901-==469901==    by 0x497469E: zclient_read (zclient.c:3701)
469901-==469901==    by 0x4955AEC: thread_call (thread.c:1684)
469901-==469901==    by 0x48FF64E: frr_run (libfrr.c:1126)
469901-==469901==    by 0x213AB3: main (bgp_main.c:540)
469901-==469901==  Uninitialised value was created by a stack allocation
469901:==469901==    at 0x3A0725: bgp_bfd_dest_update (bgp_bfd.c:376)

On looking at bgp_bfd_dest_update the function call into bfd_get_peer_info
when it fails to lookup the ifindex ifp pointer just returns leaving
the dest and src prefix pointers pointing to whatever was passed in.

Let's do two things:

a) The src pointer was sometimes assumed to be passed in and sometimes not.
Forget that.  Make it always be passed in
b) memset the src and dst pointers to be all zeros.  Then when we look
at either of the pointers we are not making decisions based upon random
data in the pointers.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2021-02-07 14:59:53 -05:00
Donald Sharp
fd5e11240c
Merge pull request #8004 from opensourcerouting/xref-cxx
lib/xref: fix C++ issues
2021-02-03 11:23:15 -05:00
David Lamparter
cbb1337a30 lib/xref: fix initializer order for C++
[v2: drop designated initializer names]

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-03 11:54:24 +01:00
David Lamparter
6c3aa850ea lib/xref: fix frrtrace() calls in thread code
This didn't exist yet when the xref code came around, and since
frrtrace() gets collapsed to nothing by the preprocessor when
tracepoints are disabled, it didn't cause any compiler errors...

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-03 00:55:07 +01:00
David Lamparter
08a73c422d lib/xref: work around GCC bug 41091
gcc fucks up global variables with section attributes when they're used
in templated C++ code.  The template instantiation "magic" kinda breaks
down (it's implemented through COMDAT in the linker, which clashes with
the section attribute.)

The workaround provides full runtime functionality, but the xref
extraction tool (xrelfo.py) won't work on C++ code compiled by GCC.

FWIW, clang gets this right.

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-03 00:55:07 +01:00
David Lamparter
96a7061450 lib/xref: restore lost extern "C" beginning
The `}` is still there, but the `extern "C" {` got lost somewhere,
probably in a rebase...

Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-03 00:54:59 +01:00
Igor Ryzhov
1ac88792c0 *: fix all backets
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2021-02-02 19:11:25 +03:00
Russ White
8f57f7413c
Merge pull request #6766 from opensourcerouting/xref
lib: xrefs - general cross-references & unique IDs
2021-02-02 07:44:21 -05:00
Pat Ruddy
4eb8c74f6c lib: allow traps with differently indexed objects
The function smux_trap only allows the paaasin of one index which is
applied to all indexed objects. However there is a requirement for
differently indexed objects within a singe trap. This commit
introduces a new function smux_trap_multi_index which can be called
with an array of indices. If this array is onf length 1 the original
smux_trap behaviour is maintained. smux_trap now calls the new
function with and index array length of 1 to avoid changes to
existing callers.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-02-02 09:37:14 +00:00
Pat Ruddy
62e66e55bf bgpd: add SNMP support for mplsL3VpnRte Table
Add MIB support for the route table in RFC4382

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-02-02 09:37:12 +00:00
Pat Ruddy
834182ba36 lib: add SNMP_OCTET macro
Add SNMP macro to allow a singe octet to be returned

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-02-02 09:37:11 +00:00
Pat Ruddy
8902dba642 lib: add IANA defines and IPv6 macro
Add defines for IANA SNMP routing protocol values
Add macro for returning an IPv6 address to the SNMP agent.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-02-02 09:37:10 +00:00
Pat Ruddy
4f13e83dcd lib: add utilities to encode/decode an int in SNMP oid
Add 2 functions to encode/decode intergers to/from SNMP OIDs. Make
sure oid is in network format.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-02-02 09:37:08 +00:00
Pat Ruddy
0760a74d2f lib: add utility to get the next index in a vrf
Add if_vrf_lookup_by_index_next to get the next ifindex in a vrf
given the previous ifindex or 0 for the first.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-02-02 09:37:08 +00:00
Pat Ruddy
0d020cd6d9 bgpd, lib: add mplsL3VpnVrf table
Add SNMP support for L3vpn Vrf table as defined in [RFC4382]
Keep track of vrf status for the table and for future traps.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
2021-02-02 09:37:06 +00:00