Commit Graph

17008 Commits

Author SHA1 Message Date
Mark Stapp
f4574b49af
Merge pull request #4902 from donaldsharp/more_bgp_test_cleanup
tests: Ensure topotests are actually waiting appropriately for peers …
2019-08-29 11:25:52 -04:00
Donald Sharp
955e2c3ec5 tests: Ensure topotests are actually waiting appropriately for peers to come up
The FRR bgp topotests are employing a luCommand that looks for bgp peering
to be up on the first router with a `wait` sub-command.  Please note that
a variety of tests are using this.  This wait command has a variety of time
outs being used `30`, `90`, and `300`.  BGP peering with how we compile
it have very long timers and 30( and possibly 90) seconds is clearly not enough when
we are waiting, given the nature of our test beds.  Additionally we were employing a model
where once the first summary command succeeded we automatically assumed that all
subsuquent summary commands( to look at other routers ) would not need to
possibly wait.  This is insufficient in that if I have multiple peerings in
multiple vrf's there is no guarantee that one router peers being up will
be sufficient information to know that all the other routers peers are up.

Modify the test cases to be a bit more conformant about this and to
allow peer checks to actually wait a reasonable amount of time for
all peers to have a chance to come up.

Signed-off-by: Donald Sharp <sharpdc@cumulusnetworks.com>
2019-08-29 09:33:47 -04:00
Donatas Abraitis
234166648f
Merge pull request #4891 from donaldsharp/bgp_keepalives
bgpd: Shut off keepalives as soon as we shutdown a peer
2019-08-29 16:22:04 +03:00
Sri Mohana Singamsetty
614338c6ac
Merge pull request #4847 from vivek-cumulus/evpn-route-import-fix
bgpd: Ensure correct checks for EVPN route import
2019-08-29 05:50:23 -07:00
Donatas Abraitis
cf3b331d45
Merge pull request #4896 from donaldsharp/docker_dev_build
tests: Modify docker build for local to have dev build
2019-08-29 10:15:52 +03:00
Donatas Abraitis
bfef4be6a8
Merge pull request #4871 from vishaldhingra/ipv4_linklocal
zebra: Added a few more information in route_entry while dumping
2019-08-29 08:39:52 +03:00
Martin Winter
4298dfd12e
Merge pull request #4852 from ashish12pant/fix_log
tests: Enhance execution logs in topojson
2019-08-29 04:35:37 +02:00
Mark Stapp
1cd89e8370
Merge pull request #4849 from sworleys/Label-Append-Resolve_2
zebra: Append rparent labels when resolving nexthop
2019-08-28 15:52:27 -04:00
Donald Sharp
1b7412c866 tests: Modify docker build for local to have dev build
Allow a local build of a frr docker container to be built with
`--enable-dev-build`.  This allows better decodes of symbols
which could be useful when you are trying to fix something
that is broken inside the docker container.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-28 15:50:23 -04:00
Mark Stapp
f6e1f1918d
Merge pull request #4894 from donaldsharp/arm_wrestling
lib: Stop arm crash on shutdown
2019-08-28 14:30:55 -04:00
Donald Sharp
11375c5274 lib: Stop arm crash on shutdown
Arm platforms are crashing in our topotests with this callstack;

50	../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
[Current thread is 1 (Thread 0xffffabb591d0 (LWP 18947))]
(gdb) bt
    file=file@entry=0xaaaadfed1e48 "lib/memory.c", line=line@entry=80,
    function=function@entry=0xaaaadfed1db8 <__func__.10514> "mt_count_free") at lib/log.c:837
(gdb)

So we are crashing because we are attempting to free a mtype that has no allocations
associated with it.

I added this debug code:
@@ -227,7 +230,9 @@ static void rcu_bump(void)
     struct rcu_next *rn;

     rn = XMALLOC(MTYPE_RCU_NEXT, sizeof(*rn));
