Commit Graph

3777 Commits

Author SHA1 Message Date
Donald Sharp
d52c949b2c zebra: When installing a nexthop-group success is vital
When installing a nexthop-group the recent commit:
commit 0be6e7d75d

reversed the logic for testing if adding data to
the netlink message succeeded and we thought we did
not thus not creating the nexthop group.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-06-17 23:36:42 -04:00
Mark Stapp
0d55f01bf8
Merge pull request #6569 from xThaid/dplane_batching_cleanup
Clean up the zebra's Netlink API
2020-06-16 12:06:11 -04:00
Jakub Urbańczyk
a757997cab zebra: more clean-ups in netlink code
* Use nl_attr_add32 instead of nl_attr_add where it is possible.
 * Move common code from build_singlepath() and build_multipath()
   to separate function.

Signed-off-by: Jakub Urbańczyk <xthaid@gmail.com>
2020-06-13 22:56:25 +02:00
Jakub Urbańczyk
0be6e7d75d zebra: check for buffer boundary
* Move code encoding Netlink messages to separate functions
 * Add buffer bounds checking while creating Nelink messages

Signed-off-by: Jakub Urbańczyk <xthaid@gmail.com>
2020-06-13 22:56:25 +02:00
Jakub Urbańczyk
312a6beed6 zebra: clean up netlink api
* Rename netlink utility functions like addattr to be less ambiguous
 * Replace rta_attr_* functions with nl_attr_* since they introduced
   inconsistencies in the code
 * Add helper functions for adding rtnexthop struct to the Netlink
   message

Signed-off-by: Jakub Urbańczyk <xthaid@gmail.com>
2020-06-13 22:53:24 +02:00
Mark Stapp
e3d9208a09 zebra: avoid an atomic builtin that clang doesn't like
We had special-cased use of atomic_add_fetch, because clang just
does not like that builtin. Just use atomic_fetch_add instead.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-12 16:31:22 -04:00
Renato Westphal
6a935ad753
Merge pull request #6559 from mjstapp/fix_zebra_rnh_sa
zebra: fix SA warning in zebra_rnh.c
2020-06-10 23:26:51 -03:00
Chirag Shah
2b2282eb76 zebra: rib nb changes with redefined nexthop model
RIB operational northbound changes based on redfined
nexthop model.

Testing Done:

{
  "afi-safi-name": "ipv4-unicast",
  "table-id": 254,
  "route": [
    {
      "prefix": "0.0.0.0/0",
      "route-entry": [
        {
          "protocol": "kernel",
          "distance": 0,
          "metric": 100,
          "selected": [null],
          "installed": [null],
          "internal-flags": 8,
          "internal-status": 16,
          "uptime": "2020-06-06T00:28:26.139797Z",
          "nexthop-group": {
            "id": 15,
            "nexthop": [
              {
                "nh-type": "ip4-ifindex",
                "vrf": "0",
                "gateway": "10.0.2.2",
                "interface": "enp0s3",
                "active": [null],
                "fib": [null]
              }
            ]
          }
        }
      ]
    },
    {
      "prefix": "1.1.1.4/32",
      "route-entry": [
        {
          "protocol": "kernel",
          "distance": 0,
          "metric": 0,
          "selected": [null],
          "installed": [null],
          "internal-flags": 8,
          "internal-status": 16,
          "uptime": "2020-06-06T00:28:26.139790Z",
          "nexthop-group": {
            "id": 16,
            "nexthop": [
              {
                "nh-type": "ifindex",
                "vrf": "0",
                "gateway": "",
                "interface": "dummy4",
                "active": [null],
                "fib": [null]
              }
            ]
          }
        }
      ]
    }
  ]
}

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2020-06-10 16:25:18 -07:00
Donald Sharp
7a3302bb90
Merge pull request #6471 from volta-networks/fix_zebra_register_rnh_pseudowire
zebra: Every time zebra receives a ZEBRA_PW_SET, zebra should evaluate nh
2020-06-10 19:03:06 -04:00
Renato Westphal
1821018078
Merge pull request #6542 from mjstapp/zebra_opaque_unicast
Zebra opaque unicast messages
2020-06-10 19:06:16 -03:00
Mark Stapp
c8b27f2ad9 sharpd,zebra: unicast support for zapi messages
Distinguish between unicast and broadcast opaque messages
in zebra handler code. Add cli and internal api changes to
have sharpd send unicast opaque messages. Add opaque cli
commands to the sharp user doc.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-10 15:05:25 -04:00
Mark Stapp
00580dacb4 zebra: fix SA warning in zebra_rnh.c
Fix an SA warning... that I introduced while resolving
a different SA warning.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-10 14:57:30 -04:00
Donald Sharp
10658ad30b
Merge pull request #6528 from mjstapp/fix_zebra_mpls_sa
zebra: fix coverity SA warnings
2020-06-10 13:57:02 -04:00
Santosh P K
57dd2f0097
Merge pull request #6414 from opensourcerouting/nb-error-handling
NB context + enhanced error handling
2020-06-10 22:47:07 +05:30
Jakub Urbańczyk
99e387d583 zebra: separate code encoding netlink msg
Signed-off-by: Jakub Urbańczyk <xthaid@gmail.com>
2020-06-10 16:29:14 +02:00
Jakub Urbańczyk
f62e5480ec zebra: convert ip rule installation to use dplane thread
* Implement new dataplane operations
 * Convert existing code to use dataplane context object
 * Modify function preparing netlink message to use dataplane
   context object

