Commit Graph

4325 Commits

Author SHA1 Message Date
Donald Sharp
a2b0f8b803 lib: Convert stream.c to use new error code subsystem
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-09-06 20:50:58 +00:00
Donald Sharp
4496fbb36c lib: Convert sockopt.c to flog_err
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-09-06 20:50:58 +00:00
Donald Sharp
1b5e2f895a lib: Convert sockunion.c to use flog_err
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-09-06 20:50:58 +00:00
Donald Sharp
decbd92979 lib: Update zclient.c warn code
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-09-06 20:50:58 +00:00
Donald Sharp
29c7044c63 lib: Convert to errors some issues in buffer.c
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-09-06 20:50:58 +00:00
Donald Sharp
ffd9ac069c lib: Convert to flog_warn in agentx.c
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-09-06 20:50:58 +00:00
Quentin Young
2311712a62 lib: add flog_warn
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-09-06 20:50:58 +00:00
Biswajit Sadhu
6e23e5e9e1 lib: Ensure FRR detects running of the second instance of a FRR daemon, doesnot allow it to run.
Solution :
The following procedures would be performed :

1. Verify if the pid file for each daemon is present or not. If the file is not present, that means the
   daemon is getting instantiated for the first time. So let it go ahead.
   If the file is present proceed to point ‘2’.

2. Try fetching the properties of the pid file.

3. If it has RW lock, that means one instance of this the daemon is already running.
   So stop moving ahead and do exit() else let it go ahead.
Please note all above procedure happen at
   the initial state of daemon’s instantiation, much before it starts any session with other
   process/allocates resources etc.. and this verification do not have any impact of any
   operations done later, if the verification succeeds.

Signed-off-by: bisdhdh sadhub@vmware.com
2018-09-06 02:51:40 -07:00
Thibaut Collet
c3568c4d1a zebra/lib: code cleaning
Remove useless parenthesis and explicit cast.
Remove redundant code.

Signed-off-by: Thibaut Collet <thibaut.collet@6wind.com>
2018-09-06 07:48:12 +02:00
Donald Sharp
98ea5be8b3 lib: Add missing smux.h to make distrib results
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-09-05 20:58:50 -04:00
Christian Franke
103e4a718f zebra: add a ZEBRA_FLAG_ONLINK so that routes bypass the is-unnumbered check
For OpenFabric operation, we need to be able to install routes via
interfaces without any IPv4 addresses configured. Introduce a flag
ZEBRA_FLAG_ONLINK which upper protocols can set on a route they send
towards zebra, to force the nexthops to be considered onlink.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2018-09-05 11:38:13 +02:00
Christian Franke
7c0cbd0e88 fabricd: add new daemon as build of isisd
fabricd is built using the sources of isisd. To allow differentiation
in the code, -DFABRICD=1 is added to its preprocessor flags.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2018-09-05 11:38:12 +02:00
Donald Sharp
ba50512125 lib: Remove dead code
The ZEBRA_IPV4_ROUTE_IPV6_NEXTHOP_ADD zapi message has no creators and
no handlers.  Let's just remove.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-09-04 09:14:53 -04:00
David Lamparter
1fbd4e382a
Merge pull request #2945 from dslicenc/bgp-ospf-json
bgpd/ospfd: make bgp and ospf json response a bit more consistent
2018-09-01 05:05:30 +02:00
Quentin Young
04f04f0fa5
Merge pull request #2913 from opensourcerouting/non-recursive-prep
pre-final non-recursive make
2018-08-31 11:43:59 -04:00
David Lamparter
fc59d63c49
Merge pull request #2955 from ton31337/feature/nexthop_blackhole
plist: Add safety check to avoid going over 4294967295 for prefix-list
2018-08-31 17:33:40 +02:00
Donatas Abraitis
fbc7ead79c plist: Add safety check to avoid going over 4294967295 for prefix-list 2018-08-31 16:38:56 +03:00
Lou Berger
e93c6338f8
Merge pull request #2785 from donaldsharp/AGGanomics
Abstract `void *aggregate` pointer in `struct route_node`
2018-08-31 06:58:12 -04:00
Donald Sharp
c2b2356701 lib: Move aggregate pointer into aggregate route/table
Move the aggregate pointer from the route_node into agg_node
so that people using struct route_node will see a savings
in data size.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-30 17:47:59 -04:00
Donald Sharp
8e1f651213 lib: Add Aggregate Table and Aggregate_node
Add a abstraction for `struct route_node` and `struct route_table`
such that we can have an aggregate route_node and table.  This
is because only bgp/rfapi and ripng use the aggregate data pointer
in `struct route_node`.  For full route tables other routing
protocols and tables are paying a 8 byte overhead per node.
A full bgp table ends up being ~1.2 million routes in bgp
and zebra.  This is not an insiginificant amount of data.

So create the data structures for this replacement, but
do not replace the aggregate pointer yet.  This is because
later commits will convert rfapi and ripng over to this
new data, and finally we'll move the aggregate pointer.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-30 17:47:59 -04:00
Quentin Young
78b1bb5ff3 lib: sort route-maps for display
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-30 21:22:22 +00:00
Don Slice
94d4c685c5 bgpd/ospfd: resolve warnings for bgp/ospf json commit
Signed-off-by: Don Slice <dslice@cumulusnetwork.com>
2018-08-30 15:54:46 +00:00
Mark Stapp
c5e7bf3fa6 lib: fix use of frrpthread os_name
Fix test for presence of configured os pthread name.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2018-08-30 11:44:45 -04:00
David Lamparter
66a9aa8b88
Merge pull request #2859 from LabNConsulting/working/master/meminfo
lib: qmem show changes (header and max)
2018-08-30 16:44:47 +02:00
Thibaut Collet
379eb245f6 lib/if.c: fix CLANG warning
Fix CLANG warning:
Report for if.c | 2 issues
===============================================
< WARNING: else is not generally useful after a break or return
< #390: FILE: /tmp/f1-28557/if.c:390:

Signed-off-by: Thibaut Collet <thibaut.collet@6wind.com>
2018-08-30 16:29:06 +02:00
Don Slice
9f049418bc bgpd/ospfd: make bgp and ospf json response a bit more consistent
Problem reported that some bgp and ospf json commands did not return
any json output at all if the bgp/ospf instance did not exist.
Additionally, some bgp and ospf json commands did not return any json
output if the instance existed but no neighbors were defined.  This
fix makes these commands more consistent in returning empty braces for
json output and issue a message if not using json output.  Additionally,
made the flag "use_json" a bool to make it consistent since previously,
it had been defined as an int, char, u_char, and bool at various places.

Ticket: CM-21040
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-08-30 12:40:18 +00:00
Thibaut Collet
ee2f2c23ca zebra: fix crash when interface vrf changes
This crash occurs only with netns implementation.
vrf meaning is different regarging its implementation (netns or
vrf-lite)

- With vrf-lite implementation vrf is a property of the interface that
  can be changed as the speed or the state (iproute2 command: "ip link
  set dev IF_NAME master VRF_NAME"). All interfaces of the system are in
  the same netns and so interface name is unique.
- With netns implementation vrf is a characteristic of the interface
  that CANNOT be changed: it is the id of the netns where the interface
  is located. To change the vrf of an interface (iproute2 command to
  move an interface "ip netns exec VRF_NAME1 ip link set dev IF_NAME
  netns VRF_NAME2") the interface is deleted from the old vrf and
  created in the new vrf.
  Interface name is not unique, the same name can be present in the
  different netns (typically the lo interface) and search of interface
  must be done by the tuple (interface name, netns id).

Current tests on the vrf implementation (vrf-lite or netns) are not
sufficient. In some cases (for example when an interface is moved from
a vrf X to the default vrf and then move back to VRF X) we can have a
corruption message and then a crash of zebra.

To avoid this corruption test on the vrf implementation, needed when an
interface changes, has been rewritten:
- For all interface changes except deletion the if_get_by_name function,
  that checks if an interface exists and creates or updates it if
  needed, is changed:
    * The vrf-lite implementation is unchanged: search of the interface
      is based only on the name and update the vrf-id if needed.
    * The netns implementation search of the interface is based on the
      (name, vrf-id) tuple and interface is created if not found, the
      vrf-id is never updated.
- deletion of an interface (reception of a RTM_DELLINK netlink message):
    * The vrf-lite implementation is unchanged: the interface
      information are cleared and the interface is moved to the default
      vrf if it does not belong to (to allow vrf deletion)
    * The netns implementation is changed: only the interface
      information are cleared and the interface stays in its vrf to
      avoid conflict with interface with the same name in the default
      vrf.

This implementation reverts (partially or totally):
commit 393ec5424e ("zebra: fix missing node attribute set in ifp")
commit e9e9b1150f ("lib: create interface even if name is the same")
commit 9373219c67 ("zebra: improve logs when replacing interface to an
other netns")
Fixes: b53686c52a ("zebra: delete interface that disappeared")

Signed-off-by: Thibaut Collet <thibaut.collet@6wind.com>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-30 14:37:59 +02:00
Thibaut Collet
20c87e98d8 vrf: return vrf implementation for default vrf
To correct potential crash with netns implementation of vrf (see next
commit) it is necessary to allow any daemons to know the vrf
implementation whatever the vrf.
With current implementation the daemons do not know the vrf
implementation for the default vrf. For this vrf the returned vrf
implementation is always vrf-lite.
To solve this issue a netns name is set to the default vrf to just test
is presence to know the used implementation.

For zebra a netns name (if needed) is set in the vrf_init function just
before enabling the vrf. So this information is propagated to the other
daemons thanks the zapi message called when the vrf is enable at zebra
layer and override the default configuration (vrf-lite) of the daemon.

Signed-off-by: Thibaut Collet <thibaut.collet@6wind.com>
2018-08-30 14:37:55 +02:00
David Lamparter
9e53b31551 build: non-recursive doc + parallel sphinx
Sphinx actually does work with a parallel build, if the doctree creation
is a separate step (which the other builds will then just read
unmodified.)  This can be done with the "dummy" target.

This also adds "-j6" to sphinx-build and adds a "--disable-doc-html"
switch on ./configure to turn on/off building HTML docs separately.

Also, HTML docs are now installed by "make install" to
/usr/share/doc/frr/html.

Signed-off-by: David Lamparter <equinox@diac24.net>
2018-08-30 08:06:44 +02:00
David Lamparter
f177317a20
Merge pull request #2942 from mjstapp/fix_new_atomics
libs: fix missing atomics for some gcc versions
2018-08-30 08:04:29 +02:00
Chirag Shah
57019528a0 *: pthread set name abstraction
Testing Done:

 TOR#cat /proc/2670/task/2672/comm
 bgpd_ka

TOR# ps H -C bgpd -o 'pid tid cmd comm'
  PID   TID CMD                         COMMAND
  2670  2670 /usr/lib/frr/bgpd -M snmp - bgpd
  2670  2671 /usr/lib/frr/bgpd -M snmp - bgpd
  2670  2672 /usr/lib/frr/bgpd -M snmp - bgpd_ka

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2018-08-29 15:41:54 -07:00
Mark Stapp
1ed98c2db6 libs: fix missing atomics for some gcc versions
stdatomic.h does not have aliases for all of the useful gcc
atomic primitives; add them in for that path through
frratomic.h.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2018-08-29 15:39:19 -04:00
Philippe Guibert
2ed3953ccc lib: remove spurious message when netns is not available
remove spurious message when netns is not available.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-29 09:27:17 +02:00
David Lamparter
6e6b335d7f
Merge pull request #2932 from donaldsharp/ferr_fix
lib: Use the actual string we want to limit '===' line to
2018-08-29 06:06:53 +02:00
Lou Berger
7a153339b2 lib: atomic_add_fetch_explicit not supported on all platforms
Signed-off-by: Lou Berger <lberger@labn.net>
2018-08-28 19:22:37 -04:00
Lou Berger
13f1ba41a1 lib: qmem show changes (header and max)
add header to show qmem, align table with headers
     add tracking of max # allocs and max bytes alloc'ed

Signed-off-by: Lou Berger <lberger@labn.net>
2018-08-28 19:22:30 -04:00
Lou Berger
96487ee478
Merge pull request #2933 from mjstapp/more_atomics
libs: add atomic xxx_and_fetch apis
2018-08-28 16:30:21 -04:00
Donald Sharp
104ff5d777 lib: Use the actual string we want to limit '===' line to
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-28 14:36:44 -04:00
Mark Stapp
b086e4672a libs: add atomic xxx_and_fetch apis
We have the fetch_and_xxx apis, which return the _old_ value;
adding the xxx_and_fetch versions, which return the new value.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2018-08-28 12:48:58 -04:00
Philippe Guibert
4931a3659a lib: overwrite default vrf name upon zapi vrf add event
The default vrf name is overwritten, upon reception of zapi vrf event.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-28 16:23:50 +02:00
Philippe Guibert
eb6934d5c5 lib: avoid default vrf name memory allocation at startup
If default VRF is used, with standard naming convention,
memory allocation can be avoided.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-28 16:23:50 +02:00
Philippe Guibert
dd1147028a lib: protect newly created vrfs against default vrf naming.
Prevent from creating vrf, if the default vrf name is the same as the
vrf to be created.
Also, prevent at startup from creating default vrf with a name already
used in vrf list.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-28 16:23:50 +02:00
Philippe Guibert
fdafe17ee9 lib: set default vrf name at startup
For the daemons that do not use vrf_init(), the call to the define
will return a default vrf if no other values has been overriden.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-28 16:23:50 +02:00
Philippe Guibert
ecbc5a3781 *: add a vrf update hook to be informed of the vrf name
The Vrf aliases can be known with a specific hook. That hook will then,
from zebra propagate the information to the relevant zapi clients.
The registration hook function is the same for all daemons.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-28 16:23:50 +02:00
Philippe Guibert
723001fc13 lib: autocomple vrf list authorises default vrf name
Now it is possible to dump default vrf information by its name.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-28 16:23:50 +02:00
Philippe Guibert
c200f5e1e4 lib: offer an API to get and set default vrf name
The get API is used each time the VRF_DEFAULT_NAME macro is used.
The set API is not yet used.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-28 16:23:50 +02:00
Lou Berger
95d8c3ce78
Merge pull request #2898 from donaldsharp/vrf_bitmap_is_whack
lib: Convert vrf bit-map to a hash.
2018-08-26 07:49:46 -04:00
Donald Sharp
184ce1c5d1 lib: Cleanup uninted top variable in ferr.c
The `top` variable could possibly be used without
any initialization, remove the possibility.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-25 19:13:32 -04:00
David Lamparter
3535a785b8 lib: remove Linux 2.4 TCP-MD5 support
Linux 2.6.0 was released in December of 2003... I'm pretty sure we don't
need this Linux 2.4 support anymore.

Signed-off-by: David Lamparter <equinox@diac24.net>
2018-08-25 02:56:05 +02:00
Donald Sharp
0477276088 doc, lib, zebra: Remove deprecated encode and decode functionality
The ZEBRA_IPV4_ROUTE_[ADD|DELETE] and ZEBRA_IPV6_ROUTE_[ADD|DELETE] functionality
has been deprecated for a year now, let's remove this code from the system.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-24 10:56:15 -04:00
Donald Sharp
4a8bf85858 lib: Convert vrf bit-map to a hash.
Memory sizes of the vrf bit-map was insane for a system
with a moderate number of data on it:

Zebra:
VRF bit-map                   :        601   65536            39391944

Having a full 32bit integer bit space is problematically large,
switch over to a hash to store bit data.  We do not need to waste
so much space.

VRF bit-map                   :         13       8                 312

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-23 20:17:57 -04:00
Don Slice
fec4ca191e zebra: if multiple connecteds, select loopback or vrf if present
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-08-23 18:49:48 +00:00
David Lamparter
4251747330
Merge pull request #2894 from donaldsharp/thread_stuff
Thread stuff
2018-08-23 18:08:59 +02:00
Donald Sharp
6ed04aa2eb lib: Limit depth of unused thread list
The master->unused list was unbounded during normal operation.
A full BGP feed on my machine left 11k threads on the unused
list, taking up over 2mb of data.  This seemed a bit excessive,
reduce to a limit of 10.

Also fix a crash that this exposed where we assumed that a thread
structure was not deleted.

Future committers can make this configurable? or modify
the value to something better for their system.  I am
dubious of the value of this.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-23 09:23:46 -04:00
Donald Sharp
03548ae818 lib: Convert debug to error situation
This debug should be moved to an error situation since it's a
developmental escape that needs to be fixed.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-23 08:36:07 -04:00
Donald Sharp
496764bbfb lib: Remove default case statement from a enum driven switch
We are using a enum to drive a switch statement and we have
a default case statement that can never be entered because
we know all the enum states have been covered.  Remove it
from the code as that it cannot happen.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-23 08:36:07 -04:00
Donald Sharp
07436e2a52 lib: Remove zlog_warn from some places in buffer.c
zlog_warn was being used to inform user of impossible situations
or for normal operations.  Remove these from the code.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-23 08:36:07 -04:00
Donald Sharp
807ed4e9c0 lib: Remove smux option for snmp
The smux.c code has not been able to compile for 2+ years
and no-one has noticed. Additionally net-snmp has marked
smux integration as deprecated for quite some time as well.

Since no-one has noticed and it's been broken and smux integration
is deprecated let's just remove this from the code base.

From looking at the code, it sure looks like SNMP could use
a decent cleanup.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-23 08:36:07 -04:00
Donald Sharp
a6f235f341 lib: Seperate out Poll data from thread memory statistics
We were storing Poll data for the read and write
memory information in MTYPE_THREAD, so a show run
would not be able to show actual amount of memory
associated with the `struct thread`.

Remove unnecessary NULL checks on malloc.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-23 08:03:31 -04:00
Russ White
0a4ecf2729
Merge pull request #2886 from donaldsharp/stream_resize
Stream resize
2018-08-22 16:04:37 -04:00
David Lamparter
093033e7cc
Merge pull request #2892 from qlyoung/fix-log-ref-number-signedness
lib: error codes are uint32_t's
2018-08-22 21:21:40 +02:00
Quentin Young
10744c9c38 lib: error codes are uint32_t's
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-22 17:45:47 +00:00
Donald Sharp
1f063a699b
Merge pull request #2884 from opensourcerouting/assorted-20180821
assorted warning fixes
2018-08-22 08:17:32 -04:00
Donald Sharp
de75223eaf lib: Convert stream_new to use one malloc
Modify stream.c to have stream_new call one malloc call
instead of two.  Also change stream_resize_orig to
use stream_resize_inplace and to send an error
to the developer to switch over.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-22 07:58:54 -04:00
Donald Sharp
4388866917 lib: Add stream_resize_orig and stream_resize_inplace
Start setup for handling of stream_resize into old
and new functions.

Create a stream_resize_inplace function that takes
a double pointer to allow for a realloc operation
to return the possibly moved pointer.

Add a CONFDATE for removal as well.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-22 07:58:54 -04:00
Donald Sharp
46a67d2587
Merge pull request #2888 from pguibert6WIND/misc_fix_static_tableid
Misc fix static tableid
2018-08-22 07:40:14 -04:00
Philippe Guibert
3d4c0b49da lib: change vrf_is_mapped_on_netns API
The function handles not a vrf pointer instead of a vrf_id value.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-22 09:19:04 +02:00
David Lamparter
0e70e6c89d lib/bgpd: re-fix bgp_info_extra_free()
Make the wart slightly less bad... also there is still a possible write
after free here.  This needs to be fixed again, properly, by some
structure changes.

Signed-off-by: David Lamparter <equinox@diac24.net>
2018-08-22 06:32:43 +02:00
David Lamparter
bd27ea43e9 build: wrap "fallthrough" attr
This generates a warning on gcc versions before 7.0.

Signed-off-by: David Lamparter <equinox@diac24.net>
2018-08-21 20:34:58 +02:00
Quentin Young
dce2036b6a lib: fix deadlock in log.c
Daemons could deadlock when log file could not be opened during a log
rotation.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-21 15:15:38 +00:00
Philippe Guibert
b2111f08a5 lib: fix show error all
show error all was displaying 0 value for code, whereas real code value
was not displayed.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-08-21 11:10:40 +02:00
Russ White
4b0d7894cb
Merge pull request #2846 from donaldsharp/backet_data
Backet data
2018-08-16 11:32:41 -04:00
David Lamparter
55d3dad27c
Merge pull request #2448 from qlyoung/error-reference-cards
Error Reference Cards
2018-08-16 16:39:40 +02:00
Donald Sharp
1fae5ff24f lib: routemap.c trust backet->data
The backet->data cannot be NULL, no need to check for it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-15 17:53:09 -04:00
Donald Sharp
d3ce24ef57 lib: Update hash.h documentation
The hash_get function when called and the alloc_func returns
a NULL value, we do not create a backet nor do we insert
anything into the hash.  As such backet->data must always
be non-NULL.

Modify the description in hash_get to inform of this.
Additionally indicate that hash_walk and hash_iterate
cannot have a NULL backet->data value.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-15 17:53:09 -04:00
Donald Sharp
adf0e7c6d7 lib, ripngd, zebra: Remove pre-solaris 9 special cased code
The CMSG_FIRSTHDR was broken on solaris pre version 9.  Version 9
was released in May of 2002 and EOL'ed in 2014.  Version 8 EOL'ed
in 2012.  Remove special case code for a little used platform
that has not seen the light of day in a very long time.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-15 15:06:53 -04:00
David Lamparter
6bb30c2cba *: use frr_elevate_privs() (2/2: manual)
Signed-off-by: David Lamparter <equinox@diac24.net>
2018-08-14 20:02:05 +00:00
David Lamparter
6017c3a2e7 lib: add frr_elevate_privs() wrapper
Used as:
  frr_elevate_privs(&my_privs) {
    ... code ...
  }
and handles privilege raise/lower automatically in conjunction with the
C expression block.  This makes it impossible to accidentally exit a
function with privileges raised (and then running a whole bunch of other
code with privs.)

Signed-off-by: David Lamparter <equinox@diac24.net>
2018-08-14 20:02:05 +00:00
Quentin Young
09c866e34d *: rename ferr_zlog -> flog_err_sys
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Quentin Young
85cd2f9f9a *: rename ferr_ref -> log_ref
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
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
Quentin Young
fa8b3ca66a lib: remove still reachable blocks in ferr.c
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Quentin Young
af4d3437ce lib, vtysh: fixup style nits for error refs
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Quentin Young
164ffab251 *: remove \n from error code texts
Should be handled by pager

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Quentin Young
ed8841d3fb lib: add 'show error all json'
* Add 'all' option
* Add 'json' option

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Quentin Young
5ad4c39ce4 *: stop double initialization of ferr
* Stop double init of ferr
* Fixup bugs in zebra ferr
* Add missing init in ospfd

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Quentin Young
247dcce2b5 *: fix source file headers & includes for errcodes
* Use the correct license header
* Stop headers from including themselves
* Use uniform relative include conventions
* Ensure that sources include what they use
* Turn off clang-format around struct array blocks

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
b87478cb3e lib: Convert zlog_err for clippy build
The clippy code does not need to log the error messages
as errors as that it is only run as part of the build
itself and as long as we see the notifications we are good.

So convert zlog_err to zlog_notice so that we do not think
we have any zlog_err's in lib anymore

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
30b0312cc1 lib: Remove unnecessary zebra.h include
lib_errors.c does not need to include zebra.h, so remove

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
0f41a2628d lib: Fix Spelling mistake
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Quentin Young
43e52561b4 zebra, lib: error references for zebra
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
ad9921dbd8 lib: Update error ranges to include all daemons
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
8d619fba08 lib: Cleanup some missed LIB_ERR_SYSTEM_CALL
libfrr.c had some detection for system call issues.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
357743576d lib: Add LIB_ERR_ZMQ
Add new error event for when we detect an issue within
the ZMQ subsystem.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
472878dc0f lib: Add LIB_ERR_DEVELOPMENT
Sometimes a error state is detected when we have added
new code to FRR, but not updated all the places that
we should have.  Consider this a developmental escape
that needs to be fixed.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
674c3ca8a8 lib: Add LIB_ERR_NS to error subsystem
Add additional information about NameSpace errors that
may happen.

Signed-off-by: Donald Sharp <sharpd@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
Donald Sharp
220d736886 lib: Add LIB_ERR_SNMP
Add code to indicate a SNMP error of some sort that needs to be
handled and addressed.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
ab99c8e2b8 lib: Add LIB_ERR_VTY
Add a error code for when the vty subsystem detects
an error.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
481bc15ffc lib: Add LIB_ERR_SYSTEM_CALL and convert VRF_SOCKET to SOCKET
Add a new error code LIB_ERR_SYSTEM_CALL to the ferr subsystem.
Additionally convert LIB_ERR_VRF_SOCKET to a more generic
LIB_ERR_SOCKET.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
3ec8b5b898 lib: When logging commands do not use zlog_err
When we are logging a commands via the `log commands`
cli, use zlog_notice instead of zlog_err, since that
this is not an actual error situation.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com.
2018-08-14 20:02:05 +00:00
Donald Sharp
1ca3850c88 lib: Convert to zlog_ferr for zclient.c
Convert the zclient.c file to use zlog_ferr.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
b66d022e8d lib, bgpd: Add code to make lib auto create the ferr infrastructure
Add code to auto-create the ferr infrastructure as well as add
some initial error handling for vrf.c

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Donald Sharp
9023454067 lib: Allow adding arrays of ferr's
Simplify addition of new messages to the system by allow passage of
arrays of data, instead of one at a time.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Quentin Young
7b526b6168 lib: add error reference system
* Add zlog_* function to log with a reference code
* Add ability to track reference cards for errors to ferr.[ch]
* Assign some reference code ranges

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-14 20:02:05 +00:00
Quentin Young
94cb1f61a4
Merge pull request #2805 from opensourcerouting/malloc-size
lib: track total memory per MTYPE if possible
2018-08-14 11:43:39 -04:00
Donald Sharp
d6853655b5
Merge branch 'master' into bfd-final 2018-08-14 08:16:10 -04:00
Renato Westphal
91e5b43ab4 lib, vtysh: fix inconsistent interface commands in vtysh
The definition of the interface commands in vtysh.c were outdated.
Currently, all daemons that call if_cmd_init() will have the "no interface
IFNAME" command and the "[no] description" commands as well, so there's
no need to define exceptions for these commands anymore.

To fix this, make extract.pl parse the if.c file so that vtysh can get the
interface commands from there automatically. Only the "interface IFNAME
[vrf NAME]" must be kept in vtysh.c because it changes the vty node and
thus needs special treatment.

Finally, make pimd and pbrd display interface descriptions on "sh run"
when they are configured.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-08-13 18:59:31 -03:00
Renato Westphal
34c4627457 lib, vtysh: fix inconsistent VRF commands in vtysh
* Only zebra and pimd call vrf_cmd_init(), so these are the only daemons
  that should receive VRF commands from vtysh;
* "netns NAME" and "no netns NAME" are available only in zebra, write
  custom DEFSHs in vtysh to make it aware of that;
* Remove the "no vrf NAME" definition from vtysh.c and expose the
  original command to vtysh by converting the DEFUN_NOSH to a simple
  DEFUN. This command doesn't change the vty node so there's no need to
  special case it.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-08-13 18:59:31 -03:00
Renato Westphal
26d19c83b4 lib: implement DEFPY_NOSH
This is the DEFPY equivalent of DEFUN_NOSH.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-08-13 18:59:31 -03:00
Renato Westphal
9ea82f28d4 lib: add listnode_add_head()
Provide a new convenience function that adds an element to the beginning
of a list.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-08-13 18:59:31 -03:00
Donald Sharp
5cecdba9d1 lib: Remove memory check test
Found a missed memory check test that can just be removed.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-11 17:14:58 +02:00
Donald Sharp
0ce1ca805d *: ALLOC calls cannot fail
There is no need to check for failure of a ALLOC call
as that any failure to do so will result in a assert
happening.  So we can safely remove all of this code.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-11 17:14:58 +02:00
Rafael Zalamena
d3af6147a1 bfdd: re-route PTM-BFD daemon messages
When `bfdd` is enabled - which it is by default - re-route the PTM-BFD
messages to the FRR's internal BFD daemon instead of the external
PTM daemon.

This will help the migration of BFD implementations and avoid
duplicating code.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2018-08-08 18:25:04 -03:00
Rafael Zalamena
c2f29cf3d7 bfdd: add vty shell commands
Implement vty shell integration and allow `bfdd` to be configured
through FRR's vtysh.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2018-08-08 18:25:04 -03:00
Rafael Zalamena
8519fe88c9 lib: import new JSON iteration macro
Save a few lines when iterating over JSON objects using the new
JSON_FOREACH macro.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2018-08-08 18:01:20 -03:00
David Lamparter
572e26445a lib: fix "-t" command line option
was_stdio was getting set for fd == -1 (config file read), thus
prematurely closing the stdio vty.

Signed-off-by: David Lamparter <equinox@diac24.net>
2018-08-08 20:53:27 +02:00
David Lamparter
602a6584ee lib: count total memory allocation per MTYPE
If malloc_usable_size() or malloc_size() are available, we can count
total usage of a particular MTYPE.  (Without the functions, we don't
know how much to subtract on free.)

Signed-off-by: David Lamparter <equinox@diac24.net>
2018-08-08 20:17:55 +02:00
David Lamparter
fa896a1d80 build: rework mallinfo test & find malloc_size
Signed-off-by: David Lamparter <equinox@diac24.net>
2018-08-08 20:17:55 +02:00
Martin Winter
09890489cc
Merge pull request #2122 from donaldsharp/zebra_nhs
Create Staticd
2018-08-08 08:07:24 -07:00
Russ White
8455e19e54
Merge pull request #2764 from opensourcerouting/isis-srcdest
IS-IS dst-src routing support
2018-08-08 06:34:46 -04:00
Quentin Young
377e35655a bgpd: clean up evpn prefix debugging commands
* Fix memory leaks in debug commands
* Use CLI tokens to properly sanitize input
* Remove unnecessary error handling code from debug commands
* Remove unnecessary parameters from conf print functions

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-08-07 16:12:55 +00:00
Rafael Zalamena
46a9c3af89
Merge pull request #2775 from donaldsharp/stream_speedup
lib: Increase stream allocation speed.
2018-08-04 14:17:25 -03:00
Russ White
429a5ad722
Merge pull request #2758 from donaldsharp/pim_join
lib and pim silliness
2018-08-04 11:46:45 -04:00
Donald Sharp
8619629ada lib, bgpd, ospf6d, ospfd, pimd: Allow finish to cleanup a bit more
When calling route_map_finish, every place that we do we must
first set the deletion event to NULL, or we will create an infinite
loop, if we are using the delayed route-map application code.
As such we might as well just make the route_map_finish code
do this work, as that there is really no viable alternative here
and route_map_finish should only be called on shutdown.

This fixes an infinite loop in zebra on shutdown when there
are route-maps.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-03 08:22:45 -04:00
Christian Franke
321c1bbb94 isisd: make spf code dst-src aware
Take the source-prefix sub-TLV into consideration when running SPF
and support creation/deletion of dst-src routes as result.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2018-08-03 13:25:39 +02:00
Christian Franke
d43d2df5f3 isisd: learn and advertise IPv6 dst-src routes
Receive IPv6 dst-src routes from zebra and advertise them in our LSPs
if so configured.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2018-08-03 13:25:39 +02:00
Donald Sharp
565b5561ac lib: Increase stream allocation speed.
Modify stream_new in this way:

1) ALLOC allocations do not fail, they cause a crash so remove
if tests for it.

2) Modify usage of XCALLOC to XMALLOC and then hand set all the
relevant data in the stream pointer.

With this modification stream allocation of 10000000 streams at
10k bytes each reduced from on average 1.43 seconds to 0.65 seconds.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-02 14:57:44 -04:00
Donald Sharp
410a92bc2b lib: Fix vrf check output to only have 1 line
When we issue this command, we are getting:

robot# show ip route vrf green json
{}
% VRF green not found
robot# show ip route vrf green
% VRF green not found
% VRF green not found
robot#

Fix the command so it only displays one line of output
for json or non-json output.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-02 10:09:09 -04:00
Donald Sharp
9b864cd3cd lib: Ensure read/write fd's are in range
Ensure that we can properly handle a passed in read/write
fd for using in poll.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-01 19:41:47 +00:00
Donald Sharp
037f162fe9
Merge pull request #2766 from lyq140/branch1
ripd: null check key
2018-08-01 10:42:52 -04:00
lyq140
c4efb22479 ripd: null check key
Fix ripd crash of null pointer.
when authenticate a rip packet,
the key pointer or the key string pointer may be null,
the code have to return then.

Signed-off-by: lyq140 <34637052+lyq140@users.noreply.github.com>
2018-08-01 20:48:36 +08:00
Rafael Zalamena
dc094865db lib: fix getsockopt_cmsg_data retrieval
The `type` parameter was not being compared with `cmsg_type`, so the
result of this function was always a pointer to the first header
matching the level.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2018-08-01 09:42:16 -03:00
Jafar Al-Gharaibeh
0329ff96a9
Merge pull request #2753 from qlyoung/fix-zebra-shutdown-crash-2
Fix zebra shutdown crash: Round 3
2018-07-31 10:31:55 -05:00
Donald Sharp
fe64533ad9 lib: Set proper write file when using backup config
When we read in a backup file, we should save the original
host.config so that we can put it back to the correct original
location after we read in the backup config.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-07-29 12:43:23 -04:00
Donald Sharp
40ecd8e46d lib, zebra: Allow protocols to use Distance as part of RR semantics
Allow protocols to specify to zebra that they would like zebra
to use the distance passed down as part of determine sameness for
Route Replace semantics.

This will be used by the static daemon to allow it to have
backup static routes with greater distances.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-07-29 12:43:23 -04:00
Russ White
a31f28f9c2
Merge pull request #2728 from donaldsharp/table_cleanup
lib: Add parameter names as a hint of what is expected.
2018-07-29 08:24:38 -04:00
Lou Berger
6e6b03c0dc
Merge pull request #2742 from vangheem/master
fix json output when vrf not active
2018-07-28 10:29:10 -04:00
Nathan Van Gheem
ec1db5882d lib,zebra: fix json output when vrf1 when not active
When I did a show ip route with `json` on a vrf when it didn't exist,
frr would output invalid json.

Signed-off-by: Nathan Van Gheem <nathan@cumulusnetworks.com>
2018-07-27 10:17:03 -04:00
Donald Sharp
563f0c2b2d lib: Modify route unlock code to return appropriate pointer
Modify the unlock code for a route_node to return NULL on
pointer freed or to return the node itself again.

We'll need to go through the code and fix this pattern,
but this is a problem for another day.  Get this fix in
place and we can make it a low hanging problem to fix.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-07-27 09:54:39 -04:00
Quentin Young
a6275055bf lib: add cancel point to default pthread loop
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-07-26 00:40:52 +00:00
Donald Sharp
e070029078 lib: Add parameter names as a hint of what is expected.
Add some parameter names to functions in table.h to give a
clue as to what we expect people to pass in.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-07-25 15:16:02 -04:00
Russ White
bbc7adf1b4
Merge pull request #2665 from chiragshah6/evpn_dev
bgpd: support evpn nd ext community
2018-07-24 11:55:08 -04:00
Mark Stapp
123214efb8 libs, daemons: use const in route-map apply
Use 'const prefix *' in route-map apply apis; led to some
corresponding changes in several daemons.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2018-07-23 10:34:35 -04:00
Donald Sharp
c4aee4fe31
Merge pull request #2652 from LabNConsulting/working/master/confdate_cleanup
Simplify deprecation check
2018-07-23 08:46:26 -04:00
Christian Franke
ec40eaf94d lib/compiler.h: Always define CPP_NOTICE
On old compilers CPP_NOTICE should be a macro evaluating to an empty
statement, instead of being undefined.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2018-07-19 10:10:13 -04:00
Donald Sharp
d1a85fe40d
Merge pull request #2608 from pacovn/PVS-Studio_dead_code_1
eigrpd lib pimd zebra: dead code (PVS-Studio)
2018-07-19 08:50:01 -04:00
Chirag Shah
68e331515e bgpd: support evpn nd ext community
EVPN ND ext community support NA flag R-bit, to have proxy ND.

Set R-bit in EVPN NA if a given router is default gateway or there is a
local
router attached, which can be determine based on local neighbor entry.

Implement BGP ext community attribute to generate and parse  R-bit and
pass along zebra to program neigh entry in kernel.

Upon receiving MAC/IP update with community type 0x06 and sub_type 0x08,
pass the R-bit to zebra to program neigh entry.

Set NTF_ROUTER in neigh entry and inform kernel to do proxy NA for EVPN.

Ref:
https://tools.ietf.org/html/draft-ietf-bess-evpn-na-flags-01

Ticket:CM-21712, CM-21711
Reviewed By:
Testing Done:
Configure Local vni enabled L3 Gateway, which would act as router,
checked
show evpn arp-cache vni x ip <ip of svi> on originated and remote VTEPs.
"Router" flag is set.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2018-07-17 13:06:41 -07:00
Donald Sharp
51034b787f
Merge pull request #2595 from pguibert6WIND/fix_netlink_rx_route_vrfnetns
zebra: upon RTM_NEWROUTE/DELROUTE, find appropriate interface
2018-07-12 22:22:34 -04:00
Mark Stapp
86391e5659 zebra, libs: use const prefix ptrs in apis
Add 'const' to prefix args to several zebra route update,
redistribution, and route owner notification apis.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2018-07-11 09:22:49 -04:00
Lou Berger
308fea4ced lib: remove VERSION_TYPE_DEV from CONFDATE checks
Signed-off-by: Lou Berger <lberger@labn.net>
2018-07-10 16:19:37 -04:00
Mark Stapp
d826a734af libs: add ALL_NEXTHOPS_PTR iterator macro
Because sometimes we have a pointer to a nexthop_group.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2018-07-10 14:07:43 -04:00
Philippe Guibert
fda8229965 lib: remove if_lookup_by_index portion of code with unknown vrf
This function should be called with a known vrf_id. All other cases, the
other API should be called.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-07-10 17:32:40 +02:00
Rafael Zalamena
76f17a8cc4
Merge pull request #2630 from donaldsharp/hashables
revert hash_walk/iterate optimizations
2018-07-06 12:30:06 -03:00
Donald Sharp
8b52179d2a lib: Add some documentation
Add some documentation to hash_walk/iterate to tell people
to not do something stupid.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-07-06 10:18:50 -04:00
Donald Sharp
df66eb2eeb Revert "lib: A small optimization for the hash iterate and walk functions"
This reverts commit fc61644e440c875eefa222ab34d726c6281ca806.
2018-07-06 10:18:11 -04:00
Philippe Guibert
0faeba264e lib: add the pathname to get the realpath in case of failure
Sometimes, the file under /var/run/netns may not be authorised to be
read ( because it is not read permission for frr user, for instance).
so it is good to know what happened.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-07-06 08:51:54 +02: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
F. Aragon
b575a12c87
bgpd lib ospfd pimd ripngd: null chk (PVS-Studio)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-07-03 15:39:50 +02:00
Russ White
8d6d6b2581
Merge pull request #2475 from LabNConsulting/working/master/no_vrf_socket_4l3mdev
Don't open per vrf sockets when net.ipv4.tcp|udp_l3mdev_accept != 0
2018-07-01 23:06:22 -04:00
Russ White
1ad26882cb
Merge pull request #2517 from pguibert6WIND/flowspec_other_options
Flowspec support other options
2018-06-29 13:45:44 -04:00
Jafar Al-Gharaibeh
20e5fd7ab5
Merge pull request #2532 from donaldsharp/various_stuff
Redistribution and some extra developer debug code
2018-06-29 12:41:02 -05:00
F. Aragon
0866cdaf3e
bgpd: null check (Coverity 1453455)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-29 11:03:06 +02:00
Philippe Guibert
3bed236338 bgpd: add an icmp flag for flowspec icmp entries
Some values for icmp type/code can not be encoded like port source or
port destination. This is the case of 0 value that is authorized for
icmp.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 11:08:59 +02:00
Philippe Guibert
6f5617d877 bgpd: support for flowspec fragment list into policy routing
The flowspec fragment attribute is taken into account to be pushed in
BGP policy routing entries. Valid values are enumerate list of 1, 2, 4,
or 8 values. no combined value is supported yet.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 11:08:58 +02:00
Philippe Guibert
cfaf18ce52 bgpd: support for enumerate pkt len
The packet length can be injected from fs entry with an enumerate list;
the negation of the value is also taken into account.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 11:08:58 +02:00
Philippe Guibert
4977bd6c19 *: add flowspec dscp handling
Only one dscp value is accepted as filtering option.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 11:08:55 +02:00
Philippe Guibert
2e1f721e65 bgpd, lib: share flags values for iptable configuration
Those flags can be shared between BGP and Zebra. That is why
those flags are moved to common pbr.h header file.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Philippe Guibert
2da7d62e94 bgpd: support for flowspec tcp flags
Ability to handle flowspec tcp flags.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-28 08:52:15 +02:00
Donald Sharp
03ed85a6c0 lib, zebra: Add a bit of code to look at fifo
When in a dev build add a bit of code to track max
depth of a fifo and to allow zebra to report on it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-27 20:01:22 -04:00
Quentin Young
7f3ad069d7
Merge pull request #2570 from pacovn/Coverity_1448386_Untrusted_value_as_argument
lib: untrusted argument (Coverity 1448386)
2018-06-27 15:09:34 -04:00
paco
45ec351df2
lib: untrusted argument (Coverity 1448386)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-27 15:50:04 +02:00
paco
64268e1a12
lib: null check (2) (Coverity 1451361)
Additional correction to fa3016309b

Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-27 15:24:45 +02:00
Quentin Young
81ef2361a3
Merge pull request #2559 from pacovn/Coverity_1302503_Logically_dead_code
lib ospfd: dead code (Coverity 1302503 1302502)
2018-06-26 16:48:54 -04:00
paco
39050c7e0d
lib ospfd: dead code (Coverity 1302503 1302502)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-26 21:39:56 +02:00
Quentin Young
cf6bc77d28
Merge pull request #2503 from pacovn/Coverity_1469898_Uninitialized_scalar_variable
lib: uninitialized variable (2) (Coverity 1469898)
2018-06-26 11:35:58 -04:00
Quentin Young
c1802707e0
Merge pull request #2463 from pacovn/Coverity_1452539_Out-of-bounds_access
lib: out-of-bounds access (Coverity 1452539)
2018-06-26 11:34:31 -04:00
Renato Westphal
ec45d6c140
Merge pull request #2552 from qlyoung/remove-defun-deprecated
Remove DEFUN_DEPRECATED
2018-06-26 10:25:00 -03:00
Jafar Al-Gharaibeh
347e3c3d5f
Merge pull request #2548 from pacovn/Coverity_1453456_Unchecked_return_value_from_library
lib: check return value (Coverity 1453456)
2018-06-25 17:30:31 -04:00
paco
e339d7c04d
lib: check return value (Coverity 1453456)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-25 20:20:24 +02:00
Quentin Young
61cdcbdc02 lib: remove DEFUN_DEPRECATED
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-25 16:38:53 +00:00
Quentin Young
20d8a28413 *: remove deprecated 'log trap' commands
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-25 16:35:34 +00:00
paco
74e7158c06
lib: null check (Coverity 1470150)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-22 23:03:24 +02:00
Jafar Al-Gharaibeh
3a743cb7ec
Merge pull request #2520 from donaldsharp/privs_smivs
lib: Fix privs when using HAVE_CAPABILITIES
2018-06-22 14:19:13 -05:00
paco
a6a87d63d0
lib: uninitialized variable (2) (Coverity 1469898)
Previous correction (2c2d5cb397) was not enough,
so now it is ensured that the argument shift is not negative nor zero.

Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-22 21:18:35 +02:00
Lou Berger
ec446a4673
Merge pull request #2449 from donaldsharp/lib_delayed_read
Lib delayed read
2018-06-22 13:13:05 -04:00
paco
764f689bcf
lib: out-of-bounds access (Coverity 1452539)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-22 00:06:07 +02:00
Quentin Young
0a8990d5f8
Merge pull request #2501 from pacovn/infer_unused1
bgpd isisd ldpd lib ospfd pimd: redundancy (infer, grouped)
2018-06-21 15:12:33 -04:00
Quentin Young
390cc01007
Merge pull request #2511 from pacovn/Coverity_1452287_et_al_Explicit_null_dereferenced
ldpd, lib: null check (Coverity 1452287 and 20 alike)
2018-06-21 15:00:12 -04:00
paco
d1f92e454c
lib: null check (Coverity 1399277)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-21 17:35:38 +02:00
Donald Sharp
8e04538cae lib: Fix privs when using HAVE_CAPABILITIES
If your daemon does not need any special privileges
and you are compiling with HAVE_CAPABILIES, the
zprivs->change pointer will end up NULL due
to the way zprivs_caps_init.  So as a check
let's add a NULL check for zprivs->change
and set it to a function that will do nothing.

This change prevents a crash if you raise privileges
when your daemon needs no special privileges.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-21 11:22:51 -04:00
paco
e59294e2e4
ldpd lib: null check (Coverity 1452287 + 20 alike)
Coverity issues fixed with this commit:

1452287 1452291 1452307 1452310 1452317 1452321 1452327 1452330 1452331 1452336
1452337 1452340 1452352 1452354 1452358
(originated at ldpd/ldpd_vty_cmds_clippy.c)

1448388 1448390 1448392 1448397 1448404 1448408
(originated at lib/plist_clippy.c)

Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-21 12:31:57 +02:00
paco
a2b6e694b1
bgpd isisd ldpd lib ospfd pimd: redundancy (infer)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-20 22:25:28 +02:00
paco
fa3016309b
bgpd, lib: null check (Coverity 1436344, 1451361)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-20 19:14:01 +02:00
Russ White
418a4330c6
Merge pull request #2415 from qlyoung/pbr-table-range
PBR table range configuration + misc cleanups
2018-06-20 07:55:56 -04:00
Russ White
96be948bcd
Merge pull request #2495 from pacovn/fixme_all_digit
bgpd, lib, ospfd, zebra: all_digit moved to frrstr
2018-06-20 07:38:19 -04:00
Donald Sharp
46a69f10c0 bgpd, lib, zebra: Remove unnecessary return
The route_map_walk_update_list callback function
never uses the return code, so just remove it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19 21:22:46 -04:00
Donald Sharp
69f0272083 lib: Don't expose a function that is never used
route_map_clear_updated is only used by routemap.c,
don't expose it too be used by the outside world.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19 21:22:46 -04:00
Donald Sharp
7096e93875 bgpd, lib, pimd: Remove unused variable.
route_map_mark_updated has a `int del_later` variable
that is passed in but never used.  Just remove it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19 20:44:15 -04:00
paco
5d5ba0185d
bgpd, lib, ospfd, zebra: all_digit moved to frrstr
This solves a pending FIXME

Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-19 17:59:53 +02:00
Quentin Young
6e87c6e8e2
Merge pull request #2459 from pacovn/Coverity_1469898_Uninitialized_scalar_variable
lib: uninitialized variable (Coverity 1469898)
2018-06-19 11:15:13 -04:00
Donald Sharp
e9b4e74a78 lib: Add --log-level to daemons
Add the ability to specify the designated log level at startup.

--log-level <emergencies|alerts|critical|errors|warnings|notifications|informational|debugging>

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19 09:02:21 -04:00
Donald Sharp
9685abb492 lib: Remove special case code to use syslog
Remove the special case code to use syslog for Cumulus.
They can specify this via startup now instead of having
a special compile flag for this option.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19 08:43:59 -04:00
Donald Sharp
f8507817cf lib: Add new cli to specify where to output logs on startup
When we are starting a daemon, allow the user to specify:

--log <stdout|syslog|file:file_name>

This can be used on early startup to put the log files
where the end user wants them to show up.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19 08:43:59 -04:00
Donald Sharp
9e224e60db lib: Create a thread for reading in the cli
The read in of cli was happening prior to thread
event handling for non-integrated configs.  This
is interesting for 2 reasons:

1) Read-in of integrated configs was after thread
event loop startup, so we had a difference of behavior

2) Read-in can cause a series of events that cause
us to attempt to communicate with zebra.  The zebra
zapi connection only happens after the thread event
loop has been started.  This can cause data that
is being written down to zebra to be lost and
no real way to notice that this has happened and
to recover gracefully.

Modify the code to create a thread event for read
in of client config.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19 08:43:59 -04:00
Donald Sharp
573de11fab lib: Add ability to retry if backup is specified
If we fail to read in the config file and we have
specified a backup of the backup, attempt to
read that information.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19 08:43:59 -04:00
Donald Sharp
5ede5e4eed lib: Add ability to know if we have read anything in
When reading the config file add an ability to know
if we have properly read in anything.  So that a daemon
can make fallback plans.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-19 08:43:59 -04:00
Russ White
05d7e026c8
Merge pull request #2445 from ppmathis/feature/bgp-pg-overrides
bgpd: Improve peer-group override implementation
2018-06-19 08:20:31 -04:00
Russ White
8fef257611
Merge pull request #2465 from qlyoung/fix-build-am-cppflags-warning
tests: fixup minor autotools nit
2018-06-19 07:31:43 -04:00
Russ White
efd1d76673
Merge pull request #2474 from donaldsharp/vty_thread_cancel_writes
Add 'show thread poll'
2018-06-19 07:28:18 -04:00
Russ White
5e51ae9816
Merge pull request #2491 from pacovn/cppcheck_no_effect
eigrpd, isisd, lib, ospfd: no effect (cppcheck)
2018-06-19 07:15:07 -04:00
paco
6d10727ac1
eigrpd, lib, tests, vtysh: security (cppcheck)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-19 10:40:56 +02:00
paco
5f18adf01b
eigrpd, isisd, lib, ospfd: no effect (cppcheck)
Assignment of function parameter has no effect outside the function.

Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-19 10:19:05 +02:00
Lou Berger
ed892e530d
Merge pull request #2476 from pacovn/Coverity_1433544_Explicit_null_dereferenced
bgpd: null check (Coverity 1433544, 1433543, 1433542)
2018-06-18 16:59:26 -04:00
Donald Sharp
e8609f7950
Merge pull request #2484 from pacovn/cppcheck_unused_vars
eigrpd, lib: unused vars (cppcheck)
2018-06-18 15:27:11 -04:00
paco
2ec42b858c
babeld, lib, ospfd, tests: fmt fixes (cppcheck)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-18 17:52:56 +02:00
paco
029a775e43
eigrpd, lib, vtysh: unused vars (cppcheck)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-18 17:23:38 +02:00
paco
c37a11ad72
bgpd: null chk (Coverity 1433544 1433543 1433542)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-18 16:07:43 +02:00
Lou Berger
9dff113290 lib: don't open vrf specific socket when tcp|udp_l3mdev_accept != 0
Signed-off-by: Lou Berger <lberger@labn.net>
2018-06-17 21:10:24 -04:00
Donald Sharp
626e8d0a9b lib: A small optimization for the hash iterate and walk functions
When we are iterating through the hash, keep count of how many
we've called and if we have finished calling the hash->size
iterator times, then short-circuit and stop looping over
the entire array.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-16 20:09:45 -04:00
Donald Sharp
8872626bb4 lib, vtysh: Add 'show thread poll' command
Add a 'show thread poll' command that displays the
poll information and fd's setup.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-16 20:09:45 -04:00
Quentin Young
7cc0626c42 lib: ignore user CFLAGS when building Clippy
Unfortunately user CFLAGS causes #define conflicts with #defines in
Python development headers, which causes build failures under certain
platforms when using -Werror.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-15 18:35:53 +00:00
paco
2c2d5cb397
lib: uninitialized variable (Coverity 1469898)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-15 19:13:58 +02:00
Pascal Mathis
9fb964de21
bgpd: Implement group-overrides for peer flags
The current implementation of peer flags (e.g. shutdown, passive, ...)
only has partial support for overriding flags of a peer-group when the
peer is a member. Often settings might get lost if the user toys around
with the peer-group configuration, which can lead to disaster.

This commit introduces the same override implementation which was
previously integrated to support proper peer flag/attribute override on
the address-family level. The code is very similar and the global
attributes now use their separate state-arrays *flags_invert* and
*flags_override*.

The test suite for BGP peer attributes was extended to also check peer
global attributes, so that the newly introduced changes are covered. An
additional feature was added which allows to test an attribute with an
*interface-peer*, which can be configured by running `neighbor IF-TEST
interface`. This was introduced so that the dynamic runtime inversion of
the `extended-nexthop` flag, which is only enabled by default for
interface peers, can also be tested.

Last but not least, two small changes have been made to the current bgpd
implementation:

- The command `strict-capability-match` can now also be set on a
peer-group, it seems like this command slipped through while
implementing peer-groups in the very past.

- The macro `COND_FLAG` was introduced inside lib/zebra.h, which now
allows to either set or unset a flag based on a condition. The syntax
for using this macro is: `COND_FLAG(flag_variable, flag, condition)`

Signed-off-by: Pascal Mathis <mail@pascalmathis.com>
2018-06-14 18:55:18 +02:00
Rafael Zalamena
fbd3d404ae
Merge pull request #2434 from pacovn/Coverity_1457145_Out-of-bounds_access
lib: out-of-bounds access (Coverity 1457145)
2018-06-14 11:09:05 -03:00
Rafael Zalamena
d17840aa8a
Merge pull request #2437 from pacovn/Coverity_1436343_Dereference_after_null_check
lib: null check (Coverity 1436343)
2018-06-14 11:00:57 -03:00
Rafael Zalamena
ff456781b7
Merge pull request #2410 from pacovn/Coverity_1448806_Out-of-bounds_access
lib: Out-of-bounds access (Coverity 1448806, 1448810)
2018-06-14 10:29:35 -03:00
paco
4ac99370b0
lib: null check (Coverity 1436343)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-13 19:53:09 +02:00
Quentin Young
56c6f60c6b lib: fix missing includes in pbr.h
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-13 16:23:46 +00:00
Quentin Young
8c28c034dc pbrd, lib: move PBR_STR def. to lib
Per request

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-13 16:22:01 +00:00
paco
9eaec2ae4b
lib: out-of-bounds access (Coverity 1457145)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-13 17:08:38 +02:00
paco
f0ed6beaf2
lib: OoB access (Coverity 1448806, 1448810)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-12 19:26:13 +02:00
Jafar Al-Gharaibeh
e789c0337c
Merge pull request #2402 from qlyoung/germx-hand-sanitizer-kills-99-percent-of-germs
*: disable all sanitizers for clippy build
2018-06-12 11:11:55 -05:00
Donald Sharp
81030cc3f7
Merge pull request #2399 from pacovn/Coverity_1469894_Dereference_null_return_value
lib: null return value check (Coverity 1469894)
2018-06-12 11:50:18 -04:00
paco
9f227e4c91
lib: null return value check (Coverity 1469894)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-12 16:37:36 +02:00
Quentin Young
01491ab251
Merge pull request #2398 from pacovn/Coverity_1469895_Dereference_after_null_check
lib: null dereference (Coverity 1469895)
2018-06-11 16:27:42 -04:00
paco
8224c6cf9b
lib: null dereference (Coverity 1469895)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-11 20:02:58 +02:00
paco
883cc51dfe lib: fix sizeof expression (Coverity 1455482)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-08 19:32:21 +02:00
Quentin Young
e9f272a49e *: disable all sanitizers for clippy build
* Move configure flag propagations out of user flags
* Use AC_SUBST to transfer flag values to Automake
* Set default AM_CFLAGS and AM_CPPFLAGS in common.am and change child
  Makefiles to modify these base variables
* Add flag override to turn off all sanitizers when building clippy
* Remove LSAN suppressions blacklist as it's no longer needed

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-08 17:22:13 +00:00
Russ White
9eafc8abd7
Merge pull request #2298 from qlyoung/pipe-actions-vtysh
*: add support for `|` actions
2018-06-08 07:39:36 -04:00
Donald Sharp
ff44f57014 bgpd, lib, ospf6d, vtysh: fix possible snprintf possible truncation
With a new version of clang 6.0, the compiler is detecting more
issues where we may be possibly be truncating the output string.
Fix by increasing the size of the output string to make the compiler
happy.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-06-07 19:51:13 -04:00
Quentin Young
67c0ef6aab
Merge pull request #2345 from pguibert6WIND/issue_2328
lib: make netns command visible under vtysh
2018-06-06 19:21:49 -04:00
Quentin Young
0b42d81ab8 lib: fix output mangling with | include
Sometimes output would be mangled when filtering with include as a
result of the following bugs:

* Filters were applied per each call to vty_out() instead of buffering
  until a line break and then applying
* Long output would sometimes be cut due to using the wrong buffer
  pointer

Also remove the trailing \n as it should no longer be necessary to
ensure the vty prompt ends up on a new line.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-06 19:09:44 +00:00
Quentin Young
6ef6e4f053 lib: initialize vty->of
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-06 16:16:12 +00:00
Quentin Young
f428cb8a3a lib: add vector_compact(), use after str splits
* Add function to move all data to the start of a vector by shifting
  over contiguous empty slots
* Use this function to remove empty slots leftover after
  frrstr_filter_vec

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-06 16:16:12 +00:00
Quentin Young
5d806ec6e0 lib: fix static analysis issues, use regfree()
* Fix potential NULL dereference
* Fix use of uninitialized value
* Fix leaking memory by not freeing regex_t
* Fix extra \n when using empty regex filter
* Clean up still-reachable hook memory
* Handle nonexistent pager

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-06 16:16:12 +00:00
Quentin Young
62bece4449 lib: add vector_remove() to vector.[ch]
An optimized version of this has already been implemented within graph.c
that assumes some specialized constraints for that code. It's generally
useful so this change implements a general purpose version of it.

This fixes cmd_make_strvec() that was broken by some code shuffling in
previous commits.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-06 16:16:12 +00:00
Quentin Young
0a334343d1 *: style for | support
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-06 16:16:12 +00:00
Quentin Young
2cddf2fff7 vtysh: add | support
* Rewrite pager implementation
* Replace fprintf() with vty_out()
* Modify vty_out() for better vtysh support
* Remove static global outputfile var
* Remove fp argument from many vtysh functions
* Add some docs for stuff along the way

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-06 16:16:10 +00:00
Quentin Young
fe6b47b9e9 lib: add cli preprocessor for | actions
This patch adds a CLI preprocessor function that activates when `|` is
found in the command. This is the start of adding support for some text
processing utilities intended for inline use. The first one implemented
here is `| include`, which provides grep-like filtering of command
output.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-06 16:15:34 +00:00
Quentin Young
01e24c4a69 lib: add hook for preprocessing commands
This patch adds a hook point intended to allow subscribers to modify the
raw text of a CLI command before it is passed to the rest of the CLI
pipeline. To give access to the raw text of the command, a new function
for executing CLI has been defined whose only difference from
`cmd_execute_command` is that it accepts the command to execute as a
string rather than as a string vector.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-06 16:15:34 +00:00
Quentin Young
fe011935cd lib: add string utilities
I see lots of the same code being copy-pasted and slightly tweaked for
string processing all over the codebase. Time to start aggregating these
pieces into something consistent and correct.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-06 16:15:34 +00:00
Philippe Guibert
4a541e8c23 lib: make netns command visible under vtysh
Make netns command visible under vtysh.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-06-05 17:33:10 +02:00
Donald Sharp
dc8daeadaa
Merge pull request #2355 from opensourcerouting/fix-build-freebsd-snmp
build: append -std=gnu99 after SNMP_CFLAGS
2018-06-04 08:36:02 -04:00
Lou Berger
c9c70dd164 lib: fix setsockopt arg
Signed-off-by: Lou Berger <lberger@labn.net>
2018-06-04 13:13:15 +02:00
Renato Westphal
7aad159464 build: append -std=gnu99 after SNMP_CFLAGS
Programs that link to libnetsnmp must be compiled using a special set
of flags as specified by the "net-snmp-config --base-cflags" command
(whose output is stored in the SNMP_CFLAGS variable). The problem is
that "net-snmp-config --base-cflags" can output -std=c99 in addition to
other compiler flags in some platforms, and this breaks the build since
FRR souce code makes use of some GNU compiler extensions (e.g. allow
trailing commas in function parameter lists). In order to solve this
problem, append -std=gnu99 after SNMP_CFLAGS in all makefiles where this
variable is used. This way the -std=c99 flag will be overwritten when it's
present. Source files that don't link to libnetsnmp will be compiled using
either -std=gnu99 or -std=gnu11 depending on the compiler availability.

Fixes #1617.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-06-02 22:12:57 -03:00
Donald Sharp
2bb9eff45f bgpd, lib: Cleanup CI warnings from system
Make the CI system happy.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-05-30 07:48:21 -04:00
mitesh
50f74cf131 *: support for evpn type-4 route
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2018-05-30 07:48:20 -04:00
Donald Sharp
68542a6da6
Merge pull request #2142 from pguibert6WIND/fs_zebra_complement
Flowspec complement : port support and policy routing per interface and plugin wrapper
2018-05-29 11:33:00 -04:00
Christian Franke
c897c456d7 lib: make allocators work for allocation sizes of 0
Fixes: #2155
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2018-05-29 14:53:14 +02:00
Quentin Young
6fd8c487e1 lib: add proper doc comments for hash & linklist
* Remove references to ospf source files from linklist.[ch]
* Remove documentation comments from hash.c and linklist.c
* Add comprehensive documentation comments to linklist.h and hash.h

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-05-25 16:29:54 +00:00
Quentin Young
91f1037064 lib: add hash_to_list()
Convenience function to convert hash table to an unsorted linked list.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-05-25 16:16:22 +00:00
Quentin Young
3a5c3bcb17 lib: add list_sort(), list_dup()
* list_dup(): duplicates a linked list
* list_sort(): in-place sort of linked list w/ ascending quicksort

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-05-25 16:16:15 +00:00
Philippe Guibert
34d9d5be98 zebra: add pbr objects fail_remove value into notification
After PBR or BGP sends back a request for sending a rule/ipset/ipset
entry/iptable delete, there may be issue in deleting it. A notification
is sent back with a new value indicating that the removal failed.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-05-25 15:49:38 +02:00
Philippe Guibert
25d760c551 zebra: add 3 fields to ipset_entry : src,dst port, and proto
Those 3 fields are read and written between zebra and bgpd.
This permits extending the ipset_entry structure.
Combinatories will be possible:
- filtering with one of the src/dst port.
- filtering with one of the range src/ range dst port
usage of src or dst is exclusive in a FS entry.
- filtering a port or a port range based on either src or dst port.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-05-25 15:49:38 +02:00
Rafael Zalamena
05c6f6a3c2
Merge pull request #2101 from qlyoung/stream-fifo-safe
lib: add mt-safe variants for stream_fifo ops
2018-05-15 12:29:45 -03:00
Renato Westphal
f403d10280
Merge pull request #2133 from Fredi-raspall/fix_label_manager
Fix broken label manager (proxy-mode) and improve of proxy function
2018-05-15 10:00:12 -03:00
Pascal Mathis
4911ca9cab
lib: Moved no-password warnings into header file
The warning string which appears when the users executes 'no (enable)
password' was moved into command.h and declared as a constant named
'NO_PASSWD_CMD_WARNING'.

This avoids duplicate code and makes it easy to change the warning
message in all places at once.

Signed-off-by: Pascal Mathis <mail@pascalmathis.com>
2018-05-13 19:11:43 +02:00
Pascal Mathis
eb83f7ce84
lib: Improved warnings for 'no (enable) password'
When the user executes one of the commands 'no password' or 'no enable
password', a warning message gets shown to inform the user of the
security implications.

While the current implementation works, a warning message gets printed
once for each daemon, which can lead to seeing the same message many
times. This does not affect functionality, but looks like an error to
the user as it can be seen within issue #1432.

This commit only prints the warning message inside lib when vtysh
dispatch is not being used. Additionally, the warning message was copied
into the vtysh command handlers, so that they get printed exactly once.

Signed-off-by: Pascal Mathis <mail@pascalmathis.com>
2018-05-12 22:22:09 +02:00
Russ White
71ef4ee49a
Merge pull request #2132 from donaldsharp/missed_stuff
Missed stuff
2018-05-12 06:18:15 -04:00
Russ White
1b6e597cca
Merge pull request #2124 from donaldsharp/missed
bgpd, zebra: Handle EVPN router MAC per next hop
2018-05-12 06:16:02 -04:00
Pascal Mathis
322e2d5c69
lib: Ported 'no (enable) password' from stable/3.0
The pull request #1545 from @donaldsharp introduced the command 'no
password' to remove an existing terminal connection password.
Additionally, warnings have been added to both 'no password' and 'no
enable password' to make the user aware of any security implications.

It seems that this specific pull request was never merged against master
and got lost. This commit is a cherry-pick of d4961273cb with fixed
conflicts and updated documentation.

Thanks to @donaldsharp and @pogojotz for the original PR.

Signed-off-by: Pascal Mathis <mail@pascalmathis.com>
2018-05-11 02:54:30 +02:00
Russ White
ae57fcbfef
Merge pull request #2137 from mkanjari/evpn-addr-change
*: change struct evpn_addr to include a union of all evpn route types
2018-05-08 19:50:33 -04:00
Donald Sharp
914432b5eb lib: Fix bad function
Fix the decleration of a function to be better.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-05-08 19:33:07 -04:00
Donald Sharp
3518f35264 bgpd, lib, zebra: Cleanup formatting issues found
Cleanup the formating issues found.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-05-08 19:24:15 -04:00
Mitesh Kanjariya
f50dc5e607 zebra: remote RMAC for EVPN ipv6 hosts should be programmed against the ipv4 nexthop
For ipv6 host, the next hop is conevrted to ipv6 mapped address.
However, the remote rmac should still be programmed with the ipv4 address.
This is how the entries will look in the kernel for ipv6 hosts routing.

vrf routing table:
ipv6 -> ipv6_mapped remote vtep on l3vni SVI

neigh table:
ipv6_mapped remote vtep -> remote RMAC

bridge fdb:
remote rmac -> ipv4 vtep tunnel

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2018-05-08 19:24:15 -04:00
Daniel Walton
0204baa876 watchfrr always writes 'log syslog informational' to the config
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Dave Olson <olson@cumulusnetworks.com>

Ticket: CM-16501
2018-05-08 19:24:15 -04:00
Quentin Young
9f46cc36aa lib: move ip node above vrf node for config order
VRF static route commands adopt global static config if static config is
placed after a vrf context with no separator, workaround by always
writing static route config before vrf config

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-05-08 19:24:15 -04:00
vivek
22e63104d2 bgpd, zebra: Handle EVPN router MAC per next hop
Ensure that when EVPN routes are installed into zebra, the router MAC
is passed per next hop and appropriately handled. This is required for
proper multipath operation.

Ticket: CM-18999
Reviewed By:
Testing Done: Verified failed scenario, other manual tests
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2018-05-08 19:24:15 -04:00
Fredi Raspall
0313523d77 lib, zebra: fix formatting and style
Signed-off-by: Fredi Raspall <fredi@voltanet.io>
2018-05-08 18:37:05 +02:00
Quentin Young
363e24c651 lib: add mt-safe variants for stream_fifo ops
stream_fifo is used as our standard internal message queue. Message
queues are useful in multithreaded environments. Up until now I have
been doing my own synchronization when using stream_fifo in this way;
this patch gets rid of the need for that boilerplate and decreases the
risk of locking mistakes when working with this datastructure.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-05-07 11:37:07 -04:00
mitesh
3714a3853c *: change struct evpn_addr to include a union of all evpn route types
EVPN prefix depends on the EVPN route type.
Currently, in FRR we have a prefix_evpn/evpn_addr which relates to a evpn prefix.
We need to convert this to encompass an union of various EVPN route-types.

This diff handles the necessary code changes to adopt the new struct evpn_addr.

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2018-05-02 17:49:17 -07:00
Russ White
d437ae815d
Merge pull request #2073 from pguibert6WIND/bgp_fs_pbr
Bgp Flowspec Policy Based Routing
2018-05-02 18:54:11 -04:00
Don Slice
d4f368e15a lib: allow hostname to begin with a letter or number
Customers have requested the ability to name their devices starting
with a number instead of a letter.  This fix changes the check for
hostname to allow either a letter or a number.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-05-01 21:13:51 +00:00
Fredi Raspall
35cbe02a20 zebra, lib: Fix SA warning and formatting.
Signed-off-by: Fredi Raspall <fredi@voltanet.io>
2018-05-01 21:43:18 +02:00
Fredi Raspall
5dffb0e9aa zebra, lib: Add client proto & instance in zserv
Add client proto and instance number in all msg (request and
responses) to/form a label manager. This is required for a
label manager acting as 'proxy' (i.e. relaying messages towards
another label manager) to correctly deliver responses to the
requesting clients.

Signed-off-by: Fredi Raspall <fredi@voltanet.io>
2018-05-01 21:43:10 +02:00
Philippe Guibert
c16a0a62bc bgpd: handle configuration of iptables with zebra
The API for filling in an IPTABLE_ADD and IPTABLE_DELETE message.
Also, the API is handling the notification callback, so as to know if
zebra managed to add or delete the relevant iptable entry.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-04-30 11:56:23 +02:00
Donald Sharp
24512fbd1f lib: Convert internal sequence number to int64_t
With the usage of a 32 bit number as a integer, but storing
non-signed values in it, we have cases where numbers greater
than 2 billion are being read in and stored and used before
lower value numbers, which of course is awful and mean.

Fixes: #2126
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-29 12:45:20 -04:00
Donald Sharp
e11d84ad27 lib: convert plist data structures to using a bool
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-29 12:44:51 -04:00
Donald Sharp
e4694d0dcf lib: Convert true/false values to bool
route_maps are using some int's as true/false so
let's convert them over to a bool.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-28 19:52:41 -04:00
Renato Westphal
d90b2b73cb
Merge pull request #2125 from qlyoung/fix-gcc-build-command-graph
lib: fix clippy build w/ gcc under certain configs
2018-04-26 16:47:15 -03:00
Quentin Young
7cae98b292 lib: fix clippy build w/ gcc under certain configs
GCC's linker driver sometimes gets confused when building clippy.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-26 12:31:45 -04:00
vivek
a317a9b9a4 bgpd, zebra: Handle EVPN router MAC per next hop
Ensure that when EVPN routes are installed into zebra, the router MAC
is passed per next hop and appropriately handled. This is required for
proper multipath operation.

Ticket: CM-18999
Reviewed By:
Testing Done: Verified failed scenario, other manual tests
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2018-04-26 07:50:34 -04:00
Quentin Young
08a0e54efa lib: fix heap corruption in stream_fifo_free
When popping a stream from a stream_fifo, the stream->next pointer is
not NULL'd out. If this same stream is subsequently pushed onto a
stream_fifo (either the same one or a different one), because
stream_fifo's use tail insertion the ->next pointer is not updated and
thus will point to whatever the next stream in the first stream_fifo
was. stream_fifo_free does not check the count of the stream_fifo when
freeing its constituent elements, and instead walks the linked list.
Consequently it will continue walking into the first stream_fifo from
which the last stream was popped, freeing each stream contained there.
This leads to use-after-free errors.

This patch makes sure to set the ->next pointer to NULL when doing tail
insertion in stream_fifo_push and when popping a stream from a
stream_fifo.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-25 17:20:34 -04:00
Russ White
16ec3ea919
Merge pull request #2097 from qlyoung/show-cmdgraph
Show cmdgraph
2018-04-24 11:31:11 -04:00
Russ White
e0d9c8129c
Merge pull request #2099 from qlyoung/fix-cpu-thread-hist-race
lib: fix data race in thread history collection
2018-04-24 07:59:06 -04:00
Russ White
252ecb5c11
Merge pull request #2090 from qlyoung/graph-dfs
lib: add DFS + DOT dumping to graph datastructure
2018-04-24 07:53:09 -04:00
Donald Sharp
b51016ebb9 lib: Fix SA warning
The addr value will never be null because of the way we do the
cli, but the SA system doesn't understand this.  Add an assert
to make it happy.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-23 22:09:33 -04:00
Mark Stapp
81b8afcfb5 frrzmq: properly init args to zmq_getsockopt()
zmq read events get lost if zmq_getsockopt() silently fails in
frrzmq_check_events().

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2018-04-23 13:06:37 -04:00
Lou Berger
b2f6b81e7b
Merge pull request #2098 from qlyoung/fix-underline-buf-overflow
lib: fix dynamic stack buffer overflow
2018-04-23 11:01:34 -04:00
Quentin Young
26fbe47294 lib: add ability to dump cli mode graph
The grammar sandbox has had the ability to dump individual commands as
DOT graphs, but now that generalized DOT support is present it's trivial
to extend this to entire submodes. This is quite useful for visualizing
the CLI space when debugging CLI errors.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-22 17:14:55 -04:00
Quentin Young
8f2a4d3047 lib: add DFS + DOT dumping to graph datastructure
* Add general-purpose DFS traversal code
* Add ability to dump any graph to DOT language
* Add tests for graph datastructure

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-22 17:14:55 -04:00
Quentin Young
fbcac826c9 lib: fix data race in thread history collection
Thread statistics are collected and stored in a hashtable shared across
threads, but while the hashtable itself is protected by a mutex, the
records themselves were not being updated safely. Change all thread
history collection to use atomic operations.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-22 17:11:57 -04:00
Quentin Young
c0c22c2b05 lib: table.h needs to include prefix.h
For the last six years this source file has been using a type defined in
a header it did not include.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-22 17:08:09 -04:00
Quentin Young
4f113d6066 lib: fix dynamic stack buffer overflow
oops

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-20 16:40:46 -04:00
Russ White
9ae97474fe
Merge pull request #2086 from donaldsharp/zebra_capabilities
zebra: Add pass up through zapi what zebra is capable of handling
2018-04-20 08:06:54 -04:00
Russ White
5998141e07
Merge pull request #2051 from donaldsharp/PBRD_EXTRA
Pbrd extra
2018-04-20 07:54:30 -04:00
Quentin Young
58f8a9ecde lib: add DFS + DOT dumping to graph datastructure
* Add general-purpose DFS traversal code
* Add ability to dump any graph to DOT language
* Add tests for graph datastructure

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-19 13:04:58 -04:00
Jafar Al-Gharaibeh
2f77318e19
Merge pull request #2084 from donaldsharp/move_mpls
Move mpls
2018-04-18 15:53:17 -05:00
Quentin Young
6451e84664 lib: avoid writing to negative fd
Coverity #1399341

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-18 12:16:19 -04:00
Donald Sharp
09924cffad zebra: Add pass up through zapi what zebra is capable of handling
Zebra is starting to have some run-time capabilites that would be
useful to pass up to the higher level protocols so that they
can act in an appropriate manner when needed.

Send the ecmp value zebra is being run with and whether or not
we believe mpls is enabled in the kernel or not.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-18 11:10:27 -04:00
Donald Sharp
036fdaad9f lib, zebra: Move label conversion strings to lib
The mpls_label2str and mpls_str2label functions should not
be zebra exclusive functions.  Move them to lib/mpls.c

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-18 07:06:11 -04:00
Donald Sharp
f890b1461d lib, zebra: Move help string to appropriate header
The MPLS_LABEL_HELPSTR belongs in lib/mpls.h in case
any other protocol wants to use it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-18 07:00:12 -04:00
Donald Sharp
98cbbaea91 lib: Handle if up/down and vrf enable/disable events
Properly notice when we get if up/down and vrf enable/disable
events and attempt to properly install nexthops as they
come in.

Ticket: CM20489
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-17 18:44:33 -04:00
Donald Sharp
c57bd6bbe1 lib: Store nexthop information independently
Store Nexthop's as the incoming raw data.  This will allow
us to separate the act of inputting the cli from the
act of instantiating the cli.

Ticket: CM-20489
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-17 18:43:47 -04:00
Donald Sharp
ebee2bc4c5 lib: Clean up delete of a nexthop from a nexthop group
The delete was not properly deleting the nexthop from
the nexthop group and it was not properly setting the
nexthop's pointers to NULL.

Ticket: CM-20261
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-17 18:40:17 -04:00
Donald Sharp
cafec8da4f lib, pbrd: Do not allow v6 LL nexthops to be specified without an interface.
Prevent the creation of a v6 LL nexthop that does not include an interface
for proper resolution.

Ticket: CM-20276
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-17 18:40:17 -04:00
Lou Berger
170f8b90ba
Merge pull request #2064 from donaldsharp/redistribute_limitation
redristribute and access list
2018-04-17 15:55:35 -04:00
Quentin Young
c2fb17b549 lib: initialize imsg_hdr
Not fully initialized.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-17 13:58:24 -04:00
Philippe Guibert
0031a6bb2c lib: enhance pbr_rule structure for zapi encode and for common usage
The pbr_rule structure is derived from zebra_pbr_rule, and is
defined, so that a zclient will be able to encode the zebra_pbr_rule to
send ADD_RULE or DEL_RULE command. Also, the same structure can be used
by other daemons to derive a structure ( this will be the case for
zebra_pbr_rule).
Adding to this, an encoding function is defined, and will be used by
remote daemon to encode that message.
Those definitions are moved in new file pbr.h file.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-04-16 14:40:43 +02:00
Philippe Guibert
7abd6c4fa0 zebra: add IPTABLE_ADD and IPTABLE_DEL commands in zapi
Those messages permit a remote daemon to configure an iptable entry. A
structure is defined that maps to an iptable entry. More specifically,
this structure proposes to associate fwmark, and a table ID.
Adding to the configuration, the initialisation of iptables hash list is
done into zebra netnamespace. Also a hook for notifying the sender that
the iptables has been correctly set is done.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-04-16 14:40:43 +02:00
Philippe Guibert
425bdd6bf1 zebra: handling notifications upon ipset creation/destruction done
Once ipset entries are injected in the kernel, the relevant daemon is
informed with a zebra message sent back.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-04-16 14:40:43 +02:00
Philippe Guibert
d59c13af5c lib: add ZEBRA IPSET defines
ZEBRA IPSET defines are added for creating/deleting ipset contexts.
Ans also create ipset hash sets.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-04-16 14:40:16 +02:00
Philippe Guibert
7661461a3a zebra: handle entry pointfs for ipset creation/destruction
IPset and IPset entries structures are introduced. Those entries reflect
the ipset structures and ipset hash sets that will be created on the
kernel.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-04-16 14:40:16 +02:00
Donald Sharp
55a59585e1
Merge pull request #2055 from opensourcerouting/fix-pathspace
Fix pathspace option -N
2018-04-16 07:59:24 -04:00
Donald Sharp
a4f81f3178
Merge pull request #1950 from pguibert6WIND/issue_1949
VRF NETNS / add an indirection table for mapping NSID/VRFID
2018-04-16 07:51:31 -04:00
Renato Westphal
aecba4e88a
Merge pull request #2054 from qlyoung/sa-fixes
Static analyzer fixes
2018-04-15 19:10:50 -03:00
Renato Westphal
6b4fdc1cb1
Merge pull request #2036 from LabNConsulting/working/master/bgp-vpn-leak-labelmgr
bgpd: dynamic mpls label pool
2018-04-15 19:05:27 -03:00
Quentin Young
039c1e8d4f lib: add asserts on returned matcher vals
These asserts verify that the status correlates with the expected result
and fixes a clang-analyze warning.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-13 17:17:42 -04:00
Quentin Young
1ec890a76b lib: ignore cli lexer in clang-analyze
Lexer code is generated by Flex and we don't care about false positives
in it.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-13 17:17:42 -04:00
Donald Sharp
82557cf004 lib: Restrict redistribution cli a bit
The PBR and PIM daemons, needed the ability to connect
to zebra.  Unfortunately this connection also implied
an ability to redistribute to other valid protocols.

Add a additional hook to the route_types.pl script
to allow us to specify if the client type should
be redistributed at all.

Additionally cleanup the PIM code to not show up
as a protocol under the header for a 'show ip route'
command

Ticket: CM-20568
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-13 12:56:19 -04:00
Philippe Guibert
f0295a548a lib: rename parameter for netns function
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-04-13 16:40:32 +02:00
Philippe Guibert
1ea16e0937 lib: Update netns_linux.c
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-04-13 16:40:32 +02:00
Philippe Guibert
03aff2d848 zebra: add an indirection table for ns_id
This list "table" is created in the case the netns backend for VRF is
used. This contains the mapping between the NSID value read from the
'ip netns list' and the ns id external used to create the VRF
value from vrf context. This mapping is
necessary in order to reserve default 0 value for vrf_default.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-04-13 16:40:32 +02:00
Philippe Guibert
0c2bac3880 lib: a vrf is searched first by its name, than its vrf id
Because at startup, remote daemons attempt to create default VRF,
the VRF_ID may be set to unknown. In that case, an event will be
triggered later by zebra to inform remote daemon that the vrf id of that
VRF has changed to valid value. In that case, two instances of default
VRF must not be created. By looking first at vrf name, this avoids
having two instances.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-04-13 16:40:32 +02:00
G. Paul Ziemba
955bfd984f bgpd: dynamic mpls label pool
MPLS label pool backed by allocations from the zebra label manager.

A caller requests a label (e.g., in support of an "auto" label
specification in the CLI) via lp_get(), supplying a unique ID and
a callback function. The callback function is invoked at a later
time with the unique ID and a label value to inform the requestor
of the assigned label.

Requestors may release their labels back to the pool via lp_release().

The label pool is stocked with labels allocated by the zebra label
manager. The interaction with zebra is asynchronous so that bgpd
is not blocked while awaiting a label allocation from zebra.

The label pool implementation allows for bgpd operation before (or
without) zebra, and gracefully handles loss and reconnection of
zebra. Of course, before initial connection with zebra, no labels
are assigned to requestors. If the zebra connection is lost and
regained, callbacks to requestors will invalidate old assignments
and then assign new labels.

Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2018-04-11 23:18:28 -07:00
Lou Berger
0b984829be
Merge pull request #1989 from qlyoung/defpy-hidden
lib, python: DEFPY_ATTR, DEFPY_HIDDEN
2018-04-11 20:12:25 -04:00
Christian Franke
b39404c189 lib: fix pathspace option -N
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2018-04-11 22:14:56 +02:00
Russ White
058054cac1
Merge pull request #1903 from donaldsharp/PBRD
Pbrd
2018-04-11 09:06:45 -04:00
Quentin Young
e31f4dbec6
lib, python: DEFPY_ATTR, DEFPY_HIDDEN
Add support for element attributes in DEFPY macros.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-10 12:19:03 -04:00
Quentin Young
9428e08906
lib: add graph_find_node
Allows finding a graph node by its data pointer.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-06 17:59:39 -04:00
Quentin Young
811f859f17 lib: dont break display of nexthop-groups themselves
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-06 13:22:43 -04:00
Quentin Young
57cdafc411 lib, pbrd: rm extra space when displaying nexthop
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-06 13:22:43 -04:00
Quentin Young
d36d0d5771 lib: Add hash and use const a bit more intelligently
This commit adds code to notify the compiler that we
will not be changing the arguments to nexthop2str
and we expect thre return to be treated the same.

Additionally we add some code to allow nexthops to
be hashed to be used in a hash.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-06 13:22:43 -04:00
Donald Sharp
e5c83d9b31 pbrd: Add PBR to FRR
This is an implementation of PBR for FRR.

This implemenation uses a combination of rules and
tables to determine how packets will flow.

PBR introduces a new concept of 'nexthop-groups' to
specify a group of nexthops that will be used for
ecmp.  Nexthop-groups are specified on the cli via:

nexthop-group DONNA
  nexthop 192.168.208.1
  nexthop 192.168.209.1
  nexthop 192.168.210.1
!

PBR sees the nexthop-group and installs these as a default
route with these nexthops starting at table 10000
robot# show pbr nexthop-groups
Nexthop-Group: DONNA Table: 10001 Valid: 1 Installed: 1
	Valid: 1  nexthop 192.168.209.1
	Valid: 1  nexthop 192.168.210.1
	Valid: 1  nexthop 192.168.208.1

I have also introduced the ability to specify a table
in a 'show ip route table XXX' to see the specified tables.

robot# show ip route table 10001
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, P - PIM, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR,
       > - selected route, * - FIB route

F>* 0.0.0.0/0 [0/0] via 192.168.208.1, enp0s8, 00:14:25
  *                 via 192.168.209.1, enp0s9, 00:14:25
  *                 via 192.168.210.1, enp0s10, 00:14:25

PBR tracks PBR-MAPS via the pbr-map command:

!
pbr-map EVA seq 10
  match src-ip 4.3.4.0/24
  set nexthop-group DONNA
!
pbr-map EVA seq 20
  match dst-ip 4.3.5.0/24
  set nexthop-group DONNA
!

pbr-maps can have 'match src-ip <prefix>' and 'match dst-ip <prefix>'
to affect decisions about incoming packets.  Additionally if you
only have one nexthop to use for a pbr-map you do not need
to setup a nexthop-group and can specify 'set nexthop XXXX'.

To apply the pbr-map to an incoming interface you do this:

interface enp0s10
 pbr-policy EVA
!

When a pbr-map is applied to interfaces it can be installed
into the kernel as a rule:

[sharpd@robot frr1]$ ip rule show
0:	from all lookup local
309:	from 4.3.4.0/24 iif enp0s10 lookup 10001
319:	from all to 4.3.5.0/24 iif enp0s10 lookup 10001
1000:	from all lookup [l3mdev-table]
32766:	from all lookup main
32767:	from all lookup default

[sharpd@robot frr1]$ ip route show table 10001
default proto pbr metric 20
	nexthop via 192.168.208.1 dev enp0s8 weight 1
	nexthop via 192.168.209.1 dev enp0s9 weight 1
	nexthop via 192.168.210.1 dev enp0s10 weight 1

The linux kernel now will use the rules and tables to properly
apply these policies.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-06 13:22:43 -04:00
Russ White
dae77564e2
Merge pull request #2006 from qlyoung/remove-irdp-node
lib: remove IRDP_NODE
2018-04-04 20:52:45 -04:00
Russ White
fc429a30d5
Merge pull request #2002 from qlyoung/remove-undebug
bgpd, pim: remove undebug
2018-04-04 20:52:08 -04:00
Russ White
d2fe1ab813
Merge pull request #1998 from qlyoung/fix-vrf-keyword-walkup
lib, vtysh: vrf walkup bugfix
2018-04-04 20:51:02 -04:00
Russ White
93ffcb8aa8
Merge pull request #1979 from LabNConsulting/working/master/bgp-nht-labels
bgpd: nexthop tracking with labels for vrf-vpn leaking
2018-04-04 20:45:22 -04:00
G. Paul Ziemba
960035b2d9 bgpd: nexthop tracking with labels for vrf-vpn leaking
Routes that have labels must be sent via a nexthop that also has labels.
This change notes whether any path in a nexthop update from zebra contains
labels. If so, then the nexthop is valid for routes that have labels.

If a nexthop update has no labeled paths, then any labeled routes
referencing the nexthop are marked not valid.

Add a route flag BGP_INFO_ANNC_NH_SELF that means "advertise myself
as nexthop when announcing" so that we can track our notion of the
nexthop without revealing it to peers.

Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2018-04-04 10:00:23 -07:00
G. Paul Ziemba
db2fde34d3 lib/prefix.[ch]: add family2str()
Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2018-04-04 09:24:17 -07:00
Lou Berger
e24be24183 *: Only test CONFDATE when VERSION_TYPE_DEV defined
Signed-off-by: Lou Berger <lberger@labn.net>
2018-04-03 13:47:50 -04:00
Philippe Guibert
53397a95e3
Merge pull request #2010 from donaldsharp/ns_fixes
lib: Namespaces should only complain about failure if we have it
2018-04-03 17:14:42 +02:00
Quentin Young
aec1641e52
lib: remove IRDP_NODE
Unused

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-03 10:50:58 -04:00
Rafael Zalamena
5012c1b6ee
Merge pull request #2005 from qlyoung/remove-masc-node
lib: remove MASC_NODE
2018-04-02 17:55:44 -03:00
Quentin Young
ef7eec745d
bgpd, pim: remove undebug
This 'undebug' syntax is only used in 5 commands and serves no apparent
purpose.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-02 16:03:11 -04:00
Donald Sharp
290d80a720 lib: Namespaces should only complain about failure if we have it
Do not complain about failure to create a namespace if we
do not have any such thing going on.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-31 15:08:14 -04:00
Quentin Young
7d3ffd35ea
lib: remove MASC_NODE
Unused

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-30 17:45:41 -04:00
Quentin Young
f108d4873d
lib: remove SERVICE_NODE
Unused

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-30 16:29:51 -04:00
Quentin Young
16d6ea59d3
lib, vtysh: vrf walkup bugfix
Static route commands are now installed inside the VRF nodes. This has
quietly broken top-level static routes in certain scenarios due to
walkup logic resolving a static route configuration command inside
VRF_NODE first if the command is issued while in a CLI node lower than
VRF_NODE. To fix this VRF_NODE needs a special exit command, as has been
done for many other nodes with the same issue, to explicitly change the
vrf context to the default VRF so that when walkup resolves against the
VRF node it will configure against the default VRF as desired.

Of course this is a hack on top of a hack and the CLI walkup
implementation needs to be rewritten.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-30 13:14:34 -04:00
Russ White
5f047032e7
Merge pull request #1984 from donaldsharp/conf_date_master
lib: Remove backwards compatiblity at 1 year
2018-03-30 12:35:53 -04:00
jaydom
7c40bf391c bgpd: add flowspec feature
This work is derived from a work done by China-Telecom.
That initial work can be found in [0].
As the gap between frr and quagga is important, a reworks has been
done in the meantime.
The initial work consists of bringing the following:
- Bringing the client side of flowspec.
- the enhancement of address-family ipv4/ipv6 flowspec
- partial data path handling at reception has been prepared
- the support for ipv4 flowspec or ipv6 flowspec in BGP open messages,
  and the internals of BGP has been done.
- the memory contexts necessary for flowspec has been provisioned

In addition to this work, the following has been done:
- the complement of adaptation for FS safi in bgp code
- the code checkstyle has been reworked so as to match frr checkstyle
- the processing of IPv6 FS NLRI is prevented
- the processing of FS NLRI is stopped ( temporary)

[0] https://github.com/chinatelecom-sdn-group/quagga_flowspec/

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Signed-off-by: jaydom <chinatelecom-sdn-group@github.com>
2018-03-30 14:00:47 +02:00
Philippe Guibert
9a14899b0a lib: prefix support for flowspec
prefix structure is used to handle flowspec prefixes. A new AFI is
introduced: AF_FLOWSPEC. A sub structure named flowspec_prefix is
used in prefix to host the flowspec entry.
Reason to introduce that new kind is that prefixlen from prefix
structure is too short to all the flowspec needs, since NLRI can go over
0xff bytes.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-03-30 14:00:47 +02:00
Philippe Guibert
b98f77282b bgpd: add API to allocate a range of table identifiers
In BGP, doing policy-routing  requires to use table identifiers.
Flowspec protocol will need to have that. 1 API from bgp zebra has been
done to get the table chunk.
Internally, onec flowspec is enabled, the BGP engine will try to
connect smoothly to the table manager. If zebra is not connected, it
will try to connect 10 seconds later. If zebra is connected, and it is
success, then a polling mechanism each 60 seconds is put in place. All
the internal mechanism has no impact on the BGP process.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-03-29 09:20:01 +02:00
Philippe Guibert
75fb51c184 lib: add framework for allocating routing table identifier IDs
The library changes add 3 new messages to exchange between daemons and
ZEBRA.
- ZEBRA_TABLE_MANAGER_CONNECT,
- ZEBRA_GET_TABLE_CHUNK,
- ZEBRA_RELEASE_TABLE_CHUNK,
the need is that routing tables identifier are shared by various
services. For the current case, policy routing enhancements are planned
to be used in FRR. Poliy routing relies on routing tables identifiers
from kernels. It will be mainly used by the future policy based routing
daemon, but not only. In the flowspec case, the BGP will need also to
inject policy routing information into specific routing tables.
For that, the proposal is made to let zebra give the appropriate range
that is needed for all daemons.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-03-29 09:19:52 +02:00
Donald Sharp
5aec02e4d0 lib: Remove backwards compatiblity at 1 year
These macro's have existed for 1 year now and can be removed.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-28 16:20:02 -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
0c902ba575 zebra: handle the zebra netns delete notifications
Upon a 'ip netns del' event, the associated vrf with netns backend is
looked for, then the internal contexts are first disabled, then
suppressed.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-03-23 15:25:48 +01:00
Donald Sharp
18febdb05a
Merge pull request #1913 from LabNConsulting/working/master/bgp-vpn-leak-cli
bgpd: new vpn-policy CLI
2018-03-20 13:26:48 -04:00
G. Paul Ziemba
b9c7bc5ab0 bgpd: new vpn-policy CLI
PR #1739 added code to leak routes between (default VRF) VPN safi and unicast RIBs in any VRF. That set of changes included temporary CLI including vpn-policy blocks to specify RD/RT/label/&c. After considerable discussion, we arrived at a consensus CLI shown below.

The code of this PR implements the vpn-specific parts of this syntax:

router bgp <as> [vrf <FOO>]
    address-family <afi> unicast
        rd (vpn|evpn) export (AS:NN | IP:nn)
        label (vpn|evpn) export (0..1048575)
        rt (vpn|evpn) (import|export|both) RTLIST...
        nexthop vpn (import|export) (A.B.C.D | X:X::X:X)
        route-map (vpn|evpn|vrf NAME) (import|export) MAP

        [no] import|export [vpn|evpn|evpn8]
        [no] import|export vrf NAME

User documentation of the vpn-specific parts of the above syntax is in PR #1937

Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2018-03-19 22:13:43 -07:00
Donald Sharp
0acf4df095 lib, zebra: Signal the existence of labels on a nexthop for nht
When we are signaling to a client from zebra that a nexthop
has changed, include the labels on the nexthop as well.
Upper level protocols need to know if the labels exist
in order to make intelligent decisions about what to do.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-16 12:27:22 -04:00
paulzlabn
3f1224cd1a
Merge branch 'master' into working/master/bgp-vpn-vrf-leaking 2018-03-14 13:31:58 -07:00
Philippe Guibert
2f9fca6f81
Merge pull request #1863 from donaldsharp/more_nh_groups
More nh groups
2018-03-14 16:52:05 +01:00
Donald Sharp
c9a164dfb5 lib: Fixup strlcat and strlcpy to be a bit more descriptive
When I use these functions and am programming on linux I
always have to pull up a man page for these two functions
since they exist in *BSD land only.

Modify the name of the size variable to destsize on
pass in to give me the small hint I need to know
what to do.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-14 08:43:17 -04:00
Donald Sharp
1b7bce04d5 lib: Add the ability for other people to call a nexthop write line
Add code to allow nexthops to be written by people who are
interested in writing their own nexthop line.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-14 08:32:39 -04:00
Donald Sharp
d604266ced lib: Expose nhgc_find command
Expose to the world the nhgc_find command so that
interested parties can find a stored nexthop group.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-14 08:32:39 -04:00
Donald Sharp
3191919156 lib: Add nexthop-group cli
Add a nexthop-group cli:

nexthop-group NAME
  nexthop A
  nexthop B
  nexthop C
!

This will allow interested parties to hook into the cli for
nexthops.  Users can add callback functions for add/delete
of a nexthop group as well as add/delete of each individual
nexthop.

Future work( PBR and static routes ) will take advantage
of this.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-14 08:32:39 -04:00
Donald Sharp
9fb9dfd963
Merge pull request #1880 from pguibert6WIND/enforce_vrf_netns_enable
lib: enforce vrf netns if setns() returns ok
2018-03-14 07:51:38 -04:00
Renato Westphal
118c115620
Merge pull request #1831 from qlyoung/frr-pthread-fixups
lib: some frr_pthread fixes
2018-03-13 18:22:22 -03:00
Philippe Guibert
3bc34908e8 lib: privileges are granted to vty netns command
Vty commands that link netns context to a vrf is requiring some
privileges. The change consists in retrieving the privileges at the
vrf_cmd_init() called by the relevant daemon. Then use it.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-03-13 16:32:58 +01:00
Philippe Guibert
c1a0038782
Merge pull request #1806 from vivek-cumulus/evpn-ipv6-tenant-routing
*: EVPN symmetric routing for IPv6 tenant routes
2018-03-13 10:20:29 +01:00
Renato Westphal
18ba069322
Merge pull request #1860 from qlyoung/debug-mt-safe
lib: add convenience debugging macros
2018-03-12 23:34:51 -03:00
Renato Westphal
ecef81cea9
Merge pull request #1828 from qlyoung/zapi-cleanup
zebra: giant zapi cleanup
2018-03-12 22:43:05 -03:00
Quentin Young
abccc77544
tests: add unit test for zlog
Just tests zlog_hexdump right now

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-12 15:39:45 -04:00
Quentin Young
e049c5fcce
lib: fixup zlog_hexdump
* Allocate correct amount of memory
* Use snprintf() instead of sprintf()

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-12 15:39:34 -04:00
Quentin Young
41903a4074
lib, zebra: slight cleanup after rebase
Rebased zapi-cleanup, needs a bit of poking.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-12 14:57:06 -04:00
Quentin Young
107afcd10b
lib, zebra: clean up zapi nits
* Get correct data size when parsing VRF ids
* Move some vars into smaller scope

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-12 14:57:06 -04:00
Quentin Young
5530922ef7
lib: zclient.h style fixes
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-12 14:57:06 -04:00
Quentin Young
124ead27db
lib, zebra: use existing zapi header struct
Nobody uses it, but it's got the same definition. Move the parser
function into zclient.c and use it.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-12 14:57:06 -04:00
Quentin Young
3fc174e18c
tests: add unit test for zlog
Just tests zlog_hexdump right now

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-12 14:56:28 -04:00
Quentin Young
2cf63c3561
lib: fixup zlog_hexdump
* Allocate correct amount of memory
* Use snprintf() instead of sprintf()

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-12 14:47:50 -04:00
Quentin Young
688818844f
lib: add convenience debugging macros
* Add DEBUG*() macros

This set of macros allows you to write printf-like debugging lines that
automatically check whether a debug is on before printing. This should
eliminate the need for explicit checks in simple cases. For example:

	if (SUCH_AND_SUCH_DEBUG_IS_ON) {
		zlog_warn(...);
	}

Becomes:

	DEBUG(warn, such_and_such, ...);

Or, equivalently,

	DEBUGE(such_and_such, ...);

The levels passed to DEBUG are expanded into the names of zlog_*
functions, so the same zlog levels are available. There's also a set of
macros that have the level built into them; DEBUGE for errors, DEBUGW
for warnings, etc. Good for brevity.

* Add singular setting macros

Change the 'SET' macros to accept a boolean indicating whether the
provided bits should be set or unset, and map on/off macros to them.
Helps condense code where you already have a boolean condition that
tells you what you want to do as you can avoid writing the branch.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-12 11:17:02 -04:00
vivek
4e262455a2 Merge branch 'master' of https://github.com/frrouting/frr into evpn-ipv6-tenant-routing
Conflicts:
	bgpd/bgp_evpn.c
2018-03-10 04:03:41 +00:00
Quentin Young
2b1236a27e
*: globally ignore clippy-generated source
Tired of dealing with this

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-09 17:52:15 -05:00
G. Paul Ziemba
70172b1ca5 lib: fix comment in zclient.c
Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2018-03-09 16:42:40 -05:00
G. Paul Ziemba
9f36abf909 lib: Keep indent/clang happy
Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2018-03-09 16:42:40 -05:00
G. Paul Ziemba
c8ff868c1a lib: add new BGP VPN policy command node
Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2018-03-09 16:40:37 -05:00
G. Paul Ziemba
51ade3a27f lib: add BGP VPN route type
Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2018-03-09 16:40:37 -05:00
Quentin Young
b1087f3507
lib: frr_pthread int size nits
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-09 11:20:53 -05:00
Donald Sharp
b6c5d34354 lib, zebra: Add Rule insertion success/failure messages
Add code to allow rule insertion notifications to be
sent back up the stack.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-09 11:11:40 -05:00
Donald Sharp
e16abbb303 lib, zebra: Add rule encoding
Add some code to pass the rule we want installed into
the kernel.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-09 11:07:41 -05:00
Donald Sharp
dba32923eb lib, vtysh: Start cli for nexthop-group
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-09 11:07:41 -05:00
Donald Sharp
7ee30f288e lib: Isolate nexthop_group functions to nexthop_group.c
Also modify `struct route_entry` to use nexthop_groups.
Move ALL_NEXTHOPS loop to nexthop_group.h

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-09 11:07:41 -05:00
Donald Sharp
ba1849ef8c lib, zebra: Allow zapi to send down the tableid
Allow the calling daemon to pass down what table-id we
want to use to install the route.  Useful for PBR.

The vrf id passed must be the VRF_DEFAULT else this
value is ignored.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-09 11:07:41 -05:00
Donald Sharp
e208c8f943 bgpd, lib, zebra: Switch to work_queue_free_and_null
The work_queue_free function free'd up the wq pointer but
did not set it too NULL.  This of course causes situations
where we may use the work_queue after it is freed.  Let's
modify the work_queue to set the pointer for you.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-09 11:07:41 -05:00
Renato Westphal
c67667e74c
Merge pull request #1808 from qlyoung/debug-mt-safe
MT-safe debug facilities
2018-03-09 11:25:37 -03:00
Donald Sharp
5e54c60269 *: Add code to notify on route removal status
If a interested party removes one of it's routes let
it know that it has happened as asked for.

Add a ZAPI_ROUTE_REMOVED to the send of the route_notify_owner
Add a ZAPI_ROUTE_REMOVE_FAIL to the send of the route_notify_owner

Add code in sharpd to notice this and to allow it to keep
track of routes removed for that invocation and give timing
results.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-08 19:50:06 -05:00
Chirag Shah
0c74bbe03e ospfd: Treat vrf interface as loopback type
Ticket:CM-19914

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2018-03-08 13:15:58 -08:00
Donald Sharp
db4a24ddc1 lib: Increase zapi buffer size
The buffer size is currently 4k.  Increase x4 times to allow for bigger
messages to be sent over the zapi.

The current size sufficient for most cases, but there are a couple
of cases with installing data to the kernel ip rules where we will
quickly hit this 4k size limit.  I forsee flowspec getting close
to this limit as well.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-03-07 14:37:58 -05:00
Donald Sharp
54085eafeb
Merge pull request #1428 from LabNConsulting/working/master/indent
frr: conform with COMMUNITY.md formatting rules
2018-03-07 10:44:37 -05:00
Donald Sharp
4e48b44f19
Merge pull request #1840 from pguibert6WIND/issue_1829
Misc BGP VRF fixes
2018-03-06 21:24:25 -05:00
vivek
bfd498f0da Merge branch 'master' of https://github.com/frrouting/frr into evpn-ipv6-tenant-routing
Conflicts:
	zebra/zserv.c
2018-03-06 22:19:24 +00: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
Lou Berger
e894f9fd92 lib: change comment block to #define to avoid indent.py from breaking comment
due to DEFUN within comment

Signed-off-by: Lou Berger <lberger@labn.net>
2018-03-06 13:59:05 -05:00
Philippe Guibert
c214a6e928 lib: NS_DEFAULT wrong value
The NS_DEFAULT value returns UNKNOWN in the case the vrf lite backend is
used, whereas this is wrong. This commit fixes the default value.
Also, it fixes the default value in the case NETNS support from system
is not ok, or some error can occur when reading default NS at startup.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-03-06 18:18:32 +01:00
Renato Westphal
defd0965f4
Merge pull request #1811 from donaldsharp/nht_send_type
lib, zebra: Add type and instance to nexthop update message
2018-03-06 13:48:40 -03:00
Philippe Guibert
6dfe83b8f7
Merge pull request #1728 from mkanjari/evpn-bug-fixes
Evpn bug fixes
2018-03-06 17:27:10 +01:00
Quentin Young
985e36a609
lib: frr_pthread.c style
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-06 11:03:00 -05:00
Quentin Young
d8a8a8de00
lib: some frr_pthread fixes
* Use atomic fixed-width thread identifiers
* Add ability to change thread name at runtime

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-05 18:04:54 -05:00
Quentin Young
aea03ad6e8
lib: add mt-safe debugging facilities
The current strategy for fine-grained debugging across FRR is to use
static long int bitfields, in combination with helper macros that are
copy-pasted between daemons, to hold state on what debugging information
should be collected at any given time. This has a couple of problems:

* These bitfields are generally extern'd and accessed everywhere, so
  they are not MT-safe or easy to make MT-safe
* Lots of code duplication from copy-pasting the DEBUG_* macros...
* Code duplication because of the "term" vs "conf" debugging concept

This patch aims to remedy that by providing some infrastructure to work
with debugs. The core concept of using bitfields has been retained, but
the number of these for each debug has been reduced to 1. This allows
easy use of lock-free methods for synchronizing access to debugging
info.

The helper macros have also been retained but they are now collected in
one place and perform exclusively atomic operations.

Finally there is a bit of code that allows daemons to register
callbacks, which I used to implement a command that will toggle all
debugging for any daemons that use these facilities.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-01 15:01:25 -05:00
vivek
558283638b lib, zebra: Fix warnings
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2018-03-01 19:50:46 +00:00
Donald Sharp
05dd5aaf02 lib, zebra: Add type and instance to nexthop update message
Add the originating routes type and instance to the nexthop
update message.  This is necessary because there exist
scenarios where BGP needs to make a decision about the
originating route type and instance to know if it is
going to be doing a route replace to a route that would
resolve to itself.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-28 19:22:47 -05:00
Donald Sharp
4ca997a8f8 lib: Use STREAM_GET
The addition of some rmac code snuck in the usage of a
stream_get instead of a STREAM_GET()

We need to be using STREAM_GET()

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-28 18:53:44 -05:00
Quentin Young
f765d422d1
lib: add atomic bitwise OR, AND
* Add support for C11 bitwise OR & AND operations
* Add atomic versions of bitfield macros

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-02-28 16:50:49 -05:00
vivek
1ec31309bb *: EVPN symmetric routing for IPv6 tenant routes
Implement support for EVPN symmetric routing for IPv6 routes. The next hop
for EVPN routes is the IP address of the remote VTEP which is only an IPv4
address. This means that for IPv6 symmetric routing, there will be IPv6
destinations with IPv4 next hops. To make this work, the IPv4 next hops are
converted into IPv4-mapped IPv6 addresses.

As part of support, ensure that "L3" route-targets are not announced with
IPv6 link-local addresses so that they won't be installed in the routing
table.

Signed-off-by: Vivek Venkatraman vivek@cumulusnetworks.com
Reviewed-by: Mitesh Kanjariya mitesh@cumulusnetworks.com
Reviewed-by: Donald Sharp sharpd@cumulusnetworks.com
2018-02-28 02:07:23 +00:00
Russ White
8bc92a3ec7
Merge pull request #1799 from donaldsharp/route_notify_owner
Route notify owner
2018-02-27 08:32:42 -05:00
Mitesh Kanjariya
00cbfad6de
Merge branch 'master' into evpn-bug-fixes 2018-02-27 02:47:36 -08:00
Philippe Guibert
281da0a94d lib: do not use ENOSYS errno when returning from ns
ENOSYS should not be used for other goals.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
c485b14bdc lib: netns checkstyle fix
A space is appended between RB_FOREACH and ' ', to comply with style
practiced in frr.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
a2c999f21f lib: add debug guard for ns informational traces
Informational traces are being added.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01: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
e26aedbe0b lib: split logicalrouter and vrf netns feature
This split is introducing logicalrouter.[ch] as the file that contains
the vty commands to configure logical router feature. The split has as
consequence that the backend of logical router is linux_netns.c formerly
called ns.c. The same relationship exists between VRF and its backend
which may be linux_netns.c file.
The split is adapting ns and vrf fiels so as to :
- clarify header
- ensure that the daemon persepctive, the feature VRF or logical router
  is called instead of calling directly ns.
- this implies that VRF will call NS apis, as logical router does.

Also, like it is done for default NS and default VRF, the associated VRF
is enabled first, before NETNS is enabled, so that zvrf->zns pointer is
valid when NETNS discovery applies.

Also, other_netns.c file is a stub handler that will be used for non
linux systems. As NETNS feature is only used by Linux, some BSD systems
may want to use the same backend API to benefit from NETNS. This is what
that file has been done.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
2e0d2b3d9c lib: add two APIs to handle socket operations with VRF NETNS
The vrf_sockunion_socket() wraps sockunion_socket() with vrf_id as
additional parameter. The creation of socket forces the user to
transparently move to new NETNS for doing the operation.
The vrf_getaddr_info() wraps getaddr_info() with vrf_id as additional
parameter. That API relies on the underlying system. Then there may be
need to switch to an other netns in that case too.
Also, the vrf_socket() implementation is simplified.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
e9e9b1150f lib: create interface even if name is the same
For supporting vrf based on namespaces, it is possible that an interface
with the same index is present. This is the case for loopback
interfaces. For that, for each query, if the interface is not found
, matching the vrf identifier, then a new interface is created, when the
backens for VRF is NETNS.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
ec31f30d28 zebra: upon startup, a NSID is assigned to default netns
when the netns backend is selected for VRF, the default VRF is being
assigned a NSID. This avoids the need to handle the case where if the
incoming NSID was 0 for a non default VRF, then a specific handling had
to be done to keep 0 value for default VRF.
In most cases, as the first NETNS to get a NSID will be the default VRF,
most probably the default VRF will be assigned to 0, while the other
ones will have their value incremented. On some cases, where the NSID is
already assigned for NETNS, including default VRF, then the default VRF
value will be the one derived from the NSID of default VRF, thus keeping
consistency between VRF IDs and NETNS IDs.
Default NS is attempted to be created. Actually, some VMs may have the
netns feature, but the NS initialisation fails because that folder is
not present.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
ce1be3692f lib: provide an API to switch from one netns to an other
Two apis are provided so that the switch from one netns to an other one
is taken care.
Also an other API to know if the VRF has a NETNS backend or a VRF Lite
backend.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
4691b65ae4 lib: add namespace name structure in zebra message
The addition of the name of the netns in the vrf message introduces also
a limitation when the size of the netns is bigger than 15 bytes. Then
the netns are ignored by the library.
In addition to this, some sanity checks have been introduced. some
functions to create the netns from a call not coming from the vty is
being added with traces.
Also, the ns vty function is reentrant, if the context is already
created.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-02-27 11:11:24 +01:00
Philippe Guibert
81c9005ff6 zebra: enhance show vrf for netns and fixing
Show vrf command displays information on the vrf, if it is related to
vrf kernel or if it is related to netns.
When a vrf from kernel is detected, before creating a new vrf, a check
is done against an already present vrf, and if that vrf is not a vrf
mapped with a netns. If that is that case, then the creation is
rejected.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
ff705b15dd zebra: handle the zns init/destroy
The zebra netnamespace contexts are initialised, based on the callback
coming from the NS. Reversely, the list of ns is parsed to disable the
ns contexts.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
3347430b12 zebra: add the registration mechanism for netns
If vrf backend is netns, then the zebra will create its own
zebra_ns context for each new netns discovered. As consequence,
a routing table, and other contexts will be created for each
new namespace discovered. When it is enabled, a populate process
will be done, consisting in learning new interfaces and routes, and
addresses from other NETNS.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
697d3ec731 lib: externalise vrf and ns creation
In addition to have the possibility to create from vty vrf based on a
netns backend, the API will be made accessible from external, especially
for zebra that will handle the netns discovery part. This commit is
externalising following functions:
- netns_pathname
- ns_handler_create
- vrf_handler_create

Also, the VRF initialisation case when under NETNS backend is changed,
since the NS identifier may not be known at the configuration time,but
may be known later, under discovery process.

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
c17d483845 lib: netns vty command not available when vrf backend is vrf lite
Using the vrf backend kind, the vty command that configured netns
under vty will not be installed if the vrf backend is vrf lite

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
b95c18833a zebra: copy logical-router-command under vrf subnode
a vty command is added:
in addition to this command ( kept for future usage):
- [no] logical-router-id <ID> netns <NETNSNAME>
a new command is being placed under vrf subnode
- vrf <NAME>
   [no] netns <NETNSNAME>
  exit

This command permits to map a VRF with a Netnamespace.
The commit only handles the relationship between vrf and ns structures.
It adds 2 attributes to vrf structure:
- one defines the kind of vrf ( mapped under netns or vrf from kernel)
- the other is the opaque pointer to ns
The show running-config is handled by zebra daemon.

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
4e8b02f4df *: Rename ZEBRA_FLAG_INTERNAL -> ZEBRA_FLAG_ALLOW_RECURSION
The ZEBRA_FLAG_INTERNAL flag is used to signal to zebra that
the route being added, the nexthops for it can be recursively
resolved.  This name keeps throwing me off when I read it
so let's rename to something that allows the developer to
understand what is going on.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-26 21:26:33 -05:00
Donald Sharp
28b11f8106 *: Modify notify_owner to route_notify_owner
In the future we are going to have a rule_notify_owner
so make the distinction between the two types of notification
clearer.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-23 14:45:57 -05:00
Donald Sharp
7a1eb44b30 lib: Fix notify_owner decode
The notification of the owner was not properly decoding
the prefix and as such we were not properly reading the
table it was installed into.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-23 14:45:57 -05:00
Donald Sharp
28610f7e44 *: Add tableid the route entry was sent to
Add for the southbound pass back the route entries tableid
used for installation.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-23 14:45:57 -05:00
Donald Sharp
55cd0f612a *: Make assignment from RB_ROOT in while loop work better
Fix up the assignment of the variable = RB_ROOT inside of
while loop patter we were using.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-23 07:08:36 -05:00
Mitesh Kanjariya
f487dcaf74
Merge branch 'master' into evpn-bug-fixes 2018-02-21 00:36:58 -08:00
Mladen Sablic
4d9ad5dcd0 pimd: Multicast traceroute client and router
This commit is the implementation of weak multicast traceroute.
It consists of IGMP module dealing with mtrace type IGMP messages
and client program mtrace/mtracebis for initiating mtrace queries.

Signed-off-by: Mladen Sablic <mladen.sablic@gmail.com>
2018-02-19 23:13:55 +01:00
Donald Sharp
7d061b3cb1 lib, sharpd, zebra: Update the zapi_vrf_label call to add afi
Add the ability to pass in an afi to zebra.  zebra_vrf keeps
track of the afi/label tuple and then does the right thing
before we call down.  AF_MPLS does not care about v4 or v6
it just knows label and what device to use for lookup.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-14 01:11:09 -05:00
Mitesh Kanjariya
3b103fec6b vtysh/lib: write domainname to config file
Ticket: CM-19626
Review: CCR-7170
Testing: Manual

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2018-02-08 23:04:05 -08:00
Donald Sharp
42567e0011 bgpd, lib, sharpd, zebra: Use MPLS_LABEL_NONE
Modify mpls.h to rename MPLS_LABEL_ILLEGAL to be MPLS_LABEL_NONE.
Fix all pre-existing code that used MPLS_LABEL_ILLEGAL.

Modify the zapi vrf label message to use MPLS_LABEL_NONE as the
signal to remove label associated with a vrf.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-08 20:38:14 -05:00
Donald Sharp
339e36d258 lib, sharpd, zebra: Add new enum for lsp type and pass it through.
Add the ability to pass the lsp owner type through the zapi
and in addition add a new label type for the sharp protocol
for testing.

Finally modify zebra_mpls.h to not have defaults specified
for the enum.  That way when we add a new LSP type the
compile fails and the person doing the addition knows
where he has to touch shit.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-08 20:35:14 -05:00
Donald Sharp
70e98a7fe7 *: Make code use a consisten definition of labels
Turns out we had 3 different ways to define labels
all of them overlapping with the same meanings.
Consolidate to 1.  This one choosen is consistent
naming wise with what the *bsd and linux kernels
use.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-08 20:31:37 -05:00
Donald Sharp
c83c5e4482 lib, zebra: Add new api to specify a label associated with the vrf
For L3VPN's we need to create a label associated with the specified
vrf to be installed into the kernel to allow a pop and lookup
operation.

The new api is:
zclient_send_vrf_label(struct zclient *zclient, vrf_id_t vrf_id,
                       mpls_label_t label);

For the specified vrf_id associate the specified label for
a pop and lookup operation for forwarding.

To setup a POP and Forward use MPLS_LABEL_IMPLICIT_NULL
If the same label is passed in we ignore the call.
If the label is different we update entry.
If the label is MPLS_LABEL_NONE we remove
the entry.

This sets up the api.  Future commits will have the functionality
to actually install into the kernel.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-08 20:31:36 -05:00
Donald Sharp
44bdf1590d lib, zebra: Move nh_resolve_via_default to appropriate header
The nh_resolve_via_default function is an accessor function
for NHT in zebra.  Let's move this function to it's proper
place.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-08 19:36:18 -05:00
Donald Sharp
4a7371e9e2 *: Track vrfs per nexthop not per route entry
Track the vfrs on a per nexthop basis instead
of on a per route entry basis.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-08 19:35:53 -05:00
Philippe Guibert
8e71b98f72
Merge pull request #1654 from mkanjari/evpn-symm-routing-enhancements
Evpn symmetric routing enhancements
2018-02-08 11:46:29 +01:00
dturlupov
c50e6abd18 lib: 'no accept-lifetime' and 'no send-lifetime' for keychain
Signed-off-by: Dmitrii Turlupov <dturlupov@factor-rs.ru>
2018-02-07 16:54:43 +03:00
Renato Westphal
2415f045c6
Merge pull request #1712 from donaldsharp/nht_updates
Nht updates
2018-02-06 23:34:12 -02:00
Donald Sharp
cfb8a47f81
Merge pull request #1653 from Orange-OpenSource/SR-Routing
OSPFD: Add Experimental Segment Routing support
2018-02-06 11:32:51 -05:00
Donald Sharp
f3f32e0a70 lib: Fix encoding of vrf
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-05 05:49:27 -05:00
Donald Sharp
4a749e2cb2 bgpd, lib, pimd: Make nexthop_update decoding common
Create a zapi_nexthop_update_decode function that both
pim and bgp use to decode the message from zebra.

There probably could be further optimizations but I opted
to keep the code as similiar as is possible between the
originals because they both make some assumptions about
code flow that I do not fully understand yet.

The real goal here is that I want to create a new
user of the nexthop tracking code from a higher level
daemon and I see no need to re-implement this damn
code again for a 3rd time.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-05 03:44:29 -05:00
Renato Westphal
a37bd5e070 lib: fix more warnings on *BSD
* zebra/kernel_socket.c: include "rt.h" to provide the prototypes of
  kernel_init() and kernel_terminate();

* lib/prefix.h: remove the deprecation warning whenever ETHER_ADDR_LEN
  is used. isisd uses the ETHER_HDR_LEN constant which is defined in
  terms of ETHER_ADDR_LEN in the *BSD system headers. So, when building
  FRR on *BSD, we were getting several warnings because we were using
  ETHER_ADDR_LEN indirectly;

* lib/command_lex.l, lib/defun_lex.l: ignore other harmless warnings;

* lib/spf_backoff.c: cast 'tv->tv_usec' to 'long int' before printing.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-02-02 16:31:20 -02:00
Renato Westphal
a7ce0ad1da *: silence '-Wchar-subscripts' warnings on NetBSD
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-02-02 16:31:20 -02:00
Renato Westphal
b599ec55f4 *: silence '-Wmaybe-uninitialized' warnings on NetBSD
None of these variables can actually be used before being initialized,
but unfortunately some old compilers are not smart enough to detect that.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-02-02 16:31:20 -02:00
Olivier Dugeon
dab8b7a81c Merge remote-tracking 'frr/master' into SR-Routing 2018-01-30 11:43:25 +01:00
Donald Sharp
57dac17c57 lib, pimd: Remove PIM_NODE as it is not needed
The PIM_NODE command is only being used to display
default vrf configuration.  Move this into the
vrf display and remove PIM_NODE.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-30 03:21:42 -05:00
Donald Sharp
c7974c0f1a lib: When we shutdown we would leak interface description
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com.
2018-01-29 15:38:03 -05:00
Quentin Young
a45dc9742c
lib: streamline frr_pthreads, add default loop
Some work on FRR's pthread wrapper.

* Provide a built-in way to synchronize thread startup
* Make utility functions take frr_pthread * instead of its integer ID
* Pass frr_pthread * as pthread start function argument
* Correct some comment styling
* Rename some variables to match naming conventions in the file
* Change parameter ordering in stop function prototype to follow the
  convention in the other functions
* Default new frr_pthreads to using a vanilla event loop

For the last point, the original goal when designing the implementation
of pthreads into FRR was to be able to use the thread.c event based
system inside pthreads. This code essentially encapuslates all the
thread.c functionality into an easy to use pthread out of the box.
Creating a new frr_pthread with a null attributes field will cause the
created frr_pthread to run a thread.c event loop. The upshot of this is
that it is now possible to safely run existing functions in a pthread in
roughly 3 lines of code. It also serves as an example / starting point
for others.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-24 15:30:50 -05:00
vivek
22bd3e9497 *: Refine the notion of a configured VRF in FRR
Refine the notion of what FRR considers as "configured" VRF. It is no longer
based on user just typing "vrf FOO" but when something is actually configured
against that VRF. Right now, in zebra, the only configuration against a VRF
are static IP routes and EVPN L3 VNI. Whenever a configuration is removed,
check and clear the "configured" flag if there is no other configuration for
this VRF. When user attempts to configure a static route and the VRF doesn't
exist, a VRF is created; the VRF is only active when also defined in the
kernel.

Updates: 8b73ea7bd479030418ca06eef59d0648d913b620
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Don Slice <dslice@cumulusnetworks.com>

Ticket: CM-10139, CM-18553
Reviewed By: CCR-7019
Testing Done:
1. Manual testing for L3 VNI and static routes - FRR restart, networking
restart etc.
2. 'vrf' smoke

<DETAILED DESCRIPTION (REPLACE)>
2018-01-23 18:49:40 -08:00
vivek
65c3a7c4e5 lib: Handle configured VRFs at termination
When shutting down, ensure that all VRFs including "configured" ones are
cleaned up properly.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-19069
Reviewed By: CCR-7011
Testing Done: Manual verification of failed scenario
2018-01-23 16:24:39 -08:00
vivek
84915b0a15 *: Handle VRF configuration when VRF gets inactivated and activated
A VRF is active only when the corresponding VRF device is present in the
kernel. However, when the kernel VRF device is removed, the VRF container in
FRR should go away only if there is no user configuration for it. Otherwise,
when the VRF device is created again so that the VRF becomes active, FRR
cannot take the correct actions. Example configuration for the VRF includes
static routes and EVPN L3 VNI.

Note that a VRF is currently considered to be "configured" as soon as the
operator has issued the "vrf <name>" command in FRR. Such a configured VRF
is not deleted upon VRF device removal, it is only made inactive. A VRF that
is "configured" can be deleted only upon operator action and only if the VRF
has been deactivated i.e., the VRF device removed from the kernel. This is
an existing restriction.

To implement this change, the VRF disable and delete actions have been modified.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Mitesh Kanjariya <mkanjariya@cumulusnetworks.com>
Reviewed-by:   Don Slice <dslice@cumulusnetworks.com>

Ticket: CM-18553, CM-18918, CM-10139
Reviewed By: CCR-7022
Testing Done:
1. vrf and pim-vrf automation tests
2. Multiple VRF delete and readd (ifdown, ifup-with-depends)
3. FRR stop, start, restart
4. Networking restart
5. Configuration delete and readd

Some of the above tests run in different sequences (manually).
2018-01-23 16:24:35 -08:00
Russ White
dd19d6a6e7
Merge pull request #1665 from donaldsharp/nexthop_labels
Cleanup some zclient code
2018-01-23 19:09:08 -05:00
Mitesh Kanjariya
31310b25f2 bgpd: advertise VNI subnet
In EVPN symmetric routing, not all subnets are presents everywhere.
We have multiple scenarios where a host might not get learned locally.
1. GARP miss
2. SVI down/up
3. Silent host

We need a mechanism to resolve such hosts. In order to achieve this,
we will be advertising a subnet route from a box and that box will help
in resolving the ARP to such hosts.

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2018-01-23 15:58:53 -08:00
Mitesh Kanjariya
ead40654de bgpd/zebra/lib: Add Default Gateway extended community
1. Added default gw extended community
2. code modification to handle sticky-mac/default-gw-mac as they go together
3. show command support for newly added extended community
4. State in zebra to reflect if a mac/neigh is default gateway
5. show command enhancement to refelect the same in zebra commands

Ticket: CM-17428
Review: CCR-6580
Testing: Manual

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2018-01-23 15:58:53 -08:00
Philippe Guibert
d6fed38109
Merge pull request #1618 from donaldsharp/zebra_startup_ordering
zebra route-leaking for static routes
2018-01-23 08:25:01 +01:00
Donald Sharp
3c19254068 bgpd, lib, pimd: Abstract commands for nexthop tracking
Abstract the code that sends the zapi message into zebra
for the turn on/off of nexthop tracking for a prefix.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-22 19:45:31 -05:00
Donald Sharp
09eef679fb lib: Unset bitmap when not using it
The zclient->redist bitmap for vrf's was being set again
for the zclient_send_dereg_requests function.  This should
be a unset on tear down.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-22 19:44:52 -05:00
Donald Sharp
0d9e7f455e lib: Cleanup some zclient clutter.
The zclient code can be cleaned up a tiny bit and hopefully
improve it's indentation some.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-22 19:44:52 -05:00
Olivier Dugeon
7726c47964 OSPFD: Update Segment Routing following reviews
- Remove OSPD_SR route type
 - Check that Segment Routing is enable only in default VRF
 - Add comment for SRGB in lib/mpls.h
 - Update documentation

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2018-01-22 19:18:10 +01:00
Donald Sharp
8ecdb26ec0 lib, zebra: Rename and place appropriately the label stack
Fix and rename the label stack to be better named.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-22 11:55:22 -05:00
Philippe Guibert
3eca551fec lib: ns_id_t changed to 32 bit
Because the VRF_ID is mapped into 32 bit, and because when NETNS will be
the backend of VRF, then the NS identifier must also be encoded as 32
bit.
Also, the NS_UNKNOWN value is changed accordingly to UINT32_MAX.
Also, the NS_UNKNOWN and NS_DEFAULT values are removed from zebra_ns.h
and kept on ns.h header file.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-01-22 13:52:24 +01:00
Philippe Guibert
3bd74754c9 lib: vrf_bitmap_groups increased from 8 to 1024
The number of vrf bitmap groups is increased so as to avoid consuming
too much memory. This fix is related to a fork memory that occured when
running pimd as daemon.
A check on memory consumed shows that the memory consumed goes from
33480ko to 46888ko with that change. This is less compared to if the
value of the bitmap groups is increased to 16 ( 852776ko).

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-01-22 13:52:23 +01:00
Philippe Guibert
a9ff90c41b lib: increase vrf_id from 16 bit to 32 bit identifier
This is a preparatory work for configuring vrf/frr over netns
vrf structure is being changed to 32 bit, and the VRF will have the
possibility to have a backend made up of NETNS.

Let's put some history.
Initially the 32 bit was because one wanted to map on vrf_id both the
VRFLITE and the NSID.
Initially, one would have liked to make zebra configure at the same time
both vrf lite and vrf from netns in a flat way. From the show
running perspective, one would have had both kind of vrfs, thatone
would configure on the same way.
however, it leads to inconsistencies in concepts, because it mixes vrf
vrf with vrf, and vrf is not always mapped with netns.
For instance, logical-router could also be used with netns. In that
case, it would not be possible to map vrf with netns.
There was an other reason why 32 bit is proposed. this is because
some systems handle NSID to 32 bits. As vrf lite exists only on
Linux, there are other systems that would like to use an other vrf
backend than vrf lite. The netns backend for vrf will be used for that
too. for instance, for windows or freebsd, some similar
netns concept exists; so it will be easier to reuse netns
backend for vrf, than reusing vrflite backend for vrf.

This commit is here to extend vrf_id to 32 bits. Following commits in a
second step will help in enable a VRF backend.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-01-22 13:52:17 +01:00
Olivier Dugeon
cf9b9f77f6 OSPFD: Add Experimental Segment Routing support
This is an implementation of draft-ietf-ospf-segment-routing-extensions-24
and RFC7684 for Extended Link & Prefix Opaque LSA.
Look to doc/OSPF_SR.rst for implementation details & known limitations.

New files:

 - ospfd/ospf_sr.h: Segment Routing structure definition (SubTLVs + SRDB)
 - ospfd/ospf_sr.c: Main functions for Segment Routing support
 - ospfd/ospf_ext.h: TLVs and SubTLVs definition for RFC7684
 - ospfd/ospf_ext.c: RFC7684 Extended Link / Prefix implementation
 - doc/OSPF-SRr.rst: Documentation

Modified Files:

 - doc/ospfd.texi: Add new Segment Routing CLI command definition
 - lib/command.h: Add new string command for Segment Routing CLI
 - lib/mpls.h: Add default value for SRGB
 - lib/route_types.txt: Add new OSPF Segment Routing route type
 - ospfd/ospf_dump.[c,h]: Add OSPF SR debug
 - ospfd/ospf_memory.[c,h]: Add new Segment Routing memory type
 - ospfd/ospf_opaque.[c,h]: Add ospf_sr_init() starting function
 - ospfd/ospf_ri.c: Add new functions to Set/Get Segment Routing TLVs
Add new ospf_router_info_lsa_upadte() to send Opaque LSA to ospf_sr.c()
 - ospfd/ospf_ri.h: Add new Router Information SR SubTLVs
 - ospfd/ospf_spf.c: Add new scheduler when running SPF to trigger
update of NHLFE
 - ospfd/ospfd.h: Add new thread for Segment Routing scheduler
 - ospfd/subdir.am: Add new files
 - vtysh/Makefile.am: Add new ospf_sr.c file for vtysh
 - zebra/kernel_netlink.c: Add new OSPF_SR route type
 - zebra/rt_netlink.[c,h]: Add new OSPF_SR route type
 - zebra/zebra_mpls.h: Add new OSPF_SR route type

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2018-01-18 19:11:11 +01:00
Jafar Al-Gharaibeh
9ee9eb8066
Merge pull request #1645 from qlyoung/fix-cancel-invalid-rw
lib: avoid crash when cancelling invalid rw job
2018-01-18 09:37:24 -06:00
Quentin Young
42d745387a
lib: avoid crash when cancelling invalid rw job
There are some observed instances where we end up trying to cancel a rw
job based on a file descriptor that we don't have a reference on. The
specific cancel function for rw jobs assumes it's called with a file
descriptor that is valid within pollfds and will cause a segmentation
fault by buffer overrun if this is not the case.

Instead log it and move on. Since the fd does not exist this should
patch over the buggy behavior and provide additional information to help
in finding the root cause.

Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-16 15:28:26 -05:00
Lou Berger
49323fd71e
Merge pull request #1614 from qlyoung/imp-bgpd-pthread-startup-sync
improve bgpd thread startup characteristics
2018-01-16 13:43:27 -05:00
Donald Sharp
9ceac4c7cf lib: Increment zapi version number
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-12 09:22:09 -05:00
Donald Sharp
d5b2119cb4 *: Send/receive the nexthop vrf_id
Modify the code to send and receive to/from zebra
the nexthops vrf_id.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-12 09:22:07 -05:00
Donald Sharp
14fcc65cbb lib: Allow interface lookup by VRF_UNKNOWN
Modify if_lookup_by_index to accept a VRF_UNKNOWN
as a vrf_id.  This will cause it to look in all
vrf's for the interface pointer.

Subsequently all if_XXXX functions that call this function
will also get this behavior.

VRF_UNKNOWN *should* not be used for interface creation
as that this will break some core assumptions.

This work is part of allowing vrf route leaking.  Currently
it is possible to create a route in the linux kernel that has
a nexthop across vrf boundaries.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-12 09:19:43 -05:00
Donald Sharp
0cb76b9d8d lib: Add notice of when we can remove some deprecated code.
The zapi_ipv4_route, zapi_ipv6_route and zapi_ipv4_route_ipv6_nexthop
functions are deprecated.  Add notice of when we can remove the
deprecated code from the system.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-12 09:19:43 -05:00
Philippe Guibert
8eac481260
Merge pull request #1455 from mkanjari/evpn-symmetric-routing
Support for Evpn symmetric routing + EVPN Prefix route
2018-01-12 08:27:37 +01:00
Mitesh Kanjariya
9bb77a5b3d
Merge branch 'master' into evpn-symmetric-routing 2018-01-11 09:00:23 -08:00
Quentin Young
09f6d019b4
lib, bgpd: fixup use of of CMD_ARGC_MAX
The constant to limit # of allowed cli tokens on any one line was
defined in multiple places, all inconsistent with each other. Fix.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-11 11:31:45 -05:00
Russ White
2ed7e4c3c3
Merge pull request #1591 from qlyoung/bgpd-ringbuf
bgpd: use ring buffer for network input
2018-01-10 19:59:24 -05:00
Quentin Young
0bbb9e72f2
lib: add MTYPE for synchronization primitives
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-09 14:01:31 -05:00
Jafar Al-Gharaibeh
e741a61225
Merge pull request #1590 from chiragshah6/pim_dev
lib: Fix no interface cmd vrf parsing
2018-01-08 11:25:06 -06:00
Donald Sharp
b2140cb7c8 lib: Add pthread_yield
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-06 14:08:30 -05:00
Chirag Shah
1505b537a8 lib: Fix no interface cmd vrf parsing
For no interface <ifname> vrf VRFNAME,
vrf-name is not parsed properly.

Ticket:CM-19274

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2018-01-03 11:41:45 -08:00
Quentin Young
74e4a329a3
lib: fix a few bugs in ring buffers
* Fix rare failure caused when end pointer is at end of buffer memory
  and a call to ringbuf_get() is made that reads all of the data in the
  buffer; start pointer was advanced past end pointer, causing some
  special handling to be skipped
* Fix ringbuf_peek() moving start pointer
* Fix use after free
* Remove extraneous assignment
* Update relevant tests

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-03 14:04:43 -05:00
Quentin Young
cb94eaebff
lib: add ringbuf_copy()
Quick 'n easy way to copy the contents of one ringbuf to another.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-03 14:04:43 -05:00
Russ White
82b9bf3145
Merge pull request #1569 from qlyoung/ringbuf
lib: add ring buffer
2018-01-02 09:21:37 -05:00
mitesh
523cafc418 bgpd, lib, zebra: fix style problems
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-12-27 11:47:10 -08:00
Quentin Young
a5080622b2
lib: add ringbuf_peek()
Peek functionality for ring buffers and associated tests.

Also:
* Slight optimization to avoid 0-byte memcpy() by changing > to >=
* Add rv checks for some ringbuf_[put|get] calls that were missing them
  in the test

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-12-26 18:50:56 -05:00
Quentin Young
5318d89638
lib: add ring buffer
Simple ring buffer implementation useful for fixed size FIFO queues.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-12-19 17:12:43 -05:00
Renato Westphal
fb6f7c2c25
Merge pull request #1515 from donaldsharp/selected_to_front1
Store selected_fib as a pointer off of rib_dest_t
2017-12-19 14:09:03 -02:00
Mitesh Kanjariya
90264d64ef bgpd: process evpn type-5 routes received from peers
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-12-14 10:57:08 -08:00
Mitesh Kanjariya
408b00c4d7 bgpd: only advertise valid subnet routes as evpn type-5 routes
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-12-14 10:57:08 -08:00
Mitesh Kanjariya
053905d2e3 bgpd: follow AFI/SAFI style for advertising/withdrawing type-5 routes
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-12-14 10:57:08 -08:00
mitesh
342dd0c623 bgpd: advertise/withdraw type-5 routes upon user config
CLI config for enabling/disabling type-5 routes

router bgp <as> vrf <vrf>
  address-family l2vpn evpn
    [no] advertise <ipv4|ipv6|both>

loop through all the routes in VRF instance and advertise/withdraw
all ip routes as type-5 routes in default instance.

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-12-14 10:57:07 -08:00
Mitesh Kanjariya
181c08c6fc bgpd: json support for show bgp l2vpn evpn vrf-import-rt
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-12-14 10:57:06 -08:00
Mitesh Kanjariya
19a847a9cd bgpd: set evpn rvtep nexthops as active by default
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-12-14 10:57:05 -08:00
mitesh
2dbad57fc6 bgpd: program nh/rmac entries
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-12-14 10:57:05 -08:00
mitesh
d3135ba31d bgpd: program mac-ip routes in matching vrfs
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-12-14 10:57:05 -08:00
Mitesh Kanjariya
b7cfce934f zebra, lib: zebra changes for symmetric routing support
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-12-14 10:56:44 -08:00
Donald Sharp
db33b83b1d
Merge pull request #1478 from bingen/zeromq4
lib: Address ZMQ lib TODOs
2017-12-13 07:36:57 -05:00
Rafael Zalamena
a457559e18
Merge pull request #1519 from donaldsharp/ptm
Ptm
2017-12-07 12:37:10 -02:00
Donald Sharp
a7ea39668d *: Remove cvs control points
The $Id: lines would allow code kept in cvs to substitute
the file version upon checkout.  Since we are not using
cvs there is no need to keep these lines anymore.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-12-05 17:28:12 -05:00
Martin Winter
79e68c7c5b lib: Fix gcc 7 warning 'error: ‘fld’ may be used uninitialized in this function'
Warning breaks Debian Package build with gcc 7 which uses -Werror=maybe-uninitialized

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2017-12-05 00:30:29 -08:00
Donald Sharp
b5f270ad09 lib: Allow memory to be cleaned up for error cases in ptm
ptm_lib.c had no way to cleanup after itself when an
error was detected.  This adds a function to cleanup
context in such a case.

A followup commit will use this new functionality.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-12-04 18:59:47 -05:00
Renato Westphal
2e4c229616 *: make clippy usage more consistent
Fixes #1511.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-12-04 19:46:38 -02:00
Quentin Young
2d34fb80b8
*: don't use deprecated stream.h macros
Some of the deprecated stream.h macros see such little use that we may
as well just remove them and use the non-deprecated macros.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-12-01 13:51:06 -05:00
Donald Sharp
522f7f9923 lib: Fix thread removal from a pqueue
When we remove a thread from a pqueue, use the saved
index to go to the correct spot immediately instead of
having to search the whole queue for it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-29 14:53:59 -05:00
Rafael Zalamena
69df82f3b5
Merge pull request #1493 from donaldsharp/plist_stuff
lib: Fix prefix-list where le is == prefixlen
2017-11-29 14:03:56 -02:00
Russ White
1d04ad057d
Merge pull request #1482 from chiragshah6/mdev1
ospfd:  Running-config display ospf (non active) vrf config, OSPF Route json support
2017-11-29 07:44:39 -05:00
Donald Sharp
4015e91850 lib: Fix prefix-list where le is == prefixlen
This should be allowed:

robot(config)# ip prefix-list outbound_asp_routes seq 33 permit 1.1.1.0/24 le 24
% Invalid prefix range for 1.1.1.0/24, make sure: len < ge-value <= le-value

This commit fixes the issue:

robot(config)# ip prefix-list outbound_asp_routes seq 33 permit 1.1.1.0/24 le 23
% Invalid prefix range for 1.1.1.0/24, make sure: len < ge-value <= le-value
robot(config)# ip prefix-list outbound_asp_routes seq 33 permit 1.1.1.0/24 le 24
robot(config)# ip prefix-list outbound_asp_routes seq 33 permit 1.1.1.0/24 le 25
robot(config)#

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-28 19:55:07 -05:00
Donald Sharp
8a71d93d85 sharpd: Add Super Happy Advanced Routing Protocol
Add a daemon that will allow us to test the zapi
as well as test route install/removal times from
the kernel.

The current commands are:

install route <starting ip address> nexthop <nexthop> (1-1000000)

This command starts installing at <starting ip address>/32
(1-100000) routes that it auto-increments by 1
Installation start time is noted in the log and finish
time is noted as well.

remove routes <starting ip address> (1-1000000)

This command removes routes at <starting ip address>/32
and removes (1-100000) routes created by the install route
command.

This code can be considered experimental and *is not*
something that should be run in a production environment.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-27 09:16:30 -05:00
Donald Sharp
e1a1880de3 *: Make zapi route install Notifications optional
Allow the higher level protocol to specify if it would
like to receive notifications about it's routes that
it has installed.

I've purposely made it part of zclient_new_notify because
we need to track the routes on a per daemon basis only.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-27 09:09:35 -05:00
Donald Sharp
7ea7b86e2b lib, zebra: Add ability to notify to Routing Protocols Success/Failure
Provide ZAPI code that can pass to an upper level protocol
what happened to it's route on install.

There are these notifications:
1) ZAPI_ROUTE_FAIL_INSTALL - The route attempted to be
   installed did not work.
2) ZAPI_ROUTE_BETTER_ADMIN_WON - A route that was installed
   has become un-installed due to another routing protocol
   installing a better admin distance
3) ZAPI_ROUTE_INSTALLED - The route specified has been installed

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-27 09:09:32 -05:00
Chirag Shah
0f478e3050 ospfd: show ip ospf route json support
Define JSON_C_TO_STRING_NOSLASHESCAPE used for
escaping forward slash.

Disply json output for
'show ip ospf route [vrf all] json'

Ticket:CM-18659
Reviewed By:
Testing Done:
Configure multiple non-default VRF, inject external routes
via redistribute to ospf area.
checked show ip ospf route vrf all /json based output.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2017-11-26 09:18:19 -08:00
ßingen
afd0f10d63 lib: Address ZMQ lib TODOs
Add write callback.
Add error callback.
Add frrzmq_check_events() function to check for edge triggered things
that may have happened after a zmq_send() call or so.
Update ZMQ tests.

Signed-off-by: ßingen <bingen@voltanet.io>
2017-11-23 12:50:27 +01:00
Donald Sharp
832d0f566f lib: Pass the safi as a uint8_t
The safi encode/decode is using 2 bytes, which
may cause problems on some platforms.  Let's assume
that a safi is a uint8_t and work accordingly.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-13 14:18:43 -05:00
Donald Sharp
ec93aa120e lib, zebra: Modify zebra to use STREAM_GET for zapi
This code modifies zebra to use the STREAM_GET functionality.
This will allow zebra to continue functioning in the case of
bad input data from higher level protocols instead of crashing.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-13 14:16:13 -05:00
Donald Sharp
051cc28c8f lib: Add STREAM_GETX functions
Currently when stream reads fail, for any reason, we assert.
While a *great* debugging tool, Asserting on production code
is not a good thing.  So this is the start of a conversion over
to a series of STREAM_GETX functions that do not assert and
allow the developer a way to program this gracefully and still
clean up.

Current code is something like this( taken from redistribute.c
because this is dead simple ):

	afi = stream_getc(client->ibuf);
	type = stream_getc(client->ibuf);
	instance = stream_getw(client->ibuf);

This code has several issues:

1) There is no failure mode for the stream read other than assert.
if afi fails to be read the code stops.
2) stream_getX functions cannot be converted to a failure mode
because it is impossible to tell a failure from good data
with this api.

So this new code will convert to this:

	STREAM_GETC(client->ibuf, afi);
	STREAM_GETC(client->ibuf, type);
	STREAM_GETW(client->ibuf, instance);

	....

stream_failure:
	return;

We've created a stream_getc2( which does not assert ),
but we need a way to allow clean failure mode handling.
This is done by macro'ing stream_getX2 functions with
the equivalent all uppercase STREAM_GETX functions that
include a goto.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-13 14:15:24 -05:00
Donald Sharp
4df759fecf
Merge pull request #1436 from rtrlib/rpki
bgpd: Add RPKI/RTR support
2017-11-13 13:35:22 -05:00
pogojotz
f806f29c49 lib: Fix command copy running-config startup-config to alias write file
Fixes: #1412
Signed-off-by: Juergen Werner <pogojotz@gmx.net>
2017-11-12 13:09:29 -05:00
Jafar Al-Gharaibeh
1757d71693
Merge pull request #1426 from donaldsharp/prefixlistafi
lib: Only apply prefix's to the same family
2017-11-10 09:11:53 -06:00
Marcel Röthke
dabecd7c63 bgpd: Add RPKI/RTR support
This commit adds support for the RTR protocol to receive ROA
information from a RPKI cache server. That information can than be used
to validate the BGP origin AS of IP prefixes.
Both features are implemented using [rtrlib](http://rtrlib.realmv6.org/).

Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
2017-11-10 14:37:52 +01:00
Donald Sharp
4f3749854a lib: Only apply prefix's to the same family
When we have a v4 or v6 prefix list, only
apply it via a match when the address families
are the same.

Fixes: #1339
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-07 10:54:03 -05:00
Donald Sharp
ae2158fecf lib: Fix nexthop reading to work better
Fixes: #1404
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-06 11:20:40 -05:00
Russ White
453a5340a8
Merge pull request #1363 from donaldsharp/z_improvements
Z improvements
2017-10-31 20:27:19 -04:00
Lou Berger
820e1d547b
Merge pull request #1366 from donaldsharp/bgp_non_integrated_zebra_redistribution
Bgp non integrated zebra redistribution
2017-10-31 10:53:59 -04:00
Donald Sharp
e2e7a81d58 Merge pull request #1174 from opensourcerouting/show_route_defpy
Refactor the 'show ip route' commands using DEFPY
2017-10-27 10:00:57 -04:00
Donald Sharp
c539c38944 lib: Fix non-integrated config error display
When using a non-integrated config and starting up
of a protocol daemon, we were not properly handling
all possible cases and as such when an user hit
an actual error they were getting (null) listed
for the message string.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-25 22:35:35 -04:00
Donald Sharp
2a82635882 lib: Remove strange line
Remove a line that only has a semi-colon on it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-25 22:34:45 -04:00
Donald Sharp
41e7fb8030 lib, ospf6d, ospfd, zebra: Add ZEBRA_STR
Allow us to use a ZEBRA_STR for commands

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-25 10:57:00 -04:00
Renato Westphal
b11b57723b lib: optimize sockunion_connect()
This function is only called with non-blocking sockets [1], so there's
no need to worry about setting O_NONBLOCK and unsetting it later if the
given fd was a blocking socket. This saves us 4 syscalls per connect,
which is not much but is something.

Also, remove an outdated comment about the return values of this
function. It returns a 'connect_result' enum now, whose values are
self-explanatory (connect_error, connect_success and connect_in_progress).

This also fixes a coverity scan warning where we weren't checking the
return value of the fcntl() syscall.

[1] bgp_connect() and pim_msdp_sock_connect().

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-24 19:30:31 -02:00
Renato Westphal
44f12f209f *: fix coverity warnings - resource leaks
These are mostly trivial fixes for leaks in the error path of some functions.

The changes in bgpd/bgp_mpath.c deserves a bit of explanation though. In
the bgp_info_mpath_aggregate_update() function, we were allocating memory
for the lcomm variable but doing nothing with it. Since the code for
communities, extended communities and large communities is pretty much
the same in this function, it's clear that this was a copy and paste
error where most of the ext. community code was copied but not all of
it as it should have been.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-24 19:30:30 -02:00
Renato Westphal
efd7904eab *: add missing \n in some help strings
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-24 19:30:30 -02:00
Renato Westphal
5b8524f5c2 lib: fix coverity warnings introduced by the iface rb-tree conversion
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-24 18:26:02 -02:00
Renato Westphal
ecffa493c0 zebra: unify the ipv4/ipv6 'show ip route' commands - part 1/2
Note: I had to remove one assert in clidef.py in order to fix a build
error when using a preprocessor string (FRR_IP_REDIST_STR_ZEBRA) inside
a DEFPY command. This should be revisited later.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-24 10:12:40 -02:00
Donald Sharp
342213eac0 *: Modify zclient_init to require privs data
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-23 18:12:29 -04:00
Donald Sharp
bf2394f08b lib: Cleanup some missed reformat
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-23 18:09:23 -04:00
Renato Westphal
9d4542919f Merge pull request #1331 from donaldsharp/hash_speedup
lib: Allow hash_get to sidestep expensive hash key generation in some…
2017-10-18 23:52:41 -02:00
Jafar Al-Gharaibeh
5e3dd606da Merge pull request #1333 from donaldsharp/command_py_leak
lib: Fix small memory leak when using command_py.c
2017-10-17 23:03:43 -05:00
Donald Sharp
d1667f531f lib: Display unsigned instead of signed
When displaying thread cpu data, display unsigned instead
of signed data when we get really really really large
numbers of invocations.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-17 20:49:15 -04:00
Donald Sharp
e871b669e1 lib: Fix small memory leak when using command_py.c
When free'ing memory associated with the wgraph, also
free memory malloced during the initialization.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-17 09:22:41 -04:00
Donald Sharp
1ab21a40eb lib: No need to call apply_mask 2 times
route_node_set is only called by route_node_get
which calls apply_mask.  There is no need to do
this again.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-16 14:47:08 -04:00
Donald Sharp
efb149d95b lib: Allow hash_get to sidestep expensive hash key generation in some cases
There is no need to generate a hash key *if* the hash_alloc_function
is NULL and the hash is empty.

This changed showed a measurable increase in performance for
table hash lookup for tables that were meant to be empty in
bgp( the distance commands ).

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-16 13:56:01 -04:00
Donald Sharp
5b8d8894f8 Merge pull request #1298 from opensourcerouting/iface-rb-tree
Use rb-trees to store interfaces instead of linked-lists
2017-10-16 12:00:38 -04:00
Donald Sharp
da7f979a07 lib: Free workqueue memory leak on free
When free'ing the workqueue if you have items
on the workqueue you should free the memory associated
with it.

Additionally move the work_queue_item_remove function
to allow for static to be awesome

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-11 10:00:54 -04:00
Donald Sharp
b286ddb07a lib: Add some documentation about argv_find
We expect that the index value passed in for argv_find
should be initially set to 0.  This way if the cli
ever changes there is no need to modify the initial
value.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-10 12:31:36 -04:00
Donald Sharp
d06542d566 lib: Fix missing va_end
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-10 12:31:36 -04:00
Renato Westphal
451fda4f9a *: use the FOR_ALL_INTERFACES abstraction from babeld
This improves code readability and also future-proofs our codebase
against new changes in the data structure used to store interfaces.

The FOR_ALL_INTERFACES_ADDRESSES macro was also moved to lib/ but
for now only babeld is using it.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-10 09:05:46 -03:00
Renato Westphal
c9cbbb4054 lib: fix bug in if_cmp_name_func()
If the p1 and p2 arguments pointed to identical strings ending with
a non-numeric character (e.g. "lo"), this function would return -1
instead of 0 as one would expect. This inconsistency didn't matter
for sorted linked-lists but for red-black trees it's a major source
of problems.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-10 09:05:02 -03: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
8928a08f65 *: eliminate IFINDEX_DELETED in favor of IFINDEX_INTERNAL
IFINDEX_DELETED is not necessary anymore as we moved from a global
list of interfaces to a list of interfaces per VRF.

This reverts commit 84361d615.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-10 09:05:02 -03:00
Renato Westphal
f4e14fdba7 *: use rb-trees to store interfaces instead of sorted linked-lists
This is an important optimization for users running FRR on systems with
a large number of interfaces (e.g. thousands of tunnels). Red-black
trees scale much better than sorted linked-lists and also store the
elements in an ordered way (contrary to hash tables).

This is a big patch but the interesting bits are all in lib/if.[ch].

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-10 09:05:02 -03:00
Renato Westphal
5d56066e46 lib: register 'if_var_handlers' only once
There's no need to register 'if_var_handlers' for every VRF, we need
to do it only once.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-10 09:01:24 -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
Donald Sharp
613aa4ddb2 Merge pull request #1310 from vjardin6WIND/null_references
lib: linklist avoid access NULL->data
2017-10-09 08:16:04 -04:00
Vincent JARDIN
d9ced40ab7 lib: fix wrong warning from clang
The compiler cannot guess that rise() will not return here.
One should help.

Warning:
  Access to field 'file' results in a dereference of a null pointer
  (loaded from variable 'error')
aka error->file while error is NULL.

Signed-off-by: Vincent Jardin <vincent.jardin@6wind.com>
2017-10-09 13:07:50 +02:00
Vincent JARDIN
c7bba448d8 lib: csv unit tests
Fix csv unit tests.

To be run using,
  gcc -o csv csv.c -DTEST_CSV
  ./csv

Signed-off-by: Vincent Jardin <vincent.jardin@6wind.com>
2017-10-09 12:58:14 +02:00
Vincent JARDIN
43b798b7dd lib: fix NULL->field_len access
Currenlty, this function is used only by:
  - unit test of csv.c (see its main() section)
  - ptm_lib.c

In case of ptm, it is safe to return NULL because:
  csv_encode_record() -> return NULL
     _ptm_lib_encode_header() -> return NULL
        the only consumer of the return value is: ptm_lib_init_msg()
        that checks the NULL return.

Warning:
  Access to field 'field_len' results in a dereference of a null
  pointer (loaded from variable 'fld')

Signed-off-by: Vincent Jardin <vincent.jardin@6wind.com>
2017-10-09 12:42:11 +02:00
Vincent JARDIN
3f58e1b3e7 lib: fix a64448ba, invalid NULL->num_labels
We should assume match OK only when neither nhl1
and neither nhl2 are NULL.
If both are NULL, it means match NOK.

Clang Warning:
  Access to field 'num_labels' results in a dereference of a null
  pointer (loaded from variable 'nhl1')

Signed-off-by: Vincent Jardin <vincent.jardin@6wind.com>
2017-10-09 12:32:05 +02:00
Vincent JARDIN
67533c11d2 lib: linklist avoid access NULL->data
Let's assert(NULL) if the datastructure is not set.
The code assumes that the pointer is always non NULL. So, let's enforce
this semantic.

Signed-off-by: Vincent Jardin <vincent.jardin@6wind.com>
2017-10-09 10:51:03 +02:00
Vincent JARDIN
649579afb3 lib: fix clang warning
Properly initialize to avoid "Branch condition evaluates to a garbage value"
warning.

Signed-off-by: Vincent Jardin <vincent.jardin@6wind.com>
2017-10-08 23:46:24 +02:00
Renato Westphal
993bab898d lib, ldpd: fix "argument cannot be negative" coverity warnings
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-05 22:51:23 -03:00
Donald Sharp
acdf5e2510 *: Convert list_free usage to list_delete
list_free is occassionally being used to delete the
list and accidently not deleting all the nodes.
We keep running across this usage pattern.  Let's
remove the temptation and only allow list_delete
to handle list deletion.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-05 10:53:17 -04:00
Donald Sharp
affe9e9983 *: Convert list_delete(struct list *) to ** to allow nulling
Convert the list_delete(struct list *) function to use
struct list **.  This is to allow the list pointer to be nulled.

I keep running into uses of this list_delete function where we
forget to set the returned pointer to NULL and attempt to use
it and then experience a crash, usually after the developer
has long since left the building.

Let's make the api explicit in it setting the list pointer
to null.

Cynical Prediction:  This code will expose a attempt
to use the NULL'ed list pointer in some obscure bit
of code.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-05 10:53:13 -04:00
Donald Sharp
7faf667af6 lib: Fix memset usage
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-03 12:03:56 -04:00
Vincent JARDIN
c31a793b48 scan-build: cleanup some warnings
Current cleanup is for unset values or variables that are not used anymore.

Regarding ospfd/ospf_vty.c: argv_find()
  we'll never get it NULL, so get coststr = argv[idx]->arg;
2017-10-02 09:14:03 +02:00
Vincent JARDIN
80a5a11bb1 sha256: fix clang warning
t0 and t1 are not used, but want do really want them to be reset to secure
the stack.
Suggested by Quentin: let's use memset() to be consistent.
2017-10-02 09:14:03 +02:00
Jafar Al-Gharaibeh
bc5dcce7da Merge pull request #1271 from donaldsharp/multiplier
lib: Fix abbreviation
2017-09-30 22:47:43 -05:00
Renato Westphal
867be27151 Merge pull request #1255 from qlyoung/vtysh-remove-double-slash
vtysh: remove extra / in config path
2017-09-29 14:47:48 -03:00
Donald Sharp
b077b2e658 lib: Fix abbreviation
The word Multiplier has been abbreviated to 'Mul' in
the output.  This apparently is causing people
angst.  Write word out.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-09-29 11:53:53 -04:00
Quentin Young
3607783335
lib: remove extra / in other paths
Non-integrated config paths need the treatment as well.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-09-29 11:26:11 -04:00
Renato Westphal
67c0a9206c Merge pull request #1180 from dwalton76/ipv6-static-route-null0
Ipv6 static route null0
2017-09-27 13:42:53 -03:00
Daniel Walton
66b8ce1a17 Merge branch 'master' into bgpd-debug-updates-prefix 2017-09-27 09:21:26 -04:00
Renato Westphal
f5129394ec Merge pull request #1242 from donaldsharp/eigrp_tm
Eigrp tm
2017-09-27 09:20:51 -03:00
Renato Westphal
63e4c24f2c Merge pull request #1243 from qlyoung/tm-destroy-cond
lib: destroy threadmaster condition variable
2017-09-26 21:58:39 -03:00
Philippe Guibert
5c4dc90307 Merge pull request #1069 from donaldsharp/rfc_plist
PIM: allow overlapping group ranges for prefix-list and static RP's
2017-09-26 17:33:29 +02:00
Quentin Young
33844bbe43
lib: destroy threadmaster condition variable
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-09-25 16:01:08 -04:00
Donald Sharp
e5716b1677 lib: Free thread_master pointer after free
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-09-25 15:43:03 -04:00
Donald Sharp
1a0a92ea3b lib: Set pointer to NULL after free
list_delete does not set the list pointer to NULL
Thus when we accidently use it later we happily write
off into lala land instead of crashing imediately

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-09-25 15:41:28 -04:00
Donald Sharp
5176f7b713 Merge pull request #1213 from opensourcerouting/zebra-netlink
Misc RIB/Netlink fixes
2017-09-25 14:33:14 -04:00
Renato Westphal
e4e451ce15 lib: log error details if F_SETLK fails
Somehow F_SETLK was failing for me a couple of days ago, and not being
able to see the errno value was frustrating.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-09-21 13:27:50 -03:00
Renato Westphal
a74e593b35 *: fix segfault when sending more than MULTIPATH_NUM nexthops
This is a fallout from PR #1022 (zapi consolidation). In the early days,
the client daemons would allocate enough memory to send all nexthops
to zebra.  Then zebra would add all nexthops to the RIB and respect
MULTIPATH_NUM only when installing the routes in the kernel. Now things
are different and the client daemons can send at most MULTIPATH_NUM
nexthops to zebra, and failure to respect that will result in a buffer
overflow. The MULTIPATH_NUM limit in the new zebra API is a small price
we pay to avoid allocating memory for each route sent to zebra.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-09-21 11:21:09 -03:00
Mitesh Kanjariya
8367c32764 bgpd: Intialize all the variables used in argv_find.
Ticket: CM-17706
Review: CCR-6639
Testing: Manual (test failing in min test for ARM)

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-09-20 14:56:23 -07:00
Daniel Walton
dff13b6fb7 *: watchfrr needs 'show debugging' DEFUN
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

This fixes the following

cel-redxp-10# show debugging
Debugging Information for zebra:
Zebra debugging status:

Debugging Information for bgpd:
BGP debugging status:

Debugging Information for watchfrr:
% Command incomplete.

% Command incomplete.
cel-redxp-10#
2017-09-20 19:34:50 +04:00
Daniel Walton
7eb09438dd lib: CMD_FERR_RETURN should return CMD_WARNING_CONFIG_FAILED
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

Testing the patch:

root@cel-redxp-10[frr-dwalton76]# vtysh -c 'conf t' -c ' int vlan2' -c
'ip igmp join 233.200.0.1 10.1.1.1'
Failure joining IGMP group: multicast not enabled on interface vlan2
root@cel-redxp-10[frr-dwalton76]# echo $?
1
root@cel-redxp-10[frr-dwalton76]
2017-09-18 15:07:40 +00:00
Renato Westphal
a2addae8fe *: use clang's 'ForEachMacros' format style option
This fixes the broken indentation of several foreach loops throughout
the code.

From clang's documentation[1]:
  ForEachMacros: A vector of macros that should be interpreted as foreach
  loops instead of as function calls.

[1] http://clang.llvm.org/docs/ClangFormatStyleOptions.html

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-09-15 14:53:46 -03:00
Daniel Walton
d114b977e9 *: support keywords that begin with uppercase letter
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

VARIABLE tokens must be all uppercase, this allows us to support WORD
tokens that begin with an uppercase letter.  The "Null0" keyword is an
example of where this is needed.

The only VARIABLE we had that wasn't already all uppercase was
ASN:nn_or_IP-address:nn
2017-09-14 18:07:30 +00:00
Russ White
42b6df56da Merge pull request #1110 from qlyoung/mtsafe-log
lib: mt-safe log.c
2017-09-13 16:21:56 -04:00
Russ White
dcc4574ae6 Merge pull request #1163 from donaldsharp/deduplicate_nexthops
zebra: deduplicate nexthops
2017-09-13 16:18:41 -04:00
Quentin Young
bb74e5acbc
lib, doc: increase maximum cli tokens
When matching user input against a CLI graph, we keep a stack of tokens
matched. Stack size was limited to 64, making the effective number of
tokens that could be entered on a line 64. This is too limiting in some
circumstances, so bump it to 256 (and document it).

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-09-13 10:39:22 -04:00
Daniel Walton
e775854d9c Merge pull request #1133 from opensourcerouting/shift-sign
*: fix be32 reading / 24-bit left shift
2017-09-12 17:48:03 -04:00
Quentin Young
c22fbb9b45
lib: smallify loglock
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-09-12 14:49:58 -04:00
Quentin Young
dd73dca94a
lib: mt-safe log.c
Tentative thread-safety support for zlog. Functions designed to be
called from signal handlers are not mt-safe.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-09-12 14:28:58 -04:00
David Lamparter
25b9cb0cc8 zebra: deduplicate nexthops
There exists situations where it is possible to have duplicate
nexthops passed from a higher level protocol into zebra.

This code notices this duplication of nexthops and marks
the duplicates as DUPLICATE so we don't attempt to install
it into the kernel.

This is important on *BSD as I understand it because passing
duplicate nexthops will cause the route to be rejected.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-09-12 10:05:07 -04:00
David Lamparter
937652c6e4 *: fix be32 reading / 24-bit left shift
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-09-09 19:50:58 +02:00
Quentin Young
4e1000a188
lib: free thread master name
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-09-08 16:39:53 -04:00
Donald Sharp
bd74dc610a lib: Hash creation cleanup
1) Some hash key functions where converting pointers
directly to a 32 bit value via downcasting.  Pointers
are 64 bit on a majority of our platforms.

2) Some hashes were being created with 256 entries,
downsize the hash creation size to more appropriate
values.

3) Add hash names to hash creation so we can watch
the hash via 'show debugging hashtable'

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-09-05 14:33:01 -04:00
David Lamparter
75048747e9 Merge pull request #1087 from qlyoung/fix-weirdness
lib: fix thread scheduling weirdness
2017-09-05 18:19:45 +02:00
David Lamparter
c6fe740998 Merge pull request #1075 from donaldsharp/rip_metric
lib, ospfd, ripd, ripngd:  Fix 'set metric'
2017-09-05 18:17:52 +02:00
David Lamparter
981283aa72 Merge pull request #1058 from chiragshah6/mdev
ospfd: fix route_node_get
2017-09-05 18:15:51 +02:00
Donald Sharp
dfd8f05f97 Merge pull request #1020 from opensourcerouting/ferr
"ferr" error reporting extensions
2017-09-05 07:52:18 -04:00
Quentin Young
e3c9529ee9
lib: fix thread scheduling weirdness
Restores 3.0 behavior in terms of thread scheduling & prioritization.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-31 19:00:00 -04:00
Donald Sharp
f229873a87 *: Cleanup multiple is_default... code
There are 3 different implementations of is_prefix.
Standardize on is_prefix_default and fix it's implementation.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-31 16:11:17 -04:00
Donald Sharp
72a1b201d3 lib: Add PREFIX_COPY
Add a generic PREFIX_COPY to complement PREFIX_COPY_V4 and
PREFIX_COPY_V6

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-31 13:40:35 -04:00
Renato Westphal
8941a38520 Merge pull request #1078 from dwalton76/ospfd-network-cmd-warning
*: return CMD_WARNING if command was already configured
2017-08-31 13:23:25 -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
Daniel Walton
851fcbaebe *: return CMD_WARNING if command was already configured
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

If the user configures some command that is already in the config we
should return CMD_WARNING instead of CMD_WARNING_CONFIG_FAILED
2017-08-31 15:14:01 +00:00
Donald Sharp
ce94edc733 lib: Modify prefix_list_apply to allow retrieval of prefix
Create a new function prefix_list_apply_which_prefix which
will return a pointer to the matching prefix that caused
the acceptance/denial.

This change will be used in future commits.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-31 10:30:19 -04: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
Donald Sharp
cc1edd3929 Merge pull request #1059 from opensourcerouting/oldbits-1
zebra: PtP address configuration support
2017-08-29 19:53:30 -04:00
Donald Sharp
32592ffb4f Merge pull request #1056 from opensourcerouting/oldbits-0
"pathspace" options, vtysh-suid-cleanups, "vty_frame()"
2017-08-29 17:48:36 -04:00
Chirag Shah
60bfa4435c lib: apply_mask to route_node_get
remove address of prefix while typecasting to apply_mask

Singed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2017-08-29 12:52:57 -07:00
Donald Sharp
6a74c5f9db lib, ospfd, ripd, ripngd: Fix 'set metric'
There are a variety of cli's associated with the
'set metric ...' command.  The problem that we
are experiencing is that not all the daemons
support all the varieties of the set metric
and the returned of NULL during the XXX_compile
phase for these unsupported commands is causing
issues.  Modify the code base to only return
NULL if we encounter a true parsing issue.
Else we need to keep track if this metric
applies to us or not.

In the case of rip or ripngd if the metric
passed to us is greater than 16 just turn
it internally into a MAX_METRIC.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-29 15:08:13 -04:00
David Lamparter
14f6aefe43 Merge pull request #998 from mkanjari/dev-master
Dev master
2017-08-29 20:03:48 +02:00
Donald Sharp
ee4958897b Merge pull request #1060 from opensourcerouting/oldbits-2
zebra: clean up blackhole support
2017-08-29 09:07:19 -04:00
David Lamparter
2071aa0ebb lib: add vty_frame() to get rid of unneeded config
vty_frame() can be used to reduce the amount of output produced by "show
running-config" and "write ...".  It buffers output in struct vty->frame
(1024 bytes) and outputs it when vty_out is called.  If vty_out isn't
called, it can be removed with vty_endframe() later.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-29 08:36:00 +02:00
Mitesh Kanjariya
09fdc88c8c Merge branch 'master' into dev-master 2017-08-28 18:19:03 -07:00
Mitesh Kanjariya
6b3ee3a0b0 lib: new APIs for get/set system hostname/domainname
1. Change hostname_get to cmd_hostname_get
2. Change domainname_get to cmd_domainname_get
3. New API to set domainname
3. Provide a CLI command to set domainname

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-28 17:16:52 -07:00
David Lamparter
d1b4fc1f89 lib: add -N/--pathspace option
This allows running the daemons inside of Linux network namespaces
without messing with an additional mount/fs namespace (or a ton of
options).

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-28 23:50:42 +02:00
David Lamparter
f3cd305f1b lib: document frrzmq in its header file
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-28 18:00:13 +02:00
David Lamparter
b6116506ec lib: ZeroMQ read handler, v2
This uses zmq_getsockopt(ZMQ_FD) to create a libfrr read event, which
then wraps zmq_poll and calls an user-specified ZeroMQ read handler.
It's wrapped in a separate library in order to make ZeroMQ support an
installation-time option instead of build-time.

Extended to support per-message and per-fragment callbacks as discussed
with Bingen in PR #566.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-28 18:00:13 +02:00
Chirag Shah
b915f4d509 lib: call apply_mask in route_node_get
Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2017-08-28 07:52:50 -07:00
David Lamparter
3155489aa2 lib: "ferr" error-information system
This provides an API to pass around extra information for errors, more
than a simple return value can carry.  This is particularly used for the
Cap'n Proto interface to be able to report more useful errors.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-28 06:04:54 +02:00
David Lamparter
94758e6681 lib, zebra: carry blackhole type over ZAPI
Allow daemons to add blackholes of specific types (reject/drop.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-28 06:03:36 +02:00
David Lamparter
88ed83794a zebra: kernel_socket: read extra attributes
This is just to silence the "didn't read all data" warning.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-28 05:52:12 +02:00
David Lamparter
a830942228 zebra: cleanup blackhole support
blackhole support was horribly broken. cleanup by removing blackhole
stuff from ZEBRA_FLAG_*

introduces support for "prohibit" routes (Linux/netlink only)
also clean up blackhole options on "ip route" vty commands.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-28 05:07:51 +02:00
David Lamparter
fd36be7e15 zebra: rib: use nexthop ptr in rib_add/delete
This simplifies the API for the following blackhole rework.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-28 04:17:22 +02:00
David Lamparter
09a484dd1d *: remove ZEBRA_FLAG_{BLACKHOLE,REJECT} from API
FLAG_BLACKHOLE is used for different things in different places. remove
it from the zclient API, instead indicate blackholes as proper nexthops
inside the message.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-28 01:21:43 +02:00
David Lamparter
272e15e723 Merge pull request #1046 from qlyoung/fix-cli-ambiguous
fix handling of ambiguous cli
2017-08-27 19:20:14 +02:00
David Lamparter
d440e3dbf0 lib: prefix: fix char value size
There are 16 bytes here, not 8.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-26 01:46:40 +02:00
David Lamparter
a97986ffba *: fix compiler warnings
Specifically, gcc 4.2.1 on OpenBSD 6.0 warns about these;  they're bogus
(gcc 4.2, being rather old, isn't quite as "intelligent" as newer
versions; the newer ones apply more logic and less warnings.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-26 01:46:40 +02:00
Mitesh Kanjariya
0802e118dd Handle hostname/domainname properly for FreeBSD
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-25 16:36:31 -07:00
Mitesh Kanjariya
1f53ef552d Fix compilation errors for domainname
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-25 15:51:16 -07:00
Mitesh Kanjariya
4a48f1b70b lib: Fix make check failures
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-25 15:39:14 -07:00
Quentin Young
935cee3f9b
lib: remove static variable from cli matcher
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-25 15:41:32 -04:00
Quentin Young
8295b504cb
lib: fix rare bug in ambiguous command resolution
In certain situations, the CLI matcher would not handle ambiguous
commands properly. If it found an ambiguous result in a lower subgraph,
the ambiguous result would not correctly propagate up to previous frames
in the resolution DFS as ambiguous; instead it would propagate up as a
non-match, which could subsequently be overridden by a partial match.

Example CLI space:

  show ip route summary
  show ip route supernet-only
  show ipv6 route summary

Entering `show ip route su` would result in an ambiguous resolution for
the `show ip route` subgraph but would propagate up to the `show ip`
subgraph as a no-match, allowing `ip` to partial-match `ipv6` and
execute that command.

In this example entering `show ip route summary` would disambiguate the
`show ip` subgraph. So this bug would only appear when entering input
that caused ambiguities in at least two parallel subgraphs.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-25 15:41:27 -04:00
Donald Sharp
9ca25fedba *: Add RMAP_COMPILE_SUCCESS to enum
Add the RMAP_COMPILE_SUCCESS and switch over to using it.
Refactoring allows a removal of a if statement to just
use the switch statement already in place.  Additionally
the reworking cleans up memory freeing in a couple of spots.
In one spot we no longer will leak memory too.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-25 10:48:30 -04:00
Renato Westphal
0af35d90a1 *: fix assorted issues detected by Coverity Scan
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-24 21:49:39 -03:00
Mitesh Kanjariya
6f9d219ae6 provide/use API to get hostname/domainname
Set default hostname in frr to unix hostname.
Provide APIs to get the hostname/domaninanme
Use this APIs where needed

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-24 16:44:31 -07:00
Mitesh Kanjariya
419cd5a03f lib/bgpd: provide/use API to get hostname/domainname
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-24 16:37:16 -07:00
Renato Westphal
40d55b54c6 Merge pull request #1038 from donaldsharp/zserv
zebra: Fix compiler warnings
2017-08-24 10:26:31 -03:00
Donald Sharp
27c5d4de93 Merge pull request #1031 from opensourcerouting/small-bits
small bits
2017-08-24 08:58:46 -04:00
Donald Sharp
b5f7965155 lib: Fix nexthop num
If we assign MULTIPATH_NUM to be 256, this causes issues
for us since 256 is bigger than a u_char.  So let's make
the api's multipath_num to be a u_int16_t and pass it
around as a word.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-24 08:30:08 -04:00
Renato Westphal
f474e08be0 lib: mark the old zebra API for route advertisement as deprecated
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-23 20:28:34 -03:00
Renato Westphal
744899219f *: use zapi_route to send/receive redistributed routes as well
Some differences compared to the old API:
* Now the redistributed routes are sent using address-family
  independent messages (ZEBRA_REDISTRIBUTE_ROUTE_ADD and
  ZEBRA_REDISTRIBUTE_ROUTE_DEL). This allows us to unify the ipv4/ipv6
  zclient callbacks in the client daemons and thus remove a lot of
  duplicate code;

* Now zebra sends all nexthops of the redistributed routes to the client
  daemons, not only the first one. This shouldn't have any noticeable
  performance implications and will allow us to remove an ugly exception
  we had for ldpd (which needs to know all nexthops of the redistributed
  routes). The other client daemons can simply ignore the nexthops if
  they want or consult just the first one (e.g. ospfd/ospf6d/ripd/ripngd).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-23 20:25:45 -03:00
David Lamparter
de1a880c4e lib: split off compiler magic into its own file
Also make timed notices available via CONFDATE.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-24 00:18:53 +02:00
David Lamparter
c0e29be115 lib: prefix: try harder to not hash garbage
With prefix_ptr or prefix_ls, there can still be stuff in a struct
prefix that we shouldn't hash.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-24 00:18:53 +02:00
David Lamparter
3cbb67f229 lib: better warnings for install_element
Also fixes misuse of vector_slot() - that one doesn't check for access
beyond end of vector...

And print node names in grammar sandbox "printall".

Fixes: #543
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-24 00:18:53 +02:00
David Lamparter
427f8e61bb ospf6d: properly update prefix list references
Register add/delete hooks with the prefix list code to properly change
ospf6_area's prefix list in/out pointers.

There are 2 other uncached uses of prefix lists in the ASBR route-map
code and the interface code;  these should probably be cached too. (To
be fixed another day...)

Fixes: #453
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-24 00:18:53 +02:00
David Lamparter
6bd2b3608d lib: fix cosmetic issue with exit race
if we're using --terminal, the daemon may in some cases exit fast enough
for the parent to see this; this resulted in a confusing/bogus "failed
to start, exited 0" message.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-24 00:18:53 +02:00
David Lamparter
9eed278b16 lib: centralized memstats-at-exit
adds a new all-daemon "debug memstats-at-exit" command.  Also saves
memstats to a file in /tmp, useful if a long-running daemon is having
weird issues (e.g. in a user install).

Fixes: #437
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-24 00:18:50 +02:00
Renato Westphal
52dd3aa483 zapi: add support for routes with multiple labels
This will be necessary for the Segment Routing feature.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-23 18:58:35 -03:00
Renato Westphal
0e51b4a368 lib/zserv: introduce address-family independent ZAPI message types
As noticed in 657cde1, the zapi_ipv[4|6]_route functions are broken in
many ways and that's the reason that many client daemons (e.g. ospfd,
isisd) need to send handcrafted messages to zebra.

The zapi_route() function introduced by Donald solves the problem
by providing a consistent way to send ipv4/ipv6 routes to zebra with
nexthops of any type, in all possible combinations including IPv4 routes
with IPv6 nexthops (for BGP unnumbered routes).

This patch goes a bit further and creates two new address-family
independent ZAPI message types that the client daemons can
use to advertise route information to zebra: ZEBRA_ROUTE_ADD and
ZEBRA_ROUTE_DELETE. The big advantage of having address-family independent
messages is that it allows us to remove a lot of duplicate code in zebra
and in the client daemons.

This patch also introduces the zapi_route_decode() function. It will be
used by zebra to decode route messages sent by the client daemons using
zclient_route_send(), which calls zapi_route_encode().

Later on we'll use this same pair of encode/decode functions to
send/receive redistributed routes from zebra to the client daemons,
taking the idea of removing code duplication to the next level.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-23 17:45:17 -03:00
Renato Westphal
bb1b9c47ca lib: updates to zapi_route
This patch introduces the following changes to the zapi_route structure
and associated code:
* Use a fixed-size array to store the nexthops instead of a pointer. This
  makes the zapi_route() function much easier to use when we have multiple
  nexthops to send. It's also much more efficient to put everything on
  the stack rather than allocating an array in the heap every time we
  need to send a route to zebra;

* Use the new 'zapi_nexthop' structure. This will allow the client daemons
  to send labeled routes without having to allocate memory for the labels
  (the 'nexthop' structure was designed to be memory efficient and doesn't
  have room for MPLS labels, only a pointer). Also, 'zapi_nexthop' is more
  compact and more clean from an API perspective;

* Embed the route prefix inside the zapi_route structure. Since the
  route's prefix is sent along with its nexthops and attributes, it makes
  sense to pack everything inside the same structure.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-23 17:45:17 -03:00
Renato Westphal
34b054ba6d *: remove leftovers from "router zebra"
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-23 17:45:17 -03:00
Renato Westphal
153856bbe9 lib: remove redundant zebra messages
This also fixes a bug of ipv6 routes advertised by the VNC code being
ignored by zebra.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-23 17:45:17 -03:00
David Lamparter
acf3a851b9 lib: fix const-check in route_node
route_node->lock is "const" if --enable-dev-build is used.  This is done
to deter people from messing with internals of the route_table...
unfortunately, the inline'd route_[un]lock_node runs into this.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-22 15:27:08 +02:00
Lou Berger
3f54388956 Merge pull request #939 from jbonor/optimization
Optimization
2017-08-22 09:01:20 -04:00
Donald Sharp
cacec09618 Merge pull request #1016 from opensourcerouting/cli-minor
minor cli foo (hashtable stats, pseudowire show)
2017-08-22 08:54:18 -04:00
David Lamparter
4093d47b99 lib: terminate capabilities only if initialized
zprivs_caps_init() is called conditionally, apply the same condition on
terminate.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-21 21:53:46 +02:00
David Lamparter
40818cec85 lib: move hashstats under debug, show per-daemon
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-21 14:41:02 +02:00
Jorge Boncompte
19aad877b7 lib: optimize IPV4_ADDR_[SAME|COPY]()
Change all callers of IPV4_ADDR_SAME() to pass a pointer to a struct in_addr

Use assignment and comparison instead of memcpy() and memcmp(). Avoids function
calls. Faster.

Signed-off-by: Jorge Boncompte <jbonor@gmail.com>
2017-08-17 17:58:35 +02:00
Jorge Boncompte
f104f6c1a6 lib: cleanup the work queue implementation
Convert the work queue implementation to not use the generic linked list
to mantain the item list and use instead a simple queue from queue.h that
does not allocate memory for each node.

Signed-off-by: Jorge Boncompte <jbonor@gmail.com>
2017-08-17 17:47:07 +02:00
Jorge Boncompte
cd85bc2e0b lib: standardize use of queue.h
The simple queue implementation in OpenBSD and FreeBSD are called diferently,
standardize in the use of the FreeBSD version and map the missing names only
if we compile on OpenBSD.

Signed-off-by: Jorge Boncompte <jbonor@gmail.com>
2017-08-17 17:47:05 +02:00
Jorge Boncompte
01dccc0b19 lib: inline route_node_lock()/route_node_unlock()
Avoid function calls.

Signed-off-by: Jorge Boncompte <jbonor@gmail.com>
2017-08-17 17:46:22 +02:00
David Lamparter
ce19a04aea lib: replace if_add_hook with hook_* logic
This allows modules to register their own additional hooks on interface
creation/deletion.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-15 13:25:44 +02:00
David Lamparter
0395137477 *: centralize some exit cleanup into libfrr
Start creating a counterpart to frr_init and frr_late_init.
Unfortunately, some daemons don't do any exit handling, this doesn't
change that just yet.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-15 13:25:44 +02:00
David Lamparter
08c4c73be6 lib: hooks: support priority ordering & reversing
Allow registering callbacks with a priority value used to order them
relative to each other.  Plus a reverse variant that just flips the
direction on priorities.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-15 13:25:41 +02:00
David Lamparter
bf30e5eaf2 Merge pull request #948 from qlyoung/fix-set-ip-next-hop-peer-address
lib, bgpd: fix `set ip next-hop peer-address`
2017-08-15 11:10:01 +02:00
David Lamparter
24fb3b1873 Merge pull request #934 from qlyoung/mac-parser
lib: add CLI token for 48-bit mac addresses
2017-08-15 11:09:15 +02:00
Quentin Young
473196f613
lib, python: add M:A:C support for clippy
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-14 11:30:08 -04:00
David Lamparter
b4e55fc5e8 lib: fix prefix list trie corruption
The specific code here needs to establish an absolute order of more
specific to less specific possible matches in a prefix list.  This is
indirectly checked by an assert on insertion, because the "next best"
entry is required to be consistent even when joining multiple chains
of candidates.

Unfortunately, trie_install_fn() would insert entries too far ahead in
the chain if another entry with higher sequence number was seen.  This
breaks the trie and (rightfully) triggers the assertion failure on
insert.

Fixes: #937
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-11 19:02:22 +02:00
Quentin Young
9779e3f193
lib: add CLI token for 48-bit mac addresses
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-11 12:42:01 -04:00
David Lamparter
fc4ecb5a5e Merge pull request #957 from chiragshah6/mdev
ospfd: fix crash due to conflicting router-id, fix MI-OSPF cli in lib commands and fix memory leaks
2017-08-11 18:28:04 +02:00
David Lamparter
eef3d03026 lib: don't close stdio when running foreground
c9c8d0d ("lib: close stdin/out/err in non-terminal case") overshot its
goal and closes stdin/stdout/stderr even when a daemon is running in
foreground.  That means stdout logging & exit memory reporting are both
broken.

Reported-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-11 15:45:56 +02:00
Chirag Shah
825d5fbf59 lib: Fix multi instance ospf
ospfd crashes upon configuring multi-instance ospf
i.e 'router ospf x'.
ospfd can return CMD_NOT_MY_INSTANCE which
is not supported in lib/commands

Support two of the error codes
CMD_NOT_MY_INSTANCE and CMD_WARNING_CONFIG_FAILED

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2017-08-10 14:59:07 -07:00
Quentin Young
89602edb31
lib, bgpd: fix set ip next-hop peer-address
This bgp-specific command had its positive form defined only in bgpd and
its negative form defined only in lib, which broke the whole rule for
other daemons.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-10 12:31:47 -04:00
David Lamparter
695bb8f0d1 Merge branch 'frr/pull/822' ("EVPN fixes")
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-09 21:34:10 +02:00
Donald Sharp
3cc2066899 Merge pull request #926 from opensourcerouting/tcp-zebra
remove `--enable-tcp-zebra`
2017-08-09 14:43:48 -04:00
David Lamparter
2c3699c0eb Merge pull request #940 from qlyoung/hashtable-expansion-lf
lib: use load factor as hash expansion trigger
2017-08-09 20:43:40 +02:00
David Lamparter
4e1fd26a5e Merge remote-tracking branch 'frr/master' into tcp-zebra 2017-08-09 20:42:27 +02:00
Donald Sharp
fc73dd4bdf Merge pull request #911 from opensourcerouting/non-recursive-2
more non-recursive build, fix cross-compile, & doc build mangling
2017-08-09 14:38:07 -04:00
Donald Sharp
f790234f2f Merge pull request #892 from opensourcerouting/watchfrr-simplify
simplify watchfrr, add --terminal, improve startup logging
2017-08-09 14:32:44 -04:00
David Lamparter
3b0f6068a8 lib: some final MAC access-list fixes
- couldn't load back written configs because it was trying to parse
  "any" as MAC address
- don't need special-casing in filter_match_zebra(), exact is going to
  be 0 for AF_ETHERNET anyway
- some vty formatting was slightly different
- is_zero_mac now static to prefix.c

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-09 20:30:34 +02:00
Quentin Young
bed7ad8387
lib: use load factor as hash expansion trigger
Previous strategy was to resize the hash table when the length of any
one bucket exceeded a certain size, with some logic for intelligently
stopping resizes when the gains from doing so weren't sufficient. While
this was a good idea that attempted to optimize both space and lookup
time, unfortunately under transient degenerate conditions this led to
some issues with the tables not resizing when they should have,
harming performance. The resizing restriction was lifted, but this had
the result of exacerbating degenerate behavior and caused out of memory
conditions.

This patch changes the hash expansion criterion to be based on the
number of elements in the table. Once the # of elements in the table
exceeds the number of buckets, the table size is doubled. While the
space efficiency of this method decreases relative to the perfectness of
the hash function, at least this strategy puts the table performance
squarely in the hands of the hash function.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-09 13:53:11 -04:00
Renato Westphal
2dd0d72624 zebra: add support for static pseudowires
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 13:03:36 +02:00
Renato Westphal
87b5f1b77b ldpd: integrate with the pseudowire manager in zebra
If we receive a notification from zebra indicating that the installation
of a pseudowire has failed (e.g. no reachability), send a PW Status
notification to the remote peer (or a Label Withdraw if the remote peer
doesn't support the PW Status TLV).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:35:16 +02:00
ßingen
6833ae01bc zebra: add pseudowire manager
Base framework for supporting MPLS pseudowires in FRR.

A consistent zserv interface is provided so that any client daemon
(e.g. ldpd, bgpd) can install/uninstall pseudowires in a standard
way. Static pseudowires can also be implemented by using the same
interface.

When zebra receives a request to install a pseudowire and the installation
in the kernel or hardware fails, a notification is sent back to the
client daemon and a new install attempt is made every 60 seconds (until
it succeeds).

Support for external dataplanes is provided by the use of hooks to
install/uninstall pseudowires.

Signed-off-by: ßingen <bingen@voltanet.io>
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:35:15 +02:00
ßingen
ea4ecfb351 ospf: Fix segfault if compiled with DEBUG
If OSPF_LS_REFRESH_TIME is 60, min_delay in ospf_refresher_register_lsa
function (ospf_lsa.c) would be negative, so index (which is unsigned)
would be out of range, causing a segfault.

Signed-off-by: ßingen <bingen@voltanet.io>
2017-08-09 12:07:58 +02:00
David Lamparter
b8c1fde3cb lib: don't mkdir state paths in watchfrr
watchfrr doesn't know if there will be -u/-g options on the individual
daemons, so it doesn't know what the appropriate ownership is.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-09 10:55:03 +02:00
David Lamparter
5d13cd091a lib: thoroughly disable tcp-zebra
Disable this in the code to make it hard for people to shoot themselves
in the foot.  It's only left as a remnant for development use.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-08 20:11:10 +02:00
Donald Sharp
0f6476ccc3 lib, bgpd: Use 'struct prefix *' for filter matching
There is no need for special casing of mac addresses,
since the mac address is it's own type integrated
into `struct prefix` now.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-08 12:55:03 -04:00
Quentin Young
eff09c66a4
lib: fix still reachable linked list in thread.c
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-08 12:54:28 -04:00
Donald Sharp
b03b88986e lib, bgpd: Distinguish between AF_EVPN and AF_ETHERNET
Create AF_EVPN for internal use and start using it.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2017-08-08 10:34:31 -04:00
Donald Sharp
b34fd35d3a lib, bgpd: Address Review comments.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-08 10:30:14 -04:00
Donald Sharp
1667fc4097 lib: Fix extra doc string
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-08 10:30:13 -04:00
Mitesh Kanjariya
69b61704b8 lib: changes needed for mac access-list any command
Ticket: CM-17074
Review: CCR-6453
Unit-test: Manual

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-08 10:28:55 -04:00
Mitesh Kanjariya
1a98c08704 bgpd/zebra/lib: EVPN support for asymmetric VxLan routing
1. Advertise gateway mac-ip in EVPN
2. Advertise VRR mac-ip in EVPN
3. Ignore gateway mac-ip advertisements in case of distributed gateway
4. Config knob to enable/disable gateway mac-ip advertisements

Ticket: CM-16456, CM-16543, CM-16555, CM-16778
Review: CCR-6283
Unit-test: Manual

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-08 10:28:46 -04:00
Mitesh Kanjariya
d37ba5499e bgpd, lib, vtysh: Added support for mac filtering in route-maps
1. Added support to create mac filters
2. Enabled route-map commands for EVPN address family
3. Provision to add mac filters under match clause in route-maps

Ticket: CM-16349
Review: CCR-6190
Unit-test: Manual (logs attached to ticket)

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-08 10:09:37 -04:00
Donald Sharp
99a6a31e50 *: Define the number of seconds in a Day, Week and year
The defines:

ONE_DAY_SECOND
ONE_WEEK_SECOND
ONE_YEAR_SECOND

were being defined all over the system, move the
define to a central location.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-08 09:06:22 -04:00
David Lamparter
689f5a8c84 *: remove --enable-tcp-zebra, rework ZAPI path
This adds "@tcp" as new choice on the -z option present in zebra and the
protocol daemons.  The --enable-tcp-zebra option on configure is no
longer needed, both UNIX and TCP socket support is always available.

Note that @tcp should not be used by default (e.g. in an init script),
and --enable-tcp-zebra should never have been in any distro package
builds, because

**** TCP-ZEBRA IS A SECURITY PROBLEM ****

It allows arbitrary local users to mess with the routing table and
inject bogus data -- and also ZAPI is not designed to be robust against
attacks.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-08 11:14:05 +02:00
David Lamparter
5225e155d3 lib: cli: don't run off graph "pre-end"
Behind END_TKN, there is another graph node whose data pointer is
actually struct cmd_element instead of struct cmd_token.  Don't try to
interpret that as cmd_token.  This causes very interesting crashes when
ASLR decides to give one of the strings of a command definition a lower
32-bit value that is a valid cmd_token_type (e.g. FORK_TKN).

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-07 15:05:34 +02:00
David Lamparter
9b0a8efa46 Merge pull request #912 from chiragshah6/mdev
Fix Multi-Instance OSPF configurations CLIs
2017-08-06 03:55:10 +02:00
David Lamparter
c053ff8bff Merge pull request #899 from donaldsharp/ETH_ALEN
Fix Crash and Convert to ETH_ALEN
2017-08-05 05:19:01 +02:00
Russ White
6b22ae607f Merge pull request #906 from opensourcerouting/vty-close
lib: vty: fix config-write fd leak
2017-08-04 13:14:43 -04:00
Quentin Young
61b9e9d6b3
lib: remove last powl()
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-04 10:58:00 -04:00
Chirag Shah
a3d826f0ea ospfd: Fix MI-OSPF configuraton clis
Multi-Instance OSPF configuration CLI would fail because
first client return error upon seeing qobj_index being 0.
With new marco generate new error code to return from each
instance (vtysh client) and if the command is intended for given
instance, its qobj_index would be nonzero and process the command
and push correct ospf context. Other instance would return the error.
On vtysh end, check all instance return an error log a message to a
file.

Testing Done:
Verfied various MI-OSPF configuration CLI with multi instances.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2017-08-04 07:47:45 -07:00
Donald Sharp
7628d862ca lib: Add ETH_ALEN to prefix.h and deprecate ETHER_ADDR_LEN
From discussion we decided that we should use ETH_ALEN instead
of ETHER_ADDR_LEN.  Add ETH_ALEN to prefix.h and make
ETHER_ADDR_LEN generate a warning when used( but still work ).

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-04 09:06:14 -04:00
Donald Sharp
6b36796215 Merge pull request #909 from opensourcerouting/isis-perf
IS-IS: improve spf performance
2017-08-04 09:04:12 -04:00
David Lamparter
10b8a9c007 lib: vty: fix config-write fd leak
Since we were only setting vty->wfd in config_write, vty->fd would
remain 0 and vty_close() wouldn't close vty->wfd.

Clean up the entire fd closing and make it more explicit.  We were even
trying to write to stdin...

Reported-by: Jorge Boncompte <jbonor@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-04 12:15:54 +02:00
David Lamparter
70d27c5b7d build: clean up BUILT_SOURCES
BUILT_SOURCES doesn't do what the name suggests.  What it actually means
is "these files should be built first when doing a 'make' without
explicit target" (or "make all").

It's pretty much almost always wrong to use BUILT_SOURCES, the only
correct use is when a file is needed by an unspecified / large set of
files.

Also remove version.h and route_types.h from dist tarball while we're at
it.  configure will create them anyway.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-04 11:13:55 +02:00
David Lamparter
89727c8d9e build: fix clippy cross-compile
Broke the build-for-host setup for clippy in the non-recursive changes
:/

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-04 11:09:45 +02:00
David Lamparter
3619938e2f Merge pull request #891 from Jafaral/portability
Portability configurations
2017-08-04 08:52:07 +02:00
David Lamparter
e4f48ace5d Merge pull request #900 from qlyoung/apply-mask
lib: add missed apply_mask()
2017-08-04 08:49:20 +02:00
Quentin Young
bca37d172a
lib: minor style fixes
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-03 11:25:24 -04:00
Quentin Young
c7fcc67369
lib: add missed apply_mask()
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-03 11:12:14 -04:00
Christian Franke
c7d3895eb1 lib: Reformat comment so my eyes don't fall out while reading it
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2017-08-03 14:30:01 +02:00
Christian Franke
7a7761d21c lib: move prefix hash key to prefix.c to allow global use
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2017-08-03 13:37:58 +02:00
Christian Franke
31bfa0624d lib: add sbuf
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2017-08-03 11:34:01 +02:00
David Lamparter
c9c8d0d189 lib: close stdin/out/err in non-terminal case
Oops, forgot this path... in the --terminal case, stdio is closed when
the user ends the terminal session, but without terminal it was left
open.

(This caused a ssh session hang in the CentOS6 CI because the file
descriptors were still open, so ssh would keep the session alive...)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-03 03:37:37 +02:00
David Lamparter
b4fa7c95f9 lib: replace stderr with zlog in vty config load
Now that the logging hole is plugged, we can just print config-loading
errors to the log.  This has 2 hidden advantages:

- vty_read_config calls in SIGHUP don't print errors to /dev/null
- errors are consistently printed to syslog on --enable-cumulus

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 23:36:42 +02:00
David Lamparter
d34cb7f0b7 lib: plug logging hole during startup
zlog_* doesn't work in startup before we've loaded the real logging
configuration.  Add some code to log to stderr for that window of time.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 23:36:42 +02:00
David Lamparter
beaa54706a lib: create pid/vty directories
If the paths for pid or vty don't exist, try creating them.  Failure is
ignored (on EEXIST) or prints a non-fatal warning (other errors).

Fixes: #507
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 23:36:42 +02:00
David Lamparter
37a1f2fbb6 lib: privs: make uid/gid accessible before setuid
This splits off privs_preinit(), which does the lookups for user and
group IDs.  This is so the init code can create state directories while
still running as root.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 23:36:39 +02:00
Jafar Al-Gharaibeh
dacb17162a Merge pull request #895 from qlyoung/flush-ready
lib: flush ready queue before poll() again
2017-08-02 14:24:41 -05:00
Jafar Al-Gharaibeh
408647964a Merge pull request #894 from donaldsharp/sockopt
lib: Remove sockopt_cork functionality
2017-08-02 14:22:43 -05:00
Quentin Young
d764d2cc50
lib: flush ready queue before poll() again
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-02 14:29:04 -04:00
Jafar Al-Gharaibeh
f9e755241a config: If we don't have crypt but we have ssl crypto, use it
Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
2017-08-02 10:01:17 -05:00
Donald Sharp
0ecfe5bf38 Merge branch 'master' into PIM_VRF 2017-08-02 09:39:38 -04:00
Renato Westphal
bd402424a4 lib: fix build from git repository on OpenBSD
The OpenBSD's cp(1) command doesn't support the -v option. This will
change in the next releases (starting from v6.2) but this patch fixes
the problem for v6.1 and older releases.

Fixes Issue #875.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-01 22:12:24 -03:00
David Lamparter
154b9e8f9f lib: vty_stdio signal handling
- SIGTSTP appropriately suspends the foreground terminal
- SIGINT causes the daemon to exit, regardless of -d
- SIGQUIT causes the daemon to daemonize, regardless of -d

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 02:59:51 +02:00
David Lamparter
cff2b2112e lib: --terminal option for all daemons
This allows, among other things, piping in a configuration from stdin.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 02:59:51 +02:00
David Lamparter
f43fbf837c lib: daemonize more intelligently
Block the parent process until the child has reached the main loop, e.g.
full service is available.

This means it's no longer neccessary to add a "safety sleep" for daemon
cross-dependencies, when using the -d startup option.  This doesn't help
if -d isn't used.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 02:59:51 +02:00
David Lamparter
181d61462b build: make gitversion more useful
Use --first-parent (i.e. mainline side of merge) and restrict to "frr-"
tags.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 02:59:51 +02:00
Donald Sharp
c62232b4b1 lib: Remove sockopt_cork functionality
Linux -> TCP_CORK is enabled by default
*BSD -> The equivalent is TCP_NOPUSH

As such sockopt_cork is effectively useless
especially since the two places it is used
do it right before TCP writes then disable
it right after the writes are over.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-01 20:36:33 -04:00
Donald Sharp
ab665082fe Merge pull request #882 from opensourcerouting/safi-cleanup
lib/bgpd: cleanup SAFI values
2017-08-01 14:21:26 -04:00
Donald Sharp
c72ec965b9 Merge pull request #860 from opensourcerouting/non-recursive
convert lib & zebra to non-recursive automake
2017-08-01 11:33:43 -04:00
Russ White
f7ba7b3b2b Merge pull request #884 from dwalton76/bgpd-peer-hash-limit
bgpd: peer hash expands until we are out of memory
2017-08-01 08:04:23 -04:00
David Lamparter
f1b32b2e5e build: fix/improve clippy dependencies
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-01 07:09:45 +02:00
Renato Westphal
085347cfad lib: use switch statements in the AFI/SAFI conversion functions
Switch statements are more elegant (and potentially faster... but that's
not the main motivation).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-07-31 23:45:03 -03:00
Renato Westphal
5c5255381e lib/bgpd: introduce the iana_safi_t enum
We had afi_t/iana_afi_t for AFIs but only safi_t for SAFIs. Fix this
inconsistency.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-07-31 23:44:42 -03:00
Renato Westphal
a08ca0a7e1 lib: remove SAFI_RESERVED_4 and SAFI_RESERVED_5
SAFI values have been a major source of confusion over the last few
years. That's because each SAFI needs to be represented in two different
ways:
* IANA's value used to send/receive packets over the network;
* Internal value used for array indexing.

In the second case, defining reserved values makes no sense because we
don't want to index SAFIs that simply don't exist. The sole purpose of
the internal SAFI values is to remove the gaps we have among the IANA
values, which would represent wasted memory in C arrays. With that said,
remove these reserved SAFIs to avoid further confusion in the future.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-07-31 23:38:38 -03:00
Daniel Walton
40520c3649 bgpd: peer hash expands until we are out of memory
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

swpX peers all start out with the same sockunion so initially they all
go into the same hash bucket. Once IPv6 ND has worked its magic they
will have different sockunions and will go in different buckets...life
is good.

Until then though, we are in a phase where all swpX peers have the same
socknunion. Once we have HASH_THRESHOLD (10) swpX peers and call
hash_get for a new swpX peer the hash code calls hash_expand(). This
happens because there are more than HASH_THRESHOLD entries in a single
bucket so the logic is "expand the hash to spread things out"...in our
case expanding doesn't spread out the swpX peers because all of their
sockunions are the same.

I looked at having peer_hash_make and peer_hash_same consider the ifname
of the swpX peer but that is a large change that we don't want to make
at the moment. So the fix is to put a cap on how large we are
willing to let the hash table get. By default there is no limit but if
max_size is set we will not allow the hash to expand above that.
2017-07-31 21:22:23 +00:00
David Lamparter
4a121f99f7 build: convert lib/ to non-recursive build
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-31 23:03:27 +02:00
David Lamparter
812ff999ca Merge pull request #865 from qlyoung/find
Find
2017-07-31 19:58:20 +02:00
Quentin Young
9d356c939f
lib: s/leychain/keychain
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-31 11:03:32 -04:00
Quentin Young
c652f6f633
lib: correct some node name typos
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-27 15:03:31 -04:00
Donald Sharp
8b2a6222e8 lib: Remove expansion of hash table
The hash code has the idea of stopping expanding
the hash table when certain criteria are set.
With the recent addition of `show hashtable`
we can now see that when we have a full internet
feed we've stopped expanding the table at 1k
buckets.  This results in some serious performance
issues at scale.

Since we now have the ability to see the statistics
on a hash table, let's allow it to expand.  Doing
so on a full feed showed this:

before:
   Hash table          |  Buckets   Entries   Empty   LF        SD      FLF       SD
 ----------------------+----------------------------------------------------------------
   route table hash    |  1024      1187579   0%      1159.75   34.06   1159.75   35.08
   route table hash    |  32768     76208     10%     2.33      2.80    2.58      4.03
   route table hash    |  1024      1187572   0%      1159.74   34.06   1159.74   35.08
   route table hash    |  2048      76205     0%      37.21     6.13    37.21     7.29

Showing hash table statistics for BGP
-------------------------------------

   Hash table         |  Buckets   Entries   Empty   LF       SD      FLF      SD
 ---------------------+--------------------------------------------------------------
   BGP Attributes     |  131072    251229    15%     1.92     2.48    2.25     3.33
   route table hash   |  4096      1187572   0%      289.93   17.03   289.93   17.87
   route table hash   |  32768     76205     10%     2.33     2.90    2.58     4.21

After:

   Hash table          |  Buckets   Entries   Empty   LF     SD     FLF    SD
 ----------------------+--------------------------------------------------------
   route table hash    |  1048576   1187349   32%     1.13   2.57   1.67   3.16
   route table hash    |  32768     76195     10%     2.33   2.81   2.58   4.03
   route table hash    |  1048576   1187342   32%     1.13   2.58   1.67   3.16
   route table hash    |  32768     76192     10%     2.33   2.68   2.58   3.81

Showing hash table statistics for BGP
-------------------------------------

   Hash table         |  Buckets   Entries   Empty   LF     SD     FLF    SD
 ---------------------+--------------------------------------------------------
   BGP Attributes     |  131072    251222    15%     1.92   2.64   2.25   3.58
   route table hash   |  1048576   1187342   32%     1.13   2.52   1.67   3.07
   route table hash   |  32768     76192     10%     2.33   2.86   2.58   4.12

We should see some significant performance improvements across the board
for full feeds.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-07-27 11:08:40 -04:00
Quentin Young
cf6c83e712
lib, vtysh: add find COMMAND
Substring search through all defined commands in all nodes.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-26 22:58:52 -04:00
Quentin Young
a83a533139
lib: add CLI node names
Adds an array of descriptive names for each CLI node, plus a runtime
check to make sure folks don't forget to update it.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-26 18:19:49 -04:00
Donald Sharp
c6413dd394 Merge pull request #848 from opensourcerouting/rb-tree-fix
Fix corrupted RB trees
2017-07-25 11:11:33 -04:00
David Lamparter
4ff218ac39 Merge pull request #838 from dwalton76/lib-copy-nexthops
lib: copy_nexthops() only copies the first nexthop
2017-07-25 16:20:08 +02:00
Renato Westphal
145b205177 lib: fix corrupted RB trees
Commit 8f942af90 introduced a bug while silencing a clang warning. Silence
the warning in a different way to fix our red-black tree implementation.

Fixes #841.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-07-24 18:50:45 -03:00
Renato Westphal
52535beec1 lib: revert reindent of files imported from OpenBSD
We should preserve the original indentation to make it easier to keep
these files in sync with the upstream.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-07-24 18:40:24 -03:00
Donald Sharp
e0ae31b886 lib, pimd, zebra: Allow pim to set pimregX into appropriate vrf
The pimregX devices when created by the kernel are put into
the default vrf.  When pim gets the callback that the device
exists, check to see if it is a pimregX device and if so
move it into the appropriate vrf.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-07-24 13:51:39 -04:00
David Lamparter
9d303b37d7 Revert "*: reindent pt. 2"
This reverts commit c14777c6bf.

clang 5 is not widely available enough for people to indent with.  This
is particularly problematic when rebasing/adjusting branches.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-22 14:52:33 +02:00
Daniel Walton
8744028312 lib: copy_nexthops() only copies the first nexthop
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

Before the fix NHT had each path resolving via swp1

cel-redxp-10# show ip route 20.0.11.253
Routing entry for 20.0.11.0/24
  Known via "bgp", distance 20, metric 0, best
  Last update 00:00:20 ago
  * 169.254.0.1, via swp1
  * 169.254.0.17, via swp2

cel-redxp-10#

cel-redxp-10# show ip nht
[snip]
20.0.11.253
 resolved via bgp
 via 169.254.0.1, swp1
 via 169.254.0.1, swp1
 Client list: pim(fd 19)

After the fix

cel-redxp-10# show ip nht
[snip]
20.0.11.253
 resolved via bgp
 via 169.254.0.1, swp1
 via 169.254.0.17, swp2
 Client list: pim(fd 19)
2017-07-20 17:11:43 +00:00
Daniel Walton
b37aead99b lib: route_node_lookup() needs to apply_mask() to prefix
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   <qlyoung@cumulusnetworks.com>
2017-07-19 16:54:24 +00:00
whitespace / reindent
c14777c6bf
*: reindent pt. 2
w/ clang 5

* reflow comments
* struct members go 1 per line
* binpack algo was adjusted
2017-07-17 15:26:02 -04:00
whitespace / reindent
d62a17aede *: reindent
indent.py `git ls-files | pcregrep '\.[ch]$' | pcregrep -v '^(ldpd|babeld|nhrpd)/'`

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-17 14:04:07 +02:00
Donald Sharp
e553b498f1 Merge pull request #820 from opensourcerouting/gcc7
fix new warnings emitted by GCC 7
2017-07-14 12:54:40 -04:00
David Lamparter
33cef91932 lib: parser: remove incorrect assert
A {foo|bar|baz} graph node will have more than 1/2 incoming links even
if no other references are left to it (which is what the assert was
previously trying to ensure.)

I don't see a good way to "fix" the assert so I'm just removing it.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 17:53:59 +02:00
David Lamparter
22106bbf68 Merge remote-tracking branch 'frr/master' into table-hash-ospf6-lsdb-refactor
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 17:30:56 +02:00
David Lamparter
20a6c6f31f *: fix GCC 7 warnings/issues
The label initializer & nhrpd variable are just to shut up GCC 7,
the other two are actual bugs.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 16:59:44 +02:00
David Lamparter
acd738fc7f *: fix GCC 7 switch/case fallthrough warnings
Need a comment on these.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 16:59:43 +02:00
Donald Sharp
1ea6b3f237 Merge remote-tracking branch 'origin/master' into evpn_plus_struct_attr 2017-07-14 08:24:46 -04:00
Donald Sharp
da571b7a6c Merge remote-tracking branch 'origin/master' into evpn_plus_struct_attr 2017-07-14 08:11:05 -04:00
Russ White
28bd1c1158 Merge pull request #813 from opensourcerouting/newline-redux
newline redux
2017-07-14 08:00:43 -04:00
Donald Sharp
eef83e96f7 Merge pull request #762 from bingen/mutiple_nh_recursive_levels
Allow for more than 1 NH recursion level
2017-07-14 07:44:02 -04:00
David Lamparter
28b672fcd3 lib, vtysh: remove now-useless newline arg
It's always \n now, hooray.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 13:18:14 +02:00
David Lamparter
84a98309de Merge remote-tracking branch 'frr/master' into newline-redux
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 13:15:55 +02:00
Russ White
79af1cb338 Merge pull request #808 from qlyoung/vtysh-termcols
lib, vtysh: pretty-print variable autocompletions
2017-07-14 07:10:13 -04:00
David Lamparter
50790e72fb *: remove vty_outln again
(PRs merged to master added another few vty_outln() calls)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 13:09:47 +02:00
David Lamparter
2d8270596a Merge remote-tracking branch 'frr/master' into newline-redux
Lots of conflicts from CMD_WARNING_CONFIG_FAILED...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 13:07:30 +02:00
David Lamparter
625e016d14 *: remove VTYNL, part 6 of 6
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 10:20:03 +02:00
David Lamparter
55f70b671f *: remove VTYNL, part 4 of 6
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 10:20:03 +02:00
David Lamparter
61b7d449bd *: remove VTYNL, part 3 of 6
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 10:20:03 +02:00
David Lamparter
26a429fe8e *: remove VTYNL, part 2 of 6
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 10:20:02 +02:00
David Lamparter
6d3c2ed4ed *: remove VTYNL, part 1 of 6
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 10:20:02 +02:00
David Lamparter
6b18e3b2e0 ospf6d: VNL -> VTYNL
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 10:20:02 +02:00
David Lamparter
181039f3d7 *: ditch vty_outln(), part 2 of 2
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-14 10:19:58 +02:00
Daniel Walton
f1a05de982 vtysh: return non-zero for configuration failures
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

This allows frr-reload.py (or anything else that scripts via vtysh)
to know if the vtysh command worked or hit an error.
2017-07-13 19:56:08 +00:00
David Lamparter
5c7571d43f *: ditch vty_outln(), part 1 of 2
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-13 20:29:22 +02:00
David Lamparter
83eba583d7 lib: move \n vs. \r\n handling into vty code
Instead of having an ?: expression embedded in every single caller of
vty_out, just expand \n to \r\n in the vty code if neccessary.

(Deprecation warnings will be enabled in the next commits which will do
the search-and-replace over the codebase.)

[This reverts commit 4d5f445 "lib: add vty_outln()"]

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-13 20:29:20 +02:00
David Lamparter
8867927f0e lib: vty: warn when using compatibility macros
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-13 20:29:18 +02:00
Quentin Young
1a0f614dd2
lib, vtysh: pretty-print variable autocompletions
Pretty-prints variable autocompletions by breaking them up into multiple
lines, indenting them consistently and respecting the column width of
the terminal.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-13 10:59:13 -04:00
Donald Sharp
4b8197a4f7 Merge pull request #807 from Jafaral/qua2frr
Find/Replace Quagga/FRR
2017-07-13 10:00:19 -04:00
David Lamparter
76ac0fe511 Merge pull request #798 from dwalton76/CMD_RANGE_STR
bgpd: --enable-multipath=256 setting is ignored
2017-07-13 14:58:52 +02:00
David Lamparter
f4b0619dc6 Merge pull request #796 from qlyoung/fix-hash-stats
lib: use 32-bit atomics, s/pow/mul
2017-07-13 14:57:44 +02:00
vivek
90e60aa7c9 bgpd: Additional configuration for EVPN
Implement configuration options for EVPN. The configuration options include
VNI configuration with RD and Import and Export Route Targets. Also, display
the EVPN configuration.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2017-07-12 15:07:27 -04:00
Jafar Al-Gharaibeh
7c4e6ea920 lib: fix error message to reference FRR
Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
2017-07-12 11:42:25 -05:00
vivek
5b4168879d lib: Define handlers for VNI and MACIP
Define client handlers for processing add or delete of local VNIs
and local MACIPs.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2017-07-12 12:39:12 -04:00
Jafar Al-Gharaibeh
ef8a03ccd1 lib: Change comment to reference watchfrr
Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
2017-07-12 11:36:47 -05:00
vivek
2232a77c2b zebra: MAC and Neighbor (ARP/ND) handling
Implement handling of MACs and Neighbors (ARP/ND entries) in zebra:
- MAC and Neighbor database handlers
- Read MACs and Neighbors from the kernel, when needed and create
entries in zebra's MAC and Neighbor databases.
- Handle add/update/delete notifications from the kernel for MACs and
Neighbors and update zebra's database appropriately
- Inform locally learnt MACs and Neighbors to client
- Handle MACIP add/delete from client and install appriporiate entries
into the kernel
- Since Neighbor entries will be installed on an SVI, implement the
needed mappings

NOTE: kernel interface is only implemented for Linux/netlink

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
2017-07-12 12:29:25 -04:00
Christian Franke
e3054ee94f zebra: prettier format for multilevel-recursive routes
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2017-07-12 18:28:40 +02:00
Christian Franke
8fad3ca3a0 lib: copy rmap_src too in copy_nexthops
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2017-07-12 18:28:03 +02:00
Christian Franke
9fb47c0584 lib,zebra: Fix ALL_NEXTHOPS iterator
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2017-07-12 18:27:55 +02:00
vivek
13d60d351c zebra: VNI and VTEP handling
Implement fundamental handling for VNIs and VTEPs:
- Handle EVPN enable/disable by client (advertise-all-vni)
- Create/update/delete VNIs based on VxLAN interface events and inform
client
- Handle VTEP add/delete from client and install into kernel
- New debug command for VxLAN/EVPN
- kernel interface (Linux/netlink only)

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
2017-07-12 12:26:02 -04:00
Donald Sharp
4c25598b4e Merge pull request #791 from LabNConsulting/working/master/patch-set/style
A couple of compatibility/style fixes
2017-07-12 12:13:37 -04:00
Donald Sharp
991ae35b17 Merge pull request #793 from opensourcerouting/hash-double-init
lib: init & cleanup fixes
2017-07-12 08:27:24 -04:00
Quentin Young
62c3d0260c
lib: use 32-bit atomics, s/pow/mul
Some platforms don't support 64-bit atomics, missed converting a
floating point pow() to an integral mul when changing SD algo.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-11 14:43:50 -04:00
Lou Berger
c75af349d7 vty: add some more defines for backwards compatibility
Signed-off-by: Lou Berger <lberger@labn.net>
2017-07-11 14:41:44 -04:00
Daniel Walton
6319fd637b bgpd: --enable-multipath=256 setting is ignored
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Restoring some code that was unintentionally removed when we were
migrating to Quentin's parser.
2017-07-11 18:41:08 +00:00
David Lamparter
45082064cb lib: grammar_sandbox: don't pre-setup nodegraph
This shows up as still reachable allocation on exit, which is somewhat
misleading.  Note this only affects --enable-dev-build.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-11 16:10:30 +02:00
David Lamparter
151d7c3591 lib: drop off "masters" list on master_free()
Don't leave a dangling leaked reference.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-11 16:10:29 +02:00
David Lamparter
8d8763f407 lib: fix out-of-tree build
"$(top_srcdir)" is not on the include path, but "$(top_srcdir)/lib" is.
This is relevant when building with a separate build directory.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-11 15:11:21 +02:00
David Lamparter
07181496b7 lib: hash: don't double-init hash list
hash_cmd_init will overwrite _hashes with a new list, while _hashes
already has been initialised from cmd_init(), thread_master_create(), or
any other function that may have created a hash.

Found while valgrind'ing ospf6d/test_lsdb.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-11 14:58:44 +02:00
Lou Berger
dcc0a0d117 vty: add some defines for backwards compatibility
Signed-off-by: Lou Berger <lberger@labn.net>
2017-07-11 08:48:57 -04:00
David Lamparter
736ac221d1 lib: table: use hash for exact-match lookups
Most read accesses of route_table are actually exact matches where
walking down the tree is wildly inefficient.  Use a parallel hash
structure instead.

This significantly speeds up processes that are performance-bound by
table accesses, e.g. BGP withdraw processing.  In other locations, the
improvement is not seen as strongly, e.g. when filter processing is the
limiting factor.

[includes fix to ignore prefix host bits in hash comparison]

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-11 13:47:31 +02:00
David Lamparter
bc7a2c035a lib: table: maintain parallel hash for route_table
See next commit for description.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-11 13:47:31 +02:00
David Lamparter
4cb260c33e lib: add some abstraction guards for table code
route_node->parent and route_node->link shouldn't be touched by user
code since that is a recipe for trouble once we have a hash table in
parallel.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-11 13:47:31 +02:00
David Lamparter
9dc716d64c lib: use "union prefixconstptr" in table code
This allows passing struct prefix_{ipv4,ipv6,evpn} * in addition to
struct prefix * without an extra cast (since the union uses the gcc
transparent-union extension present in all compilers that we support.)

Also applies some "const" while we're at it.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-11 13:47:27 +02:00
Donald Sharp
7fb9d20fcf lib: Remove typedef from ipaddr
The ipaddr_t type was conflicting with code on omnios.

Remove the typedef

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-07-10 22:15:56 +02:00
David Lamparter
21bb7c8774 Merge commit '3d22338f04d9554fa' into evpn-prep
Conflicts:
	lib/Makefile.am

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-10 22:15:19 +02:00
Daniel Walton
dfd8121281 Merge branch 'master' of https://github.com/dwalton76/frr into bgpd-ipv4-plus-label-misc3
Conflicts:
	bgpd/bgp_route.c
	bgpd/bgp_zebra.c
2017-07-10 13:06:19 +00:00
Russ White
ceae5559a5 Merge pull request #778 from qlyoung/fix-excess-docstring
Fix excess docstring
2017-07-07 13:31:08 -04:00
Quentin Young
007b0667e0
lib: fix more docstrings
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-06 16:27:48 -04:00
David Lamparter
ecf3d1b9d5 lib: fix vty_out with >1024 bytes of output
Consuming va_args modifies its internal bits, hence the need to copy
it... but the copying wasn't quite right just yet.

Fixes: 4d5f445 ("lib: add vty_outln()")
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-06 17:35:25 +02:00
Daniel Walton
b83c95ce27 Merge branch 'master' of https://github.com/dwalton76/frr into bgpd-ipv4-plus-label-misc3 2017-07-05 19:41:51 +00:00
Quentin Young
7111c1a0cd
*: fix excess docstring
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-05 15:33:00 -04:00
Quentin Young
ebb0813089
lib: warn about too much docstring
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-05 14:30:16 -04:00
Quentin Young
e703a0f3af
lib, vtysh: rebase hashstats
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-01 19:18:39 -04:00
Quentin Young
b3db0a22b7
lib: use doubles instead of long doubles
NetBSD can't take the square root of a long double
and we should be fine just using a double here anyway

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-01 19:18:38 -04:00
Quentin Young
dfd19ccc3a
*: update hash_create(), hash_create_size()
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-01 19:18:37 -04:00
Quentin Young
6f6f00107e
lib, vtysh: hashtable statistics
Adds the ability to name hash tables, and a new cli command that will
show various summary statistics for named hash tables.

Statistics computed are
  - load factor
  - full load factor (see comments)
  - stddev of full load factor

Standard deviation is computed by storing the sum of squares of bucket
lengths. This is somewhat susceptible to overflow. On platforms where a
double is 32 bits, placing 65535 or more elements into a hash table
opens up the potential for overflow, depending on how they are arranged
in buckets (which depends on the hash function). For example, placing
65535 elements into one hash bucket would cause ssq overflow, but
distributing 40000000 elements evenly among 400000 buckets (100 elements
per bucket) would not.

These cases are extremely degenerate, so the vague possibility of
overflow in an informational command is deemed an acceptable tradeoff
for constant time calculation of variance without locks or compromising
efficiency of actual table operations.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-01 19:18:35 -04:00
Quentin Young
4db0cff16a
lib: add statistics for hash tables
Adds a function that calculates various statistics on our implementation
of a hash table. These are useful for evaluating performance.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-01 19:18:06 -04:00
Daniel Walton
1161690b93 Merge branch 'master' of https://github.com/dwalton76/frr into bgpd-ipv4-plus-label-misc3
Conflicts:
	bgpd/bgp_route.c
2017-06-30 17:52:56 +00:00
Quentin Young
fe232cf819 lib: printf bugfixes & improvement
* Fix bad format specifier in thread.[ch]
* Move PRINTF_ATTRIBUTE macro to zebra.h
* Use PRINTF_ATTRIBUTE on termtable printers

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-30 16:18:20 +00:00
Jafar Al-Gharaibeh
4a19f832b4 Merge pull request #768 from qlyoung/fix-gitignore2
lib, bgpd: fix .gitignore
2017-06-30 10:38:20 -05:00
Jafar Al-Gharaibeh
1d0ca3ebf3 Merge pull request #770 from donaldsharp/zclient
Zclient
2017-06-30 10:35:28 -05:00
Jafar Al-Gharaibeh
b5a46fd2a6 Merge pull request #723 from qlyoung/fix-static-pipe-poker-buf
lib: more multithreading infra work
2017-06-30 10:00:43 -05:00
Russ White
801ec168a4 Merge pull request #769 from qlyoung/fix-json-int
lib: always use 64-bit integers for json
2017-06-30 10:44:03 -04:00
Donald Sharp
85bf0f3237 lib: Fix clang warning
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-06-30 10:29:14 -04:00
Jafar Al-Gharaibeh
fd576f61bc Merge pull request #767 from donaldsharp/if_update
bgpd, lib, zebra: Fix if_update function to represent what it does
2017-06-29 23:42:21 -05:00
Quentin Young
26eb0e4ff5 lib: fix merge error
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 23:40:57 +00:00
Quentin Young
972a411ccc lib: more show thread cpu
Add support for naming pthreads. Also, note that we don't have any
records yet if that's the case.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 23:40:56 +00:00
Quentin Young
62f4402239 lib: make show thread... commands mt-aware
This patch fixes up show thread commands so that they know about
and operate on all extant thread_masters, since we can now have multiple
running in any given application.

This change also eliminates a heap use after free that appears when
using a single cpu_record shared among multiple threads. Since struct
thread's have pointers to bits of memory that are freed when the global
statistics hash table is freed, later accesses are invalid. By moving
the stats hash to be unique to each thread_master this problem is
sidestepped.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 23:37:08 +00:00
Quentin Young
e0bebc7c22 lib: mt-safe tracebacks
can't be using them statics anymore sonny

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 23:32:15 +00:00
Quentin Young
0693f6fc75 lib: un-static trash buffer for pipe poker
data races

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 23:32:15 +00:00
Quentin Young
d849012d19 lib: always use 64-bit integers for json
json-c does not (yet) offer support for unsigned integer types, and
furthermore, the docs state that all integers are stored internally as
64-bit. So there's never a case in which we would want to limit,
implicitly or otherwise, the range of an integer when adding it to a
json object.

Among other things this fixes the display of ASN values greater than
(1/2) * (2^32 - 1)

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 23:05:36 +00:00
Quentin Young
9478f47801 lib, bgpd: fix .gitignore
gotta ignore clippy stuff

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 19:39:36 +00:00
Quentin Young
8e25c8ce2f *: rebase vty_outln() -> master
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 17:38:59 +00:00
Quentin Young
e31b6333f4 *: vty_outln (vty, "") --> vty_out (vty, VTYNL)
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 17:34:56 +00:00
Quentin Young
1318e7c841 *: s/VTY_NEWLINE/VTYNL/g
Should be able to fit more vty_out onto one line now

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 17:34:54 +00:00
Quentin Young
96ade3ed77 *: use vty_outln
Saves 400 lines

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 17:31:28 +00:00
Quentin Young
4d5f445750 lib: add vty_outln()
Like *.println() in some other unspeakable languages

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-29 16:28:21 +00:00
Russ White
9e3b206d7c Merge pull request #701 from qlyoung/mt-safe-cancel
mt-safe thread_cancel()
2017-06-29 11:09:24 -04:00
Russ White
5bee21f37c Merge pull request #735 from qlyoung/fix-routemap
Fix routemap
2017-06-29 11:06:52 -04:00
Russ White
0bc44f61c9 Merge pull request #754 from qlyoung/fix-argv-arg
use argv->text where appropriate
2017-06-29 11:06:15 -04:00
Jafar Al-Gharaibeh
0eef52fd95 Merge pull request #759 from qlyoung/remove-vty-argparsers
*: remove VTY_GET_*
2017-06-29 09:36:06 -05:00
Donald Sharp
16895dbf73 bgpd, lib, zebra: Fix if_update function to represent what it does
The if_update function was taking the interface name as
input and reapplying it, using strncpy to reapply the name.
This has several issues.  strncpy should not be used
to copy memory in place.  The second issue is that
the interface name is not actually changing when we
update interface to be in the new vrf.

Since every usage of if_update was just reapplying the same
name the interface actually had, just remove that part of
the function and rename it to if_update_to_new_vrf
to represent what it is actually doing.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-06-29 09:09:23 -04:00
ßingen
f9e1b38e1a Allow for more than 1 NH recursion level
Before, only one level of recursive resolution was supported.

Signed-off-by: ßingen <bingen@voltanet.io>
2017-06-28 21:32:18 +02:00
Don Slice
3bec29ac95 lib/ospf/eigrp: enable ospf and eigrp to use more specific network statements
Issue reported that a configuration commonly used on other routing implementations
fails in frr.  If under ospf, "network 172.16.1.1/32 area 0" or under eigrp, "network
172.16.1.1/32" is entered, the appropriate interfaces are not included in the routing
protocol.  This was because the code was calling prefix_match, which did not match if
the network statement had a longer mask than the interface being matched.  This fix
takes away that restriction by creating a "lib/prefix_match_network_statement" function
which doesn't care about the mask of the interface.  Manual testing shows both ospf and
eigrp now can be defined with more specific network statements.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2017-06-28 14:57:36 -04:00
Donald Sharp
1e84e9a697 Merge pull request #714 from opensourcerouting/cli_magic_defpy
CLI magic: part 1 (DEFPY)
2017-06-28 09:48:33 -04:00
Quentin Young
facfee22f5 *: remove VTY_GET_*
CLI validates input tokens, so there's no need to do it in handler
functions anymore.

spatch follows
----------------

@getull@
expression v;
expression str;
@@
<...
- VTY_GET_ULL(..., v, str)
+ v = strtoull (str, NULL, 10)
...>

@getul@
expression v;
expression str;
@@
<...
- VTY_GET_ULONG(..., v, str)
+ v = strtoul (str, NULL, 10)
...>

@getintrange@
expression name;
expression v;
expression str;
@@
<...
- VTY_GET_INTEGER_RANGE(name, v, str, ...)
+ v = strtoul (str, NULL, 10)
...>

@getint@
expression v;
expression str;
@@
<...
- VTY_GET_INTEGER(..., v, str)
+ v = strtoul (str, NULL, 10)
...>

@getv4@
expression v;
expression str;
@@
<...
- VTY_GET_IPV4_ADDRESS(..., v, str)
+ inet_aton (str, &v)
...>

@getv4pfx@
expression v;
expression str;
@@
<...
- VTY_GET_IPV4_PREFIX(..., v, str)
+ str2prefix_ipv4 (str, &v)
...>

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-27 19:04:41 +00:00
Quentin Young
7e045c3d42 *: use ->text and strmatch where appropriate
Still need to go fix all the places where we do a 1-char strncmp...

spatch follows
------------------

@asdf@
expression idx;
@@
<...
 strcmp (
- argv[idx]->arg,
+ argv[idx]->text,
  ...)
...>

@depends on asdf@
expression idx;
@@
<...
- !strcmp (argv[idx]->text,
+ strmatch (argv[idx]->text,
           ...)
...>

@depends on asdf@
expression idx;
expression arg;
@@
<...
- strcmp (argv[idx]->text, arg) == 0
+ strmatch (argv[idx]->text, arg)
...>

@depends on asdf@
expression idx;
expression arg;
@@
<...
- strcmp (argv[idx]->text, arg) != 0
+ !strmatch (argv[idx]->text, arg)
...>

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-27 17:46:42 +00:00
Jafar Al-Gharaibeh
43d372ece4 Merge pull request #748 from qlyoung/fix-vtysh-exit
lib: actually exit when asked to 'do' so
2017-06-27 10:47:45 -05:00
Daniel Walton
4fbf55e986 Merge branch 'master' of https://github.com/dwalton76/frr into bgpd-ipv4-plus-label-misc3 2017-06-26 17:24:44 +00:00
Quentin Young
5046f07672 lib: look at the correct token for json
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-22 00:19:24 +00:00
Quentin Young
e82a17c61b lib: actually exit when asked to do so
When vtysh sends 'exit' to a daemon, we set the vty->status to
VTY_CLOSE but never actually close the connection. Lovely.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-21 20:06:44 +00:00
Olivier Dugeon
8ea37652c7 Merge pull request #745 from qlyoung/fix-lookup
*: simplify log message lookup
2017-06-21 18:22:52 +02:00
Quentin Young
af3346ecd5 lib: some minor cli fixups for routemap
Need to use the appropriate token field

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-21 15:41:35 +00:00
Quentin Young
56b4067930 *: simplify log message lookup
log.c provides functionality for associating a constant (typically a
protocol constant) with a string and finding the string given the
constant. However this is highly delicate code that is extremely prone
to stack overflows and off-by-one's due to requiring the developer to
always remember to update the array size constant and to do so correctly
which, as shown by example, is never a good idea.b

The original goal of this code was to try to implement lookups in O(1)
time without a linear search through the message array. Since this code
is used 99% of the time for debugs, it's worth the 5-6 additional cmp's
worst case if it means we avoid explitable bugs due to oversights...

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-21 15:22:21 +00:00
Daniel Walton
c1a44e4367 Merge branch 'master' into bgpd-ipv4-plus-label-misc3 2017-06-21 10:30:29 -04:00
Russ White
4ce856eef7 Merge pull request #698 from dslicenc/cm16737-srgb-block
zebra: define default segment routing global block values
2017-06-19 22:00:57 -04:00
Russ White
a88bbcb8a0 Merge pull request #732 from qlyoung/coverity-memes
lib: termtable coverity warnings
2017-06-19 21:52:10 -04:00
Donald Sharp
d368cd48b9 Merge pull request #730 from opensourcerouting/rbtree-improvement
RB tree improvement
2017-06-19 17:27:55 -04:00
Rafael Zalamena
b19ad86195 lib: fix __unused compilation on old platforms
Expand the macro __attribute__ to avoid problem with old platforms that
do not define this.
2017-06-19 13:24:04 -03:00
Rafael Zalamena
5508764270 lib: rename rb_tree to fix NetBSD compilation
Change rb_tree struct name to rbt_tree to avoid conflicts with NetBSD.
2017-06-19 13:17:35 -03:00
Quentin Young
58b0878ac6 ospfd: fix route-map brokenness
ospf redefines the standard route map commands which causes ambiguity
issues in the CLI parser, it also uses a signed integer to hold an
unsigned quantity leading to weirdness when specifying metrics larger
than 2,147,483,647

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-17 00:49:15 +00:00
Quentin Young
98f224ef22 lib: improve routemap error messages
indicate which daemon was the source of the message and that it may be a
question of daemon support rather than a malformed argument

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-16 22:43:09 +00:00
Donald Sharp
6021c8d382 lib: Fix ordering of RB Tree
So the *bsd implementations of RB Tree's for older
platforms use a macro implementation.  New platforms
have converted to a function implementation that uses
a different calling parameter list.  So when
we attempt to build FRR on older *bsd implementations
the macro's and functions do not interact too well.

As a workaround put the openbsd-tree.h #include
inside of zebra.h at a point before the particular
platforms version is included.  Since we use
the same #if guard for the header we should be ok.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-06-16 17:48:18 -04:00
David Lamparter
2dc1ef552b Merge pull request #725 from donaldsharp/vrf_completion
Vrf completion
2017-06-16 21:59:23 +02:00
Quentin Young
7feb7d7e65 lib: tighten up exit semantics for thread_fetch()
* Account for the pipe poker in poll() by explicitly returning NULL when
  we have no events, timers or file descriptors to work with
* Add a comment explaining exactly what we are doing and why

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-16 19:56:58 +00:00
Quentin Young
8797240ea4 lib: mt-safe cancel, round deux
* Update pollfds copy as well as the original
* Keep array count for copy in thread_master
* Remove last remnants of POLLHUP in .events field
* Remove unused snmpcount (lolwut)
* Improve docs
* Add missing do_thread_cancel() call in thread_cancel_event()
* Change thread_fetch() to always enter poll() to avoid starving i/o
* Remember to free up cancel_req when destroying thread_master
* Fix dereference of null pointer
* Fix dead store to timeval
* Fix missing condition for condition variable :-)

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-16 19:56:58 +00:00
Quentin Young
63ccb9cb12 lib: add mt-safe thread_cancel
This patch implements an MT-safe version of thread_cancel() in
thread_cancel_async(). Behavior as follows:

* Cancellation requests are queued into a list

* Cancellation requests made from the same pthread as the thread_master
  owner are serviced immediately (thread_cancel())

* Cancellation requests made from a separate pthread are queued and the
  call blocks on a condition variable until the owning pthread services
  the request, at which point the condition variable is signaled and
  execution continues (thread_cancel_async())

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-16 19:56:58 +00:00
Daniel Walton
9bedbb1e52 bgpd: Install SAFI_LABELED_UNICAST routes in SAFI_UNICAST table
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

- All ipv4 labeled-unicast routes are now installed in the ipv4 unicast
  table. This allows us to do things like take routes from an ipv4
  unicast peer, allocate a label for them and TX them to a ipv4
  labeled-unicast peer. We can do the opposite where we take routes from
  a labeled-unicast peer, remove the label and advertise them to an ipv4
  unicast peer.

- Multipath over a labeled route and non-labeled route is not allowed.

- You cannot activate a peer for both 'ipv4 unicast' and 'ipv4
  labeled-unicast'

- The 'tag' variable was overloaded for zebra's route tag feature as
  well as the mpls label. I added a 'mpls_label_t mpls' variable to
  avoid this.  This is much cleaner but resulted in touching a lot of
  code.
2017-06-16 19:12:57 +00:00
Quentin Young
94b989402f lib: termtable coverity warnings
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-16 19:04:57 +00:00
Renato Westphal
c740f7d367 ldpd: convert cli and get rid of the xml interface
The xml2cli.pl script was useful years ago when the vty code was very
rudimentary. This is not the case anymore, so convert all ldpd CLI
commands to use DEFUNs directly and get rid of the XML interface.

The benefits are:
* Consistency with the other daemons;
* One less build dependency (the LibXML perl module);
* Easier to add new commands.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-06-16 14:43:42 -03:00
Donald Sharp
d7a75a6ca6 lib, vtysh, zebra: Fix per CR comments
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-06-16 13:09:37 -04:00
Donald Sharp
d617d5febf *: Add vrf autocompletion for commands
Switch NAME to VRFNAME and add vrf autocompletion
to commands that have them

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-06-16 13:01:51 -04:00
David Lamparter
62e4232010 Merge pull request #718 from qlyoung/fix-vtysh-shit
lib: allow 'do' commands in ENABLE_NODE
2017-06-16 18:25:48 +02:00
Quentin Young
b170d66a78 lib: allow 'do' commands in ENABLE_NODE
'do' is syntax sugar that allows the user to execute a command under
ENABLE_NODE when in another CLI node. If the user is already in
ENABLE_NODE, use of 'do' was previously disallowed. This patch allows it
because it makes it easier for us to hack around certain instances of
the node synchronization problem with vtysh.

Also included is a fix for one of these problems.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-16 14:46:08 +00:00
Rafael Zalamena
8f942af902 lib: fix a possible NULL deference
Silences a warning generated by clang.
2017-06-16 11:08:43 -03:00
Rafael Zalamena
45926e5874 lib: improve the RB implementation
Switch the RB tree implementation completely to the new dlg@'s version
that uses pre-declared functions instead of macros for tree functions.

Original e-mail/diff:
https://marc.info/?l=openbsd-tech&m=147087487111068&w=2

Pros:

* Reduces the amount of code that the usage of those macros generate
* Allows the compiler to do a better compile-time check job
* Might have better i-cache utilization since the tree code is shared

Con:

* dlg@ benchmarks shows it has 'very slightly slower' insertions
* imported RB_* code must adapt the following calls:
  RB_INIT(), RB_GENERATE(), RB_ROOT(), RB_EMPTY(), make compare
  functions use 'const' (if not already) and maybe others.
2017-06-16 10:44:31 -03:00
Quentin Young
0f2b0a3893 lib: termtable MTYPE_TMP -> MTYPE_TTABLE
And some style nits.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-16 02:10:34 +00:00
Quentin Young
f051edd156 lib: add table generator
Allows for easy preparation of tabular output.

Supports:
 -- Padding
 -- Alignment
 -- Styling
2017-06-16 02:02:42 +00:00
David Lamparter
4f138a3e82 lib: fix protocol name array size
Oops.  Fixes #715.

Reported-by: Daniel Walton <dwalton@cumulusnetworks.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-06-14 15:56:14 -04:00
David Lamparter
1c2596c15f Merge pull request #716 from dwalton76/show-route-map
lib: "show route-map" is missing from the parser
2017-06-14 21:07:24 +02:00
Daniel Walton
6d2729e3d7 lib: "show route-map" is missing from the parser
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2017-06-14 18:21:17 +00:00
David Lamparter
4d85f868a5 lib: fix CLI parser memleak
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-06-14 19:29:27 +02:00
David Lamparter
6cdff32196 lib: use DEFPY() for plist.c
Shorten lib/plist.c by combining the various command variants...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-06-14 19:29:26 +02:00
David Lamparter
5578a14d94 python: clidef.py
Adds "DEFPY()" which invokes an additional layer of preprocessing, so
that we get pre-parsed and named function arguments for the CLI.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-06-14 19:29:26 +02:00
David Lamparter
29ad6f6882 lib: clippy the assistant
Wraps the command parsing code for Python, so we can use it to do fancy
preprocessing and replace extract.pl.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-06-14 19:29:23 +02:00
David Lamparter
92e5026146 build: fix some cross-compilation issues
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-06-14 15:46:36 +02:00
David Lamparter
97bd5c48de Merge remote-tracking branch 'frr/master' into pull-624 2017-06-13 09:18:14 +02:00
Russ White
991da9b149 Merge pull request #694 from qlyoung/event-loop
*: remove THREAD_BACKGROUND
2017-06-09 13:54:43 -04:00
Don Slice
129296682f zebra: define default segment routing global block values
Standard define the default SRGB range from 16000 to 23999.  This
commit defines these default values for frr.

Ticket: CM-16737
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: CCR-6347
2017-06-08 06:36:33 -07:00
Quentin Young
a587d00bac *: remove THREAD_BACKGROUND
it's just an alias for a millisecond timer used in exactly nine places
and serves only to complicate

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-08 01:53:50 +00:00
Donald Sharp
1152f48669 lib: Add some breadcrumbs for new route types
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-06-07 15:47:35 -04:00
David Lamparter
fa135ba008 Merge pull request #648 from qlyoung/fix-pollfd-stack-overflow
lib: use heap for pollfds
2017-06-06 17:25:06 +02:00
Quentin Young
82fc5591f4 lib: allow infinite sleep in poll()
If fd_poll() is called with no file descriptors, an incorrect check in
the function prelude causes it to return instantly; for a thread that
wishes to poll but has no file descriptors, this results in busy
waiting. Desired behavior is to block.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-06 14:23:42 +00:00
Donald Sharp
657cde1267 lib: Add zapi_route function.
Allow routing protocols to call one function to add/delete
routes into zebra.  Future commits will start adding
this code to individual routing protocols.

Why are we doing this?  Well the zapi_ipv[4|6]_route functions
are fundamentally broken in their ability to pass down anything
but NEXTHOP_TYPE_IFINDEX or NEXTHOP_TYPE_IPV[4|6] and we need
the ability to pass down a bit more information.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-06-04 19:14:44 -04:00
Renato Westphal
082ac4fc2f Merge pull request #656 from qlyoung/fix-varhandler-reachable
lib: free varhandlers on exit
2017-06-03 19:00:52 -03:00
Donald Sharp
1da2945621 lib, zebra: Pass up kernel table_id for vrf's
pim controls the vrf table creation for due to the way that
pim must interact with the kernel.  In order to match the
table_id for unicast <-> multicast( not necessary but a
real nice to have ) we need to pass up from zebra the
table_id associated with the vrf.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-06-02 13:43:15 -04:00
Quentin Young
2b4dc78f7f lib: free varhandler on exit
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-06-02 17:24:01 +00:00
Quentin Young
95db01eb22 lib: use heap for pollfds
a bunch of pollfds can cause a stack overflow when using a stack
allocated buffer...silly me...

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-31 23:21:40 +00:00
Quentin Young
8c88ac94fa lib: make writing end of pipe nonblocking
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-31 17:30:53 +00:00
Donald Sharp
293067f086 Merge remote-tracking branch 'origin/master' into babel 2017-05-30 10:58:03 -04:00
Quentin Young
a772d6eae6 lib: missed AWAKEN in r/w thread scheduler
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-30 10:27:10 -04:00
Quentin Young
3bf2673b30 lib: allow pthreads to poke poll()
When scheduling a task onto a thread master owned by another pthread, we
need to lock the thread master's mutex. However, if the pthread which
owns that thread master is in poll(), we could be stuck waiting for a
very long time. To solve this, we copy all data poll() needs and unlock
during poll(). To break the target pthread out of poll(), thread_master
has gained a pipe whose reading end is passed into poll(). After an event
that requires immediate action by the target pthread, a byte is written
into the pipe in order to wake it up.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
[DL: split off from select() removal]
2017-05-30 10:27:10 -04:00
Quentin Young
75bcb3558d lib: remove select()
poll() is present on every supported platform and does not have an upper
limit on file descriptors.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
[DL: split off from AWAKEN() change]
2017-05-30 10:27:10 -04:00
David Lamparter
b7218a7903 Merge pull request #563 from qlyoung/enforce-no-pthread-cancellation
lib: enforce thread_cancel() MT-unsafe invariant
2017-05-30 15:10:52 +02:00
vivek
86f1ef44f7 lib: Refine EVPN prefix definition
Modify EVPN prefix to use the generic IP address structure. Add support
for EVPN type-2 and type-3 prefix dump. Fix references to modified fields
as needed.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-25 10:20:03 -07:00
vivek
482c0fb076 lib: Define generic IP address structure
Define an IP address structure which is a union of an IPv4 and IPv6
address. This is for subsequent use in EVPN.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-25 10:20:03 -07:00
vivek
4e9da20145 lib: Additional APIs in bitfield library
Added APIs to:
a) pre-assign 0th bit in the bitfield
b) free 0th bit in the bitfield
c) free the allocated bitfield data

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Vivek Venkatraman <vivek@cumulusnetworks.com>
2017-05-25 10:20:03 -07:00
vivek
8234a9875b lib: Macro for number of entries in hash table
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2017-05-25 10:20:03 -07:00
vivek
7c6d877325 lib: VxLAN Network Identifier definition
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-25 10:20:03 -07:00
vivek
6eb2c8b8a8 lib: VLAN definition
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-25 10:20:03 -07:00
Donald Sharp
9e962de4b6 Merge remote-tracking branch 'origin/stable/3.0' 2017-05-24 11:22:35 -04:00
Lou Berger
b1ff4223c7 lib: remove BGP_ENCAP(V6)_NODE
Signed-off-by: Lou Berger <lberger@labn.net>
2017-05-23 15:40:12 -04:00
Lou Berger
93b9c66617 lib: remove BGP_ENCAP(V6)_NODE
Signed-off-by: Lou Berger <lberger@labn.net>
2017-05-23 15:00:53 -04:00
Quentin Young
fb12f2c75f lib: fix array sizes for capability map
incorrect array sizes causing out of bounds read and potentially
incorrect capability settings

introduced in 1b322039

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-22 02:32:12 +00:00
Quentin Young
48cdf1a9d6 lib: enforce thread_cancel() MT-unsafe invariant
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-19 19:10:21 +00:00
David Lamparter
5662e2c91c lib: fix __attribute__ typo
__attribute breaks pycparser

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-18 14:07:28 -04:00
David Lamparter
297c8f6a31 lib: qobj: MT-guard with rwlock
Make qobj_* calls MT-Safe/LF-Blocking.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-18 14:07:28 -04:00
David Lamparter
b85120bcb3 lib: detangle protocol name/instance from logging
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-18 14:07:28 -04:00
David Lamparter
fa84d1932b Merge branch 'stable/3.0'
Conflicts:
	ldpd/lde.c
	zebra/label_manager.c

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-18 14:14:00 +02:00
Donald Sharp
f6a64b5fa0 Merge pull request #512 from bingen/tmp_lm_relay_async
lm: Make relay label manager async
2017-05-18 07:09:07 -04:00
David Lamparter
c3fb7c1064 Merge branch 'frr/pull/550'
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-18 12:32:28 +02:00
David Lamparter
bac7b7b935 Merge pull request #537 from donaldsharp/vrf_stuff
Vrf stuff
2017-05-17 22:06:39 +02:00
Quentin Young
dbb3cdb601 lib: correctly handle EOF when using poll()
Descriptor owner should handle EOF, not thread.c

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-17 15:05:42 +00:00
Lou Berger
745ad980fe Merge pull request #538 from qlyoung/fix-stack-access-2
lib: return thread * from thread_add*
2017-05-17 07:34:30 -04:00
David Lamparter
34f99549ab Merge pull request #549 from qlyoung/fix-poll-eof
lib: correctly handle EOF when using poll()
2017-05-17 11:25:30 +02:00
Donald Sharp
fe2bfdd608 Merge pull request #532 from opensourcerouting/gpl-headers
*: make consistent & update GPLv2 file headers
2017-05-16 18:04:31 -04:00
Daniel Walton
7780aaaa72 lib: Remove the "This command currently does nothing" message
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

This breaks the "vtysh -m" output which causes problems for
frr-reload.py
2017-05-16 18:57:20 +00:00
Quentin Young
6ccdc60d96 lib: correctly handle EOF when using poll()
Descriptor owner should handle EOF, not thread.c

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-16 18:29:51 +00:00
Quentin Young
d818259863 lib: let vty.c manage its own pointers
vty.c doesn't require back refs for a couple threads

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-16 15:59:51 +00:00
Quentin Young
56a94b3668 lib: return thread pointer from thread_add*
Allow some more flexibility in case callers wish to manage their own
thread pointers and don't require or don't want the thread to keep a
back reference to its holding pointer.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-16 15:59:51 +00:00
Donald Sharp
910a5c0e21 Merge branch 'master' into vrf_stuff 2017-05-16 07:58:55 -04:00
Donald Sharp
21a15acdde lib: Fix missing vrf_int.h from make distribute
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-16 07:49:46 -04:00
Donald Sharp
291ca371e2 lib: Improve error message for the developer
I keep getting people asking me about what to do
when this error is generated when they are programming
new cli.  Maybe this is a bit better bread-crumb?

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-15 20:55:33 -04:00
Donald Sharp
97b1a80cbb lib: Add some more documentation to vrf.h
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-15 19:37:16 -04:00
Donald Sharp
6df8536487 *: Consolidate vrf_hooks into vrf_init
We only needed to add/change the vrf callbacks when we initialize
the vrf subsystem.  As such it is not necessary to handle the callbacks
in any other way than through the init function.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-15 19:31:27 -04:00
Donald Sharp
759927a1b9 *: Remove some unneeded functions
vrf_iflist_create -> By the time this is called in enable, the vrf's iflist
is already created.  Additionally this code should be a properly of the vrf
to init/destroy not someone else.

vrf_iflist_terminate -> This function should be a property of vrf deletion
and does not need to be exposed.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-15 19:11:20 -04:00
Donald Sharp
7922fc65ae lib, zebra: Cleanup vrf api some
Segregate the vrf enable/disable functionality from other vrf
code.  This is to ensure that people are not actually using
the functions when they should not be.  Also document the
why of it properly in the new vrf_int.h header.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-15 19:02:34 -04:00
David Lamparter
7a38655aa0 lib: parser: remove forgotten line
MTYPE_CMD_TOKEN_DATA isn't used anymore, I forgot to ditch the line.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-15 11:08:25 -04:00
David Lamparter
896014f4bc *: make consistent & update GPLv2 file headers
The FSF's address changed, and we had a mixture of comment styles for
the GPL file header.  (The style with * at the beginning won out with
580 to 141 in existing files.)

Note: I've intentionally left intact other "variations" of the copyright
header, e.g. whether it says "Zebra", "Quagga", "FRR", or nothing.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-15 16:37:41 +02:00
Lou Berger
4b34151b88 Merge pull request #531 from qlyoung/fix-stack-ref
lib: fix access to stack value
2017-05-15 10:34:38 -04:00
David Lamparter
9a7fc1bd7a lib: cli: fix IPv6 address partial matching
A partially-entered IPv6 address would never return a "partly_match",
meaning some possible completions weren't listed by the matcher.

This specifically breaks autocompleting BGP IPv6 neighbor addresses.
Before:
aegaeon# show ip bg ne 2001:<?>
  WORD      Neighbor on BGP configured interface

After:
aegaeon# show ip bg ne 2001:<?>
  WORD      Neighbor on BGP configured interface
  X:X::X:X  Neighbor to display information about
      2001:db8::2

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-15 10:27:43 -04:00
David Lamparter
7f059ea614 vtysh: autocomplete variables
This asks the connected daemons for their variable completions through a
hidden CLI command.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-15 10:27:43 -04:00
David Lamparter
70d44c5cd4 lib: cli: autocomplete variables
Shows known values in the appropriate naming domain when the user hits
<?> or <Tab>.  This patch only works in the telnet CLI, the next patch
adds vtysh support.

Included completions:
- interface names
- route-map names
- prefix-list names

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-15 10:27:43 -04:00
David Lamparter
c09c46ae3c lib: parser: add pre-merge varname propagation step
Fills token->varname based on context.  WORD tokens use the WORD - if it
isn't actually "WORD".  Other than that, a preceding constant token is
used as name.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-15 10:27:43 -04:00
David Lamparter
5894e76da7 lib: parser: split off & rename graph handling
Put core CLI graph stuff in lib/command_graph.[ch] and consistently
prefix all function names with "cmd_".

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-15 10:27:43 -04:00
David Lamparter
16705ecc65 lib: parser: add named variables in CLI
struct cmd_token now has a "varname" field which is derived from the
DEFUN's string definition.  It can be manually specified with "$name"
after some token, e.g. "foo WORD$var".  A later commit adds code to
automatically fill the value if nothing is specified.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-05-15 10:27:43 -04:00
Donald Sharp
6a72763d73 Merge pull request #520 from opensourcerouting/bgpd-fixes-master
bgpd: assorted fixes (master)
2017-05-15 10:01:39 -04:00
David Lamparter
36a963950c Merge pull request #526 from donaldsharp/renato_eigrp
Renato eigrp
2017-05-15 14:32:13 +02:00
Quentin Young
368d025eca lib: fix access to stack value
Passing stack value to thread_add_* causes thread->ref to become an
invalid pointer when the value goes out of scope

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-15 06:29:54 +00:00
Donald Sharp
56afaa8bcb Merge remote-tracking branch 'origin/stable/3.0' 2017-05-14 21:19:33 -04:00
Donald Sharp
a616ea5f24 lib, vtysh: Add bits and pieces to allow vtysh to understand babel
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-13 23:38:14 -04:00
Donald Sharp
2579b2c144 lib: Fix up string -> proto # conversion for babel
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-13 23:15:27 -04:00
Donald Sharp
ca10883edc *: Initial Import of Babeld into FRR
This is a direct copy of:
https://github.com/boutier/quagga-merge

From the branch babel-merge

I copied the babeld directory into FRR and then fixed up everything to
compile.

Babeld at this point in time when run will more than likely crash and burn
in it's interfactions with zebra.

I might have messed up the cli, which will need to be looked at

extract.pl.in and vtysh.c need to be fixed up.  Additionally we probably
need to work on DEFUN_NOSH conversion in babeld as well

This code comes from:
Matthieu Boutier <boutier@irif.fr>
Juliusz Chroboczek <jch@irif.fr>

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-13 14:59:41 -04:00
Donald Sharp
dfdbe7e4b0 lib: Cleanup command parsing a tiny bit
The CLI changes now make it impossible for numbers
outside the range specified in the cli to make it to
this code.  No need to check for it again.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-13 13:08:00 -04:00
Quentin Young
ab87c0f350 lib: use %p specifier for pointers
Fixes builds on ARM

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-12 21:57:30 +00:00
Renato Westphal
17c7bb7b1c lib: remove gap between AFI_IP6 and AFI_L2VPN
We have several pieces of code like this in FRR:

  for (afi = AFI_IP; afi < AFI_MAX; afi++)
    for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
      bgp_distance_table[afi][safi] = bgp_table_init (afi, safi);

We were creating a lot of useless garbage in the code because of this
gap. Fix this.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-05-12 11:48:02 -03:00
Renato Westphal
5143a87b92 lib: add labeled-unicast in safi2str()
While here, move SAFI_ENCAP above SAFI_MPLS_VPN to keep the ordering
consistent.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-05-12 11:46:26 -03:00
ßingen
5c7ef8dc4f lm: Make relay label manager async
To avoid blocking zebra when it's acting as a proxy for an external
label manager.

Besides:

Fix get chunk reconnection. Socket was still being destroyed on failure,
so next attempt would never work.

Filter out unwanted messages in lm sync sock.
Until LDE client sends ZEBRA_LABEL_MANAGER_CONNECT message, zserv
doesn't know which kind of client it is, so it might enqueue unwanted
messages like interface add, interface up, etc. Changes in this commit
discard those messages in the client side in case they arrive before the
expected response.

Change function name for zclient_connect in label manager to avoid
confusion with zclient one.

Signed-off-by: ßingen <bingen@voltanet.io>
2017-05-11 19:20:08 +02:00
Hung-Weic Chiu
9bc221113c - Solve the Coverity Scan PW.ASSIGN_WHERE_COMPARE_MEANT
- Minor refactoring

Signed-off-by: Hung-Weic Chiu <sppsorrg@gmail.com>
2017-05-10 16:02:48 -04:00
Hung-Weic Chiu
bb1e60c3a1 - Solve the Coverity Scan PW.ASSIGN_WHERE_COMPARE_MEANT
- Minor refactoring

Signed-off-by: Hung-Weic Chiu <sppsorrg@gmail.com>
2017-05-10 15:46:24 -04:00
Russ White
00a1578051 Merge pull request #408 from qlyoung/remove-thread-macros
*: remove THREAD_ON macros, add nullity check
2017-05-10 13:51:47 -04:00
Russ White
4037a433c0 Merge pull request #480 from donaldsharp/agentx
Agentx
2017-05-09 19:49:27 -04:00
Quentin Young
66e78ae64b *: update thread_add_* calls
Pass pointer to pointer instead of assigning by return value. See
previous commit message.

To ensure that the behavior stays functionally correct, any assignments
with the result of a thread_add* function have been transformed to set
the pointer to null before passing it. These can be removed wherever the
pointer is known to already be null.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-09 20:44:22 +00:00
Quentin Young
32d86f8b7a lib: safely check & set thread pointers
When scheduling a thread, the scheduling function returns a pointer to
the struct thread that was placed on one of the scheduling queues in the
associated thread master. This pointer is used to check whether or not
the thread is scheduled, and is passed to thread_cancel() should the
daemon need to cancel that particular task.

The thread_fetch() function is called to retrieve the next thread to
execute. However, when it returns, the aforementioned pointer is not
updated. As a result, in order for the above use cases to work, every
thread handler function must set the associated pointer to NULL. This is
bug prone, and moreover, not thread safe.

This patch changes the thread scheduling functions to return void. If
the caller needs a reference to the scheduled thread, it must pass in a
pointer to store the pointer to the thread struct in. Subsequent calls
to thread_cancel(), thread_cancel_event() or thread_fetch() will result
in that pointer being nulled before return. These operations occur
within the thread_master critical sections.

Overall this should avoid bugs introduced by thread handler funcs
forgetting to null the associated pointer, double-scheduling caused by
overwriting pointers to currently scheduled threads without performing a
nullity check, and the introduction of true kernel threads causing race
conditions within the userspace threading world.

Also removes the return value for thread_execute since it always returns
null...

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-09 20:44:22 +00:00
Quentin Young
ffa2c8986d *: remove THREAD_ON macros, add nullity check
The way thread.c is written, a caller who wishes to be able to cancel a
thread or avoid scheduling it twice must keep a reference to the thread.
Typically this is done with a long lived pointer whose value is checked
for null in order to know if the thread is currently scheduled.  The
check-and-schedule idiom is so common that several wrapper macros in
thread.h existed solely to provide it.

This patch removes those macros and adds a new parameter to all
thread_add_* functions which is a pointer to the struct thread * to
store the result of a scheduling call. If the value passed is non-null,
the thread will only be scheduled if the value is null. This helps with
consistency.

A Coccinelle spatch has been used to transform code of the form:

  if (t == NULL)
    t = thread_add_* (...)

to the form

  thread_add_* (..., &t)

The THREAD_ON macros have also been transformed to the underlying
thread.c calls.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-09 20:44:19 +00:00
David Lamparter
feaa866a4c Merge pull request #469 from qlyoung/fix-list-perm-3.0
lib: fix 'list permutations' (3.0)
2017-05-09 17:54:46 +02:00
David Lamparter
92fd8a7d59 Merge pull request #468 from qlyoung/fix-list-perm
lib: fix 'list permutations'
2017-05-09 17:54:22 +02:00
Donald Sharp
62ff928b37 *: Allow agentx to be displayed as part of vtysh
Modify code so that that vtysh can now accept the
agentx command for snmp support

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-09 10:16:06 -04:00
Donald Sharp
6281320446 Merge remote-tracking branch 'origin/stable/3.0' 2017-05-08 16:51:21 -04:00
Russ White
af95eb8755 Merge pull request #476 from qlyoung/abort-select-fd
lib: abort if fd >= FD_SETSIZE and using select
2017-05-07 19:49:26 -04:00
Quentin Young
6a5fb771a9 lib: abort if fd >= FD_SETSIZE and using select
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-07 04:42:07 +00:00
Quentin Young
e4e63cb6eb lib: fix 'list permutations'
Cyclic graphs ftw

Also remove graph pretty printer from permutations.c 'cause it's not
really needed anymore

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-05 00:19:00 +00:00
Quentin Young
dfe536f475 lib: fix 'list permutations'
Cyclic graphs ftw

Also remove graph pretty printer from permutations.c 'cause it's not
really needed anymore

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-05-05 00:18:14 +00:00
Donald Sharp
704ef00bb5 lib: Rename HAVE_POLL to prevent conflicting #defines
Rename HAVE_POLL to HAVE_POLL_CALL, when compiling with
snmp and poll enabled this was causing issues.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-05-04 10:32:41 -04:00
Donald Sharp
b46be72b4a Merge branch 'master' into EIGRP 2017-05-02 11:38:06 -04:00
Quentin Young
705f21797e lib: allow nonblocking thread_fetch()
This change adds three fields to thread_master and associated code to
use them. The fields are:

 * long selectpoll_timeout

This is a millisecond value that, if nonzero, will override the
internally calculated timeout for select()/poll(). -1 indicates
nonblocking while a positive value indicates the desired timeout in
milliseconds.

 * bool spin

This indicates whether a call to thread_fetch() should result in a loop
until work is available. By default this is set to true, in order to
keep the default behavior. In this case a return value of NULL indicates
that a fatal signal was received in select() or poll(). If it is set to
false, thread_fetch() will return immediately. NULL is then an
acceptable return value if there is no work to be done.

 * bool handle_signals

This indicates whether or not the pthread that owns the thread master
is responsible for handling signals (since this is an MT-unsafe
operation, it is best to have just the root thread do it). It is set to
true by default. Non-root pthreads should set this to false.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-04-30 23:06:14 +00:00
Quentin Young
98f14af8bf lib: add pthread manager
Adds infrastructure for keeping track of pthreads.

The general idea is to maintain a daemon-wide table of all pthreads,
running or not. A pthread is associated with its own thread master that
can be used with existing thread.c code, which provides user-space
timers, an event loop, non-blocking I/O callbacks and other facilities.

Each frr_pthread has a unique identifier that can be used to fetch it
from the table. This is to allow naming threads using a macro, for
example:

 #define WRITE_THREAD 0
 #define READ_THREAD  1
 #define WORK_THREAD  2

The idea here is to be relatively flexible with regard to how daemons
manage their collection of pthreads; the implementation could get away
with just some #define'd constants, or keep a dynamically allocated data
structure that provides organization, searching, prioritizing, etc.

Overall this interface should provide a way to maintain the familiar
thread.c userspace threading model while progressively introducing
pthreads.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-04-28 22:43:42 +00:00
Quentin Young
2c70efaed1 lib: additional thread.c MT-safety work
Fixes a few insufficient critical sections. Adds back locking for
thread_cancel(), since while thread_cancel() is only safe to call from
the pthread which owns the thread master due to races involving
thread_fetch() modifying thread master's ready queue, we still need
mutual exclusion here for all of the other public thread.c functions to
maintain their MT-safety.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-04-28 22:43:37 +00:00
Quentin Young
1189d95fca lib: make thread.c pthread-safe
This change introduces synchronization mechanisms to thread.c in order
to allow safe concurrent use.

Thread.c should now be threadstafe with respect to:
* struct thread
* struct thread_master

Calls into thread.c for operations upon data of this type should not
require external synchronization.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-04-28 22:43:36 +00:00
Donald Sharp
a8a5dbc01d lib: Actually include the header file
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-04-26 21:50:27 -04:00
Donald Sharp
ba0cb3fe96 lib: Fix compilation of some be32* code
The be32dec and be32enc functions are available on some
platforms and not others.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-04-26 21:46:10 -04:00
Donald Sharp
4f13df624b lib: Fix some *bsd build issues introduced by EIGRP code
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-04-26 15:16:29 -04:00
Donald Sharp
352a10a999 Merge remote-tracking branch 'origin/master' into mpls2 2017-04-26 14:18:22 -04:00
Donald Sharp
6aa210418e Merge remote-tracking branch 'origin/master' into EIGRP 2017-04-26 08:03:54 -04:00
Donald Sharp
c05f73e0f4 Merge remote-tracking branch 'origin/master' into mpls2 2017-04-26 07:50:02 -04:00
Donald Sharp
1876a731a4 Merge remote-tracking branch 'origin/stable/3.0' 2017-04-25 10:42:14 -04:00
Martin Winter
80b4df3b08 lib: Add CLI option --moduledir to override default module location (needed for snap support)
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2017-04-21 02:37:11 -07:00
Russ White
ae73184340 Merge pull request #374 from qlyoung/pqueue-linear-remove
lib: add removal by item to pqueue
2017-04-19 07:04:04 -04:00
Donald Sharp
de72643d15 Merge pull request #315 from LabNConsulting/working/master/patch/bgp-startup
Restore functionality broken/overridden by 857b544649
2017-04-18 12:14:58 -04:00
Donald Sharp
0f5ec54a69 Merge remote-tracking branch 'origin/stable/3.0' 2017-04-17 19:12:44 -04:00
Quentin Young
6cbc63316b lib: add removal by item to pqueue
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-04-17 00:06:02 +00:00
Donald Sharp
b3b3879c3e lib, bgpd: Remove UNDEFINED_NODE
Remove the UNDEFINED_NODE as that it's implementation breaks
our ability in BGP to figure out where we are by allowing
default: in the switch statement.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-04-15 13:26:56 -04:00
Donald Sharp
08c08a35c6 lib: Fix debugs to be guarded.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-04-08 08:55:40 -04:00
Renato Westphal
73a9e6d2a5 Merge pull request #347 from qlyoung/ignore-flex-sign-error
lib: add #pragma to ignore flex sign cmp error
2017-04-07 18:48:14 -03:00
Quentin Young
073845da5e lib: add #pragma's to ignore flex sign cmp error
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-04-07 19:18:57 +00:00
Donald Sharp
dad9e527fc Merge remote-tracking branch 'origin/stable/3.0' 2017-04-07 13:37:01 -04:00
Vivek Venkatraman
28d58fd7b1 bgpd, lib, zebra: Implement handling of BGP-Prefix-SID label Index
Implement BGP Prefix-SID IETF draft to be able to signal a labeled-unicast
prefix with a label index (segment ID). This makes it easier to deploy
global MPLS labels with BGP, even without other aspects of Segment Routing
implemented.

This patch implements the handling of the BGP-Prefix-SID Label Index
attribute. When received from a peer and the index is acceptable, the local
label is picked up from the SRGB and is programmed as the incoming label as
well as advertised to peers. If the index is not acceptable, no local label
is assigned. The outgoing label will always be the one advertised by the
downstream neighbor.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2017-04-06 10:32:07 -04:00
Don Slice
cd1964ff38 bgpd: labeled unicast processing
Implement support for negotiating IPv4 or IPv6 labeled-unicast address
family, exchanging prefixes and installing them in the routing table, as
well as interactions with Zebra for FEC registration. This is the
implementation of RFC 3107.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2017-04-06 10:32:07 -04:00
Don Slice
f51bae9cf9 bgpd: labeled unicast config
Implement support for activating the labeled-unicast address family in
BGP and relevant configuration for this address family.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2017-04-06 10:30:03 -04:00
Don Slice
e05fd627fb quagga: labeled unicast definitions
Internal and IANA definitions for labeled-unicast SAFI. Note that this SAFI
is specific to BGP and maps to the corresponding unicast SAFI in Zebra.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2017-04-06 10:29:19 -04:00
Don Slice
a64448baa6 zebra: labeled unicast handling
Support install of labeled-unicast routes by a client. This would be
BGP, in order to install routes corresponding to AFI/SAFI 1/4 (IPv4)
or 2/4 (IPv6). Convert labeled-unicast routes into label forwarding
entries (i.e., transit LSPs) when there is a static label binding.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2017-04-06 10:29:19 -04:00
Don Slice
5aba114af4 zebra: fec register
Implement interface that allows a client to register a FEC for obtaining
a label binding (in-label). Update client whenever the label binding is
updated and cleanup when client goes away.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2017-04-06 10:29:19 -04:00
Donald Sharp
856377cc39 lib: Fix missing help strings
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-04-05 23:20:26 -04:00
Donald Sharp
ca975a87e0 eigrpd: Cleanup the merge
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-04-05 21:01:31 -04:00
Donald Sharp
97133f7915 Merge remote-tracking branch 'origin/master' into EIGRP 2017-04-05 20:52:32 -04:00
Donald Sharp
6492ed5369 Merge pull request #310 from opensourcerouting/thread-prep
MT preparations
2017-04-05 12:39:25 -04:00
David Lamparter
422f8d0ca9 Merge branch 'master' 2017-04-04 20:04:07 +02:00
David Lamparter
3e7c8d040c Merge branch 'stable/2.0'
Fixed minor conflicts from "defaults" change on stable.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-04-04 19:01:47 +02:00
Donald Sharp
b3cfe637a6 Merge pull request #294 from opensourcerouting/modules
Loadable module support
2017-04-04 11:55:00 -04:00
David Lamparter
2a8e27afb8 vtysh: handle "show modules" like "show memory"
Preface with line identifying which daemon it applies to.
[Also fixes a missed "plugin" -> "module" replace.]

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-04-04 16:12:59 +02:00
David Lamparter
2e310ba9c3 Merge pull request #321 from donaldsharp/speed
Speedy McSpeederson
2017-04-04 15:58:11 +02:00
Donald Sharp
eb649b7ff3 lib, zebra: Fix CR comments
lib -> Add a bit of documentation about what units we are in.
zebra -> Fix failure case to be a bit better.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-04-03 18:28:26 -04:00
Donald Sharp
2d7f0d76c6 lib, zebra: Add ability to pass interface speed up from zebra
This is a prepatory commit for future improvements.

Add a change to the zapi to pass the interface speed up.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-04-03 14:49:35 -04:00
Quentin Young
f257ff2cdb lib: fix proto_redistnum() oversight from #257
proto_redistnum() now accepts full protocol strings and not partial
names per #10

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-04-02 23:21:09 +00:00
Lou Berger
c888ea1647 lib/frr: fix reference to zsuid before it is set
Signed-off-by: Lou Berger <lberger@labn.net>
2017-04-02 16:18:53 -04:00
Mike Tancsa
7e5b539722 lib: fix usage of getgrouplist() in *BSD
On BSD systems, the getgrouplist() function returns 0 if successful and
-1 on error.

Linux in the other hand returns *ngroups (the number of groups of which
user is a member) on success and -1 on error.

Given this difference, the most portable way to use getgrouplist()
is use its return value only for checking if it succeeded or not.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-04-01 00:50:40 -04:00
David Lamparter
fa7fe831aa lib: Linux indentation on memory.[ch]
The fact that I originally wrote this in Linux Kernel style and then
reindented it to GNU makes me want to gouge my eyes out every time I
look at it.  Restore original indentation.

[This patch is whitespace-only.]

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-31 17:59:48 +02:00
David Lamparter
a31446a88f lib: memtypes: restore atomicity
the original version of this code already used _Atomic and atomic_*().
Restore this functionality for future multithreading.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-31 17:59:48 +02:00
David Lamparter
899a4fd2a1 build: try to find some kind of atomic ops
Either one of:
- ISO C11
- gcc __atomic_*
- gcc/clang __sync_*

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-31 17:59:45 +02:00
David Lamparter
3f11a103a6 lib: make sure SEGV handler cannot lock up
Just adding -pthread to gcc options changes libc's behaviour, e.g.
making malloc() use proper locking.  This means a SEGV inside malloc()
(e.g. because malloc bookkeeping structures have been damaged by writing
to a broken pointer) can lead to a lockup by the following chain:

- random_function()
- malloc()
--- SEGV
- core_handler()
- zlog_backtrace_sigsafe()
- backtrace()
- malloc()

This will hang forever waiting for the malloc() lock to be released.

Another failure mode is dynamic linking with lazy binding (-z lazy,
default).  Since backtrace() is seldomly used, this means the call to
backtrace() in the core handler can in fact result in the dynamic linker
trying to resolve the "backtrace" symbol, which can also deadlock.

Add several safeguards to prevent any of this from happening.

(Unfortunately, these are not theoretical issues - I found them by
running into them headfirst.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-31 16:22:33 +02:00
Lou Berger
447a8fe92e Rename: FreeRangeRouting FRRouting
Signed-off-by: Lou Berger <lberger@labn.net>
2017-03-30 14:22:35 -04:00
Donald Sharp
7c7148e6c3 Merge pull request #296 from opensourcerouting/ldpd-sighup
ldpd: do a full configuration reload upon receiving a SIGHUP
2017-03-30 06:18:25 -05:00
David Lamparter
90e40ab024 lib: sandbox: print vtysh daemon targets
This is very useful to check whether a command disappeared from a
specific daemon (by comparing against an earlier output of
"grammar find-ambiguous printall nodescan")

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-28 15:48:07 -04:00
David Lamparter
2f834b3561 vtysh: parsing fixes on distribute-list
The vtysh preprocessing stuff doesn't like the first argument to
install_element() being something other than a _NODE constant, and the
comment hack wasn't cutting it... just expand this.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-28 15:48:07 -04:00
David Lamparter
505e50567f *: apply DEFUN_NOSH for node-switch CLI commands
These have copies in vtysh that do the node-switch locally and are
listed in extract.pl's ignore list.  The ignore list however is
redundant since DEFUN_NOSH does the same thing...

ldpd is a bit hacky, but Renato is reworking this anyway.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-28 15:48:07 -04:00
David Lamparter
8efe88eacf *: track version & "defaults" in configs
[CF]: Move default name to autoconf and update tests

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2017-03-28 19:18:42 +02:00
Renato Westphal
1e7e440f5a ldpd: ignore the SIGHUP signal in the child processes
Only the parent process should handle the SIGHUP signal, but we need
to make sure that this signal is ignored in the child processes so a
command like "killall -SIGHUP ldpd" won't kill ldpd.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-03-27 14:54:57 -03:00
David Lamparter
5986b66b82 *: snmp: convert into modules
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-25 08:52:36 +01:00
David Lamparter
46081234b4 build: split off libfrrsnmp
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-25 08:52:36 +01:00
David Lamparter
a5b38c5bd2 lib: add hook infrastructure
Please refer to lib/hook.h for a description/documentation.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-25 08:52:28 +01:00
David Lamparter
b249c083d5 lib: add "show modules" CLI command
(for simplicity, this is stuffed in with memory_vty.c)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-24 13:02:33 +01:00
David Lamparter
30771d65b2 lib: dynamic module loading
This adds a "-M" option to each daemon, to load dynamic modules at
startup.  Modules are by default located in /usr/lib/frr/modules (lib64
if appropriate).  Unloading or loading at runtime is not supported at
this point to keep things simple.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-24 13:02:05 +01:00
David Lamparter
4c0a782d47 lib: remove unused add_snmp_pollfds()
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-24 12:46:26 +01:00
Donald Sharp
80f16600af Merge pull request #285 from bingen/label_manager_3
Implement generic label manager
2017-03-21 11:40:20 -04:00
ßingen
fea12efb86 Implement generic label manager
Label Manager allows to share MPLS label space among different
daemons. Each daemon can request a chunk of consecutive labels and
release it if it doesn't need them anymore. Label Manager stores the
daemon protocol and instance to identify the owner client. It uses them
to perform garbage collection, releasing all label chunks from a client
when it gets disconnected or reconnected.

Additionally, every client can request that the chunk is never garbage
collected. In that case client has the responsibility to release
non-used labels.

Zebra can host the label manager itself (if no -l param is provided) or
connect to an external one using zserv/zclient (providing its address
with -l param).

Client code is in lib/zclient.c, but currently only LDP is using it.

TODO: Allow for custom ranges requests, i.e., specify the start label
besides the chunk.
TODO: Release labels from LDP.

Signed-off-by: Bingen Eguzkitza <bingen@voltanet.io>
2017-03-20 17:10:41 +01:00
Donald Sharp
d9be204162 Merge remote-tracking branch 'origin/master' into EIGRP 2017-03-17 17:36:44 -04:00
Donald Sharp
f15dd9a4ee bgpd, lib, zebra: Rename if_update_vrf -> if_update
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:55:42 -04:00
Donald Sharp
128c2be2a1 bgpd, lib, zebra: Refactor ifname2ifindex to be VRF aware
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:43:31 -04:00
Donald Sharp
baaea325e6 *: Refactor ifindex2ifname to be VRF aware
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:43:21 -04:00
Donald Sharp
07a112a1dc lib: Refactor if_get_by_name_len to be VRF aware
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:41:07 -04:00
Donald Sharp
92a57eb206 *: Refactor if_get_by_name to be VRF aware
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:36:38 -04:00
Donald Sharp
1306c09a1b *: Refactor if_lookup_by_name to be VRF aware
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:36:23 -04:00
Donald Sharp
a90607a4ba lib, ospf6d: Refactor if_lookup_prefix
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:33:16 -04:00
Donald Sharp
fa787f911c lib, ospfd: Refactor if_lookup_by_name_len
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:32:09 -04:00
Donald Sharp
95af5f130a lib, ospfd, ripd: Convert if_lookup_address to be vrf aware
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:31:10 -04:00
Donald Sharp
c5e2cb11ad lib, pimd, zebra: Convert if_lookup_exact_address to VRF only
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:30:58 -04:00
Donald Sharp
4e5266b8a3 lib, ospfd, pimd: Convert to using VRF based interface creation
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:29:09 -04:00
Donald Sharp
7e2b760345 *: Remove non-vrf based ifindex lookup
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-15 10:26:53 -04:00
Donald Sharp
cf7466acdd lib: Fix missed code
When converting to new format we missed some code.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-10 08:24:55 -05:00
David Lamparter
098c0eb8f4 Merge branch 'stable/2.0'
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-10 14:20:40 +01:00
David Lamparter
b32cba291b merge: pre-revert inapplicable changes
The following changes do not apply on master because the code has
changed:

- "vtysh: fix completion"
  reverts commit 09e61a383f.
- "Revert "lib: Fix tab completions memleak, memory stats corruption""
  reverts commit 4dcee34bd6.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-10 14:18:20 +01:00
David Lamparter
e2675fbd56 Merge pull request #266 from donaldsharp/nht
bug fixes
2017-03-10 14:10:10 +01:00
Lou Berger
6253a46a75 lib: handle case specifc types, protect against double free (issue #144)
Signed-off-by: Lou Berger <lberger@labn.net>
[DL: dropped changes except the two NULL assignments]
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-09 19:24:49 +01:00
David Lamparter
4dcee34bd6 Revert "lib: Fix tab completions memleak, memory stats corruption"
This reverts commit 039dc61292.

The patch actually made the situation worse since the return value from
cmd_complete_command_real() was now inconsistently allocated from
different memory stat pools.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-09 19:23:00 +01:00
Martín Beauchamp
685e701ef3 Lowercase frr.conf 2017-03-09 09:45:00 -05:00
Donald Sharp
7f57883ee6 eigrp: Initial Commit
Please Note, I will be redoing this commit message with
more information.

Additionally I will rework the lib/* changes into their
own commits.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-08 23:07:46 -05:00
David Lamparter
4487fc74e8 *: fix some user-visible Quagga remnants
(Note: the allow_delete thing is called "zebra" on the commandline
because that's the clearest context there, while it is called "FRR" in
the CLI because that's considerably less confusing in a vtysh env.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-08 16:15:10 +01:00
David Lamparter
82a011a0a7 lib: time: remove leftover declarations
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-08 00:15:40 +01:00
David Lamparter
deaa50db47 lib: hide away logging internals
... no need to have struct zlog generally-exposed.

A few files get to include log_int.h because they use zlog/vzlog.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-08 00:15:40 +01:00
David Lamparter
dd8376febd lib: remove remaining struct zlog * args
These don't serve any purpose either.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-08 00:15:40 +01:00
David Lamparter
bf1013e6c4 lib: simplify protocol/log naming
The protocols enum serves no purpose other than adding potential for
bugs and making it complicated to add a new protocol... nuke.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-08 00:15:40 +01:00
David Lamparter
bb85d700d5 lib: ditch struct zlog * argument on zlog/vzlog()
It's completely useless...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-08 00:15:39 +01:00
David Lamparter
4525281af1 *: get rid of zlog(*, LOG_LEVEL, ...)
Result of running the following Coccinelle patch + fixups:
<<EOF
/* long-forms: zlog(NULL, <level>, ...)
 *    =>       zlog_level(...)
 */

@@
expression list args;
@@
- zlog(NULL, LOG_DEBUG, args)
+ zlog_debug(args)

@@
expression list args;
@@
- zlog(NULL, LOG_NOTICE, args)
+ zlog_notice(args)

@@
expression list args;
@@
- zlog(NULL, LOG_INFO, args)
+ zlog_info(args)

@@
expression list args;
@@
- zlog(NULL, LOG_WARNING, args)
+ zlog_warn(args)

@@
expression list args;
@@
- zlog(NULL, LOG_ERR, args)
+ zlog_err(args)

/* long-forms: zlog(base->log, <level>, ...)
 *    =>       zlog_level(...)
 */

@@
expression base;
expression list args;
@@
- zlog(base->log, LOG_DEBUG, args)
+ zlog_debug(args)

@@
expression base;
expression list args;
@@
- zlog(base->log, LOG_NOTICE, args)
+ zlog_notice(args)

@@
expression base;
expression list args;
@@
- zlog(base->log, LOG_INFO, args)
+ zlog_info(args)

@@
expression base;
expression list args;
@@
- zlog(base->log, LOG_WARNING, args)
+ zlog_warn(args)

@@
expression base;
expression list args;
@@
- zlog(base->log, LOG_ERR, args)
+ zlog_err(args)

EOF

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-08 00:15:39 +01:00
David Lamparter
16077f2fc5 *: add frr_run()
Contains the fetch-and-run-thread logic, and vty startup (which is the
last thing happening before entering the main loop).

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-08 00:15:39 +01:00
David Lamparter
eb05883f3e *: add frr_config_fork()
Centralise read_config/daemonize/dryrun/pidfile/vty_serv into libfrr.

This also makes multi-instance pid/config handling available as part of
the library.  It's only wired up in ospfd, but the code is in lib/.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-08 00:15:36 +01:00
David Lamparter
857b544649 *: centralize more into frr_init()
Move CLI/VTY/Memory accounting init into frr_*

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-07 23:07:33 +01:00
David Lamparter
4f04a76b71 *: add frr_init() infrastructure
Start centralising startup & option parsing into the library.

FRR_DAEMON_INFO is a bit weird, but it will become useful later (e.g.
for killing the ZLOG_* enum, and having the daemon name available)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-07 23:07:20 +01:00
Donald Sharp
ae6ba9ba04 Merge pull request #257 from opensourcerouting/nhrpd
nhrpd
2017-03-07 15:15:23 -05:00
Donald Sharp
1a664f5e36 Merge pull request #254 from donaldsharp/shutdown3
Shutdown take 3
2017-03-07 11:29:44 -05:00
Timo Teräs
2fb975da77 nhrpd: implement next hop resolution protocol
This provides DMVPN support and integrates to strongSwan. Please read
README.nhrpd and README.kernel for more details.

[DL: cherry-picked from dafa05e65fe4b3b3ed5525443f554215ba14f42c]
[DL: merge partially resolved, this commit will not build.]
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-07 16:20:29 +01:00
David Lamparter
f6e250f850 Merge branch 'frr/pull/240' ("lib, bgpd: clean up headers")
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-03-07 16:03:36 +01:00
David Lamparter
1f806fc2c8 lib: add zlog_sanitize function
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2017-03-06 19:40:26 -05:00
Donald Sharp
5a1945e4e8 lib: Cleanup missing help strings for 'show commandtree..'
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-03-03 10:54:10 -05:00
Quentin Young
fd995a99e4 lib: add stream.h, vty.h, zebra.h to plist.h
Since `afi_t` and `struct vty` are used in plist.h, the appropriate
headers for them should be included.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-03-02 02:09:00 +00:00
Russ White
5f413b1473 Merge pull request #230 from qlyoung/remove-quagga_clkid
lib: remove unused quagga_clkid
2017-03-01 09:52:50 -05:00
Russ White
294f060523 Merge pull request #231 from qlyoung/monotime-retab
lib: monotime.h tabs -> spaces
2017-03-01 09:48:51 -05:00
Quentin Young
6da725ecf0 lib: remove unused quagga_clkid
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-02-27 19:40:33 +00:00
Quentin Young
0ee70925de lib: monotime.h tabs -> spaces
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-02-27 18:50:51 +00:00
Martín Beauchamp
e20dc2ba06 Lowercase frr.conf 2017-02-27 13:26:20 -05:00
Quentin Young
855ddb28b5 *: remove QUAGGA_NO_DEPRECATED_INTERFACES
This define is used only to guard macros in lib/linklist.h which
themselves are not used anywhere in the codebase and have been marked
deprecated since anno domini 2005

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-02-27 01:14:40 +00:00
Donald Sharp
821cf0d9f6 Merge pull request #219 from opensourcerouting/feature/isis-draft-ietf-rtgwg-backoff-algo
Add support for draft-ietf-rtgwg-backoff-algo to IS-IS
2017-02-24 10:09:19 -05:00
Donald Sharp
3f3169a2e6 Merge remote-tracking branch 'origin/stable/2.0' 2017-02-24 09:32:47 -05:00
Christian Franke
c1d0d21f98 lib: add SPF back-off implementation
Add an implementation of draft-ietf-rtgwg-backoff-algo-04 to
libfrr.
2017-02-22 16:18:40 +01:00
ßingen
4029782441 Add missing DESC_ENTRY to lib/log.c 2017-02-21 12:27:44 +01:00
Quentin Young
70abec3d71 *: remove QUAGGA_NO_DEPRECATED_INTERFACES
This define is used only to guard macros in lib/linklist.h which
themselves are not used anywhere in the codebase and have been marked
deprecated since anno domini 2005

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-02-17 18:19:27 +00:00
Philippe Guibert
66ef4ee487 lib: restore pre-evpn output behavior
If an EVPN entry is detected, and type is not route type 5, displays the
Ethernet MAC configured, as it was before evpn is introduced.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-16 15:12:22 +01:00
Philippe Guibert
43b4350ca7 lib: prefix2str initialises incoming buffer in case erroneous EVPN pfx
In the case, evpn prefix is requested to be transformed into string, and
if the evpn prefix is not an evpn route type 5 entry, then the prefix is
returning an initialised string that mentions the vpn prefix is unknown.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:59:00 +01:00
Philippe Guibert
db42a173d6 lib: simplify str2mac and use struct ethaddr structure
This commit simplified the string to mac conversion, since it uses
sscanf, instead of depicting each incoming character one by one, and
doing self analysis. Also,this commit changes the internal usage of the
mac address representation in mac handling function.

Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:59:00 +01:00
Philippe Guibert
d5c8a0cecf lib: append prefix_ for mac handling functions
This commit is changing the function naming for mac handling functions.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:59:00 +01:00
Philippe Guibert
42f621a6ea lib: replace AFI_ETHER reference with AFI_L2VPN
The introduction of AFI_L2VPN prefix makes usage of AFI_ETHER deprecated
and is of no usage currently. The latter define is linked to AFI_L2VPN.
For that, the prefix enumerate has the AFI_ETHER value removed.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:59:00 +01:00
Philippe Guibert
0362b0a7ec lib: handle str2mac case where buffer is allocated by the function
The case where no buffer is passed to the str2mac function is handled.
In that case, a buffer is allocated. Then the check against the buffer
length is not done.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:58:59 +01:00
Philippe Guibert
c215ecaf83 lib: add string to macaddress and reverse function
As mac-address structure is to be used as a prefix field, two new
functions permit handling mac address in order to convert it. either
from string to internal value, or the reverse operation.
Internal representation of a mac address is a 6 byte char value standing
for the 6 byte value the mac address has.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:58:59 +01:00
Philippe Guibert
0737aa5edb lib: remove HAVE_EVPN references
This commit removes references to HAVE_EVPN references in lib folder.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:58:59 +01:00
Philippe Guibert
25098f9b97 lib: add define of compilation for EVPN in prefix.c
Because the prefix structure may include or not evpn sub structure, then
HAVE_EVPN compilation define is also used in prefix.c, because it
references the sub field evpn of prefix structure.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:58:58 +01:00
vivek
78b81eaa44 lib: Enhance prefix dump for EVPN prefixes
This commit is also taking into account changes related to srcdes
feature introduction in zebra folder.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>

Ticket: CM-12262
Reviewed By: CCR-5065
Testing Done: Manual

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:58:58 +01:00
vivek
fd6c6cb49b lib: Functions related to AF_ETHERNET
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2017-02-14 13:58:58 +01:00
Philippe Guibert
9e6df0b7ac lib: define BGP_EVPN_NODE
This define introduces bgp sub node address-family evpn.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:58:57 +01:00
Philippe Guibert
79c0c95986 lib: afi_ether structure packing fix
'packed' keyword had no effect on packing the afi_ethernet structure.
The attribute keyword has been eppended in order to take into account
the packed feature.

Signed-off-by: Julien Courtat <julien.courtat@6wind.com>
2017-02-14 13:58:57 +01:00
Philippe Guibert
4470c22cad lib: add prefix support for evpn route type 5
The requirement from draft-ietf-bess-evpn-prefix-advertisement-03
mentions that the Eth-Tag ID, IP Prefix Length and IP Prefix will be
part of the route key used by BGP. The ip prefix length is then appended
to the evpn_addr. In addition to this, the ethernet tag ID is reused.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:58:57 +01:00
vivek
a440846ea6 lib: EVPN prefix definition
Extend the prefix data structure to allow for basic support for EVPN type-3
and type-2 routes.

Note: This may be revised in future.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-11937
Reviewed By: CCR-5001
Testing Done: None

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:58:57 +01:00
Philippe Guibert
924bf71cd1 lib: add AFI_L2VPN and SAFI_EVPN
To support EVPN, a new AFI and SAFI value are defined here.
For internal processing, two other values are used. Those values will
be used to reach RIB entries by using internal afi and safi values
as indexes. This commit is using naming convention for using EVPN.
External value exchanged in BGP packets  is called of with
IANA_ presence in macro, while internal value will not have _IANA_
presence.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-02-14 13:58:57 +01:00
Donald Sharp
757abe78d8 Merge pull request #195 from opensourcerouting/cli_merge
CLI: independent merge step
2017-02-11 07:00:00 -05:00
David Lamparter
37f9f36ec9 grammar_sandbox: count ambiguous commands
... and make the return value useful (for vtysh)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-10 17:14:50 +01:00
David Lamparter
0a22b97922 grammar_sandbox: add ambiguous-command finder
Best run in vtysh.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-10 16:44:28 +01:00
David Lamparter
db85c8b384 lib: track name of command in cmd_element
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-10 16:44:28 +01:00
David Lamparter
de8f7a3983 lib: parser: rewrite token deduplication
Merge the parsed graph into the existing one as a separate step.  This
makes it possible to merge identical subgraphs, which is used e.g. in
bgpd for <A.B.C.D|X:X::X:X|WORD> neighbor names.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-10 15:39:04 +01:00
David Lamparter
6de469061b lib: rework vty_use_backup_config()
Like config_write(), this should use rename(), even though atomicity is
not a real issue here.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-10 15:04:40 +01:00
David Lamparter
148781210f lib: fix remaining coverity issues
Reported-by: Coverity
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-10 15:04:06 +01:00
David Lamparter
6432969db9 lib: parser: remove previous deduplication code
Rewritten in next commit.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-10 13:38:04 +01:00
Martin Winter
b3411578b0 lib: CID 1399296: Assign instead of compare (PW.ASSIGN_WHERE_COMPARE_MEANT)
Needs to be a comparison, not assignment

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2017-02-10 16:52:54 +07:00
Donald Sharp
305e9740ff Merge remote-tracking branch 'origin/stable/2.0' 2017-02-09 09:53:46 -05:00
Donald Sharp
b9aa3abbbe Merge pull request #189 from opensourcerouting/config-write-sync
lib: use fsync() for config writes, plug fd leak
2017-02-09 09:52:58 -05:00
David Lamparter
1520d0aca9 lib: use fsync() for config writes, plug fd leak
sync() has a HUGE impact on systems that perform actual I/O, i.e. real
servers...

Also, we were leaking a fd on each config write ever since
c5e69a0 "lib/vty: add separate output fd support to VTYs"
(by myself :( ...)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-09 14:25:55 +01:00
David Lamparter
056cfe496e lib: use fsync() for config writes, plug fd leak
sync() has a HUGE impact on systems that perform actual I/O, i.e. real
servers...

Also, we were leaking a fd on each config write ever since
c5e69a0 "lib/vty: add separate output fd support to VTYs"
(by myself :( ...)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-09 12:54:25 +01:00
David Lamparter
8ac885457f lib: csv: plug memleaks
Reported-by: Coverity Scan
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-08 16:35:02 +01:00
David Lamparter
a31ff449a0 lib: fix some coverity NULL check warnings
Reported-by: Coverity Scan
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-08 16:34:59 +01:00
David Lamparter
dbb5a5552a lib: remove unused str2in6_addr()
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-08 16:33:47 +01:00
David Lamparter
caeb0a4f65 lib: remove unused cmd_concat_strvec()
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-08 16:33:25 +01:00
Donald Sharp
fa6d4efea0 lib: Fix warning -> error build issue
When compiling ./buildtest.sh the gcc compiler
on fedora 25 complains about indentation

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-02-07 13:55:55 -05:00
Donald Sharp
0dca233ec0 *: Found some instances of Quagga.conf
Cleanup Quagga.conf -> Frr.conf

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-02-07 13:44:09 -05:00
Donald Sharp
7df2e1c379 Merge remote-tracking branch 'origin/stable/2.0' 2017-02-07 13:20:12 -05:00
Donald Sharp
2cfe3d285f Merge pull request #176 from opensourcerouting/mtype-underflow-backtrace
lib: print backtrace on MTYPE count underflow
2017-02-07 13:04:27 -05:00
David Lamparter
9da3dd3bc5 Merge pull request #161 from donaldsharp/stableMcLibrary
Stable mc library
2017-02-07 17:17:12 +01:00
David Lamparter
f65e2d40cc lib: print backtrace on MTYPE count underflow
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-07 16:23:38 +01:00
David Lamparter
fa02c492fa Merge branch 'frr/pull/152' ("Lib fixes")
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-07 15:48:46 +01:00
Donald Sharp
f0d975f752 lib: Fixup CR comment
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-02-07 04:54:40 -05:00
Donald Sharp
f96872f001 lib: Don't use malloc!
thread.c was using malloc.  This was found by the
assert added to memory.c.

Fixes issues #170

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-02-06 12:52:28 -05:00
Donald Sharp
55c7280315 *: Convert libzebra -> libfrr
The library libzebra that is installed with FRR will
conflict with Quagga.  So let's rename it to libfrr.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-02-03 08:29:13 -05:00
Donald Sharp
1a35e2e565 Merge remote-tracking branch 'origin/stable/2.0' 2017-02-02 10:42:51 -05:00
Donald Sharp
0527bd80c9 lib: Treat v6 address as a v6 address
The code was making the correct assumption
that the v4 and v6 addresses start in the
same spot in memory and since we were looking
at a v6 prefix it would just work.  This
causes distress in SA systems, so let's just
make it happy.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-02-01 19:52:54 -05:00
Donald Sharp
9010012aa1 lib: Fix possible array overrun
It is possible if the hostname is > 32
characters that we would just overrun the
client_name data structure.  Truncate
the hostname string to 31 characters (to allow for NULL)

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-02-01 19:51:31 -05:00
Donald Sharp
3d217741c3 lib: Properly Initialize code
was_stdio was never set up with a 'correct'
initial value, leading to cases where
we would choose what to do based upon
what was in the stack.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-02-01 19:49:48 -05:00
Donald Sharp
907ca8e4d5 lib: Inadvertent assignment in ? operator
In the case where we are using select as
the operator *and* we call
funcname_thread_add_read_write *and* the
fd is already set, we would overwrite
the read/write direction to always be READ.

Clearly this was a bad idea.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-02-01 19:47:39 -05:00
Donald Sharp
a1198921f2 lib: Fix SA warnings and reduce cli
The cli could be reduced for v4 and v6 code
paths into 1 function.  Additionally the v6
code path had a SA issue found where it
"theoratically" could have caused a null
de-reference.  This issue has been removed
as well.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-02-01 19:45:57 -05:00
Donald Sharp
c28e5b2a83 lib: Fix SA issue with stream s read
We were checking for non-null of 'struct stream *s'
after we did a stream_getl, which would have crashed
the program.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-02-01 19:43:43 -05:00
Renato Westphal
45a8eba972 ldpd: introduce advanced filtering capabilities
This patch introduces several new configuration commands to ldpd. These
commands should allow the operator to define advanced filtering policies
for things like label advertisement, label allocation, etc.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-02-01 22:03:36 -02:00
Renato Westphal
cfb67a784e lib: remove unnecessary variable
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-02-01 12:47:58 -02:00
David Lamparter
98645ada19 lib: plug leak in prefix_list_delete()
prefix_list_delete wasn't releasing chained trie entries, only the main
one.  Just call the proper trie_del.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-01 13:24:37 +01:00
David Lamparter
ff1c42fb9f *: fix warning fallout from set_socket_path
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-02-01 13:12:16 +01:00
Donald Sharp
e46538e628 Merge pull request #139 from opensourcerouting/cli_merge_prep_final
CLI split merge-step preparations
2017-01-31 13:27:42 -05:00
Christian Franke
e322dbc73a Merge branch 'master' into feature/zebra-srcdest 2017-01-31 16:22:54 +01:00
David Lamparter
dd03f8cae1 lib: move at_close call in vty_stdio to end
Since the at_close call for the stdio vty might exit() the process, move
it to the end of the function, after freeing all memory.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-31 15:28:39 +01:00
David Lamparter
bff9c3e9d3 lib/tests: add cmd_hostname_set()
To make it possible for testcli to get a clean memory management bill.
(Note: XFREE() is NULL-safe, just like free().)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-31 15:28:39 +01:00
David Lamparter
0d9e204694 lib: add vector_unset_value()
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-31 15:28:19 +01:00
David Lamparter
66d29a54a1 lib: clean up tab-completion memory counting
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-31 15:28:19 +01:00
David Lamparter
55b7f20fda lib: parser: fix allocation counting
command_lex.l was allocating as MTYPE_TMP, while command_parse.y would
just call free().  Make both use MTYPE_LEX.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-31 15:28:19 +01:00
David Lamparter
26df3a33ae Merge branch 'frr/pull/133' ("Pim cleanup")
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-31 15:26:07 +01:00
Quentin Young
0d70298614 lib, bgpd: fix miscellaneous route-map commands
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-01-31 02:25:08 +00:00
Donald Sharp
bf21dc0a41 Merge pull request #127 from LabNConsulting/working/master/patch/assert-dup-free
lib: assert on duplicate free (count)
2017-01-30 13:07:44 -05:00
Donald Sharp
8613585e1f lib: Moved zapi message types to zclient.h
Move the data structure used to have knowledge about
the zapi message types to zclient.h where it belongs.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-30 11:48:38 -05:00
Donald Sharp
94ed344a8f zebra: Refactor Error codes to proper place
These error codes have ended up only being used
for socket type interfaces to the kernel(*bsd),
yet we were exposing the #defines to the entirety
of the project.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-30 11:48:38 -05:00
Christian Franke
a27428eb71 lib: add cleanup hook to route table 2017-01-30 13:54:46 +01:00
David Lamparter
0964ad9cec lib: add second-level route_table for srcdest
IPv6 srcdest routes need to be keyed by both destination and source
prefix.  Since the lookup order is destination first, the simplest thing
to do here is to add a second route_table to destination entries, which
then contain source entries.  Sadly, the result is somewhat confusing
since a route_node might now be either a source node or a destination
node.

There are helper functions to get source and destination prefix from a
given route node (which can be either a destination or a source route).

The following bits have been added by Christian Franke
<chris@opensourcerouting.org>:
- make srcdest routing table reusable by moving it into lib
- make the srcdest routing table structure more opaque
- implement a srcdest routing table iterator
- fix a refcounting issue in src_node_lookup
- match route_node_lookup behavior with srcdest_rnode_lookup
- add accessor for the route_node table and table_info
- add string formatter srcdest_rnode2str

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
[v3: adapted for cmaster-next as of 2016-12-05]
2017-01-30 13:51:50 +01:00
David Lamparter
61cdc88971 lib: add route_node_lookup_maynull
The sourcedest code needs to get the route_node even if its info pointer
is NULL (which occurs when there are srcdest routes, but no general
destination route.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-30 13:47:04 +01:00
David Lamparter
d75f3b00e7 lib: send ZAPI IPv6 source prefix
This introduces ZAPI_MESSAGE_SRCPFX, and if set adds a source prefix
field to ZAPI IPv6 route messages sent from daemons to zebra.  The
function calls all have a new prefix_ipv6 * argument specifying the
source, or NULL.  All daemons currently supply NULL.

Zebra support for processing the field was added in the previous patch,
however, zebra does not do anything useful with the value yet.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-30 13:47:04 +01:00
David Lamparter
3c7c91d0bd zebra: receive ZAPI IPv6 source prefix
Check and read the IPv6 source prefix on ZAPI messages, and pass it down
to the RIB functions (which do nothing with it yet.)  Since the RIB
functions now all have a new extra argument, this also updates the
kernel route read functions to supply NULL.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-30 13:47:04 +01:00
Donald Sharp
c3d89003a4 lib: Fix Auto generation of redistribution strings
When we changed the parser we forgot to update this
script to modify the '(...)' to '<...>'

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-27 15:37:14 -05:00
Lou Berger
aceb2285da Merge pull request #107 from donaldsharp/bgpafisafi
Bgp afi safi fixes
2017-01-27 10:57:46 -05:00
Lou Berger
fd7aa3f557 lib: assert on duplicate free (count)
Signed-off-by: Lou Berger <lberger@labn.net>
2017-01-27 07:46:25 -05:00
Donald Sharp
7f12cb2b65 Merge remote-tracking branch 'origin/master' into bgpafisafi 2017-01-26 10:38:07 -05:00
David Lamparter
c30420200b lib: graph: fix vector_remove()
vector_remove would corrupt the data in the following sequence:
1. assume vector v = [a, b], active = 2
2. vector_unset(v, 0) => v = [NULL, b], active = 2
3. vector_remove(v, 1)

vector_remove calls vector_unset(v, 1), vector_unset notices index #0 is
also NULL and thus sets active to 0.

The equality test in vector_remove() now fails, leading it to decrement
v->active *again*, leading to an underflow that will likely crash the
daemon (and might even be exploitable).

This call sequence does not happen in existing code since vector_unset()
is not used on graph from/to lists.  Nonetheless this is a buried land
mine in the code at best.

Rewrite the function - while we're at it, there's no reason to move the
entire array around, just fill the hole with the last element.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Cc: Quentin Young <qlyoung@cumulusnetworks.com>
2017-01-26 07:05:56 +01:00
David Lamparter
5bf313994d lib: graph: speed up node deletion
We don't need to copy the from/to arrays, we can just iterate backwards.

NB: this makes graph_remove_edge delete only one edge (which is more
consistent with graph_add_edge allowing parallel edges).

Iterating graph->nodes backwards also makes graph_delete_graph faster
since that also iterates backwards.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-26 07:05:56 +01:00
David Lamparter
72d98ee943 lib: graph: fix deletions
Iterating over an array while deleting items needs to consider
interactions between the iteration position and deletion.  The previous
code completely ignored that problem, leading to memleaks (graph_delete
skipping half of the nodes) and dangling pointers (if parallel edges
exist in graph_remove_edge).

Iterating backwards is safe and reduces "move to fill hole" overhead in
deletion.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Cc: Quentin Young <qlyoung@cumulusnetworks.com>
2017-01-26 07:05:21 +01:00
Donald Sharp
6dfe1c38d7 Merge pull request #101 from LabNConsulting/working/master/patch-set/3-vrf
Master version of basic vrf commands & some other missed fixes
2017-01-25 18:26:15 -05:00
David Lamparter
dcb817fd27 Merge branch 'frr/pull/92' (BGP Large Community support)
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-25 23:04:29 +01:00
Martin Winter
38657f2ebd lib: Don't change uid/gid if we are already the correct uid/gid
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2017-01-26 00:45:05 +07:00
Martin Winter
950765ba10 lib: Add set_socket_path() to sockopt.c to override the path element of a (vty) socket (but keep filename)
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2017-01-26 00:40:55 +07:00
ßingen
5cd459e86e lib: Fix missing break in zlcient switch 2017-01-25 14:33:01 +01:00
Donald Sharp
d2ce19c9b5 Merge pull request #105 from opensourcerouting/cli_merge_step_prep
Prepare for split-off cli parser "merge" step
2017-01-25 07:49:21 -05:00
David Lamparter
83364d20d5 lib: parser: fix memory management
command.c had:
DEFINE_MTYPE_STATIC(LIB, CMD_TOKENS, "Command desc")
while command_match.c had:
DEFINE_MTYPE_STATIC(LIB, CMD_TOKENS, "Command Tokens")

... which means that there are 2 distinct MTYPE_CMD_TOKENS.
(The description text being different does not matter, even with the
same text it'd be 2 distinct types.)

command_match.c allocates token->arg in command_match_r() while
command.c frees it in del_cmd_token().  Therefore with each command
being executed, the allocation count goes up on one, down on the other.

=> clean up parser allocation counting.  Also, use separate MTYPEs for
the different fields in struct cmd_token.

Fixes: #108 / ee9216cf ("lib, ripngd: clean up merge leftovers")
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Cc: Quentin Young <qlyoung@cumulusnetworks.com>
2017-01-25 02:27:29 +01:00
Donald Sharp
ac9ddce37d Merge pull request #104 from opensourcerouting/time-cleanup
Time cleanup
2017-01-24 11:43:32 -05:00
David Lamparter
e5951aa21d Merge pull request #42 from donaldsharp/pim_lib_work2
Pim-SM + MSDP
2017-01-24 17:10:09 +01:00
Donald Sharp
ece35fdcb7 lib: Add VRF_ALL define
Allow the specification of a VRF_ALL to be
used for CLI.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-23 22:34:49 -05:00
David Lamparter
290c1eb150 Merge branch 'frr/pull/93'
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-24 03:16:01 +01:00
David Lamparter
b285cf4b74 grammar_sandbox: detab
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-24 02:52:07 +01:00
David Lamparter
14152706b4 lib: parser: guard yylloc
yylloc seems to be NULL on parser init for some flex+bison
combinations...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-24 02:52:07 +01:00
David Lamparter
05dbb7df2f build: support bison < 3.0 for parse.error=verbose
*sigh*

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 23:26:23 +01:00
David Lamparter
39cea8220a lib: time: add TIMEVAL_TO_TIMESPEC
Should be in system headers, but not specified by any standard.
Not currently used anywhere yet.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 23:17:35 +01:00
David Lamparter
af2567b646 grammar_sandbox: add into daemons if DEV_BUILD
Also adds "grammar access <node>" to test/dump an existing command node
(e.g. BGP_NODE).

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 21:52:44 +01:00
David Lamparter
818a5168a1 grammar_sandbox: add .dot file writing capability
Writing a .dot graphviz file is very useful to get a graphical
representation of the command graph.

This code is intended solely for testing & development, it uses some
fixed-size array and may unexpectedly crash.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 21:52:44 +01:00
David Lamparter
8bb647a830 lib: parser: add error location reporting
flex+bison have nice capabilities to track the location that is
currently being processed; let's enable these and get better warnings
for broken CLI specs.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 21:52:44 +01:00
David Lamparter
663982cda7 lib: parser: unify subgraphs & simplify even more
This cuts a large piece of complexity from the parser by making the
sequences between | the same, no matter whether it's <> () or [].

This causes some changes in behaviour:
- [foo|bar] is now accepted
- <foo|[bar]> is now accepted (yes it's stupid)
- {a|b} is now means "at least one of these, in any order"; to allow
  zero use [{a|b}] instead.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 21:52:44 +01:00
David Lamparter
2020b1c8a8 lib: parser: keep subgraph pointers on stack
There's no need to malloc() these, we can just keep them on the stack.
The entire struct will get copied around, but replacing a 2-pointer copy
with a 1-pointer copy + malloc + free overhead is not quite efficient.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 21:52:44 +01:00
David Lamparter
ab03715928 lib: parser: track matching FORK_TKN & JOIN_TKN
This associates pairs of FORK and JOIN tokens, so the merge function can
identify where a subgraph begins and ends.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 21:52:44 +01:00
David Lamparter
0bf5b1cbe3 lib: parser: simplify OPTION_TKN & SELECTOR_TKN
These are functionally identical as "fork" tokens.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 21:52:43 +01:00
David Lamparter
61617d382e lib: parser: free Mr. T
Mr. T was abducted by the parser and held hostage for ransom.
Murdock was called, flew in and replaced him with a Tab character.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 21:49:57 +01:00
David Lamparter
e0e2a99068 lib: cope with negative timeout in thread.c
Since time is no longer cached, if we schedule something with zero
timeout, it will automatically be negative by the time we reach the
event loop.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 18:59:15 +01:00
David Lamparter
4b185cb399 lib: time: clean out thread.c
Remove quagga_get_relative(), replace with monotime().

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 18:55:33 +01:00
David Lamparter
816c2194ca ospfd: simplify SPF time consumption calculations
monotime_since() does exactly the same thing.
... and timeval_elapsed is now private to lib/thread.c

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 18:26:33 +01:00
David Lamparter
cf672a8654 *: use monotime()
This is largely a bulk-replace made with coccinelle.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 18:26:32 +01:00
David Lamparter
d9d5c3e8bf lib: time: remove local time helpers
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 18:26:32 +01:00
David Lamparter
3dad49ca94 lib: time: remove recent_time
This isn't even used anywhere.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 18:26:32 +01:00
David Lamparter
6ced0e7f10 lib: time: remove recent_relative_time()
Replace with monotime() [which is not cached].

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 18:26:32 +01:00
David Lamparter
7790a2d69e lib: time: add new monotime() helpers
This adds monotime() to retrieve monotonic clock time, as well as
monotime_since() and monotime_until() for relative monotonic time.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-23 16:54:51 +01:00
Lou Berger
5ff06872e9 bgpd: add vrf-policy config using existing vnc code
add add/clear vrf prefix
      + Modified for FRR master parser

Signed-off-by: Lou Berger <lberger@labn.net>
2017-01-22 20:54:57 -05:00
Quentin Young
5320569435 lib: guard strict cli completions
Completions are checked for token and docstring equality before
deduplicating. Put an ifdef guard around checking docstrings because
many of them are inconsistent and may confuse users in a release build.

It is a good idea to enable VTYSH_DEBUG when adding new CLI in the
future to help check docstrings.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-01-19 17:15:45 +00:00
Donald Sharp
b8b35c63a5 Merge remote-tracking branch 'origin/master' into pim_lib_work2
Conflicts:
	lib/zebra.h
	zebra/rt_netlink.c
2017-01-19 04:32:49 -05:00
Donald Sharp
e2064401d3 lib: Add some documentation to wheel.h
Add some hopefully useful documentation to the
timer wheel.h code.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-18 19:08:04 -05:00
Job Snijders
57d187bc77 Support for BGP Large Communities
BGP Large Communities are a novel way to signal information between
networks. An example of a Large Community is: "2914:65400:38016". Large
BGP Communities are composed of three 4-byte integers, separated by a
colon. This is easy to remember and accommodates advanced routing
policies in relation to 4-Byte ASNs.

This feature was developed by:
Keyur Patel <keyur@arrcus.com> (Arrcus, Inc.),
Job Snijders <job@ntt.net> (NTT Communications),
David Lamparter <equinox@opensourcerouting.org>
and Donald Sharp <sharpd@cumulusnetworks.com>

Signed-off-by: Job Snijders <job@ntt.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-18 18:38:53 -05:00
Quentin Young
88e5a8cbe1 lib: additional patch for 496e83a
Fixes a couple off-by-ones introduced in previous commit.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
[cherry-picked from master d1e4a518e6]
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-18 17:15:12 +01:00
David Lamparter
cd27ec47ef Merge pull request 'frr/pull/87'
Fixes a couple off-by-ones introduced in previous commit.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-18 17:13:27 +01:00
Quentin Young
d1e4a518e6 lib: additional patch for 496e83a
Fixes a couple off-by-ones introduced in previous commit.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-01-18 06:12:08 +00:00
Donald Sharp
b58ed1f8a8 Merge remote-tracking branch 'origin/master' into pim_lib_work2 2017-01-17 21:01:56 -05:00
Donald Sharp
2047fdb5e7 lib: Allow json to work across different versions.
The json_object_object_get_ex function is not fully available
across all versions of json.  Write a wrapper to allow
it to work.

Ticket: CM-13872
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-17 18:46:24 -05:00
Donald Sharp
dd3415b74b lib: Fix clang SA warnings.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-17 18:45:23 -05:00
Donald Sharp
f7c62e11d6 lib: Fix 'show thread cpu' to display active threads
Fix the display of 'show thread cpu' to keep track
of the number of active threads and to display that
information.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>

lib: Fix thread_execute_crash
2017-01-17 18:43:28 -05:00
Donald Sharp
b3f5645df3 lib: Slight Optimization of thread handling.
This commit does these things:

1) Make thread_add_unuse own the setting of THREAD_UNUSED.
2) Move thread->hist finding to to thread_get.
   We are storing the thread->hist even when the thread
   is on the unused.  This means that we check to see
   if the funcname or func have changed and we get new
   history.  Else we've probably just retrieved the last
   unused which has the same func/funcanme.  This is
   a common practice to do THREAD_OFF/THREAD_ON in
   quick succession.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com.
2017-01-17 18:40:33 -05:00
Donald Sharp
cbea873754 lib: Add Timer Wheel functionality
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-17 18:40:25 -05:00
Donald Sharp
b339bde737 zebra: Fully decode mcast messages
Fully decode mcast messages from the kernel.  We are not
doing anything with this at the moment, but that will
change.

Additionally convert over to using lookup for
displaying the route type.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-17 18:34:17 -05:00
vivek
a9ea959fae lib: Use single correct definition for prefix string buffer
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reivewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-12262
Reviewed By: CCR-5065
Testing Done: Manual
2017-01-17 18:30:18 -05:00
Donald Sharp
e921929069 lib: Setup prefix.h to allow it to store (s,g)
We need the ability to store the (s,g) in a struct prefix.
This will allow us to consolidate some duplicated code in
pimd as well as set us up to switch from a link list to a
table to store (s,g) state.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-17 18:26:43 -05:00
David Lamparter
eb3d20d398 Merge pull request #59 from donaldsharp/cli_cleanup
Cli cleanup, largely VNC related, minor bgpd/ospfd/lib fixes.
2017-01-17 21:36:07 +01:00
Donald Sharp
efd64b137a Merge remote-tracking branch 'frr/master' into cli_cleanup 2017-01-15 18:56:01 -05:00
Donald Sharp
9aa7f43f7e Merge branch 'master' into cleanup 2017-01-13 14:48:16 -05:00
David Lamparter
b6f1faf045 Merge branch 'stable/2.0-for-merge'
Conflicts (CLI vs. atol()):
- bgpd/bgp_vty.c
- ospfd/ospf_vty.c
- zebra/zebra_vty.c

NB: pull req #65 (LabNConsulting/working/2.0/afi-safi-vty/c) was
excluded from this merge.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-01-13 15:24:25 +01:00
Quentin Young
78af6edc6c lib: limit size of vty buffer to 4096 bytes
This removes the automatic resizing of the vty input buffer and places a
hard size cap of 4096 bytes. It also fixes a potentially unsafe strcpy.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
[cherry-picked from master 2af38873d8]
2017-01-13 14:37:40 +01:00
David Lamparter
496e83a5d7 Merge pull request #63 from qlyoung/fix-vty-buffer
lib: limit size of vty buffer to 4096 bytes
2017-01-13 14:33:50 +01:00
Donald Sharp
56c1f7d852 frr: Remove HAVE_IPV6 from code base
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-13 08:05:50 -05:00
vivek
9cabb64b32 Quagga: AFI/SAFI mappings IANA to/from internal values
Introduce internal and IANA defintions for AFI/SAFI and mapping
functions and modify code to use these. This refactoring will
facilitate adding support for other AFI/SAFI whose IANA values
won't be suitable for internal data structure definitions (e.g.,
they are not contiguous).
The commit adds some fixes related to afi/safi testing with 'make check
' command.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>

Ticket: CM-11416
Reviewed By: CCR-3594 (mpls branch)
Testing Done: Not tested now, tested earlier on mpls branch
2017-01-12 09:28:43 +01:00
Quentin Young
2af38873d8 lib: limit size of vty buffer to 4096 bytes
This removes the automatic resizing of the vty input buffer and places a
hard size cap of 4096 bytes. It also fixes a potentially unsafe strcpy.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-01-10 23:33:50 +00:00
Donald Sharp
4e93448fbe lib: Fixup 'ipv6 distribute-list ... ' cli help strings
Fixup the cli help strings for 'ipv6 distribute-list [prefix] WORD <in|out> [WORD]'

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-09 10:22:39 -05:00
Donald Sharp
556022477e Merge pull request #47 from donaldsharp/valgrind
Valgrind
2017-01-09 09:17:17 -05:00
Quentin Young
d92c729ba5 lib: make interface metric a uint32_t
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-01-09 01:35:41 +00:00
Quentin Young
b84aadae44 Merge branch 'master' into fix-proto_redistnum 2017-01-06 19:44:46 -05:00
Donald Sharp
46c323a66b Merge pull request #27 from qlyoung/fix-derefs2
bgpd, lib: fix a few scan-build catches
2017-01-06 19:36:59 -05:00
Donald Sharp
15667da96d Merge pull request #24 from qlyoung/fix-uninitialized-jump
lib: Initialize ->allowrepeat
2017-01-06 19:34:09 -05:00
Donald Sharp
3b14d86eed Merge remote-tracking branch 'origin/stable/2.0' 2017-01-06 09:58:21 -05:00
Donald Sharp
41c17d61a2 lib: Stop potential uninitialized memory access
VRF_UNKNOWN = MAX_INT16_T

The vrf macros to determine where in the bitmap something belongs
assume that the valid values of a vrf are 0 - (MAX_INT16 - 1)
so when they attempt to determine where to look in the bitmap
for VRF_DEFAULT, we can get invalid reads of memory.

This happens because bgp can create vrf's with VRF_UNKNOWN
when we get configuration for a vrf before we've been actually
created in zebra.

Ticket: CM-14090
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-05 19:39:56 -05:00
Donald Sharp
0b0038b8bc Merge pull request #43 from pguibert6WIND/frr_6wind_mpbgpgracefulrestart_1
VPNv4 Enhancement of Graceful Restart
2017-01-05 07:58:32 -05:00
Olivier Dugeon
daf0a4d29c Rationalize Link Parameters flags
* lib/if.h: Remove LP_TE as Link Parameters is set if different from 0
See IS_LINK_PARAMS_SET macro and use LP_TE_METRIC to determine if TE metric
is set or not
 * lib/if.c: replace LP_TE by LP_TE_METRIC in default LP status
 * zebra/interface.c: replace LP_TE by LP_TE_METRIC and check if TE metric
is equal to standard metric or not
 * ospfd/ospf_te.c: replace LP_TE by LP_TE_METRIC
 * isisd/isis_te.c: replace LP_TE by LP_TE_METRIC

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2017-01-05 08:19:11 +01:00
Julien Courtat
4d5b4f7bd9 bgpd: graceful restart for vpnv4 address family
This patch enable the support of graceful restart for routes sets with
vpnv4 address family format. In this specific case, data model is
slightly different and some additional processing must be done when
accessing bgp tables and nodes.
The clearing stale algorithm takes into account the specificity where
the 2 node level for MPLS has to be reached.

Signed-off-by: Julien Courtat <julien.courtat@6wind.com>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-01-04 18:02:04 +01:00
Philippe Guibert
db19215a73 lib: remove SAFI_RESERVED_3 and move SAFI_MPLS to that value
Because SAFI_RESERVED_3 value is no more used, the SAFI_MPLS value is
lowered to that value.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-01-04 17:58:53 +01:00
Philippe Guibert
268fef65f9 lib: add SAFI_RESERVED_4 value
This value is used to limit certain feature to the safi values until
that reserved value.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2017-01-04 17:58:44 +01:00
Donald Sharp
80e71dcd1f lib: Update ZAPI to version 4 and HEADER_MARKER to 254
Update the ZEBRA_HEADER_MARKER to 254.  This will differentiate
ourselves from Quagga.  Zebra should not listen to people not
properly using the right programs now.

Update the ZAPI version number to 4.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-04 08:05:39 -05:00
Donald Sharp
9473e34052 watchfrr: Rename watchquagga -> watchfrr
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-01-03 20:13:02 -05:00
David Lamparter
9b532e09f9 Merge pull request #37 from LabNConsulting/working/2.0/patch-set-170102a
Working/2.0/patch set 170102a
2017-01-03 16:44:44 +01:00
Donald Sharp
9f221bd1a8 Merge pull request #28 from opensourcerouting/dev/osr/rename-part1
rename, part1
2017-01-03 10:44:11 -05:00
Donald Sharp
ff9eb96a93 lib: Partial Revert of 4ecc09d and modify zclient connect behavior
Commit 43cc09d has been shown to cause several issues with clients
connecting.

Partial revert, since I wanted to keep the debug logs added
for that commit, as well remove the piece of code that
stops attempting to connect to zebra.  If we've failed
a bunch of times, there is nothing wrong with continuing
to do so once every 60 seconds.  I've debug guarded
the connect failure for those people running bgp
without zebra.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-01-02 15:13:32 -05:00
G. Paul Ziemba
5ee62c66a9 BGP: deal with vnc related string ambiguities (issue #9)
- "redist foo" parsing modified to check for foo==vnc and foo==vnc-direct
      instead of just leading 'v' character
    - string designating ZEBRA_ROUTE_VNC_DIRECT changed from "vpn" to "vnc-direct"
    - route_types.pl parser recognizes 7th field to restrict availability
      of a route type in the redist command to specific daemons
    - restrict "vnc-direct" to bgpd only (doesn't make sense elsewhere)
    - vnc documentation updated to match

Signed-off-by: Lou Berger <lberger@labn.net>
2017-01-02 15:04:47 -05:00
Lou Berger
271a0c2548 lib/command.c: fix leak id'ed by valgrind
Signed-off-by: Lou Berger <lberger@labn.net>
2017-01-02 15:04:47 -05:00
Lou Berger
21ab852483 prefix.c: replace free with XFREE for memory allocated with XMALLOC
Signed-off-by: Lou Berger <lberger@labn.net>
2017-01-02 15:04:47 -05:00
Donald Sharp
8474f80e5a lib: Allow json to work across different versions.
The json_object_object_get_ex function is not fully available
across all versions of json.  Write a wrapper to allow
it to work.

Ticket: CM-13872
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-21 20:26:18 -05:00
Donald Sharp
8f21cf48a1 lib: Fix clang SA warnings.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-21 20:26:15 -05:00
Donald Sharp
c8ff19f7be lib: Fix thread_execute_crash
With the change to have thread_get fill inthe ->hist
pointer, thread_execute was missed and it
needs to fill in the .hist pointer for the
dummy thread created.

I'm not really sure why we need to call a
thread_execute on a function.  When we
could, you know, just call the bloody
thing.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-21 20:26:15 -05:00
Donald Sharp
e4fe5b196e lib: Fix 'show thread cpu' to display active threads
Fix the display of 'show thread cpu' to keep track
of the number of active threads and to display that
information.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-21 20:26:14 -05:00
Donald Sharp
a2012b80b1 lib: Slight Optimization of thread handling.
This commit does these things:

1) Make thread_add_unuse own the setting of THREAD_UNUSED.
2) Move thread->hist finding to to thread_get.
   We are storing the thread->hist even when the thread
   is on the unused.  This means that we check to see
   if the funcname or func have changed and we get new
   history.  Else we've probably just retrieved the last
   unused which has the same func/funcanme.  This is
   a common practice to do THREAD_OFF/THREAD_ON in
   quick succession.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com.
2016-12-21 20:26:14 -05:00
Donald Sharp
95f0715748 lib: Turn off automatic debugging of Wheel code.
Turn off the automatic debugging of Timer wheel code.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-21 20:26:13 -05:00
Donald Sharp
1de1c5bed3 lib: Add Timer Wheel functionality
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-21 20:26:13 -05:00
Donald Sharp
5f8fec8728 lib, pimd: Modify writen to retry on certain failures
When writen fails, allow itto retry on certain failures
until it succeeds.

Ticket: CM-12986
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-21 20:26:10 -05:00
Donald Sharp
e3be04328f lib, pimd, zebra: Allow pimd to ask the kernel about mroute info
When we need to lookup the mroute info for a route.  Allow
pimd to ask the kernel.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-21 20:26:06 -05:00
Donald Sharp
90d82769a8 zebra: Fully decode mcast messages
Fully decode mcast messages from the kernel.  We are not
doing anything with this at the moment, but that will
change.

Additionally convert over to using lookup for
displaying the route type.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-21 20:26:06 -05:00
vivek
163a4c3b32 lib: Use single correct definition for prefix string buffer
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reivewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-12262
Reviewed By: CCR-5065
Testing Done: Manual
2016-12-21 20:26:06 -05:00
Donald Sharp
4ed0af7013 lib, pimd: Fix borked up prefix code
Fix the struct prefix to be an actual struct prefix_sg.
This cleans up a bunch of code to make it look nicer.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-21 20:26:05 -05:00
Donald Sharp
e945ee80d3 lib: Setup prefix.h to allow it to store (s,g)
We need the ability to store the (s,g) in a struct prefix.
This will allow us to consolidate some duplicated code in
pimd as well as set us up to switch from a link list to a
table to store (s,g) state.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-21 20:26:02 -05:00
David Lamparter
ab0181eed3 build: rename (2 of ?): route_types macros
All of the autogenerated macros in lib/route_types.pl are now called
FRR_* instead of QUAGGA_*.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-20 18:34:29 +01:00
David Lamparter
ae435b1972 build: replace some hardcoding with ./configure
Several places have paths and names that can change hardcoded, e.g. the
package name and the /var/run path.  This fixes a few of them, there's
still some to do.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-20 18:18:44 +01:00
David Lamparter
b2f361571b build: rename (1 of ?): configure.ac + preproc
This replaces Quagga -> FRR in most configure.ac settings as well as
a handful of preprocessor macros in the source code.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-20 17:57:47 +01:00
Quentin Young
487be854a5 lib: add grammar_sandbox to .gitignore
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-20 06:39:37 +00:00
Quentin Young
c01d03a658 bgpd, lib: fix a few scan-build catches
Fixes a couple null pointer derefs and uninit'd values.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-20 03:26:47 +00:00
Quentin Young
a8e4ddd408 lib: Initialize ->allowrepeat
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-18 05:39:21 +00:00
Quentin Young
55d403c9b2 lib: fix crash when tab-completing do ... commands
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-18 05:14:55 +00:00
David Lamparter
fd19e7a2c0 lib: parser: remove startnode & sentence_root
This removes an artificial restriction for the first token in a
command's graph to be a WORD_TKN.  The intention seems to be to prohibit
empty paths through a command, and to restrict "explosion" of choices in
the root node.

The better approach to the former is to check for an empty path after
the definition is parsed.  The latter will happen anyway, by duplication
of the command, which just makes it worse...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-16 20:48:31 +01:00
David Lamparter
bca1a301ba lib: parser: accept number-only word tokens
There seems to be no reason why numbers don't work as plain word tokens;
this is useful to have "number choices" or constants, e.g. <128|192|256>
for bit encryption lengths.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-16 20:48:31 +01:00
David Lamparter
4d94b29296 lib: parser: move allowrepeat to cmd_token
struct graph_node isn't quite the right place to control matcher
behaviour.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-16 20:42:01 +01:00
David Lamparter
0e64d123fd bgpd: shuffle qobj_init()
bgp_master_init is called first thing in main(), so we need to wedge a
qobj_init() call in there...  this needs some improvement...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-16 20:42:01 +01:00
David Lamparter
afc3a6ceb6 lib: parser: reorder bison incarnations
This shuffles the code blocks in command_parser.y to match file output
order, then adjusts things to make the include handling less messy.

(also dropped unused DECIMAL_STRLEN_MAX define.)

This should hopefully fix the build on NetBSD 6.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-16 20:42:01 +01:00
David Lamparter
0d37f9f325 build: fix bison < 3.0 compatibility
bison-2.7.x really wants "foo" for api.prefix while bison-3.0.x really
wants {foo} ... great.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-16 20:42:01 +01:00
David Lamparter
53d5ec3678 lib: parser: fix SEGV when Tab hits non-WORD_TKN
If <Tab> processing finds that there is only 1 candidate, but that
candidate is not a WORD_TKN that we can tab-complete on, the status
would remain at CMD_COMPLETE_FULL_MATCH, but the resulting list of
possible completions is empty.

This then SEGVs in lib/vty.c where it tries to access the first element
of the list, assuming FULL_MATCH always has 1 element there...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Cc: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-16 20:42:01 +01:00
Quentin Young
6d681bd874 all: use ->text when parsing protocol argument
and match on full protocol name in proto_redistnum()

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-16 05:39:44 +00:00
Donald Sharp
8eefe200e0 lib: Ensure ptrs are NULL on free
There exists a possibility that when we cleanup
for shutdown that we may attempt to access
them again.

Found via valgrind, stopped showing up in there.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-15 21:00:03 -05:00
David Lamparter
7d5718c140 lib: parser: support keyword arguments
This re-adds "{foo WORD|bar WORD}" keyword-argument support to the CLI
parser.  Note that token graphs may now contain loops for this purpose;
therefore the matching functions retain a history of already-matched
tokens.  Each token can thus only be consumed once.

And then LINE... gets its special treatment with allowrepeat.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-15 23:13:52 +01:00
David Lamparter
fa133e00c2 lib: parser: refresh grammar_sandbox
This makes grammar_sandbox a workable tool again, updating it for the
recent changes.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-15 23:07:45 +01:00
David Lamparter
f4e454eb79 Merge branch 'dev/osr/vty_index'
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-15 21:34:53 +01:00
Donald Sharp
b0e67bb019 lib: Partial Revert of 4ecc09d and modify zclient connect behavior
Commit 43cc09d has been shown to cause several issues with clients
connecting.

Partial revert, since I wanted to keep the debug logs added
for that commit, as well remove the piece of code that
stops attempting to connect to zebra.  If we've failed
a bunch of times, there is nothing wrong with continuing
to do so once every 60 seconds.  I've debug guarded
the connect failure for those people running bgp
without zebra.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-12-14 18:24:57 -02:00
David Lamparter
a50b7cebd5 lib: remove vty->index
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-09 17:36:25 +01:00
David Lamparter
3c5070bec0 lib: make qobj NULL-safe/aware
reserve qobj ID 0 for a NULL pointer.  (No change is needed for lookups
since looking up 0 will simply fail and return NULL.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-09 17:36:25 +01:00
David Lamparter
04cb240868 Merge branch 'fixes/command'
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-08 15:07:24 +01:00
Christian Franke
942e4486d8 lib: fix prefix2str return value and assert
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2016-12-08 13:50:31 +01:00
David Lamparter
d5bd3e0a6f Merge branch 'stable/2.0'
Conflicts:
	bgpd/rfapi/bgp_rfapi_cfg.c
	bgpd/rfapi/vnc_debug.c

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-08 13:21:21 +01:00
Renato Westphal
6228a3b874 *: always set SO_SNDBUF and SO_RCVBUF using a best effort approach
If we fail to set any socket's buffer size, try again with a smaller value
and keep going until it succeeds. This is better than just giving up or,
even worse, abort the creation of a socket (ospf6d and ripd).

Fix broken ospf6d on FreeBSD.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-08 12:50:25 +01:00
David Lamparter
0276dd5d4b build: fix command_lex.h deps & gitignore
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-08 12:23:17 +01:00
Quentin Young
ee9216cf74 lib, ripngd: clean up merge leftovers
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-06 20:21:36 +00:00
Quentin Young
6fd800be4a Merge remote-tracking branch 'osr/master' into vtysh-grammar
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>

Conflicts:
	lib/command_match.c
2016-12-06 19:51:33 +00:00
Quentin Young
3d6e734154 lib, tests: fix failing cli tests
Some tests still failing pending reimplementation of {}
cli definition constructs

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-06 19:27:58 +00:00
Quentin Young
2d21bc75be lib: add back original ipv6 matcher
inet_pton is not suitable for well behaved cli completions

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-06 18:54:04 +00:00
David Lamparter
9dec6b446c Revert "lib: Macroize CLI matcher tracing"
This reverts commit 54c5dce6a5.
2016-12-05 21:01:06 +01:00
David Lamparter
d7d73ffc8f *: fix up DEFUNs without install_element calls
These now generate warnings which will break the build with -Werror.

Note this may have enabled commands that should be disabled, or the
other way around...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-05 20:28:24 +01:00
David Lamparter
7ddcfca4fb Merge branch 'queue/osr/vtysh-generic'
WARNING: Merge contains nontrivial fixups in vrf_cmd handling.

Conflicts:
	lib/if.c
	zebra/interface.c
2016-12-05 20:04:08 +01:00
Christian Franke
74d57f5a1f lib: "write mem" should write to persistent configuration
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2016-12-05 19:52:50 +01:00
David Lamparter
53dc2b05c7 Merge branch 'stable/2.0'
Conflicts:
	bgpd/bgp_route.c
	lib/if.c
	ripd/rip_interface.c
	zebra/interface.c
	zebra/zebra_vty.c
2016-12-05 19:48:38 +01:00
David Lamparter
242ab04255 lib: remove unused NS_BITMAP MTYPE
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-05 16:34:15 +01:00
David Lamparter
a93baa31d3 Merge branch '-rip' into stable/2.0
This fixes up a lot of RIP/RIPng compliance tests that were still
flagged up.

Tested-by: Martin Winter <mwinter@opensourcerouting.org>
2016-12-05 16:25:58 +01:00
David Lamparter
8ab22cd4be Merge branch '-renato' into stable/2.0
This contains bgp memory leak fixes as well as cleanups to VRF/namespace
handling and has been run through extended testing in Cumulus' testbed:

Tested-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-12-05 16:23:28 +01:00
Donald Sharp
b6a9e7b487 lib, zebra: Minimize display of link-params sub data
When link-params is configured it auto starts displaying
6000-02# conf t
dell-s6000-02(config)# int swp1
dell-s6000-02(config-if)# link-params
dell-s6000-02(config-link-params)# admin-grp 0x12345678
dell-s6000-02(config-link-params)# end
dell-s6000-02# show run

interface swp1
 link-params
  enable
  metric 0              <----Remove the bw lines
  max-bw 1.25e+06
  max-rsv-bw 1.25e+06
  unrsv-bw 0 1.25e+06
  unrsv-bw 1 1.25e+06
  unrsv-bw 2 1.25e+06
  unrsv-bw 3 1.25e+06
  unrsv-bw 4 1.25e+06
  unrsv-bw 5 1.25e+06
  unrsv-bw 6 1.25e+06
  unrsv-bw 7 1.25e+06
  admin-grp 305419896
  exit-link-params
!

I'd like to reduce this to:

interface enp0s3
 ip igmp
 ip pim sm
 link-params
  enable
  admin-grp 0x12345678    <----- Fix this to be what we entered
  exit-link-params
!

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-05 16:02:46 +01:00
Quentin Young
6a48317e26 lib: add command_lex.h to .gitignore
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-02 21:14:32 +00:00
Quentin Young
1e35decffd lib: make CLI completions less surprising
* If a token matches exactly at the end of input, it still
  shows up in completions, e.g.

      ex# clear<?>
	clear  Reset functions
      ex(config)# ip route 1.2.3.4<?>
        A.B.C.D    IP destination prefix
        A.B.C.D/M  IP destination prefix (e.g. 10.0.0.0/8)

* If a token in mid-line exactly matches one token and
  partially matches on one or more additional tokens,
  the command tree(s) under the partially matching tokens
  will be ignored in favor of the exact match when compiling
  completions for the full line, e.g.

      ex(config)# ip <?>

  will only show completions for commands under 'ip' and not
  those under 'ipv6', which the input partially matches.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-02 21:02:51 +00:00
Quentin Young
0b11464604 Merge remote-tracking branch 'osr_private_quagga/queue/osr/vtysh-generic' into vtysh-grammar 2016-12-02 19:02:06 +00:00
Quentin Young
54c5dce6a5 lib: Macroize CLI matcher tracing
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-02 18:26:47 +00:00
Quentin Young
d6c9cdd0dd lib: Add back prototypes for lexer helper funcs
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-12-02 18:26:10 +00:00
David Lamparter
b5a1e9ef5c lib: remove misleading copy/del_cmd_element
struct cmd_element items are static global variables, they are never
allocated, copied or freed.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-01 18:45:30 +01:00
David Lamparter
e9484f70b2 lib: parser: use reentrant mode on flex & bison
This removes remaining global variables from the lexer, pushing the
lexer state into struct parser_ctx too.  At the same time, "cmd_yy" is
used as prefix for all parser & lexer routines.

The result is that (a) there is no collision anymore if a program uses
flex/bison and links libzebra, and (b) the parser is fully encapsulated
and could be called in parallel from multiple threads.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-01 18:45:27 +01:00
David Lamparter
b07a15f82d lib: parser: wrap state in struct parser_ctx
This encapsulates all parser state into a new "struct parser_ctx", which
is allocated on stack and passed around as pointer.  The parser no
longer has any global variables with this.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-01 18:45:27 +01:00
David Lamparter
2ab402707f lib: move command_parse_format prototype
The function prototype for command_parse_format() is better left in
command.h, so that the bison-generated header file doesn't need to be
included for that.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-01 18:45:22 +01:00
David Lamparter
8af5502876 lib: allow all characters in WORD tokens
WORD tokens (which are also used for "LINE..." input) should really
accept all characters.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-01 17:25:56 +01:00
David Lamparter
555a5bfe15 lib: make DEFUN foobar_cmd symbols static
These are not externally referenced anymore;  this reduces the symbol
count of libzebra by quite a bit.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-01 17:25:56 +01:00
David Lamparter
0b84f29490 *: make DEFUN installations file-local
This moves all install_element calls into the file where the DEFUNs are
located.  This fixes several small related bugs:

- ospf6d wasn't installing a "no interface FOO" command
- zebra had a useless copy of "interface FOO"
- pimd's copy of "interface FOO" was not setting qobj_index, which means
  "description LINE" commands would fail with an error

The next commit will do the actual act of making "foo_cmd" static.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-01 17:25:56 +01:00
David Lamparter
0577b824e1 Merge branch 'stable/2.0' 2016-12-01 17:24:03 +01:00
David Lamparter
db2d8df649 lib: replace MIT license with ISC
Since other parts (e.g. ldpd) use the ISC license, and the ISC license
is just a simplified form of the MIT license, just move things over and
reduce the number of different licenses we have in use here.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-12-01 17:18:57 +01:00
Quentin Young
3a2d747c2e all: Fix all underfull doc strings
Additionally:
* Add [ip] to a couple bgp show commands
* Quick refactor of a couple ISIS commands
* Quick refactor of a couple OSPF6 commands

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-29 23:07:11 +00:00
David Lamparter
4a49a02952 lib: allow all characters in WORD tokens
WORD tokens (which are also used for "LINE..." input) should really
accept all characters.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-29 20:35:19 +00:00
David Lamparter
0d4aa1b186 lib: use traditional yacc empty statement
%empty was added in bison 2.7.1, which seems to not be available on some
of the BSDs by default.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-29 14:46:54 +01:00
David Lamparter
ef736f12ba *: fix "uninitialized" warnings
reported by clang for:
- cmd_complete_command()
- show_ip_bgp_ipv4()

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-29 14:15:05 +01:00
David Lamparter
ddae30158d *: add #include "command.h" where needed
Headers using struct cmd_token should directly include command.h so the
struct is actually defined.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-29 14:15:05 +01:00
Renato Westphal
661512bf05 zebra/lib: remove redundant fields from zebra_vrf
There's no need to duplicate the 'vrf_id' and 'name' fields from the 'vrf'
structure into the 'zebra_vrf' structure. Instead of that, add a back
pointer in 'zebra_vrf' that should point to the associated 'vrf' structure.

Additionally, modify the vrf callbacks to pass the whole vrf structure
as a parameter. This allow us to make further simplifications in the code.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-28 16:18:35 -02:00
Renato Westphal
05e8e11e54 lib/zebra: put vrf_get() on a diet
Also, for some reason we had two functions to search a VRF by its name:
zebra_vrf_lookup_by_name() and zebra_vrf_list_lookup_by_name().  The first
one would loop through vrf_table and the other one through vrf_list. This
is not necessary anymore, so remove zebra_vrf_lookup_by_name() and rename
zebra_vrf_list_lookup_by_name() to zebra_vrf_lookup_by_name().

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-28 16:18:35 -02:00
Renato Westphal
a62c490110 zebra: order VRFs by name on user output
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-28 16:18:35 -02:00
Renato Westphal
806f87607e lib/zebra: convert vrf_list to a red-black tree
Since we're already using a red-black tree to store VRFs sorted by their
vrf_id's, create a new tree to store VRFs sorted by their names.

The biggest advantage of doing this is that we reduce the time complexity
of vrf_list_lookup_by_name() from O(n) to O(log n).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-28 16:18:35 -02:00
Renato Westphal
5f3d1bdf3c *: rename two vrf functions
Since VRFs can be searched by vrf_id or name, make this explicit in the
helper functions.

s/vrf_lookup/vrf_lookup_by_id/
s/zebra_vrf_lookup/zebra_vrf_lookup_by_id/

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-28 16:18:35 -02:00
Renato Westphal
1a1a70655c lib: convert vrf code to use red-black trees as well
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-28 16:18:35 -02:00
Renato Westphal
c7fdd84f36 lib: convert namespace code to use red-black trees
We definitely need to stop abusing the route table data structure when
it's not necessary.  Convert the namespace code to use red-black trees
instead. This greatly improves code readability.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-28 16:18:35 -02:00
Renato Westphal
60f1637a8b lib: fix creation of pre-provisioned VRFs
If we configure a VRF that doesn't match any device in the kernel, we'll
fall in the first case of the vrf_get() function. In this function,
a vrf structure is callocated and it's vrf_id is never set explicitly,
which means it's set to zero (the vrf-id of the default VRF). When this
happens, commands like "router-id A.B.C.D vrf ..." will act on the
default VRF and not on the pre-provisioned VRF.  To fix this, always
set the vrf_id of pre-provisioned VRFs to VRF_UNKNOWN.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-28 16:18:35 -02:00
Renato Westphal
f30c50b992 zebra/lib: move some code around
* move netlink code from zebra_nc.c to kernel_netlink.c;
* move vrf CLI commands from if.c/interface.c to vrf.c/zebra_vrf.c;
* move declaration of the 'ns' structure to a header file.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-28 16:18:35 -02:00
Renato Westphal
1fbe3e585d lib: remove unused ns code
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-28 16:15:27 -02:00
Renato Westphal
58ac32e2d5 zebra/lib: plug several memleaks
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-28 16:15:27 -02:00
David Lamparter
745e2754ef lib: temporary-catch a SEGV in command completion
Getting FULL_MATCH with matched[0] == NULL in tests/testcli.  Catch and
print error for now.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-28 18:41:34 +01:00
David Lamparter
28c2525098 Merge commit '34d5ef459140ee7e'
(some build fixups for vtysh-grammar)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-28 18:10:21 +01:00
David Lamparter
82992fed8c Merge branch 'vtysh-grammar'
Conflicts:
	isisd/isisd.c
	lib/Makefile.am
	lib/thread.c

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-28 17:56:29 +01:00
David Lamparter
d7a64489f0 lib: merge-prep lib/command.c (partial revert)
This reverts commit 45ef430000,
for lib/command.c (to make a merge conflict go away).

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-28 17:52:24 +01:00
David Lamparter
bf31fc8174 lib: pre-remove str.[ch] for merge, move strmatch()
lib/str.[ch] was removed in cleaning up autoconf deadweight.
best place for strmatch seems to be a #define in zebra.h

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-28 17:46:55 +01:00
David Lamparter
cdf7612649 Merge remote-tracking branch 'cmaster-next' into cmaster-next-releng 2016-11-28 17:35:08 +01:00
Renato Westphal
c5bdb09fd9 *: create a helper function to set the IP_MULTICAST_LOOP sockoption
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-25 11:46:06 -02:00
Renato Westphal
b10ce84103 ripd: fix the "neighbor" command.
We can't use if_lookup_prefix() in rip_update_process() because this
function uses prefix_cmp() internally to try matching an interface
address to a static neighbor's address.

Since prefix_cmp() tries to match exact prefixes, if_lookup_prefix()
was always returning NULL.

What we really need here is to use prefix_match(), which checks if
one prefix includes the other (e.g. one /24 interface including a /32
static neighbor's address). The fix then is to replace the call to
if_lookup_prefix() and use if_lookup_address() instead, which uses
prefix_match() internally.

Fixes IxANVL RIP test 17.1

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-11-25 11:46:06 -02:00
vivek
b4863129a3 lib: Fix nexthop strings to coincide with enum
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-11-24 19:52:30 -05:00
David Lamparter
34d5ef4591 vtysh: fix some macro breakage
vtysh's extract.pl script doesn't cope with install_element(var, ) where
"var" is not one of the FOO_NODE constants.  Also, the future defun_lex
tool doesn't deal well with preprocessor expansions in the same regard.

This tries simplifying out some of these.  lib/distribute.c needs
further thinking.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-23 08:32:30 +01:00
David Lamparter
6d15b247e7 build: remove memtypes.h, put back in .gitignore
The file crept back in, better to keep it in .gitignore I guess.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-23 08:30:10 +01:00
Quentin Young
3bd20d8460 Merge branch 'cmaster-next' into vtysh-grammar
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>

Conflicts:
	zebra/interface.c
2016-11-22 21:36:54 +00:00
David Lamparter
6a49d0cc12 Merge remote-tracking branch 'cmaster-next' into cmaster-next-releng 2016-11-19 11:58:52 +01:00
Quentin Young
5435e6e88c lib: Fix ipv6 access-list... and ipv6 prefix-list...
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-18 21:27:30 +00:00
Donald Sharp
50e24903ba *: Fix up licensing to be right
These files were submitted by Cumulus but did
not properly setup the licensing of them.
This fixes that issue.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-11-18 10:14:03 -05:00
Quentin Young
98cfd06b41 lib, ospf6d: Change SECONDS_STR to be more generic
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-17 20:39:41 +00:00
Quentin Young
3c7ca60c41 lib: Fix nondeterministic command matches in rare cases
When a user erroneously defines two commands which can
match the same input and at least one of the tokens defined
last in the command is a selector or option, the matcher
does not detect an ambiguous match and matches the command
installed first (leftmost in the graph).

Fix is to do a full walkthrough of the follow set when
matching the final token in a command to check that there
is exactly one possible match, and to throw an ambiguity
error otherwise.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-15 22:15:18 +00:00
David Lamparter
c5d9d3bb36 lib: replace strlcpy & strlcat with glibc versions
It seems these two were at some point copied in from rsync; replace with
more recent versions that will hopefully become available in glibc as
well.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-15 17:35:36 +09:00
David Lamparter
24f5e2fc62 build: massively remove needless checks
Since we have autoconf results from a wide swath of target platforms, we
can go remove checks that have the same result on all systems.

This also removes several "fallback" implementations of functions that,
at some point in the history, weren't available on all target platforms.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-15 14:23:17 +09:00
David Lamparter
fac5f48064 build: don't use deprecation warning on ICC
icc doesn't do the pragma warning push/pop thing to selectively disable
the warning.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-15 14:06:59 +09:00
David Lamparter
45ef430000 build: fix -Wmaybe-uninitialized warnings
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-15 11:17:50 +09:00
Quentin Young
fefa0d8214 ospfd: Fix bad index for ospf message-digest-key
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-15 01:45:58 +00:00
Quentin Young
07321a065d Merge branch 'cmaster-next' into vtysh-grammar
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>

Conflicts:
	lib/command.c
	lib/vty.c
2016-11-12 05:17:37 +00:00
Quentin Young
17aca20bfb lib, vtysh: Fix memory leaks, change cmd_element to const
Fix a few memory issues:

* Not freeing tab-completions upon input match failure
* Invalid write when null-terminating tab-completions
* Not freeing argv[] itself in additinon to elements
* Use XFREE() instead of free() as appropriate
* Not freeing final token of an [option] during parsing

Make a few minor changes to CLI internals:

* Improve documentation on matching & completion functions
* Only make one copy of cmd_token's when building argv,
  instead of three
* Don't make a copy of the matching cmd_element

Make one major(ish) change to CLI internals:

* Change all pointers to struct cmd_element to const

Code outside of the core CLI units should never have an
occasion to modify the internal state of the command system.
Doing so could easily amount to having a CLI interface that
changes during runtime, and could conceivably lead to security
issues. Explicitly disallowing this removes any chance of
confusion.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-12 01:06:32 +00:00
Quentin Young
90e9905f07 lib: Allow '-' to match VARIABLE_TKN
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-11 20:37:43 +00:00
Quentin Young
7a4662b4a9 lib: Update list [permutations]
Don't show hidden or deprecated commands.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-10 23:30:20 +00:00
Quentin Young
ce882f8168 lib: Implement hidden and deprecated commands
Each token now knows whether it is part of a hidden
or deprecated command. Command completion logic hides
such tokens when generating completions. Command
matching logic works as before and will still match on
hidden and deprecated commands.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-10 23:17:07 +00:00
David Lamparter
87f44e2f0b lib: add minimal no-config VTY mode
This silences the following warning from watchquagga:
"Can't save to configuration file, using vtysh."
which otherwise appears when doing a "write file" in vtysh when no
integrated-config is in use.

Also make "show memory" available in watchquagga.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-10 10:15:27 +01:00
David Lamparter
95c4aff294 watchquagga: add "write integrated"
This new command - available for internal use by vtysh and explicit
usage by users - calls "vtysh -w" from watchquagga.  This ensures vtysh
is run with privileges to actually write the integrated-config file.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-09 14:29:39 +01:00
David Lamparter
46d5d8ec82 watchquagga: add ZLOG_WATCHQUAGGA
watchquagga logs as "NONE", which will also become visible in vtysh for
error messages.  Add "WATCHQUAGGA" log target.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-09 14:00:48 +01:00
David Lamparter
e227e24231 lib: privs: always look up VTY group
Even if we're running without user switch, we should still try to honor
the VTY group.  This applies both to watchquagga (which always runs as
root) as well as "no-userswitch" configurations for other daemons.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-09 13:40:37 +01:00
David Lamparter
2da59394ec lib: add and use set_cloexec()
watchquagga is already leaking an open file descriptor on its pid file
on fork+exec() invocations; next up is adding vtysh support with even
more fds.  Mark things CLOEXEC before going there.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-11-09 13:40:05 +01:00
Quentin Young
16cedbb01f all: Fix underfull doc strings, part 1
Add missing docstrings and separating \n.
Also eat some low-hanging refactoring fruit.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-04 23:03:03 +00:00
Quentin Young
2328428d20 ospfd, lib: Fix no pce address syntax
And change parser debugging messages to zlog_debug

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-04 20:16:07 +00:00
Quentin Young
34f1f6dc78 lib: Remove node debug message on list output
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-11-03 19:18:02 +00:00
Quentin Young
5b5231b091 lib: Fix segfault on erroneous command
Command completion vector should only be copied if it is
non-null.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-31 03:34:27 +00:00
Quentin Young
ebacb4edce lib: Various minor improvements & bugfixes to CLI backend
- Do not allow tab-completion on anything except words
- Rewrite cmd_make_strvec to use strsep
- Remove a few trailing whitespaces
- Remove cmd_complete_command_lib

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-29 04:43:04 +00:00
Quentin Young
a99586748f lib: Log warning when commands have underfull doc string
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-27 22:08:10 +00:00
Quentin Young
e9e190f245 Merge branch 'cmaster-next' into vtysh-grammar
Conflicts:
	vtysh/vtysh.c
	zebra/zebra_vty.c
2016-10-25 19:38:04 +00:00
Donald Sharp
b09bceec68 lib: Fix race condition in shutdown of routemap
When shutting down a daemon that uses an update
timer to handle route map processing, there
exists a race condition where if you change
a route map and then immediately shutdown
quagga before the update timer for the routemap
runs, you will be placed in a infinite loop.

This condition happens because this commit introduces
route map memory free'ing but never tests to see
if the to_be_processed flag has happened or not
before deleting:

commit 289d25016b
Author: Lou Berger <lberger@labn.net>
Date:   Wed Apr 10 12:30:04 2013 -0700

    bgpd, lib: memory cleanups for valgrind, plus debug changes

Modify route_map_finish to explicitly turn off the to_be_processed
field.  As that we know we are going away if route_map_finish is
called.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-10-24 13:40:08 -04:00
Quentin Young
fd8503f557 Merge branch 'cmaster-next' into vtysh-grammar
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>

Conflicts:
	bgpd/bgp_vty.c
2016-10-21 19:49:16 +00:00
Quentin Young
39e92c066f Merge branch 'cmaster-next' into vtysh-grammar
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>

Conflicts:
	bgpd/bgp_encap.c
	bgpd/bgp_route.c
	lib/command.c
	lib/command.h
	ospf6d/ospf6d.c
	vtysh/vtysh.c
2016-10-21 19:27:49 +00:00
Donald Sharp
873d76e7f9 lib: Fix for int64 and json on some systems
When compiling json on systems with json/json.h
that don't have json_object_new_int64, just
use json_object_new_int instead and accept
we might truncate data.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-10-20 21:20:15 -04:00
Quentin Young
ae19d7dd48 lib: Add helper function for working with argv, update bgpd to use it
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-20 20:31:24 +00:00
Quentin Young
e8d5696d45 lib: Allow '_' in arguments to VARIABLE_TKN
second attempt

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-20 19:24:36 +00:00
Quentin Young
8c9474817e Revert "lib: Allow '_' in arguments to VARIABLE_TKN"
This reverts commit e0a467872b.
2016-10-20 19:21:37 +00:00
Quentin Young
e0a467872b lib: Allow '_' in arguments to VARIABLE_TKN
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-20 19:17:36 +00:00
Daniel Walton
c6a7d59c20 bgpd: 'show ip bgp summary json' shows large negative value for "peerUptimeMsec"
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Don Slice <dslice@cumulusnetworks.com>

Ticket: CM-13239
2016-10-20 17:21:34 +00:00
Quentin Young
0a538fc98f Merge branch 'cmaster-next' into vtysh-grammar
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>

Conflicts:
	isisd/isis_routemap.c
	zebra/rt_netlink.c
2016-10-20 16:31:49 +00:00
Paul Jakma
274f29b2f4 lib: keep hash of node's commands to detect duplicate installs
* command.h: (struct cmd_node) Add a hash, so duplicate installs of
  a cmd_element to a command node can be detected.  To help catch
  strays from the VIEW/ENABLE node consolidation particularly
  (installs to VIEW automatically install to ENABLE too now).
* command.c: (cmd_hash_{key,cmp}) helpers for the hash - just directly
  on the pointer value is sufficient to catch the main problem.
  (install_node) setup the hash for the command node.
  (install_element) check for duplicate installs.
  The assert on the cmd_parse_format seems misplaced.
  (install_default_basic) separate the basic, VIEW, node default commands
  to here.
  (cmd_init) get rid of dupes, given consolidation.
  (cmd_terminate) clean up the node command hash.

Not done: The (struct cmd_node)'s vector could be replaced with the
cmd hash, however much of the command parser depends heavily on the
vector and it's a lot of work to change.  A vector_lookup_value could
also work, particularly if vector could be backed by a hash.

The duplicate check could be disabled in releases - but useful in
development.  It's a little extra overhead at startup.  The command
initialisation overhead is already something that bites in
micro-benchmarks - makes it easy for other implementations to show
how much faster they are with benchmarks where other load is low
enough that startup time is a factor.
2016-10-19 22:28:45 -04:00
Donald Sharp
41246cb614 lib: Fix redist memory free'ing
When shutting down, properly free memory associated
with zclient.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-10-19 11:44:39 -04:00
Donald Sharp
9df78e7c3a lib: Add cleanup for routemaps
Some new routemap hash data structures were not being
properly cleaned up.  Add the hash_free code in.

This code does not fix the variety of daemons that
don't actually call route_map_finish.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-10-19 11:12:07 -04:00
Donald Sharp
b2575bc05b *: Consolidate routemap initialization
Consolidate the routemap initialization into one
function.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-10-19 10:55:59 -04:00
Lou Berger
289d25016b bgpd, lib: memory cleanups for valgrind, plus debug changes
Description:
    We use valgrind memcheck quite a bit to spot leaks in
    our work with bgpd. In order to eliminate false positives,
    we added code in the exit path to release the remaining
    allocated memory.

    Bgpd startup log message now includes pid.

Some little tweaks by Paul Jakma <paul.jakma@hpe.com>:

* bgp_mplsvpn.c: (str2prefix_rd) do the cleanup in common code at the end
  and goto it.

[DL: dropped several chunks from original commit which are obsolete by
now on this tree.]
2016-10-18 10:34:41 -04:00
Renato Westphal
43e7c3b421 lib/zebra: remove code duplication in redist_del_instance()
Change redist_check_instance() to return a pointer instead of returning 1
on success. This way this function can be reused in redist_del_instance()
instead of duplicating the same logic there.

Also, remove unnecessary call to redist_check_instance() in
zebra_redistribute_delete().

While here, remove unnecessary cast from void* in redist_add_instance().

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-10-18 08:51:24 -04:00
Renato Westphal
a695cc7b80 zebra/ldpd: introduce ZEBRA_ROUTE_ALL wildcard route type
The ZEBRA_ROUTE_ALL route type can be used by a client to request
all routes from zebra. The main motivation for introducing this is
to allow ldpd to get routes from all OSPF instances, not only from
the default one. Without ZEBRA_ROUTE_ALL, ldpd would need to send a
ZEBRA_REDISTRIBUTE_ADD message for each possible OSPF instance (65k),
which doesn't scale very well.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-10-18 08:51:23 -04:00
Christian Franke
cdeef0bd9a lib: add event_counter
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2016-10-18 08:39:23 -04:00
Christian Franke
57387fb2cd lib: add api method to read current config path
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2016-10-18 08:39:23 -04:00
Quentin Young
e52702f29d Merge branch 'cmaster-next' into vtysh-grammar
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>

Conflicts:
	bgpd/bgp_route.c
	bgpd/bgp_routemap.c
	bgpd/bgp_vty.c
	isisd/isis_redist.c
	isisd/isis_routemap.c
	isisd/isis_vty.c
	isisd/isisd.c
	lib/command.c
	lib/distribute.c
	lib/if.c
	lib/keychain.c
	lib/routemap.c
	lib/routemap.h
	ospf6d/ospf6_asbr.c
	ospf6d/ospf6_interface.c
	ospf6d/ospf6_neighbor.c
	ospf6d/ospf6_top.c
	ospf6d/ospf6_zebra.c
	ospf6d/ospf6d.c
	ospfd/ospf_routemap.c
	ospfd/ospf_vty.c
	ripd/rip_routemap.c
	ripngd/ripng_routemap.c
	vtysh/extract.pl.in
	vtysh/vtysh.c
	zebra/interface.c
	zebra/irdp_interface.c
	zebra/rt_netlink.c
	zebra/rtadv.c
	zebra/test_main.c
	zebra/zebra_routemap.c
	zebra/zebra_vty.c
2016-10-17 23:36:21 +00:00
Renato Westphal
b2d4d0393a *: rename all instances of OSPFv6 to OSPF6 or OSPFv3
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-10-13 00:59:19 +00:00
Renato Westphal
6694f68c3f lib/vtysh: fix duplicate installation of some vty commands
This is a followup to commits 735e62 and 0b1442, where we forgot to apply
the same VIEW/ENABLE consolidation logic to vtysh. Also, we can't call
install_default() for the ENABLE node because some of the vty commands
installed by this function were already installed in the VIEW node before.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-10-12 19:33:56 -04:00
Donald Sharp
0b1442e37b *: Consolidate all double VIEW_NODE and ENABLE_NODE's
If a command is put into the VIEW_NODE, it is going into the
ENABLE_NODE as well.  This is especially true for show commands.
As such if a command is in both consolidate it down to VIEW_NODE.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-10-07 21:05:06 -04:00
Donald Sharp
735e62a0f2 lib: Consolidate VIEW_NODE to be ENABLE_NODE as well
If you are in VIEW_NODE, the command should exist in ENABLE_NODE
as well.  This is being done to reduce chances of code being
added to one but not the other NODE.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-10-07 21:05:06 -04:00
Donald Sharp
3c8ab49fd1 bgpd, lib: Remove RESTRICTED_NODE from code base
The RESTRICTED_NODE command is not used, introduces code
complexity and provides no additional levels of security.

The only way to get into RESTRICTED_NODE is to add, under
vty configuration the command 'anonymous restricted', and
then telnet to a daemon, provide a password, then type
'enable' and fail to enter the password three times.
Then the user can enter a very limited set of commands to
monitor bgp and only bgp behavior.

This commit removes both the RESTRICTED_NODE usage as well
as the lib/* usage of the code

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-10-07 21:05:06 -04:00
Christian Franke
dc9ffce878 *: Consistently support 32-bit route tags
This patch improves zebra,ripd,ripngd,ospfd and bgpd so that they can
make use of 32-bit route tags in the case of zebra,ospf,bgp or 16-bit
route-tags in the case of ripd,ripngd.

It is based on the following patch:

    commit d25764028829a3a30cdbabe85f32408a63cccadf
    Author: Paul Jakma <paul.jakma@hpe.com>
    Date:   Fri Jul 1 14:23:45 2016 +0100

    *: Widen width of Zserv routing tag field.

But also contains the changes which make this actually useful for all
the daemons.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2016-10-07 21:05:05 -04:00
Quentin Young
a2454870d6 lib: Remove show commandtree, add list permutations
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-07 21:44:10 +00:00
Quentin Young
c0f9771dcc lib: Add naive deduplication checks when installing commands
Since not all duplicate commands can be caught during graph
construction, do a linear search over all commands before
installing.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-07 18:41:41 +00:00
Quentin Young
faf2a19de0 lib: Improve formatting for matcher tracing output
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-07 18:40:37 +00:00
Donald Sharp
b10c5b0702 lib: Remove unknown protocol.
What is MASC anyways?

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-10-07 12:35:06 -04:00
Donald Sharp
e2e210ddf0 lib: Fix ordering issue in protocol names
The protocol names and enum must be kept
in the same order.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-10-07 12:20:33 -04:00
David Lamparter
cc933ef9f6 lib, isisd: enable concurrent configuration editing
Finally, this disables the config editing lock for isisd.  It also
enables deprecation warnings for the lib/ and isisd/ to catch accidental
uses of vty->index.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-10-07 09:09:52 -04:00
David Lamparter
6a098b3aa7 lib: replace vty->index_sub with qobj
The keychain code is the only user of vty->index_sub;  this is also
replaced with a qobj safe-pointer.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-10-07 09:09:52 -04:00
David Lamparter
be301cc256 lib: use qobj for vty->index context position
Prepares the library CLI functions for concurrent config access.  Note
the vty->index pointer is still kept functional for the daemons to use.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-10-07 09:09:52 -04:00
David Lamparter
0878c8d423 lib: vty: add infrastructure for qobj ID "index"
As mentioned in previous commits, this prepares to replace the vty's
"void *index" context position with a safe qobj pointer.  This will
allow concurrent configuration editing by multiple users, as soon as no
more code (library included) in the daemon uses vty->index anymore.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-10-07 09:09:51 -04:00
David Lamparter
e80e7cced3 lib: qobj: register ifaces, routemaps & keychains
This places the appropriate calls so library objects can be used with
qobj "pointers", especially in the CLI.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-10-07 09:09:51 -04:00
David Lamparter
1bf9f0270c lib: add "qobj" object-ID infrastructure
This adds 64-bit random identifiers as "safe pointers" which are also
type-tracked / can have type-specific extension methods.

This will be used by both the CLI (to keep safe references while in
config editing mode) as well as the Cap'n Proto code (to hand out
pointers to the user in a safe way and add per-type handlers)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-10-07 09:09:51 -04:00
Daniel Walton
82f97584fb all: removed all DEFUN command stomps
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
2016-10-06 19:56:13 +00:00
Quentin Young
cbd7259d95 lib: Log invalid/unknown commands to log file
Ticket: CM-6855

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-06 18:39:31 +00:00
Quentin Young
6011c1b213 lib: Make <cr> appear first in completions
When a command is complete and <cr> appears in tab- or
?-completions, make sure it appears first

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-06 01:15:48 +00:00
Quentin Young
03ca8d3dff lib: Check match level when calculating completions
Adds a missing check that resulted in partial token
matches being accepted as exact matches when calculating
input completions.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-06 00:03:39 +00:00
Quentin Young
b4f56274fa lib: Add tracing capabilities to command matcher
Compile with -DTRACE_MATCHER to enable matcher
debugging to stdout.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-05 23:56:17 +00:00
Quentin Young
3871154b72 lib: Invalid commands are errors, fix msg formatting
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-05 23:50:49 +00:00
Quentin Young
cc0a8be633 lib: Allow / and . to match VARIABLE_TKN, fix range matches
Range matching function was returning 0 instead of no_match
on failed match, causing all input to match ranges.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-04 20:56:30 +00:00
Quentin Young
42debbb43d lib: Add logging for invalid commands
Ticket: CM-6855

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-04 20:41:52 +00:00
Quentin Young
98463e0ab7 lib: fix password and enable password syntax
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-04 18:47:17 +00:00
Quentin Young
268316d185 lib: Clean up completions code, fix segfault on no match
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-03 23:21:11 +00:00
Lou Berger
65efcfce42 bgpd: add L3/L2VPN Virtual Network Control feature
This feature adds an L3 & L2 VPN application that makes use of the VPN
and Encap SAFIs.  This code is currently used to support IETF NVO3 style
operation.  In NVO3 terminology it provides the Network Virtualization
Authority (NVA) and the ability to import/export IP prefixes and MAC
addresses from Network Virtualization Edges (NVEs).  The code supports
per-NVE tables.

The NVE-NVA protocol used to communicate routing and Ethernet / Layer 2
(L2) forwarding information between NVAs and NVEs is referred to as the
Remote Forwarder Protocol (RFP). OpenFlow is an example RFP.  For
general background on NVO3 and RFP concepts see [1].  For information on
Openflow see [2].

RFPs are integrated with BGP via the RF API contained in the new "rfapi"
BGP sub-directory.  Currently, only a simple example RFP is included in
Quagga. Developers may use this example as a starting point to integrate
Quagga with an RFP of their choosing, e.g., OpenFlow.  The RFAPI code
also supports the ability import/export of routing information between
VNC and customer edge routers (CEs) operating within a virtual
network. Import/export may take place between BGP views or to the
default zebera VRF.

BGP, with IP VPNs and Tunnel Encapsulation, is used to distribute VPN
information between NVAs. BGP based IP VPN support is defined in
RFC4364, BGP/MPLS IP Virtual Private Networks (VPNs), and RFC4659,
BGP-MPLS IP Virtual Private Network (VPN) Extension for IPv6 VPN . Use
of both the Encapsulation Subsequent Address Family Identifier (SAFI)
and the Tunnel Encapsulation Attribute, RFC5512, The BGP Encapsulation
Subsequent Address Family Identifier (SAFI) and the BGP Tunnel
Encapsulation Attribute, are supported. MAC address distribution does
not follow any standard BGB encoding, although it was inspired by the
early IETF EVPN concepts.

The feature is conditionally compiled and disabled by default.
Use the --enable-bgp-vnc configure option to enable.

The majority of this code was authored by G. Paul Ziemba
<paulz@labn.net>.

[1] http://tools.ietf.org/html/draft-ietf-nvo3-nve-nva-cp-req
[2] https://www.opennetworking.org/sdn-resources/technical-library

Now includes changes needed to merge with cmaster-next.
2016-10-03 08:17:02 -04:00
Quentin Young
4d12266b80 lib: allow nesting selectors
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-02 19:14:40 +00:00
Quentin Young
a78596c42d lib: explicitly support the case of empty input for completions
When the user tab- or ?-completes when the character prior to
the position of the cursor is a space, completion logic is
passed null. Explicitly handle this case instead of using
partly_match, which has special logic associated with it to
allow abbreviating certain tokens.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-02 04:47:31 +00:00
Quentin Young
51d41d759b lib: Null-terminate tab completions char*[]
vtysh expects the result of a tab completion to
have a null pointer as the last element

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-02 03:27:58 +00:00
Quentin Young
c5bd4620b0 lib: Fix command execution npe
Caller may pass NULL if it does not care about what
command was matched.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-10-01 20:05:10 +00:00
Quentin Young
f66625df51 lib: fix double free in parser
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-30 23:16:29 +00:00
Quentin Young
a98d33ab20 lib, vtysh: refactor vtysh.c, allow parser continuance
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-30 23:03:05 +00:00
Quentin Young
76b6abb95a lib: initialize cmd_vector and add a root node to graph
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-30 19:33:11 +00:00
Lou Berger
520d2512db lib: add skiplist 2016-09-30 13:22:35 -04:00
Lou Berger
f9fe627886 memory: restore 'memstats:' keyword when logging memstats - useful in log 2016-09-30 12:56:42 -04:00
Lou Berger
17d06b64d0 log.h: restore vzlog extern 2016-09-30 12:56:25 -04:00
Lou Berger
c634f609a6 lib: add route_table_get_default_delegate 2016-09-30 12:56:17 -04:00
Timo Teräs
446bb95e0f zebra: support FIB override routes
FIB override routes are for routing protocols that establish
shortcut routes, or establish point-to-point routes that should
not be redistributed. Namely this is useful NHRP daemon to come.

Zebra is extended to select two entries from RIB the "best" entry
from routing protocols, and the FIB entry to install to kernel.
FIB override routes are never selected as best entry, and thus
are never adverticed to other routing daemons. The best FIB
override, or if it does not exist the otherwise best RIB is
selected as FIB entry to be installed.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
[CF: Massage to fit cumulus tree]
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2016-09-30 12:22:01 -04:00
Daniel Walton
6de69f8305 all: added some missing <>s within []s
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-30 15:31:48 +00:00
Donald Sharp
3694c43ac0 lib: Only display memory items that have allocations
When displaying memory via a 'show run' only display
items that have actual memory allocated.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-29 21:47:07 -04:00
Donald Sharp
69b5e938fe Merge remote-tracking branch 'origin/cmaster' into cmaster-next 2016-09-29 20:24:49 -04:00
Daniel Walton
58749582a9 all: scrubbed some argc CHECK MEs
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-30 00:16:31 +00:00
Daniel Walton
abddf07563 all: scrubbed some argc CHECK MEs
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-29 19:51:56 +00:00
Daniel Walton
67656e9b65 all: added CHECK ME for DEFUNs that look at argc
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-29 17:48:57 +00:00
Donald Sharp
afe0c07b41 lib: Fix compile for json
When compiling with the json library instead of the json-c
library allow it to switch back to the old way of printing.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-28 20:35:12 -04:00
David Lamparter
615d426587 lib: fix vrf_bitmap leak in zclient_free()
zclient_stop(), which is used as antagonist to zclient_init(), needs to
undo the vrf_bitmap allocation.  Otherwise zclient_init() will leak the
allocated memory, for example when zclient_reset() is used.

Reported-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-09-28 15:41:06 -04:00
Daniel Walton
2aac576795 use JSON_C_TO_STRING_PRETTY for json_object_to_json_string
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-28 04:52:36 +00:00
Quentin Young
0157c32771 lib: reformat vty.h
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-27 17:14:07 +00:00
Daniel Walton
e961923c72 bgpd, etc: changed .LINE to LINE...
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-27 00:07:46 +00:00
Donald Sharp
0cf74a8392 lib: Allow more space in thread.c output
When displaying thread time for long running/busy
protocols, the space allocated may not be sufficient.

Allow the runtime to take a bit more space.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-26 14:06:23 -04:00
Matthieu Boutier
fb23cf4abe lib: Make distribute.c accepts both v4 and v6.
distribute.c doesn't allow to manage both v4 and v6 distribute lists.  This
patch fix this problem by having 4 DISTRIBUTE* values in the enumeration instead
of two. The code in all daemons using distribute.c is adapted.
2016-09-26 10:52:41 -04:00
Matthieu Boutier
ee5bb56117 lib: simplify distribute.c's code.
Use loops and variables instead of doing each cases by hand.
Use static functions instead of rewriting code.
2016-09-26 10:52:41 -04:00
Daniel Walton
199d90a10e Expand #defines in command strings
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-25 16:49:39 +00:00
Daniel Walton
3ce54f7812 Expand #defines in command strings
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Don Slice <dslice@cumulusnetworks.com>
Reviewed-by:   Sam Tannous <stannous@cumulusnetworks.com>

Ticket:
2016-09-25 14:22:48 +00:00
Daniel Walton
9ccf14f739 Expand #defines in command strings
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-25 14:10:48 +00:00
Daniel Walton
412e5cd94f lib: added strmatch()
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-23 22:12:11 +00:00
Quentin Young
d862bffbda lib: lib compiles
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-23 21:34:33 +00:00
Daniel Walton
c349116d7c lib: add 'int idx_foo' argv index variables
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-23 20:17:29 +00:00
Quentin Young
f667a580b7 lib: Implement removed ALIAS into DEFUN
N.B.: some of these are de-facto ALIAS resurrections
that are necessary due to some parser limitations; these
are marked with ALIAS_FIXME so I can go back and add
capability to the parser to handle these special cases.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-23 20:08:47 +00:00
Christian Franke
0fc452dc57 Make route flags a 32bit field
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2016-09-23 12:12:43 -04:00
Paul Jakma
d91788284e lib: Check prefix length from zebra is sensible
* zclient.c: prefix length on router-id and interface address add
  messages not sanity checked.  fix.

* */*_zebra.c: Prefix length on zebra route read was not checked, and
  clients use it to write to storage.  An evil zebra could overflow
  client structures by sending overly long prefixlen.

Prompted by discussions with:

Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-23 12:12:17 -04:00
David Lamparter
6b143a68d3 lib: force local MIN/MAX macros
Linux/glibc sys/param.h has definitions of MIN/MAX that result in
multiple evaluations of its parameters.  Force local definitions.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-09-23 12:12:17 -04:00
Christian Franke
e6f8d09592 lib: update Solaris multicast API (BZ#725)
On OpenIndiana/Solaris the build fails with "unsupported multicast API".
It's only in the IPv4 part where setsockopt IP_MULTICAST_IF needs a
local address and not the index (IPv6 wants the index).
The following code walks the list of interfaces until it finds the matching
index and uses the interface's local address for the setsockopt call.
I don't know if it works on Solaris < 10 (I guess yes, but I don't have
any machine to verify it).

[NB: this breaks unnumbered setups that use the same IPv4 address on
multiple interfaces. -- equinox@opensourcerouting.org]

Reported-by: Brian Utterback <brian.utterback@oracle.com>
Signed-off-by: Christian Franke <chris@opensourcerouting.org>

Patchwork #762
2016-09-23 12:12:16 -04:00
David Lamparter
01673c6817 lib: fix ICC warning in route-map code
ICC thinks we're storing a pointer and might be losing bits at the top:
error #810: conversion from "void *" to "route_map_event_t={enum
 <unnamed>}" may lose significant bits

Build is warning-free on ICC 14.0.3 (for Linux x86_64) with this.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-09-23 12:12:16 -04:00
Donald Sharp
b99c382167 Revert "Make route flags a 32bit field"
This reverts commit 85eda2c985.
2016-09-23 12:11:21 -04:00
Donald Sharp
510dc06033 Revert "zebra: support FIB override routes"
This reverts commit 7569ae8bb7.
2016-09-23 12:11:00 -04:00
Timo Teräs
7569ae8bb7 zebra: support FIB override routes
FIB override routes are for routing protocols that establish
shortcut routes, or establish point-to-point routes that should
not be redistributed. Namely this is useful NHRP daemon to come.

Zebra is extended to select two entries from RIB the "best" entry
from routing protocols, and the FIB entry to install to kernel.
FIB override routes are never selected as best entry, and thus
are never adverticed to other routing daemons. The best FIB
override, or if it does not exist the otherwise best RIB is
selected as FIB entry to be installed.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
[CF: Massage to fit cumulus tree]
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2016-09-23 09:51:57 -04:00
Christian Franke
85eda2c985 Make route flags a 32bit field
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2016-09-23 09:51:43 -04:00
Daniel Walton
6147e2c694 convert <1-255> to (1-255), ()s to <>s, etc
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-23 13:47:20 +00:00
Renato Westphal
fe6c7157bf zebra: check at startup if the kernel supports MPLS
Replace all HAVE_MPLS #ifdef's by a run-time check if MPLS is supported
by the kernel or not. This way we don't need to create multiple packages
for each OS distribution.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-09-23 09:31:25 -04:00
Renato Westphal
a4b46f4c16 *: remove dead code
Since recently zebra uses only the ZEBRA_REDISTRIBUTE_* messages
to advertise redistributed routes to its clientes. Now the old
ZEBRA_IPV*_ROUTE_* messages are only used for client->zebra communication.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-09-23 09:31:24 -04:00
ßingen
e2a4192a42 zebra: fix bug in nexthop label allocation
Label array in nexthop_label struct was not being allocated.
2016-09-23 09:31:21 -04:00
Renato Westphal
d3e2c74ada mpls: add support to the OpenBSD kernel
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-09-23 09:31:15 -04:00
Renato Westphal
ce54994727 mpls: add support for LDP LSPs
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-09-23 09:31:12 -04:00
Renato Westphal
eac6e3f027 ldpd: adapt the code for Quagga
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-09-23 09:31:09 -04:00
Renato Westphal
8429abe0c2 ldpd: copy original sources from OpenBSD (14/09/2016)
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-09-23 09:31:05 -04:00
vivek
c0f4be83a1 MPLS: Install labeled static routes
This patch installs labeled static routes in the FIB. The routes are installed
using the RTA_ENCAP (and RTA_ENCAP_TYPE) nested attributes.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-6040
Reviewed By: CCR-3091
Testing Done: Tested in SE-1, brief manual testing now
2016-09-23 09:31:02 -04:00
vivek
40c7bdb0c9 Quagga: Install label forwarding entries for statically configured LSPs
Install the statically configured LSPs into the FIB (kernel). This is done
using the new attributes and definitions for MPLS in the kernel -
RTA_VIA, RTA_NEWDST and AF_MPLS.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket:  CM-4804
Reviewed By: CCR-3088
Testing Done: Manual in SE-1
2016-09-23 09:30:56 -04:00
vivek
7758e3f313 Quagga: Static LSP configuration
Add support for statically configuring MPLS transit LSPs. This allows the
configuration of ILM to one or more NHLFE, as defined in RFC 3031. The
currently supported nexthop types are IPv4 or IPv6.

The two label operations supported are swap and PHP; the latter is configured
by specifying the out-label as "implicit-null". Note that the operation is
against the label, so it should be the same for all NHLFEs.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-4804, ...
Reviewed By: CCR-3085
Testing Done: In combination with other patches
2016-09-23 09:30:54 -04:00
vivek
54d48ea153 Quagga: Definitions for static LSPs
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-4804, ...
Reviewed By: CCR-3084
Testing Done: Not relevant
2016-09-23 09:30:53 -04:00
vivek
50f342078f Quagga: Basic definitions for MPLS
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-4804, ...
Reviewed By: CCR-3083
Testing Done: Not relevant
2016-09-23 09:30:52 -04:00
Daniel Walton
8d1fc5b581 lib: undo <> -> () change I made yesterday
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-23 11:33:50 +00:00
Daniel Walton
f412b39a33 ALIAS removal for bgp, ospf, pim, isis, rip, ripng, lib and zebra
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-23 03:55:26 +00:00
Daniel Walton
c0c053fa13 lib: argv update for distribute.c and ns.c
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-23 01:20:49 +00:00
Daniel Walton
6f1ccc12de lib: argv update for filter.c, if_rmap.c keychain.c and plist.c
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-23 00:58:26 +00:00
Quentin Young
7fcbbdaeb6 lib: argv update for routemap.c
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-22 22:53:09 +00:00
Quentin Young
fcbee69056 lib: argv update for if.c
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-22 21:40:28 +00:00
Quentin Young
1bf1b05af9 lib: argv update for thread.c
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-22 20:32:34 +00:00
Quentin Young
97e5b7c0b3 lib: argv fixes, XFREE -> free, rm decl in matcher
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-22 20:26:07 +00:00
Quentin Young
aa1c90a487 lib: distribute.c, smux.c, vty.c grammar refactor
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-22 20:17:48 +00:00
Daniel Walton
bf2bfafd7e ospfd: argv update for all but ospf_vty.c
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-22 19:15:24 +00:00
Quentin Young
b87c0c3cf0 lib: Remove last remnants of NUMBER_TKN...again
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-22 18:26:11 +00:00
Daniel Walton
5c307a08f2 Revert "lib: Get thread.c to compile"
This reverts commit 9c5f6b578e.
2016-09-22 18:23:29 +00:00
Daniel Walton
bcff2289ed Revert "lib, zebra: Fixup if.c to work in the new regime"
This reverts commit 2511cb40e6.
2016-09-22 18:23:21 +00:00
Daniel Walton
7e347cbe16 Revert "lib: Fix vty.c to compile with new parser"
This reverts commit c1ad0838e8.
2016-09-22 18:23:14 +00:00
Daniel Walton
7d0ca51ac8 Revert "lib: Fixup ns.c"
This reverts commit 5720e4ff95.
2016-09-22 18:23:08 +00:00
Daniel Walton
86c42eff78 Revert "lib: Fixup plist.c"
This reverts commit c65a0fe1c6.
2016-09-22 18:22:59 +00:00
Daniel Walton
e4123a9bb5 Revert "lib: Fixup more files"
This reverts commit f68cec764a.
2016-09-22 18:22:50 +00:00
Daniel Walton
4dcadbefd0 bgpd: argv update for all but bgp_vty.c
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-22 15:15:50 +00:00
Donald Sharp
51f8c3f2ea lib: Add #define str for JavaScript help string
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-21 10:07:04 -04:00
Donald Sharp
8a2d6083d6 lib: Fixup json code to use struct cmd_token 2016-09-20 23:20:02 -04:00
Donald Sharp
f68cec764a lib: Fixup more files 2016-09-20 22:26:30 -04:00
Quentin Young
97e4e08d5f Merge branch 'vtysh-grammar' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into vtysh-grammar 2016-09-22 00:28:16 +00:00
Quentin Young
ffc9de904b lib: Remove NUMBER_TKN leftovers
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-22 00:27:22 +00:00
Quentin Young
287a4acf83 lib: Use listnode_add_before for prepending nodes
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-21 23:55:39 +00:00
Quentin Young
9547b5d072 lib: Update copyright headers
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-21 23:55:29 +00:00
Donald Sharp
c65a0fe1c6 lib: Fixup plist.c 2016-09-20 21:58:16 -04:00
Donald Sharp
5720e4ff95 lib: Fixup ns.c 2016-09-20 21:52:22 -04:00
Donald Sharp
c1ad0838e8 lib: Fix vty.c to compile with new parser 2016-09-20 21:49:32 -04:00
Donald Sharp
2511cb40e6 lib, zebra: Fixup if.c to work in the new regime
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-20 21:44:37 -04:00
Donald Sharp
9c5f6b578e lib: Get thread.c to compile
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-20 21:23:53 -04:00
Donald Sharp
460a768914 Merge remote-tracking branch 'origin/cmaster-next' into vtysh-grammar 2016-09-20 21:17:34 -04:00
Quentin Young
844ec28cee Merge branch 'cmaster-next' into vtysh-grammar
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>

Conflicts:
	lib/.gitignore
	lib/command.c
	lib/command.h
2016-09-21 22:11:53 +00:00
Quentin Young
d0bfb22c22 lib: Initial refactor pass on CLI backend
Shotgun commit:
* Remove shim sources from Makefile.am
* Move new types to command.c / command.h
* Rewrite command.c / command.h
* Refactor shim types to real types in matcher
  and parser
* Initial refactor pass on vty.c

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-19 23:46:51 +00:00
David Lamparter
af2d0efcac lib: deregister memtypes on exit/unload
This is useful for DSO modules in order to get support for unloading
them dynamically.  It also runs on exit, which doesn't matter much.

At some future point, the code could be extended to check that
allocation counts are 0 on unloading a module.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-09-19 16:31:08 -04:00
David Lamparter
7a13c923af lib: clean/restore memory debugging functions
This adapts the dump-at-exit handler and removes the old leftover code.

(Note the text in log_memtype_stderr was actually incorrect as the only
caller in bgpd cleans up configuration before calling it, i.e. any
remaining allocations are missing-cleanup bugs.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Vincent JARDIN <vincent.jardin@6wind.com>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-19 16:31:08 -04:00
David Lamparter
4a1ab8e405 *: split & distribute memtypes and stop (re|ab)using lib/ MTYPEs
This is a rather large mechanical commit that splits up the memory types
defined in lib/memtypes.c and distributes them into *_memory.[ch] files
in the individual daemons.

The zebra change is slightly annoying because there is no nice place to
put the #include "zebra_memory.h" statement.

bgpd, ospf6d, isisd and some tests were reusing MTYPEs defined in the
library for its own use.  This is bad practice and would break when the
memtype are made static.

Acked-by: Vincent JARDIN <vincent.jardin@6wind.com>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
[CF: rebased for cmaster-next]
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2016-09-19 16:31:04 -04:00
David Lamparter
fc7948fafe lib: migrate to new memory-type handling
Move over to the new allocation counting added in the previous commit.

(This commit is mostly mechanical.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Vincent JARDIN <vincent.jardin@6wind.com>
2016-09-19 18:35:50 +02:00
David Lamparter
3b4cd78375 lib: add new extensible memory-type handling
This rewrites Quagga's memory per-type allocation counting, without
using a fixed global list of types.  Instead, source files can declare
memory types which get handled through constructor functions called by
the dynamic linker during startup.

Acked-by: Vincent JARDIN <vincent.jardin@6wind.com>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
[DL: v3: forgot "nonnull" attribute on XFREE]
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-09-19 17:52:05 +02:00
David Lamparter
6ba26ad5d2 lib: move memory.[ch] out of the way
The following commit will recreate memory.[ch].

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Vincent JARDIN <vincent.jardin@6wind.com>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-19 17:51:36 +02:00
Quentin Young
9286efabb9 lib: Allow nesting options in selectors
Options may now be nested in selectors as long
as they are not the first token in sequence.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-18 20:32:21 +00:00
Quentin Young
ba06a3a0de lib: Add edge removal to graph data structure
Ability to remove directed edge between two nodes.
Also ensures that adjacency vectors have no null entries.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-18 20:31:20 +00:00
Donald Sharp
49d41a26c6 isisd, lib, vtysh: Allow extract.pl to fully work
The regular expression for finding DEFUN/ALIAS in
extract.pl looks for "DEFUN (" or "ALIAS (" if
the *.c file does not have this then it will just
silently ignore the cli.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-17 07:25:35 -04:00
Donald Sharp
ea863ec6f7 lib, bgpd: Remove 'struct fifo' from lib/zebra.h
The 'struct fifo' and it's accompanying #defines do not
belong in lib/zebra.h.  Move them into their own header.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit b0d02889624eaafa0984873dcd78c086418bdf13)
2016-09-16 21:22:30 -04:00
Donald Sharp
ca531bd109 lib: Remove ZEBRA_INTERFACE_RENAME
Api in name only.  No code, so let's remove.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-16 21:07:28 -04:00
Donald Sharp
166b75c259 lib, ospfd: Remove ospf specific #define from zebra.h
zebra.h should not know or care about ospf specific code

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-16 20:59:35 -04:00
Donald Sharp
2ae2638713 lib, zebra: Remove ZEBRA_IPV[4|6]_IMPORT_NEXTHOP
Zebra api that was never used.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit 33361d3992c8bff66247b76e5adaf4b0de8217df)
2016-09-14 21:15:05 -04:00
Donald Sharp
bbcd757a25 lib, zebra: Remove unused zserv/zclient calls
ZEBRA_IPV4_NEXTHOP_LOOKUP and ZEBRA_IPV6_NEXTHOP_LOOKUP
were never used by any protocol.  Remove dead code

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit 22cd6214bf44863bfb5a34b40ab4abba3c5c4574)
2016-09-14 21:13:19 -04:00
Donald Sharp
b3d307ba4a lib: Make zebra messages types a enum
The #define nature of zebra message types makes
it stupidly difficult to add /remove message
types.  Switch to enum

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit 0d63e3c7df981f5b50f27789672f30987911a8cd)
2016-09-14 21:12:38 -04:00
Quentin Young
535ef5569a lib: Add support for selectors inside options
Selectors may be nested inside options [<like|so>].
Removed the ability to make multipart options [like|so].

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-14 22:04:53 +00:00
Quentin Young
040f39843e lib: Fix memory leak in ipv6_prefix_match
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-13 21:22:34 +00:00
Quentin Young
795d02785a lib: Fix various memory leaks
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-13 19:55:37 +00:00
Quentin Young
67c02c9449 lib: Fix memory leak in matcher
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-13 18:39:56 +00:00
Quentin Young
ee761cc086 lib: Move string completions out of command_match.c
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-13 18:33:55 +00:00
Quentin Young
ee551f4827 lib: Fix various matching bugs
Missed a copy, disambigs forgot to walkback

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-13 01:16:22 +00:00
Don Slice
ddb13fd374 lib: apply mask to prefix in prefix-list
A crash occurred if a prefix was defined in a prefix-list that
contained bits in the prefix but a /0 mask.  Resolving that crash
and improving usability by applying the mask to the supplied prefix
and notifying the user if the prefix was modified.

Ticket: CM-12744
Signed-off-by: Don Slice
Reviewed_By:
Testing Done: Manual testing attached to the ticket, bgp-min, bgp-smoke
ospf-min, and ospf-smoke all completed before commit
2016-09-12 06:32:11 -07:00
Quentin Young
039dc61292 lib: Fix tab completions memleak, memory stats corruption
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-09 21:58:33 +00:00
Quentin Young
97c45dae54 lib: Reorganize grammar sandbox
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-09 19:57:54 +00:00
Quentin Young
500b1a5bec lib: Add testing shim for graph deletion
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-09 19:46:36 +00:00
Quentin Young
df0620e4a0 lib: Add nullcheck before graph node deletion
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-09 19:45:43 +00:00
Nicolas Dichtel
c253dcb5d8 vrf: add a runtime check before playing with netns
This patch adds a runtime check to determine if netns are available. Some
systems like OpenWRT have the system call setns() but don't have the kernel
option CONFIG_NET_NS enabled.

Reported-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Tested-by: Christian Franke <chris@opensourcerouting.org>
(cherry picked from commit 04a3aabf58d95d01c4c8168eeff43cf9d9892eee)
2016-09-09 12:15:14 -04:00
Feng Lu
13460c44a2 lib, vtysh: support multiple VRFs by using linux netns
We realize VRFs with linux netns by default. The main job is
to associate a VRF with a netns. Currently this is done by
the configuration:

  [no] vrf N netns <netns-name>

This command is also available in vtysh and goes to only
zebra, because presently only zebra supports multiple VRF.

A file descriptor is added to "struct vrf". This is for the
associated netns file. Once the command "vrf N netns NAME"
is executed, the specified file is opened and the file
descriptor is stored in the VRF N. In this way the
association is formed.

In vrf_socket(), we first switch to the specified VRF by
using the stored file descriptor, and then can allocate
a socket which is working in the associated netns.

Signed-off-by: Feng Lu <lu.feng@6wind.com>
Reviewed-by: Alain Ritoux <alain.ritoux@6wind.com>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
(cherry picked from commit 55cfa2f190620f7c711944637659bc208970324d)
2016-09-09 12:15:14 -04:00
Donald Sharp
32bcb8b0a5 lib: Create ns.c
Create the ns.c files from the original vrf.c code
to allow us to create the 'logical-router' command
to work within namespaces.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-09 12:15:13 -04:00
Quentin Young
8d8cf5e322 lib: Fix dangling pointer in matcher
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-08 23:53:06 +00:00
Donald Sharp
1bce440338 quagga: remove refix directory from git status
During one of our build processes we are getting
a refix directory in some places.  Remove these
from files that git considers

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit 844cbf5d6cdfc6961e99e1c9ed35b826f3aa7562)
2016-09-08 19:52:20 -04:00
Donald Sharp
dfee47aa92 Merge remote-tracking branch 'origin/cmaster' into cmaster-next 2016-09-08 19:37:42 -04:00
Quentin Young
fe2e10e8d8 lib: Fix uninitialized pointer segfault
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-08 21:07:55 +00:00
Quentin Young
ff35126c06 lib: Update grammar sandbox driver
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-08 20:27:57 +00:00
Quentin Young
d8074cc04c lib: Add <cr> text for end nodes
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-08 20:27:39 +00:00
Quentin Young
5e8856790c lib: Remove automatic node deletion
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-08 18:14:16 +00:00
vivek
80c2442a9b lib, bgpd: Log next hops
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Daniel Walton <dwalton@cumulusnetworks.com>

Ticket: CM-12390
Reviewed By: CCR-5156
Testing Done: Manual
2016-09-08 09:53:26 -07:00
Quentin Young
97f13f0865 lib: Fix deduplication bug, reinstate graph print
Comparing the wrong nodes led to duplication during
graph construction, fixed. Also update graph pretty
print to use new graph struct.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-07 23:02:39 +00:00
Quentin Young
1eb5e8dcd1 lib: Continue matching system refactor
Most things back to working, all CLI units refactored
to use improved graph implementation.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-07 04:05:07 +00:00
Lou Berger
32ac65d9fa lib: add AF_ETHERNET/AFI_ETHER 2016-09-03 11:05:51 -04:00
Lou Berger
b645912484 lib: dump memory stats on core 2016-09-03 11:05:51 -04:00
Lou Berger
7c101d199e lib: fix memory leak in zprivs_caps_init 2016-09-03 11:05:51 -04:00
Olivier Dugeon
16f1b9ee29 Update Traffic Engineering Support for OSPFD
NOTE: I am squashing several commits together because they
do not independently compile and we need this ability to
do any type of sane testing on the patches.  Since this
series builds together I am doing this. -DBS

This new structure is the basis to get new link parameters for
Traffic Engineering from Zebra/interface layer to OSPFD and ISISD
for the support of Traffic Engineering

* lib/if.[c,h]: link parameters struture and get/set functions
* lib/command.[c,h]: creation of a new link-node
* lib/zclient.[c,h]: modification to the ZBUS message to convey the
link parameters structure
* lib/zebra.h: New ZBUS message

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>

Add support for IEEE 754 format

* lib/stream.[c,h]: Add stream_get{f,d} and stream_put{f,d}) demux and muxers to
  safely convert between big-endian IEEE-754 single and double binary
  format, as used in IETF RFCs, and C99.  Implementation depends on host
  using __STDC_IEC_559__, which should be everything we care about.  Should
  correctly error out otherwise.
* lib/network.[c,h]: Add ntohf and htonf converter
* lib/memtypes.c: Add new memeory type for Traffic Engineering support

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>

Add link parameters support to Zebra

* zebra/interface.c:
   - Add new link-params CLI commands
   - Add new functions to set/get link parameters for interface
* zebra/redistribute.[c,h]: Add new function to propagate link parameters
to routing daemon (essentially OSPFD and ISISD) for Traffic Engineering.
* zebra/redistribute_null.c: Add new function
zebra_interface_parameters_update()
* zebra/zserv.[c,h]: Add new functions to send link parameters

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>

Add support of new link-params CLI to vtysh

In vtysh_config.c/vtysh_config_parse_line(), it is not possible to continue
to use the ordered version for adding line i.e. config_add_line_uniq() to print
Interface CLI commands as it completely break the new LINK_PARAMS_NODE.

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>

Update Traffic Engineering support for OSPFD

These patches update original code to RFC3630 (OSPF-TE) and add support of
RFC5392 (Inter-AS v2) & RFC7471 (TE metric extensions) and partial support
of RFC6827 (ASON - GMPLS).

* ospfd/ospf_dump.[c,h]: Add new dump functions for Traffic Engineering
* ospfd/ospf_opaque.[c,h]: Add new TLV code points for RFC5392
* ospfd/ospf_packet.c: Update checking of OSPF_OPTION
* ospfd/ospf_vty.[c,h]: Update ospf_str2area_id
* ospfd/ospf_zebra.c: Add new function ospf_interface_link_params() to get
Link Parameters information from the interface to populate Traffic Engineering
metrics
* ospfd/ospfd.[c,h]: Update OSPF_OPTION flags (T -> MT and new DN)
* ospfd/ospf_te.[c,h]: Major modifications to update the code to new
link parameters structure and new RFCs

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>

tmp
2016-09-03 11:05:50 -04:00
Timo Teräs
8ccc7e802b lib, zebra: unify link layer type and hardware address handling
This removes the BSD specific usage of struct sockaddr_dl
hardware address. This unifies to use explict hw_addr member for
the address, and zebra specific enumeration for the link layer
type.

Additionally the zapi is updated to never send platform specific
structures over the wire, but the ll_type along with hw_addr_len
and hw_addr are now sent for all platforms.

Based on initial work by Paul Jakma.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>

# Please enter the commit message for your changes. Lines starting
# with '#' will be kept; you may remove them yourself if you want to.
# An empty message aborts the commit.
#
# Author:    Timo Teräs <timo.teras@iki.fi>
#
# rebase in progress; onto 9c2f85d
# You are currently editing a commit while rebasing branch 'renato' on '9c2f85d'.
#
# Changes to be committed:
#	modified:   isisd/isis_circuit.c
#	modified:   lib/if.c
#	modified:   lib/if.h
#	modified:   lib/zclient.c
#	modified:   zebra/interface.c
#	modified:   zebra/interface.h
#	modified:   zebra/kernel_socket.c
#	modified:   zebra/rt_netlink.c
#	modified:   zebra/rtadv.c
#	modified:   zebra/zserv.c
#
# Untracked files:
#	"\033\033OA\033OB\033"
#	0001-bgpd-fix-build-on-Solaris.patch
#	ldpd/
#	redhat/ldpd.init
#	redhat/ldpd.service
#	tags
#
2016-09-03 11:05:50 -04:00
Quentin Young
7a6ded4096 lib: Refactor command_parse.y for graph ds
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-02 20:19:03 +00:00
Baruch Siach
bfe15094c2 lib/memory: fix indirect static link with zlib
quagga SNMP support depends on netsnmp, that optionally depends on OpenSSL,
which in turn requires zlib. zlib exports the 'zcalloc' symbol, which collides
with a function of the same name in memory.c. This is not a problem when
linking dynamically, since quagga does not use zlib directly. But static
linking fails with the error:

  CCLD     ospfd
.../output/host/usr/mips64el-buildroot-linux-uclibc/sysroot/usr/lib/libz.a(zutil.o): In function `zcalloc':
zutil.c:(.text+0x48): multiple definition of `zcalloc'
.../output/build/quagga-1.0.20160315/lib/.libs/libzebra.a(memory.o):memory.c:(.text+0x1a0): first defined here

Rename 'zcalloc' to 'zzcalloc' to avoid symbol collision.

Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
2016-09-02 12:54:22 -04:00
Donald Sharp
5b30316ea5 bgpd, lib, ospfd, pimd, zebra: Use nexthop_types_t
Use the 'enum nexthop_types_t' instead of
the zebra.h #defines.  And remove code from
zebra.h that does not belong there.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-02 10:36:28 -04:00
Donald Sharp
5b2c166731 lib: Remove unused ZEBRA_NEXTHOP_IPV4_ONLINK type
Remove the unused ZEBRA_NEXTHOP_IPV4_ONLINK type
from the system.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-02 09:38:28 -04:00
Quentin Young
16d7c05093 lib: Generalize graph to work for any data type
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-09-01 21:30:17 +00:00
Renato Westphal
ea8b7c71a7 build/solaris: fix one error and a few warnings
Signed-off-by: Renato Westphal <renato@openbsd.org>
2016-08-26 20:07:18 -04:00
Daniel Walton
53519ae74a quagga route-map on-match and continue statements accept 65536
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-12581
2016-08-22 12:37:13 +00:00
Timo Teräs
c50ca33acf zebra: implement per-route mtu handling
This commits allow overriding MTU using netlink attributes on
per-route basis. This is useful for routing protocols that can
advertice prefix specific MTUs between routers (e.g. NHRP).

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
(cherry picked from commit b11f3b54c842117e22e2f5cf1561ea34eee8dfcc)
2016-08-21 13:11:42 -04:00
Timo Teräs
2f97fa65ff zebra: make ZEBRA_FLAG_CHANGED internal status
This flag is used internally in zebra only. And it makes no sense
to expose it over the zclient API, as having it set from client
could corrupt the internal state.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit 7eb6136b2732d4782360f9f376336c6d4f667ff0)
2016-08-19 16:30:47 -04:00
Donald Sharp
810a8dfc93 Merge remote-tracking branch 'origin/cmaster' into cmaster-next 2016-08-19 12:18:35 -04:00
Paul Jakma
b892f1ddfe *: use an ifindex_t type, defined in lib/if.h, for ifindex values
(cherry picked from commit 9099f9b2a66e86f8a90d7fe18f61bd2bb1bc6744)
2016-08-18 07:35:38 -04:00
Sid Khot
c05795b16b Fix for CM-12450 Ensure quagga logs at startup are sent to syslog (until log configuration is processed)
Ticket: CM-12450
Reviewed By: CCR-5112
Testing Done: Manual
2016-08-17 19:36:54 -07:00
Donald Sharp
039f3a3495 lib, bgpd, tests: Refactor FILTER_X in zebra.h
lib/zebra.h has FILTER_X #define's.  These do not belong there.
Put them in lib/filter.h where they belong.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit 0490729cc033a3483fc6b0ed45085ee249cac779)
2016-08-16 11:00:22 -04:00
Christian Franke
d8efb772eb lib: don't have log functions change errno
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit abfd40d68202882696260617729518a6d2c99302)
2016-08-16 08:55:31 -04:00
Quentin Young
55589d304c lib: Refactor CLI interface function names
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-11 17:50:58 +00:00
Quentin Young
9b887497e8 lib: Remove debug fprintf for cmd_element copy
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-10 19:11:31 +00:00
Quentin Young
ca90e05104 lib: Add completion string convenience functions
And set END_GN default text to <cr>, and scrub
a coupld of extraneous files

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-10 18:31:15 +00:00
Quentin Young
eaf46b79b6 lib: Fix broken disambiguation on leader tokens
Fix incorrect assumption that the set of first tokens
of all commands are perfectly unambiguous

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-10 15:04:21 +00:00
Quentin Young
b84f1d850a lib: Handle vararg in graph pretty-print
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-09 22:23:17 +00:00
Quentin Young
78602b8029 lib: Remove unnecessary node pointer
Selector and option heads had pointers to their
ends, but this turned out to be unnecessary

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-09 21:31:11 +00:00
Quentin Young
fe3936ecf5 lib: Remove unnecessary XSTRDUP
yy_scan_string duplicates its input

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-09 21:02:11 +00:00
Quentin Young
e52c05cd80 lib: Revert breaking change to cmp_node
Bad conditional refactor broke graph deduplication
and thus disambiguation precedence

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-09 20:28:35 +00:00
Quentin Young
07079d78bc lib: Fix use after free in lexer
Fix occasional bug where deleting flex's input
buffer happens earlier than flex expects

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-09 19:30:40 +00:00
Quentin Young
4427e9b3ee lib: Fix various minor bugs
- cmd_make_strvec returns null pointer if str
  begins with a '#'
- disallow options nested options
- NULL out state variable in parser
- flip backwards comparison
- fix memory leak in lexer

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-09 17:37:01 +00:00
Quentin Young
1ab84bf32f lib: Code cleanup, formatting, & headers
Gnu-style code, add copyright headers, cleanup some
random style issues, shuffle around code into
relevant units, add docs.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-08 21:11:14 +00:00
Renato Westphal
76d7ac0624 lib: update strlcpy to OpenBSD v1.13
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-08-07 21:05:26 -04:00
Renato Westphal
4a3867d0d3 lib: fix setting of IPv4 multicast sockopts on OpenBSD
OpenBSD doesn't support the "ifindex hack" derived from RFC 1724 which
allows an ifindex to be encoded in the imr_interface field (in_addr)
of the ip_mreq structure. OpenBSD also doesn't support the RFC3678
Protocol-Independent socket API extensions, which allows an interface
to be specified by its ifindex. With that said, in OpenBSD we still need
to specify an interface by its IP address. This patch adds an exception
in the multicast sockopt functions to handle this case.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-08-07 21:05:26 -04:00
Quentin Young
51fc9379a9 lib: Major parser refactor
Lots of cleanup, code consolidation, organizational
improvements.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-05 20:50:42 +00:00
Quentin Young
0aa2c2ff01 lib: Add docstring support
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-05 16:41:42 +00:00
Quentin Young
39fb395f7d lib: Improve matching disambiguation
Disambiguation logic now compares full paths
instead of defaulting to an ambiguous match
if the heads cannot be disambiguated

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-05 02:08:16 +00:00
Quentin Young
b389976966 lib: Unrefactor to signed long long for ranges
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-04 18:16:26 +00:00
Quentin Young
ef955a80a6 lib: Allow optional whitespace in ranges
Makes ranges where both endpoints are negative
somewhat more readable. Also validate ranges.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-04 16:39:15 +00:00
Quentin Young
5a8bbed0b1 lib: Add support for negative ranges
And convert range delimiters to signed int

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-04 16:18:31 +00:00
Quentin Young
f4b0c72e53 lib: Refactor format parser
Also fix a bug where selector elements beginning
with the same word are only parsed once

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-04 00:58:12 +00:00
Quentin Young
8aeffd7ae1 lib: Fix use after free in matcher
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-03 19:49:02 +00:00
Quentin Young
6ce82b63cd lib: Implement status variable
Matcher now keeps track of why it failed

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-03 19:22:27 +00:00
Quentin Young
54431328fc lib: Implement full command disambiguation logic
Disambiguation is smarter and somewhat more compact.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-03 02:01:52 +00:00
Quentin Young
88255c7cfb lib: Add vararg support
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-02 16:40:03 +00:00
Quentin Young
279712aa19 lib: Reorganize command matcher
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-02 16:23:54 +00:00
Donald Sharp
c152e0c131 lib: Arm build breakage with MAX_INT macro issues
The VTY_GET_INTEGER_RANGE macro is failing on arm
with a warning->error issue where we are passing in
a unsigned MAXINT to this macro and it is complaining
that the comparison of (TMPL) > MAXINT is always going
to be false because of data structure size.

I've changed the tmp variable to a unsigned long long
which alleviates this issue.

Ticket: CM-12187
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-08-03 15:11:44 -04:00
Quentin Young
e1cbb2ff67 lib: Add partial completion support
Completions now include nodes that the input
partially matches as well as the children of
nodes those that the input exactly matches.

Also some minor cleanup and bugfixes.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-01 20:30:14 +00:00
Quentin Young
e648e61a74 lib: Fix OOB range parses, variable matches
Variables now allow strings beginning with numbers
to match, ranges and numbers are now long long to
fix OOB parses resulting in integer wraparounds.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-01 18:36:30 +00:00
Quentin Young
1a8c390d4a lib: Fixed bad node copy, modified token regex
When building argv for matched command, only the
last node was being copied to argv; the rest were
added by reference. Additionally the regex for
certain tokens was too restrictive and disallowed
characters allowed by the old parser; these have
been reinstated.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-01 17:03:39 +00:00
Quentin Young
6d53a10e4c lib: Add partial matching support
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-08-01 13:18:25 +00:00
Quentin Young
3a7f549361 lib: Retab command_match.c
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-29 18:34:10 +00:00
Quentin Young
0b02e39d9b lib: Re-add partial IPV4 matching support
Also removed debugging output for matcher.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-29 18:27:59 +00:00
Quentin Young
de9d7e4f3c lib: Cleanup some memory issues in CLI
Various memory leaks have been fixed and the quagga
memory macros are in use. Also consolidated the argv
and matching code into one graph traversal.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-29 15:54:03 +00:00
Donald Sharp
daa2bc7068 lib: 'show commandtree' is not a CLI command
The 'show commandtree' command was added to the CONFIG_NODE.

We have a basic assumption that CONFIG_NODE commands actually
change state.  'show commandtree' doesn't meet this requirement.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-07-28 14:02:52 -04:00
David Lamparter
c66f9c6186 *: get rid of "MTYPE 0"
A few places are using 0 in place of the MTYPE_* argument.  The
following rewrite of the alloc tracking won't deal with that, so let's
use MTYPE_TMP instead.

Acked-by: Vincent JARDIN <vincent.jardin@6wind.com>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
[DL: v2: fix XFREE(0, foo) calls too]
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:48 -04:00
David Lamparter
d6f4a61dde lib: add 3-byte stream functions
This will be used for BGP MPLS labels.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:47 -04:00
David Lamparter
a8fd820281 lib: linklist: clean up insert-before/after dups
- list_add_node_next was in fact unused
- list_add_node_prev performs a subset of listnode_add_before and
  its only use in isisd replaced with that.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:47 -04:00
David Lamparter
56e2c5e847 lib: AgentX: use threads instead of eventloop hack
AgentX fd/timeout handling is rather hackishly monkeyed into thread.c.
Replace with code that uses plain thread_* functions.

NB: Net-SNMP's API rivals Quagga's in terms of age and absence of
documentation.  netsnmp_check_outstanding_agent_requests() in particular
seems to be unused and is therefore untested.

The most useful documentation on this is actually the blog post Vincent
Bernat wrote when he originally integrated this into lldpd and Quagga:
https://vincent.bernat.im/en/blog/2012-snmp-event-loop.html

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:47 -04:00
David Lamparter
d03c4cbd9a lib: add thread_add_timer_tv (struct timeval)
Another zoo extension, this adds a timer scheduling function that takes
a struct timeval argument (which is actually what the wrappers boil down
to, yet it's not exposed...)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:47 -04:00
David Lamparter
b21e9619c5 lib: linklist: add listnode_add_before()
This utility function, to join the zoo that the Quagga linked-list
implementation has accumulated, does an insert-before while returning
the newly allocated node.

It is similar to:
- listnode_add_after(), but
  - complementary direction
  - returns allocated node
- list_add_node_prev(), but
  - supports before == NULL
  - returns allocated node

In general, the entire linked-list implementation is in bad shape, and
while it needs a cleanup / rewrite / replacement, this would both cause
significant conflicts and block other cleanups...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:47 -04:00
David Lamparter
16f5949d44 lib: remove a whole bunch of unused time stuff
QUAGGA_CLK_REALTIME and QUAGGA_CLK_REALTIME_STABILISED aren't used
anywhere in the code.  Remove.  The enum is kept to avoid having to
change the calls everywhere.

Same applies to the workaround code for systems that don't have a
monotonic clock.  None of the systems Quagga works on fall into that
category;  Linux, BSD and Solaris all do clock_gettime, for OSX we have
mach_absolute_time() - that covers everything.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:47 -04:00
David Lamparter
a05d8b7ae4 ospfd: monotonic clock for lsa_refresher_started
ospf->lsa_refresher_started is only used in relative timing to itself;
replace with monotonic clock which is appropriate for this.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:47 -04:00
Quentin Young
76699ae7e0 lib: Improve argv construction
Fixed a variety of failure cases and wrote a nice
doc string. Reverted add_node doc string to correct
explanation of procedure.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-27 23:30:21 +00:00
Quentin Young
5a5d576b34 lib: Cleanup parser memory management
Free as appropriate. Additionally add new type
of node to demark graph head (START_GN).

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-27 04:17:51 +00:00
Quentin Young
eceb106640 lib: Add matching and argv support
Queries may be run against DFA's to find matching
cmd_element, and argument lists may be constructed.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-27 01:35:46 +00:00
Quentin Young
a53fbbf5f0 lib: Incremental matching improvement
Shotgun changes to matching system

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-26 14:02:36 +00:00
David Lamparter
fbfa889168 Revert "lib: Rewrite ipv4 address and prefix validator"
This reverts commit d4dc41b6a2.

The rewritten parser fails to recognise "1.2." as partial input for an
IPv4 address, which causes "make check" to fail.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-24 03:47:04 -04:00
David Lamparter
d11f748b30 *: fixup snmp support
- HAVE_POLL is overloaded by net-snmp
- missing includes
- ospf6_snmp converted to vrf_iflist()

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-24 03:47:03 -04:00
Don Slice
c9a42b3d91 lib: Free memory correctly when braces used in parser
When braces (optional parameters) are used in the quagga parser, there
was a small leak on every iteration.  Since this construct is primarily
used in the configuation process rather than show commands, it was not
readily apparent.  With the addition of the "show ip bgp {json}" form of
the commands, each time one was run, memory was leaked.

Ticket: CM-11435
Signed-off-by: Don Slice
Reviewed By: Donald Sharp
Testing Done: Manual testing, bgp-min and bgp-smoke successful
2016-07-26 12:32:53 -07:00
Donald Sharp
1ee08155da lib: Modify 'banner motd file <X>'
Modify the banner motd file X command to do these things
differently:

1)  Only allow the file <X> to be in SYSCONFDIR
2)  Only allow the user to use a file that exists.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Dinesh Dutt <ddutt@cumulusnetworks.com>
2016-07-22 19:50:51 -04:00
Quentin Young
880e24a1e4 lib: Reorganize some matching stuff
Introduce new node type, END_GN, and remove
is_leaf flags. Reorganize command_match.c & remove
internal functions from command_match.h. Start
rewriting command.h in command_new.h with changes
for new backend.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-22 19:04:16 +00:00
Quentin Young
18be0e599d lib: Mostly complete matcher
Input matching and completions works. Still some
rough edges.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-21 21:38:03 +00:00
Quentin Young
9d0662e009 lib: Break up functions, begin matcher
Moved test hook out of command.c into vtysh.c,
renamed graph modules, added matching code

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-19 21:14:27 +00:00
Quentin Young
340a2b4ac0 lib: Implement node comparison function
Implement comparator for nodes, some miscellaneous cleanup.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-19 17:06:11 +00:00
Quentin Young
4b0abf2434 lib: Fix some DFA construction bugs
Options get null paths, parser state is properly
cleaned up, caller passes start node

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-18 16:16:36 +00:00
Quentin Young
478bdaeb3b lib: Finish implementing grammar, DFA construction
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-17 21:49:16 +00:00
Quentin Young
071b077cad lib: Add generated parser files to .gitignore
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-12 15:18:35 +00:00
Quentin Young
2a23ca6e52 lib: Change some includes
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-12 15:05:06 +00:00
Quentin Young
bbf5ffa08d lib: Update build config for new parser
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-12 15:05:05 +00:00
Quentin Young
782d97897e lib: Start implementing DFA
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-12 15:05:05 +00:00
Quentin Young
92055a924a lib: Add parser, lexer, and command tree skeleton
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-12 15:05:05 +00:00
Quentin Young
04e6406218 lib: Cleanup cmd_execute_command
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-12 15:05:05 +00:00
Quentin Young
51e156b303 Add grammar sandbox framework 2016-07-12 15:05:05 +00:00
Quentin Young
d4dc41b6a2 lib: Rewrite ipv4 address and prefix validator
Simplify ipv4 prefix and address matcher / validator to use standard
Linux networking functions instead of a state machine.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-07-12 13:41:27 +00:00
Quentin Young
4d91343a45 lib: Disallow % in IPv6 addresses and prefixes
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-12 13:37:34 +00:00
Quentin Young
4c58c70dcb lib: Rewrite ipv6 prefix matcher
Simplify ipv6 prefix matcher / validator to use standard Linux
networking functions instead of a state machine.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-07-12 13:33:56 +00:00
Don Slice
2caa9b3957 all: add default log file if none are defined
Added a default log file named /var/log/quagga/Quagga.log to every daemon
to capture log entries if no log file is defined.  This also allows the
capture of logged information prior to reading each daemon's config file.
If a log file is defined manually, it will override this default file name.

Ticket: CM-10987
Signed-off-by: Don Slice
Reviewed By: Donald Sharp
Testing Done: Manual testing
2016-07-11 12:57:24 -07:00
Don Slice
3f6d6a5db8 zebra/ospf/ospf6: Fix several memory leaks on if up/down
Resolved several memory leaks caused by ifdown/ifup the vrf device or
a swp port.  For bgp/zebra/ospf/ospf6, bouncing the vrf device would cause
a linked list, Interface, and route-table to get leaked.  For ospf6,
bouncing the swp device also caused leaks of Connected and Prefix entries.

Ticket: CM-10841
Signed-off-by: Don Slice
Reviewed-By: Donald Sharp
Testing Done: Manual testing, bgp and ospf mins passed, smokes had fewer failures than base
2016-06-28 04:52:38 -07:00
Quentin Young
490b281c00 lib: Add documentation to internal command format parser functions
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-06-23 20:00:17 +00:00
Donald Sharp
bedef39194 lib: Remove 'show memory pim' unused command
This command is not used,  Remove it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-06-17 15:40:29 -04:00
Quentin Young
c4ae17398c lib: Clean command.c
Removed dead code paths and fixed a typo.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-06-16 11:59:16 -04:00
Don Slice
858fae6cb2 Merge branch 'cmaster-next' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster-next 2016-06-13 09:17:25 -04:00
Don Slice
70bd3c4369 ospfd/ospf6d/zebra: Change interface bandwidth range and auto-cost range to 100G
Prior to this change, interface bandwidth could not be defined above 10G. With
the use of higher speed interfaces, the ability to effectively define the path
links was highly impacted. Additionally, the default auto-cost reference-bandwidth
for ospf and ospfv3 was set to 100M, which relects a much earlier time.  Changed both
the range of interface bandwidth definitions and reference bandwidths to be up to
100G.  Set the default interface bandwidth (if not defined) to 10G to make the ratio
continue to cause a cost of 10 as before.  Manual testing as well as ospf-min and
ospf-smoke passed successfully.

Ticket: CM-10756
Signed-of-by: Don Slice
Reviewed-by: Donald Sharp
2016-06-13 09:06:45 -04:00
Lou Berger
8b1fb8be22 bgpd, lib, vtysh: hook up bgp ENCAP CLI node
Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit a3fda886cdd48b6d8c421ebb1401142fa9ee93b0)

Conflicts:
	bgpd/bgp_vty.c
	bgpd/bgpd.c
	vtysh/vtysh_config.c
2016-06-11 15:52:05 -07:00
Donald Sharp
1bba4c938b lib: Fix some poll semantics
Two Fixes:

1) When a fd has both read and write as a .events.
(POLLHUP | POLLIN | POLLOUT) and a
thread_cancel_read_write call is executed
from a protocol, the code was blindly removing
the fd from consideration at all.

2) POLLNVAL was being evaluated before POLLIN|POLLOUT
were being evaluated.  While I didn't see a case
of POLLNVAL being included with other .revent flags
I decided to move the POLLNVAL and POLLHUP handling
to the same section of code.

Additionally the function thread_cancel_read_write
was poorly named and let me to poorly implement
the poll version of it.  I've renamed the function
thread_cancel_read_or_write in an attempt to
make this problem moot in the future.

Ticket: CM-11027
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit f6da66a913)
2016-06-10 11:18:58 -04:00
Donald Sharp
112072ac87 configure: Auto pick-up the correct json env
Fix the code to allow Quagga to automatically
compile with the correct json library.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-06-10 09:17:37 -04:00
Lou Berger
f4c89855b5 bgpd: encap: add attribute handling
Signed-off-by: Lou Berger <lberger@labn.net>
Reviewed-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit c3741789530ee824693fd606356acac2ad695f83)

Conflicts:
	bgpd/Makefile.am
	bgpd/bgp_attr.c
	bgpd/bgp_attr.h
	lib/memtypes.c
2016-06-09 18:36:40 -07:00
Lou Berger
da688ecdde lib: change command logging to be off by default, and add 'log_commands' to enable it. 2016-06-09 11:04:21 -04:00
Lou Berger
1035065f2a lib: add facility to log all CLI commands
Signed-off-by: Lou Berger <lberger@labn.net>
(cherry picked from commit c7f7e49a4f68c92152384582ff70d64609858170)
2016-06-09 11:01:34 -04:00
David Lamparter
7a2fbbf0ee *: make sure zebra.h is always included first
zebra.h pulls in config.h, which results in fiddling with things like
__FILE_OFFSET_BITS. It must always be included first, in order to set
flags that influence the compiler via <features.h>.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 821df2cf18e5978cc7ab532a8695444380d08270)
2016-06-09 10:45:22 -04:00
Donald Sharp
195dd232eb lib/zclient: Consolidate error reporting for zclient_read_header
All functions that call zclient_read_header immediately turn around
and check to ensure that the version and marker fields are correct
Move this code into zclient_read_header

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit a9d4cb33faa6af622240190a80f41c4672374925)
2016-06-09 10:33:27 -04:00
Timo Teräs
855110bb0b lib: make prefix2str simpler to use, and use it in zclient
Returning the buffer allows using it in the logging functions
in easier way. This also makes the API consistent with sockunion.

Add also PREFIX_STRLEN to be the generic buffer length required
for any prefix string representation.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 41eb9a4305fbcb206c900a18af7df7115d857d60)
2016-06-09 08:28:38 -04:00
Timo Teräs
40ee54a740 lib: allow caller to provide prefix storage in sockunion2hostprefix
Avoids a dynamic allocation which is usually freed immediate afterwards.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-06-09 08:21:40 -04:00
David Lamparter
009a4a07ff lib/vty: don't clear output buffer on input EOF
A VTY's input can be closed without the output becoming unavailable.
This happens both on stdio when stdin ends, as well as over TCP when an
unidirectional input shutdown() happens.

In such a case, resetting the output buffer is not appropriate since
there might still be data to be successfully written.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-06-08 15:10:54 -04:00
David Lamparter
dbf78092da lib/vty: add vty_stdio at-close hook
This is intended to be used for either "exit on close", "fork on close"
or "reopen vty on close" functionality for the stdio vty.  Which of
these options to take depends on the context, the use case right now is
test programs exiting on EOF.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 464ccf36b4aa1b942cad413ea30267b4bf9e6315)
2016-06-08 15:09:53 -04:00
David Lamparter
b510a06e1f lib/vty: put stdin in raw mode for vty
The interactive CLI actually works just fine, if we just put the
terminal in raw mode to get keystrokes as they come.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit ba53a8fdecef07577dcc4109e5c82bb124d49c58)
2016-06-08 15:09:24 -04:00
David Lamparter
b764292587 lib/vty: add vty_stdio()
this introduces a new public/API function to the vty code for opening a
VTY on stdin/stdout.  Intended for unrestricted use by the individual
daemons, i.e. "offical API".

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-06-08 15:08:24 -04:00
David Lamparter
c5e69a025f lib/vty: add separate output fd support to VTYs
to be used with stdin/stdout terminals, this adds support for writing to
a different FD than we're reading from.  Also fixes error messages from
config load being written to stdin.

[v2: fixed config write]
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>

(cherry picked from commit 4715a53b4d390e72a06c864a6a505971841e3dc9)
2016-06-08 15:08:05 -04:00
David Lamparter
dc1b72dca3 lib: assert(0) still needs a return
assert(0) is not guaranteed to not return since assert() in general can
be optimised out when building without debug / with optimisation.  This
breaks the build in clang, which warns/errors about the missing return.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit f1fc327c7eb00634d2c2b08c2a6f6e44a626ef04)
2016-06-08 15:03:13 -04:00
David Lamparter
27e7f29029 lib: fix "reduce strcmp in CLI" fallout (10bac801)
In "lib/cli: reduce strcmp in CLI hot paths", I failed to notice that
CMD_VARIABLE as a boolean test covers a superset of the other types of
variables.  Thus, the patch broke processing of IP/IPv6/Integer range
parameters in the CLI.

Fix by some reordering and introducing TERMINAL_RECORD macro (which
marks whether a given terminal type is a parameter) to be used in places
where the check is really for all kinds of variables.

Reported-by: Timo Teräs <timo.teras@iki.fi>
Tested-by: Martin Winter <mwinter@netdef.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-06-08 14:58:36 -04:00
David Lamparter
c117e02796 lib/cli: reduce strcmp in CLI hot paths
Er, no idea how anyone could ever have thought that it would be a good
idea to have a zillion of strcmp() calls in the CLI's active paths, just
to compare against things like "A.B.C.D".

Reduces 40k prefix list load time from 1.65s to 1.23s (1.34:1).

Acked-by: Paul Jakma <paul@jakma.org>
[v2: killed CMDS_* macros]
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>

(cherry picked from commit 10bac80195cf5a781da6e4415e6580fd7080f734)
2016-06-08 14:35:38 -04:00
Timo Teräs
c0d8db4d9e lib: constify sockunion api
Add const to read-only api calls.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 81b139bdd530adda045d22a4daf0054b89703dab)
2016-06-08 14:24:56 -04:00
David Lamparter
f03db93b27 lib, vtysh: reduce unneccessary C extension usage
We're only supporting GCC, Clang and ICC; but there's no reason to use
nonstandard C constructs if they don't actually provide any benefit.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 71f55f38cb3dd804176e7f382f52b75ddcd437de)
2016-06-08 12:48:21 -04:00
David Lamparter
744f468530 lib: use const consistently for zserv path
The global variable is missing its const, but the accessor function has
a meaningless extra const in exchange...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-06-08 12:44:53 -04:00
David Lamparter
c5e0075f8b *: add/cleanup initialisers
There were some (inconsequential) warnings about uninitialised use of
variables.  Also, in one case, sub-structs were mixed in initialisation,
which doesn't quite work as intended.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-06-07 08:51:46 -04:00
David Lamparter
1cc5e6822b *: add missing includes
Some places, particularly headers, were spewing warnings since they
don't include neccessary other headers to get struct/enum definitions.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 388f8857eb81ef75014060976776523a58a99389)
2016-06-07 08:50:09 -04:00
David Lamparter
f2bce9a5b3 *: fix signedness mix-ups
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 21401f3215be26dcb0f787105f5907745498e966)
2016-06-07 08:47:49 -04:00
vivek
8ecd326693 bgpd, lib, vtysh: hook up bgp VPNv6 CLI node
Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 13c378d96a57017f5995b2e0df46cfc31123f0e8)

Conflicts:
	bgpd/bgp_vty.c
	bgpd/bgpd.c
	vtysh/vtysh_config.c
2016-06-06 19:29:05 -07:00
Lou Berger
bcd9fa7ff2 lib: add "show commandtree" CLI command
Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit f9ec4190f1eaf2dba355a9808bca8d7148bc8a55)
2016-06-06 14:57:00 -07:00
Lou Berger
cde9f10117 lib: fix bookkeeping for libreadline malloc()s
When libreadline is used, we mistakenly mix in strdup() done in
libreadline with Quagga's lib/memory bookkeeping/counting, leading to
counter underflows on MTYPE_TMP.

Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 672900382d47137638086bd8351b2678f589a546)

Conflicts:
	lib/command.c
2016-06-06 14:34:42 -07:00
Donald Sharp
e978e1de98 lib, bgpd: Fixup afi_t to be an enum and cleanup zebra.h
This code change does two things:

1) Removes ZEBRA_AFI_XXX #defines since they were redundant information
2) Switches afi_t to an enumerated type so that the compiler
can do a bit more compile time checking.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit f3cfc46450cccc5ac035a5a97c5a1a5484205705)

Conflicts:
	bgpd/bgp_open.c
	bgpd/bgp_open.h
	bgpd/bgp_routemap.c
2016-06-06 14:20:24 -07:00
Donald Sharp
69f30024c1 lib, bgpd: Fixup some more compile errors due to warnings
Original cherry-pick done on a fedora box with a completely
different compiler.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-06-04 20:45:43 -04:00
David Lamparter
6c4f4e6e6a *: use void * for printing pointers
On higher warning levels, compilers expect %p printf arguments to be
void *.  Since format string / argument warnings can be useful
otherwise, let's get rid of this noise by sprinkling casts to void *
over printf calls.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-29 21:27:26 -04:00
Everton Marques
1b91e000c6 zclient: Revert lib export of zclient_socket()/zclient_socket_un(). 2016-05-29 21:01:50 -04:00
Everton Marques
1b428050e9 zebra: Export zclient_socket_un(). 2016-05-29 20:52:26 -04:00
Paul Jakma
93559b99b0 ospfd: Tweak previous iface RR write patch to avoid free/malloc & redundant log
* linklist.{c,h}: (listnode_move_to_tail) new unction to move a
  listnode to tail of list.
* ospf_packet.c: (ospf_write) remove debug that seemed to be mostly covered
  by existing debug.
  Use listnode_move_to_tail to just move the list node to the end of the
  tail, rather than freeing the one to hand and allocing a new one.
2016-05-29 20:47:42 -04:00
Donald Sharp
b06fd12526 Quagga: Fix code to use srandom/random
Quagga was using a mix of srand/rand and srandom/random.
Consolidate to use srandom/random which are the POSIX
versions of random number generators

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-05-29 20:24:55 -04:00
David Lamparter
d1265948c3 lib: include thread information in backtraces
now that we know what thread we're currently executing, let's add that
information to SEGV / assert backtraces.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 615f9f18fc025757a255f936748fc1e86e922783)
2016-05-29 20:11:42 -04:00
David Lamparter
9c7753e41a lib: unstupidify thread debug information
the library's thread scheduling functions keep track of the thread
function's name, so far so good.  However, copying the compiler-provided
constant into a buffer inside the thread structure is plain useless.
Also, strip_funcname() was trying to support something that never
happens.

Instead, let's use some bytes here to track where threads are scheduled
from.  Another commit will print that information on crashes.

Ripping out useless stuff:  -64 bytes in the thread structure
Re-add as const ptr:         +8 bytes
Extra debug info:           +12 bytes

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 3493b7731b750cbc62f00be94b624a08ccccf0b2)
2016-05-29 20:08:52 -04:00
Paul Jakma
86582682c9 lib/workqueue: Add trivial work_queue_is_scheduled helper
(cherry picked from commit 13c2a3db503fde67f647fa58fd4e1077517ebb5c)
2016-06-03 20:39:22 +00:00
David Lamparter
80db5ac178 build: track config args
Record the ./configure arguments used and make them user-visible.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Paul Jakma <paul@jakma.org>
2016-06-03 15:53:42 -04:00
David Lamparter
9e8da292d1 build: get rid of INCLUDES, use AM_CPPFLAGS
INCLUDES in configure.ac was not used at all, and INCLUDES in
Makefile.am is supposed to be AM_CPPFLAGS these days.

Reduces warnings spewed during bootstrap/autoreconf.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Greg Troxel <gdt@ir.bbn.com>
Acked-by: Feng Lu <lu.feng@6wind.com>
Acked-by: Paul Jakma <paul@jakma.org>
(cherry picked from commit 237aac56960575f6ad2451ba2796d94bd5ae4b33)
2016-06-03 15:46:59 -04:00
David Lamparter
1cbb5dfc29 build: remove INRIA, NRL and MUSICA IPv6 quirks
Valar dohaeris.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Greg Troxel <gdt@ir.bbn.com>
Acked-by: Feng Lu <lu.feng@6wind.com>
Acked-by: Paul Jakma <paul@jakma.org>
2016-06-03 14:40:03 -04:00
David Lamparter
a4247f4b69 build: remove AIX, NEC EWS and IRIX
Valar morghulis.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Greg Troxel <gdt@ir.bbn.com>
Acked-by: Feng Lu <lu.feng@6wind.com>
Acked-by: Paul Jakma <paul@jakma.org>
2016-06-03 14:29:00 -04:00
Donald Sharp
ebe32f70f1 lib: Fixup zclient api to be consistent
All ZAPI commands pass the zclient around not
the individual stream we need.  Switch code
over to follow conventions.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-05-26 20:11:15 -04:00
Donald Sharp
93f7342f73 lib: Fixup zebra zapi message table
The zapi zebra_desc_table command_types code was
missing some entries.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-05-26 20:06:08 -04:00
Donald Sharp
e7a2870b47 lib: Fix vrf_id_t data type
We were reading a u_int16_t for vrf_id_t.  While technically
the same thing, I'd like to make sure we think about vrf_id_t's
as vrf_id_t's.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-05-26 19:52:10 -04:00
Paul Jakma
1f9a9fffc1 Fix most compiler warnings in default GCC build.
Fix lots of warnings. Some const and type-pun breaks strict-aliasing
warnings left but much reduced.

* bgp_advertise.h: (struct bgp_advertise_fifo) is functionally identical to
  (struct fifo), so just use that.  Makes it clearer the beginning of
  (struct bgp_advertise) is compatible with with (struct fifo), which seems
  to be enough for gcc.
  Add a BGP_ADV_FIFO_HEAD macro to contain the right cast to try shut up
  type-punning breaks strict aliasing warnings.
* bgp_packet.c: Use BGP_ADV_FIFO_HEAD.
  (bgp_route_refresh_receive) fix an interesting logic error in
  (!ok || (ret != BLAH)) where ret is only well-defined if ok.
* bgp_vty.c: Peer commands should use bgp_vty_return to set their return.
* jhash.{c,h}: Can take const on * args without adding issues & fix warnings.
* libospf.h: LSA sequence numbers use the unsigned range of values, and
  constants need to be set to unsigned, or it causes warnings in ospf6d.
* md5.h: signedness of caddr_t is implementation specific, change to an
  explicit (uint_8 *), fix sign/unsigned comparison warnings.
* vty.c: (vty_log_fixed) const on level is well-intentioned, but not going
  to fly given iov_base.
* workqueue.c: ALL_LIST_ELEMENTS_RO tests for null pointer, which is always
  true for address of static variable.  Correct but pointless warning in
  this case, but use a 2nd pointer to shut it up.
* ospf6_route.h: Add a comment about the use of (struct prefix) to stuff 2
  different 32 bit IDs into in (struct ospf6_route), and the resulting
  type-pun strict-alias breakage warnings this causes.  Need to use 2
  different fields to fix that warning?

general:

* remove unused variables, other than a few cases where they serve a
  sufficiently useful documentary purpose (e.g.  for code that needs
  fixing), or they're required dummies.  In those cases, try mark them as
  unused.
* Remove dead code that can't be reached.
* Quite a few 'no ...' forms of vty commands take arguments, but do not
  check the argument matches the command being negated.  E.g., should
  'distance X <prefix>' succeed if previously 'distance Y <prefix>' was set?
  Or should it be required that the distance match the previously configured
  distance for the prefix?
  Ultimately, probably better to be strict about this.  However, changing
  from slack to strict might expose problems in command aliases and tools.
* Fix uninitialised use of variables.
* Fix sign/unsigned comparison warnings by making signedness of types consistent.
* Mark functions as static where their use is restricted to the same compilation
  unit.
* Add required headers
* Move constants defined in headers into code.
* remove dead, unused functions that have no debug purpose.

(cherry picked from commit 7aa9dcef80b2ce50ecaa77653d87c8b84e009c49)

Conflicts:
	bgpd/bgp_advertise.h
	bgpd/bgp_mplsvpn.c
	bgpd/bgp_nexthop.c
	bgpd/bgp_packet.c
	bgpd/bgp_route.c
	bgpd/bgp_routemap.c
	bgpd/bgp_vty.c
	lib/command.c
	lib/if.c
	lib/jhash.c
	lib/workqueue.c
	ospf6d/ospf6_lsa.c
	ospf6d/ospf6_neighbor.h
	ospf6d/ospf6_spf.c
	ospf6d/ospf6_top.c
	ospfd/ospf_api.c
	zebra/router-id.c
	zebra/rt_netlink.c
	zebra/rt_netlink.h
2016-05-26 18:57:39 +00:00
Lou Berger
1ec23d90a3 lib: add SAFI_ENCAP type, safi2str prefix utility
Signed-off-by: Lou Berger <lberger@labn.net>
(cherry picked from commit 2daf7f3a8d69213f35b16a04dbe300957481a811)
2016-05-26 15:33:33 +00:00
Lou Berger
1567811710 lib: treat realloc of null pointer as alloc Now use zalloc rather than alloc with null. Fixes issue seen in bgp check tests.
Signed-off-by: Lou Berger <lberger@labn.net>
(cherry picked from commit 9248b61f54955e56212f3ae4c8a7ab704f7ad01c)
2016-05-26 15:33:33 +00:00
David Lamparter
7810037672 build/solaris: drop duplicate __EXTENSION__ define
__EXTENSION__ is already defined in config.h by autoconf; drop the
duplicate from zebra.h.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 089e5eb7310683be6806726dbf7b7c94b1b66bfb)
2016-05-26 15:33:32 +00:00
Paul Jakma
63a1386455 build/lib: Check for and include stdbool.h by default
* stdbool.h should be widely supported by now, and the 'bool' type makes
  more semantic sense than an integer type for boolean values.

(cherry picked from commit e8441a81f6c9f73bc8a25669003abffb40066703)
2016-05-26 15:33:31 +00:00
Wenjian Ma
f0b0df1c33 lib, stream: fix stream sanity checks
Because  operator "!" has higher priority  than "&&",
So we put the "&&" expression in "()" to check both getp and endp.
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>

(cherry picked from commit 1ed8ce47b922b71f3b3cdd661e647bbe7ed2eca7)
2016-05-26 15:33:30 +00:00
Timo Teräs
67e2b6f013 lib: make sockunion2str safer to use
It's mostly used for logging, and the return value is never
checked, so try to make it valid.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 53009d387a633997b16d32224b50451b5c81b61a)
2016-05-26 15:33:30 +00:00
Timo Teräs
d3830f1fa4 route table: constify some APIs
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 3293bc280f15d8e3c04e0bf9b0a8d54d342a87a9)
2016-05-26 15:33:30 +00:00
Timo Teräs
95e0999cc5 sockunion: add accessors for sockunion address
Upcoming nhrp code will use this, and it can be used to remove
the sockunion2ip(X) macro.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 483abc037b0ac4b3ed168c4810bb14ea338fa80c)
2016-05-26 15:33:30 +00:00
Timo Teräs
cf279b3abc sockopt: add support for querying tcp round-trip-time
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 6b2672f3c9493aef3495192e113f95a7db4b65bc)
2016-05-26 15:33:30 +00:00
David Lamparter
7e6350359a snmp: fix warnings
batch-fix all warnings that come up when enabling AgentX SNMP support.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit dfee58f1d41a2e36c7f5f38a3ef5712224131824)
2016-05-26 15:33:29 +00:00
David Lamparter
5eafab7614 lib: silence type range warning in macro
While splitting up the CLI input macro is a bit annoying, this seems to
be the least annoying way to get rid of the "< 0" comparison warning for
unsigned long.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 81a4e85442e2011a47bbb25e8301dc40ec4ed9b6)
2016-05-26 15:33:29 +00:00
David Lamparter
010e1aa65e *: remove stray extra semicolons
Some places had extra semicolons where none belong.  Remove them.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit b7d5021bfa161f797cbfb1e92bf5b94327fb1b71)
2016-05-26 15:25:14 +00:00
David Lamparter
de111d75a9 lib: don't create circular lists (fixes 6d83113)
LISTNODE_DETACH doesn't clear out the node, and LISTNODE_ATTACH doesn't
set ->next (since it assumes a fresh/zeroed listnode).  As a result, the
new listnode_move_to_tail() created a nice circular list, in turn
crashing ospfd in ospf_write() later.

Reported-by: Martin Winter <mwinter@netdef.org>
Fixes: 6d83113 ("ospfd: Tweak previous iface RR write patch to avoid free/malloc & redundant log")
Cc: Paul Jakma <paul@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Greg Troxel <gdt@ir.bbn.com>
Acked-by: Dinesh Dutt <ddutt@cumulusnetworks.com>
Acked-by: Vincent JARDIN <vincent.jardin@6wind.com>
(cherry picked from commit 1c6db0d2da34044ddfb42665fda8a3387ecc451d)
2016-05-26 15:24:51 +00:00
Stephen Hemminger
2ed9b70316 stream: remove unused stream_read_unblock
The one place this was being used in BGP is now gone,
can remove deprecated interface.
Acked-by: Feng Lu <lu.feng@6wind.com>

(cherry picked from commit 3790eb0d3f0bbb24b9c6be97f547cec144ee05d1)
2016-05-26 01:15:03 +00:00
Olivier Cochard-Labbé
618969eaf0 FreeBSD has changed its SOCK_RAW for being truly raw.
(cherry picked from commit f6444e4f6e1664f49f7552f894c8c94e45dd3c35)
2016-05-26 01:12:21 +00:00
Joakim Tjernlund
bccbd141d2 [lib] Add support for backtrace on more platforms
* lib/sigevent.c: (program_counter) extend to support more platforms. Joint
  effort with Paul Jakma.

(cherry picked from commit b166ea2dda9f04a8b75e0bf5adb7064580695f22)
2016-05-26 01:09:43 +00:00
Paul Jakma
63a2a35418 lib/plist: Add some required parentheses, according to clang-analyzer
(cherry picked from commit 18f420e9f99e7f6557cf5877673cd6e71ac32192)
2016-05-26 01:09:17 +00:00
Paul Jakma
46f4a4d21f Add missing GPL headers, and copyright claims that certainly apply.
* Fix (a subset of)? files with non-trivial code that are missing GPL headers.

* A few copyright claims added which I am certain apply, but which I had
  missed out on the original commits.

NB: Copyright claims are not exclusive and the addition of any copyright
claim should not be read as implying a lack of any further claims, or
denying the validity of any other claims.  All those with claims of
copyright over any portion of Quagga are welcome to submit them, ideally as
patches to update copyright strings in files.

(cherry picked from commit 010ebbbca6396f272cc2d50d147dd922dda68213)
2016-05-26 01:06:59 +00:00
Donald Sharp
a9b5cbe55a lib: Fix compile warnings with zlog_hexdump
When using zlog_hexdump tell the compiler that we don't expect
to actually change the memory.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-05-25 20:38:35 -04:00
Donald Sharp
2bd9e1bc6c pimd: Start adding the ability to handle the Bridge Router
Add code to allow the check and set the PMBR(S,G) if the register.borderbit
is set.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-05-25 20:38:34 -04:00
Nicolas Dichtel
5511908940 bgpd/pimd: fix zAPI parsing
Commit c99f3481a598 has changed the API. Now, the vrfid has been added in
the header, thus we must read it before parsing the rest of the message.

To ease code maintenance, let's add a new function to read a zAPI header.

Fixes: c99f3481a598 ("*: add VRF ID in the API message header")
Reported-by: Martin Winter <mwinter@opensourcerouting.org>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
Tested-by: Martin Winter <mwinter@opensourcerouting.org>
2016-05-25 20:38:33 -04:00
Jafar Al-Gharaibeh
6250610a59 pimd: add support for configuring multicast static routes
Hi,

This patch adds the ability to configure multicast static routes
directly into pimd. Two source files are introduced to implement the new
feature in addition to changes to existing files.

Here is how it can be used the CLI:

interface <incoming interface>
ip mroute <outgoing interface> <group addr>                          #
for asm
or ip mroute <outgoing interface> <group addr> <source>    # for ssm

Please let me know if you have any questions or concerns,

Regards,
Jafar

Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-05-25 20:38:32 -04:00
David Lamparter
12e41d03bd pimd: merge pimd as of 2015-01-19
Welcome pimd to the Quagga daemon zoo!

This is a merge of commit 77ae369 ("pimd: Log ifindex found for an
interface when zebra lib reports a new connected address."), with
the intermediate "reconnect" changes removed (c9adf00...d274381).
d274381 is replaced with b162ab7, which includes some changes.  In
addition, 4 reconnect-related changes and 1 cosmetic one have been
bumped out.

The rebase command used to produce the branch that is merged here is:
  git rebase --onto b162ab7 c9adf00 77ae369

Note that 3 patches had their author rewritten from
    "Anonymous SR#108542 <>" (which is not a valid git author ID)
to: "Savannah SR#108542 <nbahr@atcorp.com>" (which is the e-mail address
                               listed in the associated Savannah ticket)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:32 -04:00
David Lamparter
0b0668e619 zebra: mark multicast commands experimental
depending on feedback from actually having these commands in a released
version, we may want to adjust them.  Thus, mark them as experimental so
users are aware of this.

Cc: Everton Marques <everton.marques@gmail.com>
Cc: Balaji G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
Everton Marques
6f61a5a3fc zebra: add ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB
This adds a new zapi call "ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB" performing a
Multicast RPF lookup for a given source.  Details of the lookup
behaviour are left to the zebra side of things.

Note: this is non-reactive, as in, only delivers a snapshot of the state
at a particular point in time.  There's no push notification of changes
happening to the RIB.

This combines the following 3 original patches:
- zebra: add zsend_ipv4_nexthop_lookup_mrib()
- zserv: Query mrib (SAFI_MULTICAST).
- zebra: Cleanups to zebra_rib.

Cc: Everton Marques <everton.marques@gmail.com>
Cc: Balaji G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
vivek
7d3280f1dc Quagga: Make sure order of route-maps in list and hash table matches
Quick create/delete actions on a route-map can result in the same route-map
entity having multiple entries created for it — because BGP hasn't run the
update processing to complete prior delete action. The route-map is present
in both a hash table as well as a linked list and the order in each is
different. This can lead to problems when the BGP route-map update processing
runs and finds the same route-map entity present for deletion multiple times.
For example, while processing instance-2 of rmap-A, the code may end up
freeing the hash bucket corresponding to instance-1 of rmap-A.

The fix works by ensuring the list is ordered the same way as the hash
buckets.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Shrijeet Mukherjee <shm@cumulusnetworks.com>

Ticket: CM-10023
Reviewed By: CCR-4747
Testing Done: manual, bgp-smoke
2016-05-20 09:35:20 -04:00
Donald Sharp
284cf39351 lib: Compiler warning fix
There exists a code path where fld would
be used uninitialized.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-20 09:34:42 -04:00
Donald Sharp
7bf5d99223 lib: Fix some more compiler warnings
Three different changes:
a) in nexthop.c we have an actual bug, we've rearranged
the enumerated types and the list of enums has changed, we
were displaying the wrong nexthop information.

b) Remove some dead code from sockunion.h

c) '\0' evaluates to 0 which is NULL.  vector_set takes
a pointer.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-20 09:34:20 -04:00
Donald Sharp
cd657e2324 lib: Fix possible uninitialized pointer usage.
Signed-off-by: Donald Sharp <sharp@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-19 10:42:30 -04:00
Donald Sharp
f48f65d225 lib: Clean up some small static analysis warnings
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-19 10:42:17 -04:00
Donald Sharp
beef199002 lib: Fix crash in 'no vrf' command
If a routing protocol does not have a vrf
configed and the vrf happens to be down
a 'no vrf X' line will cause the system
to crash.

This fixes the issue, I do believe though
that we need to revisit the issue and re-think
start/stop/config/unconfig of vrf's a bit more.

Ticket: CM-10952
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Dinesh Dutt <ddutt@cumulusnetworks.com>
2016-05-13 10:32:04 -04:00
vivek
5c81b96aca BGP: Set advertisement interval when triggering IPv6 RAs
This change extends the earlier change which added the ability in BGP to
trigger IPv6 Router Advertisements when an unnumbered neighbor is configured.
In addition to triggering the RAs, the advertisement interval is also set to
10 seconds. This is needed to handle the scenario where the peer may start
later.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-10896
Reviewed By: CCR-4693
Testing Done: Manual, bgp-min, bgp-smoke
2016-05-12 16:51:43 -07:00
Donald Sharp
38485402bc lib: Fix connected lookup
When looking up the connected route, the delete was
causing crashes in OSPF due to the oi having copies
of the freshly deleted connected interface.  Fix
code to first lookup the connected route and use that
instead of just deleting it.

Valgrind Findings:

==24112== Invalid read of size 1
==24112== at 0x4E8283F: ospf_intra_add_stub (ospf_route.c:614)
==24112== by 0x4E80B15: ospf_spf_process_stubs (ospf_spf.c:1064)
==24112== by 0x4E80F74: ospf_spf_calculate (ospf_spf.c:1269)
==24112== by 0x4E811C9: ospf_spf_calculate_timer (ospf_spf.c:1339)
==24112== by 0x5126230: thread_call (thread.c:1577)
==24112== by 0x401E00: main (ospf_main.c:377)
==24112== Address 0x7f56a09 is 9 bytes inside a block of size 40 free'd
==24112== at 0x4C29E90: free (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==24112== by 0x51290B3: zfree (memory.c:132)
==24112== by 0x51287F0: connected_free (if.c:987)
==24112== by 0x514406A: zebra_interface_address_read (zclient.c:1146)
==24112== by 0x4E5A81C: ospf_interface_address_add (ospf_zebra.c:262)
==24112== by 0x5144838: zclient_read (zclient.c:1397)
==24112== by 0x5126230: thread_call (thread.c:1577)
==24112== by 0x401E00: main (ospf_main.c:377)

Ticket: CM-10890
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-12 13:19:58 -04:00
Donald Sharp
bd40c341ee lib: refactor connected_lookup_prefix
The connected_lookup_address function should really
be a connected_lookup_prefix function.  Refactor
the code to use it.

Ticket: CM-10890
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-12 10:03:44 -04:00
Daniel Walton
de69c4445d "ip protocol" is missing ospf as an option
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-10849

We were incorrectly listing protocols that supported ipv6 for "ip
protocol" instead of listing the protocols that supported ipv4.

With the fix

superm-redxp-05(config)# ip protocol ?
  any        Any of the above protocols
  bgp        Border Gateway Protocol (BGP)
  connected  Connected routes (directly attached subnet or host)
  isis       Intermediate System to Intermediate System (IS-IS)
  kernel     Kernel routes (not installed via the zebra RIB)
  ospf       Open Shortest Path First (OSPFv2)
  rip        Routing Information Protocol (RIP)
  static     Statically configured routes
  table      Non-main Kernel Routing Table
superm-redxp-05(config)#
superm-redxp-05(config)#
superm-redxp-05(config)# ipv6 protocol ?
  any        Any of the above protocols
  bgp        Border Gateway Protocol (BGP)
  connected  Connected routes (directly attached subnet or host)
  isis       Intermediate System to Intermediate System (IS-IS)
  kernel     Kernel routes (not installed via the zebra RIB)
  ospf6      Open Shortest Path First (IPv6) (OSPFv3)
  ripng      Routing Information Protocol next-generation (IPv6) (RIPng)
  static     Statically configured routes
  table      Non-main Kernel Routing Table
superm-redxp-05(config)#
superm-redxp-05(config)#
2016-05-11 13:12:08 +00:00
vivek
d838ddbfd1 Quagga: Check and cleanup prior address when processing address add on interface
IPv4 addresses can be learnt from the kernel even when the interface is down.
Quagga notifis clients of addresses upon learning of them (initial read or
upon NEWADDR) as well as when the interface comes up. The problem is that
while zebra code itself has checks to ensure duplicate addresses aren't added
to an interface, that is not true for the clients.

This patch checks for duplicates when the client receives the address add.
Upon this, the patch does a delete and add as done in zebra - because there
is a possibility that some other parameter could have changed. The fix also
takes care of the extra memory allocation for 'connected' in clients.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Dinesh Dutt <ddutt@cumulusnetworks.com>

Ticket: CM-10745
Reviewed By: CCR-4660
Testing Done: Manual, bgp-min
2016-05-09 15:53:06 -07:00
radhika
567b877d7f zebra - BFD client de-registration support
CM-10680
Issue: When BGP daemon is stopped, all the BGP BFD sessions are not getting deleted from PTM.
Root cause: BGP daemon stop causes BFD de-register message to be sent for every peer on which BFD is enabled. But, all the de-register messages from bgpd to zebra are not processed before the socket close. This results in some stale BGP BFD sessions.
Fix: Support for client de-register message has been added in PTM/BFD.  Changes in Quagga to support BFD client de-registrations:
−   The BFD clients de-registration is sent directly from zebra daemon when zebra client (bgpd, ospfd and ospf6d) socket close is detected.
−   Introduced a BFD flag for the zebra clients to prevent BFD de-registration messages from being sent to zebra daemon when the client is shutting down. This reduces the BFD messaging.

CM-10540
Issue: Invalid ptm status “fail” instead of “n/a” being displayed for VRF interfaces.
Root cause: ptm status is not being initialized to “unknown” status when VRF interface is added or changed. The uninitialized value is ‘0’ which is the value for “fail”
Fix: Initialized the ptm status to the correct value.

Signed-off-by: Radhika Mahankali <radhika@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Kanna Rajagopal <kanna@cumulusnetworks.com>

Ticket: CM-10680, CM-10540
Reviewed By: CCR-4653
Testing Done: PTM smoke, BGP smoke and ptmd_test.py:TestMultipleAddrsIntfOspfBgp
2016-05-08 20:11:18 -07:00
Donald Sharp
a647bfa8d7 lib: Vrf disable hook was never being run
The check for the fact a vrf was enabled
was immediately after we disabled it in vrf_disable()

Ticket: CM-10139
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-05-06 10:41:33 -04:00
Donald Sharp
dfa857a5c0 lib: Swap show run ordering of interfaces and vrf's
When doing a 'show run' display vrf information
first to allow later commands to just
work correctly for vrf cli read in.

Ticket: CM-10139
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-05-06 10:41:31 -04:00
Donald Sharp
0b6d694ba0 lib: Fix unprotected debug
"Vrf found: %p" was not protected by a debug
check and as such we were seeing allot of
extraneous output.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-05-04 20:13:54 -04:00
Donald Sharp
34f8e6af37 lib: Rework vrf_get
vrf_get has these possible lookup/creation ways of being called.

name = NULL, vrf_id = VRF_UNKNOWN
   Nothing to do here.

name = NULL, vrf_id != VRF_UNKNOWN
   Look up the vrf_id in the table.  Return that created vrf.
   If not found create a struct vrf to hold it properly.

name = <something>, vrf_id = VRF_UNKNOWN
   Look up the name in the vrf list, if found return that vrf.
   If not found create the vrf and zvrf

name = <something>, vrf_id != VRF_UNKNOWN
   Look up the name in the vrf list, if found check to see
   if the vrf->vrf_id is VRF_UNKNOWN, if so match up and return
   If not found, create the vrf and table entry and return

Ticket: CM-10139
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-05-03 15:58:26 -04:00
vivek
4a04e5f796 BGP: Trigger IPv6 router advertisements upon config of unnumbered neighbor
Instead of turning on IPv6 RA on every interface as soon as it has an IPv6
address, only enable it upon configuration of BGP neighbor. When the BGP
neighbor is deleted, signal that RAs can be turned off.

To support this, introduce new message interaction between BGP and Zebra.
Also, take appropriate actions in BGP upon interface add/del since the
unnumbered neighbor could exist prior to interface creation etc.

Only unnumbered IPv6 neighbors require RA, the /30 or /31 based neighbors
don't. However, to keep the interaction simple and not have to deal with
too many dynamic conditions (e.g., address deletes or neighbor change to/from
'v6only'), RAs on the interface are triggered upon any unnumbered neighbor
configuration.

BGP-triggered RAs will cause RAs to be initiated on the interface; however,
if BGP asks that RAs be stopped (upon delete of unnumbered neighbor), RAs
will continue to be exchanged if the operator has explicitly enabled.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-10640
Reviewed By: CCR-4589
Testing Done: Various manual and automated (refer to defect)
2016-05-02 13:53:38 -07:00
Donald Sharp
6f16f5a019 lib: VRF_GET_ID should respect VRF_UNKNOWN
The VRF_GET_ID macro should respect the VRF_UNKNOWN
as a notice that the vrf is not active.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-05-02 13:17:06 -04:00
Donald Sharp
651415bd61 quagga: Fixup startup to allow consistency between sysV and systemd
We want the ability to start up quagga in a varied set of
environments.  This needs to be done in SysV and systemd
startups.  As such refactor the code to allow us to
allow end users to easily switch between the two

sysV:
edit the /etc/quagga/daemons file
service quagga [start|stop|reload|restart]

Systemd:
edit the /etc/quagga/daemons file
systemctl [start|stop|reload|restart] quagga

Ticket: CM-10634
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-04-27 16:04:48 -04:00
Donald Sharp
588e90ecde lib: bfd debug fixup
BFD debugs were being output without any
debug protection.  Modify the code
to not output unless debugging is
turned on.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Radhika Mahankali <radhika@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-04-22 12:32:47 -04:00
radhika
986aa00f94 Addition on hidden command "bfd multihop/singlehop" and "ptm-enable" per interface command
CM-10435
Issue: IBGP BFD sessions are created as multi-hop even though peer is single-hop away. This is causing an interop issue with ICOS.
Root Cause: By design all IBGP peers are registered with BFD as multi-hop.
Fix:
• Changed the default behavior of always treating IBGP BFD sessions as mult-hop. shared_network variable is used to determine whether the IBGP peer is single hop or multi-hop away. The logic for determining whether EBGP peer is single hop or multi-hop has not been changed.
• Since the default behavior has been changed, it will cause interop issues between 2.5 and 3.0 IBGP BFD sessions. A new hidden command “bfd multihop/singlehop” has been introduced to overcome the interop issues.

dell-s6000-10(config-router)# neighbor 30.0.2.6 bfd
<2-255> Detect Multiplier
<cr>
dell-s6000-10(config-router)# neighbor 30.0.2.6 bfd multihop
dell-s6000-10(config-router)# no neighbor 30.0.2.6 bfd multihop
dell-s6000-10(config-router)#
dell-s6000-10(config-router)# neighbor 30.0.2.6 bfd multihop
dell-s6000-10(config-router)# do show running-config
!
router bgp 100
neighbor igroup peer-group
neighbor igroup bfd 5 500 500
neighbor igroup bfd multihop
neighbor 30.0.2.2 remote-as 100
neighbor 30.0.2.2 peer-group igroup
neighbor 3101🔤bcad::2 remote-as 100
neighbor 3101🔤bcad::2 peer-group igroup
neighbor 30.0.2.6 remote-as 200
neighbor 30.0.2.6 bfd multihop
neighbor 3102🔤bcad::6 remote-as 200
neighbor 3102🔤bcad::6 bfd
neighbor 3102🔤bcad::6 ebgp-multihop 255
!

CM-10260
Issue: “Unable to connect to socket” message keeps getting logged when ptmd process doesn’t exist.
Root Cause: BFD clients (bgpd, ospfd and ospf6d) during initialization try to register with BFD/PTM by default. This results in continuous logging If PTM does not exist since there is no max on number of retries.
Fix:
• Stop the retries to connect to PTM after max reconnect timer of 5 mins is reached.
• Added zebra debug event wrapper to message logging to prevent it from showing by default.

CM-4541
Issue: Addition of a new command "ptm-enable" or "no ptm-enable" per interface to enable/disable PTM link status checks for an interface.
Fix: Currently there is only one ptm-enable global command that enables/disables PTM status updates for all interfaces. This new command will give the handle to individually stop interface from reacting on the PTM status updates.
• by default interface uses the ptm-enable global configuration
• "no ptm-enable" on an interface will disable PTM status updates from taking affect for that interface. This can bring the interface up if it was brought down due to PTM status update.
• "ptm-enable" on an interface will cause the interface to fallback to the global ptm-enable configuration value and will bring the interface up or down based on the last stored PTM status update if global ptm is enabled.

Ticket: CM-10435, CM-10260 and CM-4541
Signed-off-by: Radhika Mahankali
Reviewed-by: Donald Sharp, Kanna Rajagopal
2016-04-21 15:39:38 -07:00
Don Slice
c88a8b757d zebra: Only create vrf route-node if in the kernel
Changed vrf_get to only create a route-node if the kernel has enabled the vrf,
supplying a table-id.  If the quagga configuration contains vrfs that have not
yet been enabled by the kernel, the vrf is created with a vrf_id of VRF_UNKNOWN.
These vrfs are added to the vrf_list so they contain a zvrf and configuration,
but the route-node is not created until the kernel has signalled that the vrf
has been defined and enabled.

Ticket: CM-10481
Signed-off-by: Don Slice
Reviewed-by: Donald Sharp
2016-04-21 16:15:07 +00:00
Donald Sharp
4b25d72d18 lib: Fix json.c compile on older platforms
The header file inclusions for json.c was wrong.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-04-15 15:02:58 -04:00
Donald Sharp
2fcc254eed lib, bgpd: Refactor vrf handling through zclient
Protocols receive zclient vrf creation events from zebra.
This data was being handed to the protocol to decode and
then to hand back to zclient to create the vrf to then
handle appropriately.  This is a bad idea.

Modify the code such that when zclient.c receives a vrf
event from zebra that it decodes the data and just creates
the vrf.  Individual protocols just need to handle the
appropriate vrf events.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-04-15 08:42:03 -04:00
Donald Sharp
33e450331e Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster 2016-04-14 20:59:05 -04:00
Donald Sharp
fe18ee2d44 lib, zebra: Rework zebra_ns to be a bit more modular
The struct zebra_ns was littered throughout the code
base in a half-hazard fashion.  Gather up the references
and isolate the code a bit better.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-04-14 20:56:57 -04:00
Donald Sharp
e2b1be648d lib, zebra: Rework vrf_add_update
The vrf_add_update function does not need to exist.
Move it's constituent parts into the appropriate
vrf_create/vrf_enable functionality as well as
move the zebra_vrf_add_update() function call
into zebra_vrf_enable()

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-04-14 20:56:43 -04:00
Donald Sharp
e74f14fc79 lib, zebra: Rearrange vrf_delete_update
vrf_delete_update really belongs in vrf.c broken up
into it's appropriate places.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-04-14 20:56:12 -04:00
Daniel Walton
859d388e90 quagga: "set community x:y" needs bounds checking
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-10002

superm-redxp-05# conf t
superm-redxp-05(config)# route-map FOO permit 10
superm-redxp-05(config-route-map)# set community ?
  AA:NN  Community number in AA:NN format (where AA and NN are <0-65535>) or local-AS|no-advertise|no-export|internet or additive
  none   No community attribute
superm-redxp-05(config-route-map)# set community 2:2
superm-redxp-05(config-route-map)# set community 2:70000
% Malformed communities attribute
superm-redxp-05(config-route-map)# set community 70000:2
% Malformed communities attribute
superm-redxp-05(config-route-map)#
2016-04-14 18:16:43 +00:00
Donald Sharp
58255d3440 lib, zebra: Refactor vrf creation a bit more
Create the idea of a VRF_UNKNOWN, this is for a vrf where we don't
yet have the vrf_id for it yet.

Refactor the vrf_create code out of existence.  We had two code
paths vrf_create and vrf_get.  We should use vrf_get to create
the new vrf since XXX_get() creates the data structures now.

Signed-off-by: Donald Sharp
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-04-12 20:19:28 -04:00
Donald Sharp
88227bbe36 lib: passing in vrf string length is not needed
vrf_create does not need the string length of the vrf.
Remove it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-04-12 20:18:36 -04:00
Donald Sharp
b8b341d7c3 lib: Fix priviledge modification for vty group specified
When attempting to switch runtime permissions over to
the correct group specified for the vty group, if the
user specified to run as does not have that vty group
then do warn about the issue and stop running

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reported-by: Thomas Martin <tmartincpp@gmail.com>
2016-04-08 20:33:15 -04:00
David Lamparter
4a9ea50e1b lib: add getgrouplist() for Solaris
Of course Solaris doesn't have getgrouplist()...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-04-08 20:33:15 -04:00
Timo Teräs
6d75781681 privs: fix privilege dropping to use system defined groups
It may be requred for quagga process to belong to additional
groups. E.g. nhrp module will need to talk to strongSwan using
vici and may require additional permissions. Initialize groups
from the system group database.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-04-08 20:32:02 -04:00
Christian Franke
1b32203911 lib/privs: Don't use CAP_NET_BROADCAST
From what I can tell, CAP_NET_BROADCAST has never been required for any
functionality in the Linux kernel, so we do not really need it.

However, it causes breakage in contexts where Quagga is started with a
limited set of capabilities, e.g. in Docker, because these may not
include CAP_NET_BROADCAST and in the case of Docker do not even support
adding CAP_NET_BROADCAST.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-04-08 20:32:02 -04:00
Christian Franke
0b16a517f4 lib/privs: display more info if cap_set_proc fails.
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-04-08 20:32:02 -04:00
Brian Bennett
01070b9e2e lib: Fix POSIX capabilities on SunOS platforms
When using POSIX capabilities on SunOS the capabilities are too
restricitve resulting in quagga processes not being able to read their
own config files. Credit goes to Oracle where this patch was originally
authored and included in OpenSolaris.

lib/privs.c: Include additional capabilities, better checking of
    missing capabilities.

Fixes: #820
Acked-by: Greg Troxel <gdt@ir.bbn.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-04-08 20:32:02 -04:00
Donald Sharp
7707478a33 Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster 2016-04-08 13:16:21 -04:00
Donald Sharp
b2d7c082a2 quagga: Remove iflist global variable
The file if.c has a iflist that had the list of interfaces
in the default vrf.  Remove this variable and replace
with a vrf_iflist lookup on the default vrf where it
was used.

Additionally, modify ptm code to iterate over all vrf's
when enabling ptm.

Ticket: CM-10338
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Radhika Mahankali <radhika@cumulusnetworks.com>
2016-04-08 13:15:59 -04:00
Donald Sharp
79694123fd lib, zebra: Rename ZEBRA_VRF_ACTIVE
ZEBRA_VRF_ACTIVE is a poor name for when a vrf is
actually active.  Rename VRF_ACTIVE.

Ticket: CM-10338
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Radhika Mahankali <radhika@cumulusnetworks.com>
2016-04-08 13:15:41 -04:00
Donald Sharp
eaa9cafdce lib: Refactor XX_name_len away
We had two functions XXX_name and XXX_name_len
that both did the same thing.  Remove the
XXX_rename_len functions.

Ticket: CM-10338
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Radhika Mahankali <radhika@cumulusnetworks.com>
2016-04-08 13:14:00 -04:00
Christian Franke
ae616d60b5 lib: use constant to replace magic value for length of quagga_timestamp
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Acked-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
2016-04-07 20:32:53 -04:00
Donald Sharp
1db63918b2 lib, vtysh: Return actual problem further up
When we encounter a problem loading a config file
quantify to the end user what has gone wrong,
with a combination of err output as well as
return codes.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dave Olson <olson@cumulusnetworks.com>
2016-04-06 20:07:27 -04:00
vivek
0f48374b38 lib: Initialize variable
Initialize a variable to prevent warnings.

Updates: 8087b296b4

Ticket: CM-10258
Reviewed By:  Trivial
Testing Done: None
2016-04-05 10:40:33 -07:00
vivek
8087b296b4 lib: Ensure VRF is created with correct id
In function vrf_get(), an early call to vrf_get_by_name() may end up
creating the Zebra VRF structure prior to the VRF id being set,
resulting in various other misbehavior. Fix this with appropriate
changes.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>

Ticket: CM-10258
Reviewed By: CCR-4418
Testing Done: Manual
2016-04-05 08:39:16 -07:00
Donald Sharp
77c489986e lib: plist should not CMD_WARNING when command has already been entered
When you startup zebra and apply a prefix list command, and then at a
later point in time start up additional daemons and then attempt to
apply the integrated-config, the prefix-list command will stop
processing after zebra.

This is because when zebra attempted to process the command, it would
notice that it already had that cli handled and print a vty warning and
then it would return CMD_WARNING. This caused the loop over all the
commands to stop and as such the command would not be sent to all the
individual daemons.

This behavior is exactly the same as it is in the 2.5.X( hell it's
upstream behavior to! ). Modify the plist command to return CMD_SUCCESS
in this case.

Ticket: CM-10248
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-04-04 12:40:33 -04:00
Donald Sharp
4b8b28d235 lib, zebra: Fix vrf new hook callback.
This commit fixes two issues:

1) The creation of a new vrf from the cli was not calling the vrf_create hook.
This is fixed.

2) The zebra_vrf_delete callback was deleting interface information that
belonged to vrf not zvrf.  Remove the code as that it was not it's job
to do so.

Ticket: CM-10100
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-04-01 15:26:19 -04:00
Donald Sharp
974fc9d251 lib: Combine name comparison function
The vrf name comparison function was the same as the interface
comparison function.  Combine the forces for the goodness of
mankind.

Ticket: CM-10184
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-03-31 14:00:29 -04:00
Christian Franke
f3ccedaa3e isisd: add support to import routes from other protocols
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2016-03-29 20:26:28 -04:00
Christian Franke
6ac446878f lib: add function to get precise remaining time of timer thread
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-03-29 20:26:26 -04:00
Paul Jakma
cbe0a6a1e9 lib: zclient can overflow (struct interface) hw_addr if zebra is evil
* lib/zclient.c: (zebra_interface_if_set_value) The hw_addr_len field
  is used as trusted input to read off the hw_addr and write to the
  INTERFACE_HWADDR_MAX sized hw_addr field.  The read from the stream is
  bounds-checked by the stream abstraction, however the write out to the
  heap can not be.

  Tighten the supplied length to stream_get used to do the write.

  Impact: a malicious zebra can overflow the heap of clients using the ZServ
  IPC.  Note that zebra is already fairly trusted within Quagga.

Reported-by: Kostya Kortchinsky <kostyak@google.com>
2016-03-28 08:57:32 -04:00
Donald Sharp
c026ca1c01 lib: Really fix handling of poll
This fix is just the actual point fix of the poll event handling.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-03-28 08:07:08 -04:00
Donald Sharp
aa037235c1 Revert "lib: Fix handling of poll"
This reverts commit cc7165b62a.

This commit was causing crashes.
2016-03-28 08:04:48 -04:00
vivek
2e447c86c1 Quagga: Fix VRF lookup by name
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>

Ticket: CM-10098
Reviewed By: CCR-4368
Testing Done: Verified on failed node
2016-03-25 19:52:49 -07:00
Donald Sharp
cc7165b62a lib: Fix handling of poll
poll returns the number of revents that we need to handle
in the array.  revent is a bit field of events that need
to be handled.  thread.c was treating each sub item in the
bitfield as a separate item to handle.

As such the loop over the pollfds would quit early
sometimes.

Ticket: CM-10077
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-03-25 13:06:21 -04:00
Donald Sharp
b53e10a173 lib: Size the pollfds array once
The pollfds was being resized if the # of fds grew to
be more than the original array size.  Just size it
once.

Ticket: CM-10077
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-03-25 13:05:54 -04:00
Donald Sharp
1e22a2af50 bgpd, lib, ospfd, ospf6d: Fix bfd interface lookup
bfd was receiving a callback with an interface name string
but was ignoring the passed in vrf to find the ifp pointer.
This commit fixes that code path in bfd.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Radhika Mahankali <radhika@cumulusnetworks.com>
2016-03-24 06:03:02 -07:00
Donald Sharp
f896287128 bgpd, lib, zebra: Add ability to retrieve ifp without specifying a vrf
There are cases where we get an interface name but do not have a
corresponding vrf.  We care about getting an interface pointer
so just provide a function that searches all vrf's for the ifp.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Radhicak Mahankali <radhika@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-03-23 12:38:30 -07:00
Daniel Walton
7ab5795aee RDNBRD: Change default distance of imported table routes to 15
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-9898

The 'redistribute neighbor' feature is the primary use case for
importing table routes.  We need the redistribute neighbor routes to
have a lower admin distance than eBGP so that the local table routes are
preferred (if the host is dual homed we could also learn about it via eBGP).
2016-03-22 19:04:58 +00:00
vivek
5fe9f9631d Quagga: Make routemap updates or deletes work for VRFs
Updates to routemaps and delete of the routemap were not working properly
for VRFs. This was because while routemaps are global, the routemap update
processing timer and the processing were at the per-instance level. This
approach was unable to handle processing for multiple instances as the
routemap has no tracking of which instances are still pending processing.
This lead to the processing happening correctly only for the first instance
- which could be the default instance or some other instance. It could also
result in reference to freed memory for an instance.

The fix done is to make the update/delete processing also global and not per
instance. This means that the route-map delay timer will be global and a global
thread will handle the change (or delete) for all instances instead of spawning
a separate thread for each instance. To support this, a global BGP command
"bgp route-map delay-timer <value>" has been implemented. The existing command
per-instance is not deleted but will update the global timer.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-6970, CM-9918
Reviewed By: CCR-4320
Testing Done: Manual, bgpsmoke
2016-03-22 17:46:30 +00:00
vivek
c23af4d3e6 Zebra: Restrict IPv6 RA to valid interfaces
Restrict interfaces on which IPv6 Router Advertisements are allowed. The list
excludes loopback interfaces including the VRF device interface; specific to
Cumulus, it also includes "switch0" and "ethX" interfaces.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Don Slice <dslice@cumulusnetworks.com>

Ticket: CM-9849
Reviewed By: CCR-4334
Testing Done: Manual
2016-03-22 16:52:35 +00:00
Don Slice
84361d615d quagga: delete interface from default table when moved to vrf
All daemons changed to flag an interface that has been moved to a vrf as DELETED instead of INTERNAL.
When they were flagged as IFINDEX_INTERNAL, ospf, rip, and isis would re-install them in the default
assuming that they were being "pre-defined" before the kernel definitions.

Ticket: CM-9265
Signed-off-by: Don Slice
Reviewed-by: Donald Sharp
2016-03-18 19:53:15 +00:00
Donald Sharp
c2888e10b1 Makfile issues to compile better
During some tests of the release I noticed that we
have some issues with it properly building due
to missing information in the Makefile.am files

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-03-18 09:35:58 -04:00
David Lamparter
8a0bebfc3a lib: fix MIN/MAX macros to not double-eval
cf. https://gcc.gnu.org/onlinedocs/gcc/Typeof.html
(Works on all compilers on Quagga's compiler support list in
doc/overview.texi)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Tested-by: NetDEF CI System <cisystem@netdef.org>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-03-17 19:52:10 -04:00
Donald Sharp
73d2dad0bd lib: Fix assert in node_parent()
With this sequence of commands in a conf file:
router bgp X
address-family ipv4
exit
address-family ipv6
exit

When the bgp AS # is currently configured as !X and the
'vtysh -b -f <conf file above>' command run, vtysh will
crash with an assert.

This commit fixes that issue.

Ticket: CM-9852
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-03-17 16:12:55 -04:00
radhika
055c4dfcde Support for multi-client and client reg msg
Ticket: CM-7615, CM-7773
Reviewed By: CCR-3610, CCR-3708
Testing Done: Unit, BGP Smoke and OSPF Smoke

Changes (70790261926b17200c8c9377c4576cd3b486fcef) ported from 2.5

Issue (related to CM-7615): 1. CM-7615: There is mismatch in the client name between ptm display of client BFD sessions and the zebra logs. For example, if bgpd added BFD session, zebra logs will show the client as “bgp” but the ptm display will show it as “quagga”
2. Bigger problem is when 2 clients (for example OSPF and BGP) from Quagga register for same BFD session and only one client de-registers the BFD session. This results in BFD session deletion from PTM even though other client still has the BFD registration.

Root Cause: Even though BGP, OSPF and OSPF6 are 3 different clients from Quagga that are trying to register/deregister BFD sessions with PTM, all 3 are represented as one client “quagga” from zebra. This makes it hard for PTM/BFD to distinguish between all three when BFD peer registration/deregistration happens from the clients.

Fix: Send the actual client name bgp, ospf or ospf6 from zebra with BFD reg/dereg messages instead of one unified client name “quagga”

CM-7773: BFD sessions are not getting cleaned from PTM even though no BGP peering exists in Quagga.

Root Cause: PTM cleans up stale BFD sessions from a client when it finds a change in seq id advertised by the client. But, if PTM never detects a change in the seq id then the stale BFD sessions never get cleaned up. The test restarts the quagga without saving the configuration, which results in no BGP peering. No BGP peers are registered with PTM after restart and PTM does not detect a client seq id change resulting in stale BFD sessions.

Fix: New client registration message was added in PTM. Every client that is interested in BFD monitoring will register with PTM with the client seq id. Client will register with a different seq id (typically pid) every time it restarts. This will help in detecting the change in seq id and cleanup of stale BFD sessions for a client.

Code Changes: To support the new client registration message following changes have been made
  - Added support for client registration messaging in zebra for sending messages to PTM.
  - Added support for client registration messaging between zebra and clients (BGP, OSPF and OSPF6) in BFD library.
  - Expanded the reg/de reg peer messaging between zebra and clients to support client specific seq id to distinguish between multiple clients registering for BFD peer rather than one “quagga” client.
  - Changes in bgpd, ospfd and ospf6d to send client registrations at the time of daemon initialization and on receiving BFD peer replay message.
2016-03-08 23:31:32 -08:00
Donald Sharp
6eda642542 lib: Allow daemons to startup without an actual conf file
If neither a Quagga.conf or <protocol>.conf exist, then
still start the daemon.  Assume that configuration is coming
shortly

Ticket: CM-9714
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:
2016-03-07 14:57:16 -05:00