Commit Graph

3767 Commits

Author SHA1 Message Date
Mark Stapp
bd0254af6c bgpd: clarify evpn datastruct use for SA
Clear up an SA report by clarifying a function call in the evpn
code.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2019-10-23 11:56:35 -04:00
Donatas Abraitis
acf061a9ab
Merge pull request #5108 from donaldsharp/sendbuffer_size_bgp
Sendbuffer size bgp
2019-10-20 12:09:42 +03:00
Russ White
12bea6d575
Merge pull request #4850 from lkrishnamoor/show_cli
bgpd: Adding new bgp evpn cli's for ip-prefix lookup
2019-10-18 21:30:37 -04:00
Renato Westphal
dfd7b62ddd
Merge pull request #5172 from donaldsharp/sa_clean_and_clean
Sa clean and clean
2019-10-17 23:14:31 -03:00
Sri Mohana Singamsetty
03e484aafa
Merge pull request #5165 from donaldsharp/evpn_fixup
bgpd: return created bgp_path_info
2019-10-17 10:15:01 -07:00
Mark Stapp
10e75ceb6a
Merge pull request #5150 from qlyoung/bgp-vector-io-4
BGP vector I/O - Redux
2019-10-17 10:57:47 -04:00
Russ White
718804149e
Merge pull request #5078 from lkrishnamoor/advertise-routes
bgpd: Fix "show bgp l2vpn evpn neighbors x.x.x.x advertised-routes json"
2019-10-16 15:05:23 -04:00
Russ White
b42d15054d
Merge pull request #5118 from lkrishnamoor/routes_json
bgpd: Fix in "show bgp l2vpn evpn neighbors X.X.X.X routes json"
2019-10-16 15:01:13 -04:00
Donald Sharp
401b063670 bgpd: In redistribution aspath cannot be NULL
Coverity has found a path where the attr.aspath may be NULL.

assert that the aspath is non-null so we can make this go away.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-16 13:38:29 -04:00
Donald Sharp
05864da791 bgpd: struct bgp_path_info *->attr must not be NULL
We make the assumption that ->attr is not NULL throughout
the code base.  We are totally inconsistent about application
of this though.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-16 13:38:29 -04:00
Donald Sharp
d38c6bb1b0 bgpd: Check setsockopt return codes
Let end user know that a setsockopt failed and we may
be experiencing degraded performance.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-16 13:38:29 -04:00
Donald Sharp
c2d020ad71 bgpd: Add ability to set tcp socket buffer size
Add -s X or --socket_size X to the bgp cli to allow
the end user to specify the outgoing bgp tcp kernel
socket buffer size.

It is recommended that this option is only used on
large scale operations.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-16 07:42:05 -04:00
Donald Sharp
c011a88bb5 bgpd: return created bgp_path_info
In bgp_create_evpn_bgp_path_info we create a bgp_path_info
that should be returned since we need it later.

Found by Coverity Scan.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-16 07:02:55 -04:00
Donald Sharp
b60afd5c38
Merge pull request #5097 from ton31337/fix/do_not_reconnect_if_prefix_overflow
bgpd: Keep the session down if maximum-prefix is reached
2019-10-15 16:18:19 -04:00
Quentin Young
185553660f bgpd: speak soothing words to scanbuild
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-10-15 18:25:02 +00:00
Russ White
e9f66ba9af
Merge pull request #5156 from donaldsharp/soft_reconfig_the_peer
bgpd: Soft reconfig-in should find the right bgp_path_info
2019-10-15 11:37:07 -04:00
Russ White
218f11515b
Merge pull request #5022 from chiragshah6/mdev
bgpd: evpn fix advertise-svi-ip display in show commands
2019-10-15 11:34:22 -04:00
Russ White
51de65305d
Merge pull request #5152 from donaldsharp/evpn_es_not_locking
Some bgp evpn fixes
2019-10-15 11:09:12 -04:00
Donald Sharp
d7d158892a bgpd: Soft reconfig-in should find the right bgp_path_info
When using soft reconfiguration inbound we are storing packet
data on the side for replaying when necessary.  The problem here
is that we are just grabbing the first bgp_path_info and using
that as the base.  What happens when we have soft-reconfig turned
on with multiple bgp_path_info's for a path?  This was introduced
in commit 8692c50652, yes back
in 2012!  I would argue, though, that it was just broken
in a different way before this.