Signed-off-by: Jakub Urbańczyk <xthaid@gmail.com>
2020-06-10 16:18:45 +02:00
Jakub Urbańczyk
60d8d43be4 zebra: prepare dplane to deal with pbr rules
This commit is the first step to convert IP rule installation to
use dplane thread.
 * Add dataplane's internal representation of a pbr rule
 * Add dplane stats related to rules
 * Introduce a new type of dplane operation

Signed-off-by: Jakub Urbańczyk <xthaid@gmail.com>
2020-06-10 16:18:45 +02:00
Mark Stapp
387831ffc3 lib,zebra,sharpd: modify opaque zapi message to support unicast
Start modifying the OPAQUE zapi message to include optional
unicast destination zapi client info. Add a 'decode' api and
opaque msg struct to encapsulate that optional info.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-10 08:26:27 -04:00
Mark Stapp
d2ddc1416b lib,zebra: rename opaque decode api
Change name of an opaque zapi api to 'decode' to align with the
other zapi message parsing apis. Missed that in the original
opaque commits.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-10 08:16:10 -04:00
Mark Stapp
2896f40e69 zebra: fix coverity SA warnings
Fix a few coverity warnings.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-10 08:11:54 -04:00
Donald Sharp
2d8c1bc235
Merge pull request #5323 from opensourcerouting/filter-nb
lib: migrate FRR filter to northbound
2020-06-10 06:59:32 -04:00
Stephen Worley
3b99806d7f
Merge pull request #6494 from mjstapp/fix_if_del_addr
zebra: include dest addr when deleting p2p from interface
2020-06-09 12:04:33 -04:00
Rafael Zalamena
c2aab69336 *: add filter northbound support
Allow all daemons to work with filter northbound.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2020-06-05 14:31:26 -03:00
Donald Sharp
3e0a9b4032 zebra: nhlfe_alloc should not fail
Let's prevent nhlfe_alloc from actually returning anything that can fail:

1) nexthop_new -> never returns NULL so checking for NULL here
makes no sense, remove it.

2) lsp not being NULL is a assert condition here as that it's
a precondition for the function to work properly.

3) since nhlfe_alloc cannot return NULL now remove tests
for it in callng functions

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-06-05 09:04:55 -04:00
Donald Sharp
c783635c2b
Merge pull request #6508 from RichardWu-Hebut/master
zebra: Fix zebra crashed in building FPM netlink message when bgp sen…
2020-06-03 13:09:27 -04:00
Karen Schoener
1fddcd0a9b zebra: Every time zebra receives a ZEBRA_PW_SET, zebra should evaluate nh
Every time zebra receives a ZEBRA_PW_SET, zebra should call
zebra_evaluate_rnh.

This fixes a race condition where zebra sometimes fails to install a
pseudowire that is 'up', and has a reachable next hop.

Signed-off-by: Karen Schoener <karen@voltanet.io>
2020-06-03 09:40:23 -04:00
Richard Wu
b0e9567ed1 zebra: Fix zebra crashed in building FPM netlink message when bgp sends aggregation routes to zebra.
Issue:
    When BGP sends aggregation routes to zebra, the next hop is black hole.
    Then Zebra will try to build the netlink FPM message, but there is no
    next hop as it is a black hole route. Then the netlink_route_info_fill
    function returns 0. In the result, zebra will crashed in
    "assert(data_len)" of zfpm_build_route_updates.
    This issue also happen when I create a static black hole route via
    staticd.
Fix:
    As the netlink message of the blackhole route is legal, it should return
    success.

Signed-off-by: Richard Wu <wutong23@baidu.com>
2020-06-03 10:43:37 +08:00
Mark Stapp
6703a03867 zebra: handle OPAQUE registrations and forward messages
Add initial support to maintain client daemon registrations for
OPAQUE messages. Use the registered zapi client info to forward
copies of OPAQUE messages sent to zebra.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-02 08:22:24 -04:00
Mark Stapp
6e2a33a843 zebra: add zserv_send_batch api
Add a zserv api to send a batch (a fifo) of messages to a
zapi client.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-02 08:22:24 -04:00
Mark Stapp
5bebe26d4e zebra: don't print stale text if no GR info
Don't print GR show output header if no GR info is present
for a zapi client.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-02 08:21:38 -04:00
Mark Stapp
79b3664a67 zebra: call zapi message handler with a batch
The zapi code processes a batch of incoming messages, using a
fifo. Hand the entire batch into the main zebra handling code,
and let it loop through the individual messages.