-
+    zlog_debug("RCU_BUMP");
+    mtype_dump(MTYPE_RCU_THREAD);
+    mtype_dump(MTYPE_RCU_NEXT);
     /* note: each RCUA_NEXT item corresponds to exactly one seqno bump.
      * This means we don't need to communicate which seqno is which
      * RCUA_NEXT, since we really don't care.

and added a mtype_dump function:
+void mtype_dump(struct memtype *mt)
+{
+    zlog_debug("%s: %d", mt->name, (int)mt->n_alloc);
+}

Which resulted in this output:

2019/08/28 15:41:11 BGP: RCU_BUMP
2019/08/28 15:41:11 BGP: RCU thread: 3
2019/08/28 15:41:11 BGP: RCU thread: 3

If we look at the defintion of the two static memory types:

DEFINE_MTYPE_STATIC(LIB, RCU_THREAD,    "RCU thread")
DEFINE_MTYPE_STATIC(LIB, RCU_NEXT,      "RCU sequence barrier")

I would have expected the output to be:
RCU_BUMP
RCU thread: 3
RCU sequence barrier: X

instead.

As a thought experiment I reduced the number of static memory types
to 1 in the file and the crash stopped happening.

I suspect we have a systematic error on arm in lib/memory.h
due to the asm code.  I am going to leave that alone for the
moment ( and leave the crash issue open ), but see if we
can get this code change into the system so that our CI
system becomes happy again.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-28 12:09:41 -04:00
Mark Stapp
8f910d6c3f
Merge pull request #4890 from donaldsharp/solaris_warn
*: Start process of possibly deprecating Solaris
2019-08-28 10:51:36 -04:00
Philippe Guibert
5a0bdc782c zebra: nht resolution default configurable per vrf
even if vty commands were available, the default resolution command was
working only for the first vrf configured. others were ignored. Also,
for nexthop, resolution was working for all vrfs, and not the specific
one.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2019-08-28 16:19:34 +02:00
Marcel Röthke
7c8edcc9f1 bgpd: update rpki documentation
Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
2019-08-28 16:17:31 +02:00
Donatas Abraitis
ac2201bbcd doc: Add documentation for aggregate-address with route-map support
Additionally remove trailling/unnecesarry whitespaces and align code
snippets correctly.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2019-08-28 16:45:44 +03:00
Donatas Abraitis
5fba22485b topotests: Add test for checking if route-map is applied for aggregate-address
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2019-08-28 16:45:44 +03:00
Donatas Abraitis
20894f50bd bgpd: Apply route-map for aggregate-address command
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2019-08-28 16:45:21 +03:00
Donald Sharp
183a580a40
Merge pull request #4884 from ddutt/master
bgpd: Eliminate all incorrect formulations of afi/safi in JSON
2019-08-27 18:43:45 -04:00
Donald Sharp
0a6469e55e bgpd: Shut off keepalives as soon as we shutdown a peer
We have this crash:

2019-08-18T07:58:44.831656-04:00 rch2-140-fwK2b bgpd[1791]: %NOTIFICATION: sent to neighbor 10.73.248.8 4/0 (Hold Timer Expired) 0 bytes
2019-08-18T07:58:44.832164-04:00 rch2-140-fwK2b bgpd[1791]: Assertion `!((peer->thread_flags) & ((1 << 0)))' failed in file bgpd.c, line 2173, function peer_delete
2019-08-18T07:58:44.832548-04:00 rch2-140-fwK2b bgpd[1791]: Backtrace for 11 stack frames:
2019-08-18T07:58:44.832942-04:00 rch2-140-fwK2b bgpd[1791]: [bt 0] /usr/lib/libfrr.so.0(zlog_backtrace+0x3a) [0x7f5503c7c31a]
2019-08-18T07:58:44.833311-04:00 rch2-140-fwK2b bgpd[1791]: [bt 1] /usr/lib/libfrr.so.0(_zlog_assert_failed+0x61) [0x7f5503c7c891]
2019-08-18T07:58:44.833684-04:00 rch2-140-fwK2b bgpd[1791]: [bt 2] /usr/lib/frr/bgpd(peer_delete+0x4d5) [0x1432ceea15]
2019-08-18T07:58:44.834095-04:00 rch2-140-fwK2b bgpd[1791]: [bt 3] /usr/lib/frr/bgpd(+0x430e9) [0x1432cfc0e9]
2019-08-18T07:58:44.834479-04:00 rch2-140-fwK2b bgpd[1791]: [bt 4] /usr/lib/frr/bgpd(bgp_event_update+0x121) [0x1432cfe1c1]
2019-08-18T07:58:44.834852-04:00 rch2-140-fwK2b bgpd[1791]: [bt 5] /usr/lib/frr/bgpd(+0x453f1) [0x1432cfe3f1]
2019-08-18T07:58:44.835388-04:00 rch2-140-fwK2b bgpd[1791]: [bt 6] /usr/lib/libfrr.so.0(thread_call+0x60) [0x7f5503c9e3c0]
2019-08-18T07:58:44.835829-04:00 rch2-140-fwK2b bgpd[1791]: [bt 7] /usr/lib/libfrr.so.0(frr_run+0xb8) [0x7f5503c79de8]
2019-08-18T07:58:44.836292-04:00 rch2-140-fwK2b bgpd[1791]: [bt 8] /usr/lib/frr/bgpd(main+0x229) [0x1432ce4a69]
2019-08-18T07:58:44.836729-04:00 rch2-140-fwK2b bgpd[1791]: [bt 9] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5) [0x7f550271bb45]
2019-08-18T07:58:44.837198-04:00 rch2-140-fwK2b bgpd[1791]: [bt 10] /usr/lib/frr/bgpd(+0x2cefc) [0x1432ce5efc]
2019-08-18T07:58:44.837670-04:00 rch2-140-fwK2b bgpd[1791]: Current thread function (bgp_holdtime_timer), scheduled from file bgp_fsm.c, line 380

This is the code:
	bgp_reads_off(peer);
	bgp_writes_off(peer);
	assert(!CHECK_FLAG(peer->thread_flags, PEER_THREAD_WRITES_ON));
	assert(!CHECK_FLAG(peer->thread_flags, PEER_THREAD_READS_ON));

The line crashing is the first assert.  We know in bgp_writes_off we unset this flag:

void bgp_writes_off(struct peer *peer)
{
        struct frr_pthread *fpt = bgp_pth_io;
        assert(fpt->running);

        thread_cancel_async(fpt->master, &peer->t_write, NULL);
        THREAD_OFF(peer->t_generate_updgrp_packets);

        UNSET_FLAG(peer->thread_flags, PEER_THREAD_WRITES_ON);
}

We also know that the keepalives are not being turned off until we call
bgp_fsm_change_status(peer, Deleted);

later in the function.  We know that the keepalive pthread will
write to individual peers and issue a bgp_write_on(), which sets
this flag.

Modify the code base so that we explicitly turn off the keepalives
immediately before the turning of writes off.

Ticket: CM-26119
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-27 16:12:07 -04:00
Donald Sharp
fd00c97cfa *: Start process of possibly deprecating Solaris
The FRR community has run into an issue where keeping up our
CI system to work with solaris has become a fairly large burden.
We have also sent emails and asked around and have not found
anyone standing up saying that they are using Solaris.

Given the fact that we do not have any comprehensive testing
being done w/ solaris and the fact that we are getting a steady
stream of new features that will never work on solaris and
we cannot find anyone to say that they are using it.  Let's
start the drawn out process of deprecating the code.

If in the mean-time someone comes forward with the fact that
they are using it we can then not deprecate it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-27 14:55:48 -04:00
Chirag Shah
df070e6f5e bgpd: evpn convey svi_ip to zebra post vni add
Problem:
With advertise_svi_ip knob enabled per vni.
Post vni flap, svi MAC-IP route are not originated.

Fix:
When a vni is flapped, upon re-add
send advetise_svi_ip knob to zebra.

Workaround:
re-configure advertise-svi-ip under l2vpn/evpn.

Ticket:CM-26001
Reviewed By:CCR-9118
Testing Done:

With advertise-svi-ip enabled under l2vpn/evpn
in bgp default instance.
Validated vni del/create post ifdown vxlan device
followed by ifup vxlan device.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2019-08-27 08:49:10 -07:00
Chirag Shah
b90d4580f0 bgpd: fix evpn ecommunity auto rts
Evpn extended communities like auto rts (import/export) should
check if its present in list before adding it, to avoid duplicate
addition.
L3vni_add callback from zebra to bgp may see updates to vnis.
The auto import/export rt derivation may call multiple times.

Testing Done:

Before:
TORC11# show bgp l2vpn evpn vni 4001
VNI: 4001 (known to the kernel)
  Type: L3
  Tenant VRF: vrf1
  RD: 45.0.2.2:3
  ...
  Import Route Target:
    5546:4001
    5546:4001
  Export Route Target:
    5546:4001
    5546:4001

After:
VNI: 4001 (known to the kernel)
  Type: L3
  Tenant VRF: vrf1
  RD: 45.0.2.2:3
  ...
 Import Route Target:
    5546:4001
  Export Route Target:
    5546:4001

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2019-08-27 08:48:50 -07:00
Emanuele Di Pascale
75b669156f isisd: check MTU when configuring circuit
as part of the 'ip router isis TAG' command we were not validating
the MTU of the interface against the minimum LSP MTU of the area.
This could cause an assertion when the circuit is created in the
APPLY phase.

Fixes issue #4825

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2019-08-27 16:39:43 +02:00
Dinesh G Dutt
5cb5f4d04d bgpd: Eliminate all incorrect formulations of afi/safi in JSON
In a number of places, the JSON output had invalid key names for
AFI/SAFI. For example, the key name in JSON was "IPv4 Unicast" which
is invalid as a JSON Key name. Many JSON tools such as those used in
Ansible, jq etc. all fail to parse the output in these scenarios. The
valid name is ipv4Unicast. There's already a routine afi_safi_json()
defined to handle this change, but it was not consistently called.
The non-JSON version was called afi_safi_print() and it merely returned
the CLI version of the string, didn't print anything.

This patch deals with this issue by:
   - Renaming afi_safi_print to get_afi_safi_str()
   - get_afi_safi_str takes an additional param, for_json which if true
     will return the JSON-valid string
   - Renaming afi_safi_json to get_afi_safi_json_str()
   - Creating a new routine get_afi_safi_vty_str() for printing to vty
   - Consistently using get_afi_safi_str() with the appropriate for_json
     value

Signed-off-by: Dinesh G Dutt <5016467+ddutt@users.noreply.github.com>
2019-08-27 14:05:39 +00:00
Satheesh Kumar K
5e530de4d8 pimd: sh config is showing detail debug, though not configured
Original Idea is to display normal & detailed debugs when detailed
debug alone is configured. because of this "sh debugs" are showing
wrong Information, because same macro is used to disply the configured
debugs.

that means even if Normal debug is configured, detailed macro returns
TRUE. To avoid this ambiguity check whetehr detailed debug is configured
or not during dumping configured debugs. In all other places using
old macro.

Signed-off-by: Satheesh Kumar K <sathk@cumulusnetworks.com>
2019-08-26 23:38:26 -07:00
Donald Sharp
dd7c916952
Merge pull request #4880 from ddutt/master
lib: Make if_lookup_by_index understand if VRF is backed by netns or not
2019-08-26 14:08:08 -04:00
Donatas Abraitis
e0a46f931e
Merge pull request #4881 from donaldsharp/aspath_prepend
bgpd: Add 'no set as-path prepend last-as X' command
2019-08-26 19:19:38 +03:00
Donald Sharp
eb1f303d3e bgpd: Update doc for some as-path route-map commands
Update the documentation for some as-path route-map commands.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-26 09:56:53 -04:00
Donald Sharp
9131e6e818 bgpd: Add 'no set as-path prepend last-as X' command
The `set as-path prepend last-as X` command had no, 'no' form
of the command.  Add this into the cli.

Testing:
!
route-map BLARBLE permit 10
 set as-path prepend last-as 3
!
!
router bgp 9999
 neighbor 10.50.12.118 remote-as external
 neighbor 10.50.12.118 ebgp-multihop 30
 !
 address-family ipv4 unicast
  neighbor 10.50.12.118 route-map BLARBLE in
 !
!

eva# show bgp ipv4 uni 4.4.4.4
BGP routing table entry for 4.4.4.4/32
Paths: (1 available, best #1, table default)
  Advertised to non peer-group peers:
  10.50.12.118
  999 999 999 999
    10.50.12.118 from 10.50.12.118 (10.50.12.118)
      Origin incomplete, metric 0, valid, external, best (First path received)
      Last update: Mon Aug 26 09:47:17 2019

eva# conf
eva(config)# route-map BLARBLE permit 10
eva(config-route-map)# no set as-path prepend last-as 3
eva(config-route-map)# end
eva# clear bgp ipv4 uni *
eva# show bgp ipv4 uni 4.4.4.4
BGP routing table entry for 4.4.4.4/32
Paths: (1 available, best #1, table default)
  Advertised to non peer-group peers:
  10.50.12.118
  999
    10.50.12.118 from 10.50.12.118 (10.50.12.118)
      Origin incomplete, metric 0, valid, external, best (First path received)
      Last update: Mon Aug 26 09:48:31 2019

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-26 09:49:18 -04:00
Donald Sharp
dec2a1469f
Merge pull request #4812 from pogojotz/fix-destination-multi-use
zebra: Do not use connection dest for bcast
2019-08-26 09:25:17 -04:00
Marcel Röthke
a5d254243a bgpd: cleanup rtrlib includes in rpki module
Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
2019-08-26 15:22:10 +02:00
Dinesh G Dutt
47b474b57e lib: Make if_lookup_by_index understand if VRF is backed by netns or not
FRR has two implementations of VRF, one backed by netns and the other by
the proper VRF implementation in the Linux kernel. In certain places, the
code assumes that a VRF is netns and so lookups fail. One example of this
is in IPv6 RA code. This causes functionality such as Unnumbered BGP to
fail. To fix this, this patch makes if_lookup_by_index handle the
behavior based on the backend, similar to if_get_by_index. For the two
places in if.c that were calling if_lookup_by_index to be specific to
the VRF, I renamed the existing code, if_lookup_by_ifindex and made it a
static function that is never exposed or called by any routine outside of
if.c.

Signed-off-by: Dinesh G Dutt <5016467+ddutt@users.noreply.github.com>
2019-08-26 12:38:28 +00:00
Donald Sharp
9c24774d7a
Merge pull request #4795 from opensourcerouting/assorted-fixes
Minor assorted fixes
2019-08-26 08:32:31 -04:00
Mark Stapp
7c6824fdbf
Merge pull request #4879 from qlyoung/fix-vtysh-of-crashy
vtysh: fix rare crash(es)
2019-08-26 08:30:10 -04:00
Donald Sharp
9b827793e1
Merge pull request #4870 from opensourcerouting/isis-bfd-v6
isisd: add support for IPv6 BFD peers
2019-08-26 08:26:53 -04:00
Donatas Abraitis
3eb0d26717
Merge pull request #4821 from vishaldhingra/lcomm_json
bgpd : Ambiguous command: show bgp large-community-list 1
2019-08-26 11:23:30 +03:00
vdhingra
960b69b9df bgpd : Ambiguous command: show bgp large-community-list 1
When user wants to dump individual large-community-list with the name
then bgp throws an error. It is due to command to dump the bgp RIB routes
having a particular large-community-list values. To segregate both the
commands this fix has added the detail keyword in the below command.
show bgp large-community-list <(1-500)|WORD> detail
The same code change is applicable for community-list also.

Signed-off-by: vishaldhingra<vdhingra@vmware.com>
2019-08-25 23:01:02 -07:00
Donatas Abraitis
5d4324440d
Merge pull request #4815 from NaveenThanikachalam/603_bgp_vty
bgpd: Large-communities CLI accepts configurations sans attributes.
2019-08-24 22:52:08 +03:00
Sri Mohana Singamsetty
14a45ee728
Merge pull request #4878 from donaldsharp/2_chars_1_strncmp
bgpd: Allow shortened input for `show bgp l2vpn evpn route type e|p`
2019-08-23 22:32:52 -07:00
Quentin Young
52038aca4e vtysh: fix rare crash(es)
Couple code paths end up trying to dereference vty->of which can be null
in one special case.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-08-23 20:06:26 +00:00
Donald Sharp
dde42c9b95 bgpd: Allow shortened input for show bgp l2vpn evpn route type e|p
The `show bgp l2vpn evpn route type <es|prefix>` commands
only accepted 2 letters.  You could not type `show bgp l2vpn evpn route type e`
or `show bgp l2vpn evpn route type p` although both are technically legal
since nothing overlaps with them.

Ticket: CM-25988
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-08-23 15:44:32 -04:00
Mark Stapp
931fa60c09 zebra: Use dataplane for evpn neighbor changes
Move neighbor programming to the dataplane; remove
old apis; remove some ifdef'd use of direct netlink
code points, using neutral values outside of the netlink-
specific files.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2019-08-23 14:10:41 -04:00
Mark Stapp
a9e08ebce1 lib: use const in prefix_mac2str
Use const for mac pointer.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2019-08-23 10:09:38 -04:00
Mark Stapp
f2412b2d19 zebra: begin evpn neighbor install via dataplane
Initial work to move evpn neighbor programming to the dataplane
subsystem.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2019-08-23 10:09:38 -04:00
vdhingra
d4c7ac0105 zebra: Added a few more information in route_entry while dumping
re->nexthop_num and re->nexthop_active_num are calculated while rib
processing. Also It helps in encoding the ZAPI message.
It's good to dump these parameters also, when the system is in
abnormal state.

Signed-off-by: vishaldhingra<vdhingra@vmware.com>
2019-08-23 06:02:53 -07:00
Sri Mohana Singamsetty
401ba2adf9
Merge pull request #4864 from donaldsharp/nullzero
tests: Add a couple simple Null0 spelling tests
2019-08-22 16:53:41 -07:00
Renato Westphal
e38f2209b8
Merge pull request #4868 from mjstapp/fix_stream_resize_api
lib: remove deprecated stream_resize api
2019-08-22 19:39:59 -03:00
Renato Westphal
e782cca726 isisd: add support for IPv6 BFD peers
Make isisd create BFD sessions over IPv6 when IS-IS is configured
for IPv6 operation only.

When IS-IS is enabled for both IPv4 and IPv6 on a given interface,
prefer creating a BFD session over IPv6 to avoid having two BFD
sessions protecting the same IS-IS adjacency.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-08-22 12:52:44 -03:00
Marcel Röthke
8add171952 bgpd: automatically disable rpki when the last cache is removed instead of erroring out
Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
2019-08-22 17:39:00 +02:00
Marcel Röthke
dd783f3e1d bgpd: deprecate rpki initial sync timeout commands
Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
2019-08-22 17:31:24 +02:00