Choose the correct bgp_path_info that corresponds to the peer
we received the data from for rethinking.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-15 09:31:20 -04:00
Donatas Abraitis
4e2313d8ee
Merge pull request #5119 from lkrishnamoor/community-list
bgpd: Implement "sh bgp l2vpn evpn community|large-community X"
2019-10-15 13:35:27 +03:00
Lakshman Krishnamoorthy
7f433a5e4d bgpd: Implement "sh bgp l2vpn evpn community|large-community X"
Full output here: https://github.com/FRRouting/frr/pull/5119

Signed-off-by: Lakshman Krishnamoorthy <lkrishnamoor@vmware.com>
2019-10-15 00:43:41 -07:00
Donatas Abraitis
597ca790b3
Merge pull request #5130 from donaldsharp/as_path_json_maximum_overdrive
bgpd: AS paths are uint32_t instead of integers
2019-10-15 09:14:16 +03:00
Donald Sharp
a51743300c bgpd: Be careful about displaying vni's as labels.
When a type 2/3 or 5 route is received, verified and the
resulting route generated is pushed into the appropriate vrf
the vni's associated with the route are also passed in.
This is showing up as a Remote label when you dump
the route in bgp:

BGP routing table entry for 0.0.0.0/0^M
Paths: (1 available, best #1, table third)
   Advertised to non peer-group peers:
   10.10.120.22
   42001 42005 42006 42055
     10.10.120.22 from 10.10.120.22 (10.10.255.193)
       Origin IGP, valid, external, bestpath-from-AS 42001, best
       Remote label: 62750
       AddPath ID: RX 0, TX 2
       Last update: Fri Oct 11 12:59:56 2019

The `Remote label: 62750` is the mpls label version of the
vni passed in.  This is meaningless and confusing to the end
user.  Do not display this information.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-14 21:17:16 -04:00
Donald Sharp
6b74234908 bgpd: Refactor bgp_path_info creation
We are doing the same thing in multiple places.  Refactor.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-14 21:17:16 -04:00
Donald Sharp
f4d7cb0e9b bgpd: Properly lock parent node for type4 routes
When creating a bgp_path_info for a type 4 route the pi->extra->parent
and the route node for the originating table were not being locked
properly.  This will prevent BGP from not properly cleaning up
the data structures on cleanup.

Possibly every one of the functions that we use to create the
new bgp_path_info's should use an abstracted version of this code,
but I am unsure at this point in time if a type 4 should use the same
or not.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-14 21:17:04 -04:00
Quentin Young
8fa7732f5d bgpd: raise default & max r/w quanta to 64
Vectored writes are more efficient with a higher quantum.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-10-14 18:41:53 +00:00
Quentin Young
093279cd02 bgpd: vector I/O
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-10-14 18:41:53 +00:00
Quentin Young
421a7dfc93 bgpd: move assert out of error case
bgp_process_packets has an assert to make sure an appropriate amount of
working space in the input buffer has been freed up for future reads.
However, this assert shouldn't be made when we have encountered an error
that's going to tear down the session, because in this case we may not
be able to process the full contents of the input buffer.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-10-14 18:41:07 +00:00
Quentin Young
7336ccbf0d bgpd: move assert out of error case
bgp_process_packets has an assert to make sure an appropriate amount of
working space in the input buffer has been freed up for future reads.
However, this assert shouldn't be made when we have encountered an error
that's going to tear down the session, because in this case we may not
be able to process the full contents of the input buffer.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-10-14 16:09:36 +00:00
Donald Sharp
5c117085f6
Merge pull request #5117 from ton31337/fix/remove_deprecation_for_ip_prefix
bgpd: Remove depracated `ip` prefix for as-path/extcommunity/large/co…
2019-10-14 08:14:05 -04:00
Russ White
adca8385ae
Merge pull request #5131 from donaldsharp/extra_clean
bgpd: When creating extra from stack ensure it is zero'ed out
2019-10-11 07:24:39 -04:00
Philippe Guibert
1276ce3833 bgpd: withdraw fib entry on appropriate table identifier
There are cases where the table identifier is set on a bgp entry, mainly
due to route-map, and associate fib entry needs to be removed.
This change encompasses also the route-map reconfiguration that leads to
removing the previous entry, whereas bgp update had been triggered (
this happens when software inbound reconfiguration is handled).

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2019-10-10 16:06:51 +02:00
Philippe Guibert
951745bdab bgpd: ability to export prefixes entries to a kernel table identifier
this table identifier can be used for policy routing. incoming entries
are locally exported to that local table identifier.
note that so that the user applies the new table identifier to all
entries, the user should flush local tables first.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2019-10-10 16:06:51 +02:00
Donald Sharp
ef1af5e530 bgpd: Ensure that struct prefix_rd rd is zero'ed out
We are passing around the created rd, Just make sure that
the data is zero'ed out.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-10 09:03:56 -04:00
Donald Sharp
b8694ef44c bgpd: When creating extra from stack ensure it is zero'ed out
BGP code assumes that the extra data is zero'ed out.  Ensure that we
are not leaving any situation that the data on the stack is actually all
0's when we pass it around as a pointer later.

Please note in issue #5025, Lou reported a different valgrind
issue, which is not the same issue:

==7313== Conditional jump or move depends on uninitialised value(s)
==7313== at 0x181F9F: subgroup_announce_check (bgp_route.c:1555)
==7313== by 0x1A112B: subgroup_announce_table (bgp_updgrp_adv.c:641)
==7313== by 0x1A1340: subgroup_announce_route (bgp_updgrp_adv.c:704)
==7313== by 0x1A13E3: subgroup_coalesce_timer (bgp_updgrp_adv.c:331)
==7313== by 0x4EBA615: thread_call (thread.c:1531)
==7313== by 0x4E8AC37: frr_run (libfrr.c:1052)
==7313== by 0x1429E0: main (bgp_main.c:486)
==7313==
==7313== Conditional jump or move depends on uninitialised value(s)
==7313== at 0x201C0E: rfapi_vty_out_vncinfo (rfapi_vty.c:429)
==7313== by 0x18D0D6: route_vty_out (bgp_route.c:7481)
==7313== by 0x18DD76: bgp_show_table (bgp_route.c:9365)
==7313== by 0x1930C4: bgp_show_table_rd (bgp_route.c:9471)
==7313== by 0x1932A3: bgp_show (bgp_route.c:9510)
==7313== by 0x193E68: show_ip_bgp_json (bgp_route.c:10284)
==7313== by 0x4E6D024: cmd_execute_command_real.isra.2 (command.c:1072)
==7313== by 0x4E6F51E: cmd_execute_command (command.c:1131)
==7313== by 0x4E6F686: cmd_execute (command.c:1285)
==7313== by 0x4EBF9C4: vty_command (vty.c:516)
==7313== by 0x4EBFB9F: vty_execute (vty.c:1285)
==7313== by 0x4EC250F: vtysh_read (vty.c:2119)
==7313==

that is causing the actual crash.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-10 09:03:56 -04:00
Donald Sharp
ca9e5ab316 bgpd: AS paths are uint32_t instead of integers
We have some JSON output that was displaying high order
AS path data as negative numbers:

{
 "paths":[
    {
      "aspath":{
        "string":"4200010118 4200010000 20473 1299",
        "segments":[
          {
            "type":"as-sequence",
            "list":[
              -94957178,
              -94957296,
              20473,
              1299
            ]
          }
        ],

Notice "String" output -vs- the list.

With fixed code:

  "paths":[
    {
      "aspath":{
        "string":"64539 4294967000 15096 6939 7922 7332 4249",
        "segments":[
          {
            "type":"as-sequence",
            "list":[
              64539,
              4294967000,
              15096,
              6939,
              7922,
              7332,
              4249
            ]
          }
        ],

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-09 16:10:44 -04:00
Donatas Abraitis
7b9a4750b8 bgpd: Remove depracated ip prefix for as-path/extcommunity/large/communities
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2019-10-08 08:39:55 +03:00
Lakshman Krishnamoorthy
c69e79f1d1 bgpd: Bug fix in "show bgp l2vpn evpn neighbors X.X.X.X routes json"
Fixed memory leak and  incorrect json output. Check the full output in the PR:
https://github.com/FRRouting/frr/pull/5118

Signed-off-by: Lakshman Krishnamoorthy <lkrishnamoor@vmware.com>
2019-10-07 14:33:29 -07:00
Donatas Abraitis
a0a87037ac bgpd: Use uint32_t for maximum-prefix
Currently we have unsigned long which is not what we defined
in CLI (1-4294967295).

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2019-10-04 15:46:21 +03:00
Donald Sharp
3835984f1c bgpd: bgp pointer may be null
The bgp pointer may not be actually found.  The debug
message that was using it could get the same value
another way.  Convert over

Fixes Coverity Scan Issue:

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-03 08:57:55 -04:00
Donald Sharp
c17140fd7a bgpd: Show to compiler that uint64_t -> uint32_t is ok here
We only have a uint32_t value here but clippy is wise and
gives us more data than we need. Tell the compiler we can
throw some stuff away.

This was found by inspecting CI results.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-10-03 08:55:29 -04:00
Donatas Abraitis
d091d9adcd bgpd: Keep the session down if maximum-prefix is reached
Under high load instances with hundreds of thousands of prefixes this
could result in very unstable systems.

When maximum-prefix is set, but restart timer is not set then the session
flaps between Idle(Pfx) -> Established -> Idle(Pfx) states.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2019-10-03 09:31:50 +03:00
Renato Westphal
698603ce6d
Merge pull request #5085 from qlyoung/strip-trailing-whitespace-2019
*: strip trailing whitespace
2019-09-30 22:53:56 -03:00
Russ White
44cde8a39f
Merge pull request #5011 from karamalla0406/evpn_cli_json
bgpd: Fixed 'show bgp l2vpn evpn json' to display all routes
2019-09-30 18:30:28 -04:00
Quentin Young
c258527bd2 *: strip trailing whitespace
Some of it has snuck by CI

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-09-30 16:44:43 +00:00
Russ White
9898a2fb34
Merge pull request #5009 from donaldsharp/interface_deletion
lib, zebra: Allow for interface deletion when kernel event happens
2019-09-30 07:46:19 -04:00
Lakshman Krishnamoorthy
dc387b0fea bgpd: Fixing "show bgp l2vpn evpn neighbors x.x.x.x advertised-routes json
Display output from adj_out instead of the rib table.

Also fixes crash for the json output. RCA: prefix is written to json object
using inet_ntop. But, this api returns null buffer for AF_EVPN address family
(it works only for AF_INET and AF_INET6).  This null buffer is then deref'd
by json-object-to string api.

Full output shown in PR: https://github.com/FRRouting/frr/pull/5078
Crash issue: https://github.com/FRRouting/frr/issues/5010

Signed-off-by: Lakshman Krishnamoorthy <lkrishnamoor@vmware.com>
2019-09-27 12:04:13 -07:00
Lakshman Krishnamoorthy
44c6974748 bgpd: Adding new bgp evpn cli's for ip-prefix lookup
Implement CLIs for the following, to filter for a prefix within
evpn type 5 route
1) show bgp l2vpn evpn A.B.C.D
2) show bgp l2vpn evpn A.B.C.D json
3) show bgp l2vpn evpn A.B.C.D/M
4) show bgp l2vpn evpn A.B.C.D/M json
5) show bgp l2vpn evpn X:X::X:X
6) show bgp l2vpn evpn X:X::X:X json
7) show bgp l2vpn evpn X:X::X:X/M
8) show bgp l2vpn evpn X:X::X:X/M json

Sample output provided here: https://github.com/FRRouting/frr/pull/4850

Signed-off-by: Lakshman Krishnamoorthy <lkrishnamoor@vmware.com>
2019-09-27 10:58:46 -07:00
Donald Sharp
cb70bd5638
Merge pull request #5067 from ton31337/fix/no_aggregate-address_command_for_route-map
bgpd: Accept no aggregate-address <IP> route-map <RMAP> commands
2019-09-26 17:40:41 -04:00
Donald Sharp
961f406493
Merge pull request #5070 from ton31337/fix/aggregate-address_for_ipv6_summary-only_missreading
bgpd: aggregate-address X:X::X:X/M summary-only was missreading config
2019-09-26 17:39:09 -04:00