Divert the special OPAQUE messages from the normal processing
flow, and offer them to the new zebra_opaque module instead.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-02 08:20:54 -04:00
Mark Stapp
aa9002a5f5 zebra: add lock and busy counter for zclients
Add a mutex used to manage the list of zclients. Add a busy
counter to the zapi client session, so that we can use a
client session from another pthread.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-02 08:20:54 -04:00
Mark Stapp
9bb02389d0 zebra: add zebra opaque module
Add the zebra_opaque module, designed to offload some opaque zapi
message processing to a new, dedicated pthread. Add to the build;
also re-sort the lists of zebra files in subdir.am.
Start, stop, and clean-up the opaque module, integrate with zebra
start and shutdown.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-02 08:20:54 -04:00
Renato Westphal
30712725a0
Merge pull request #6480 from volta-networks/feat_pwstatus
ldpd: Relay data plane pseudowire status in LDP notification
2020-06-01 21:00:51 -03:00
Renato Westphal
c5b9016eeb
Merge pull request #6266 from mjstapp/backup_nhgs
zebra: backup nexthops/nhlfes for LSPs
2020-06-01 20:54:51 -03:00
Mark Stapp
f2e7f4eba4 zebra: backup LSP zapi processing
Move some processing of zapi label messages so they can be
handled more efficiently. Handle zapi delete and replace
messages.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-01 14:46:32 -04:00
Mark Stapp
1323491d7a zebra: add check_free api
Add a 'check' api to hold the code that determines whether an LSP
can be freed or not. Replace calls to the free api with check
calls.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-01 14:46:32 -04:00
Mark Stapp
f727646ada zebra: rename 'nhg_copy' to 'nhe_copy'
It copies nhes...

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-01 14:46:32 -04:00
Mark Stapp
a29c2887a8 zebra: show backup nhlfes with dynamic LSPs
Include backup nhlfe info with the show output of
dynamic LSPs (no json yet).

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-01 14:46:32 -04:00
Mark Stapp
cd4bb96f9d zebra: support backup nhlfes in LSPs
Handle backup nhlfes in LSP zapi messages. Capture backup info
with LSPs, capture backup info in the dataplane LSP processing.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-01 14:46:32 -04:00
Mark Stapp
daaeaa2150 zebra: init dest's list of routes
Use the dlist init api on the zebra dest object's list
of routes.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-01 14:46:32 -04:00
Mark Stapp
ee70f62979 zebra: convert LSP nhlfe lists to use typesafe lists
Convert the embedded lists of nhlfes and snhlfes in zebra LSPs
and SLSPs to use typesafe dlists.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-01 14:46:12 -04:00
Karen Schoener
fd563cc7f3 ldpd: Relay data plane pseudowire status in LDP notification
Provide a way for the data plane to indicate pseudowire
status (such as: not forwarding, AC failure).

On a data plane pseudowire install failure, data plane
sets the pseudowire status.
Zebra relays the pseudowire status to LDP.
LDP includes the pseudowire status in the LDP notification
to the LDP peer.

Signed-off-by: Karen Schoener <karen@voltanet.io>
2020-06-01 13:21:37 -04:00
Mark Stapp
20e879f90c zebra: include dest addr when deleting p2p from interface
When deleting a p2p address from an interface, include
the destination address. Without this, we don't find the
internal connected datastruct and process the delete
correctly on netlink OSes.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-06-01 08:59:06 -04:00
Renato Westphal
10bdc68f0c *: convert northbound callbacks to new error handling model
The northbound configuration callbacks should now print error
messages to the provided buffer (args->errmsg) instead of logging
them directly.  This will allow the northbound layer to forward the
error messages to the northbound clients in addition to logging them.

NOTE: many callbacks are returning errors without providing any
error message. This needs to be fixed long term.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2020-05-28 19:22:54 -03:00
Wesley Coakley
9d72660d67 zebra, lib: bugfix on zebra packet debugging
`debug zebra packet detail` dumps the full message whereas
it had been dropping exactly 10 bytes, the size of the zebra header

Signed-off-by: Wesley Coakley <wcoakley@cumulusnetworks.com>
2020-05-28 10:48:56 -04:00
Sri Mohana Singamsetty
812507ec5c
Merge pull request #6402 from donaldsharp/fix_rtadv_stuff
Fix rtadv stuff
2020-05-23 15:48:10 -07:00
Donald Sharp
e748c7a42a zebra: Allow zebra to gracefully handle rtadv when not configured
Currently zebra when you compile without router advertisements
will just say something like `cannot handle message 42`.  Which
is not terribly useful to an end user.

Add some smarts to the zapi message handling to just do nothing
and output a debug if someone has it turned on.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-05-21 07:42:04 -04:00
Donald Sharp
d3f604f0d6 zebra: allow rtadv.c to compile with --enable-rtadv=no
The rtadv.c code was not properly compiling if you turned
off router advertisements in zebra.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-05-21 07:41:07 -04:00
Donald Sharp
edb2c56c19
Merge pull request #6425 from opensourcerouting/nb-state-cbs-fixes
northbound state callbacks fixes
2020-05-20 19:27:41 -04:00