]> git.puffer.fish Git - mirror/frr.git/log
mirror/frr.git
5 years agobgpd: IPv6 session flapping with MP_REACH_NLRI and 0.0.0.0 in NEXT_HOP attribute 4555/head
nikos [Thu, 9 May 2019 07:02:16 +0000 (00:02 -0700)]
bgpd: IPv6 session flapping with MP_REACH_NLRI and 0.0.0.0 in NEXT_HOP attribute

This is causing interop issues with vendors. According to the RFC,
receiver should ignore the NEXT_HOP attribute with MP_REACH_NLRI
present.

Signed-off-by: nikos <ntriantafillis@gmail.com>
5 years agobgpd: IPv6 session flapping with MP_REACH_NLRI and 0.0.0.0 in NEXT_HOP attribute
nikos [Sat, 4 May 2019 06:22:30 +0000 (23:22 -0700)]
bgpd: IPv6 session flapping with MP_REACH_NLRI and 0.0.0.0 in NEXT_HOP attribute

This is causing interop issues with vendors. According to the RFC,
receiver should ignore the NEXT_HOP attribute with MP_REACH_NLRI
present.

Signed-off-by: nikos ntriantafillis@gmail.com
5 years agoMerge pull request #4540 from opensourcerouting/7.0/watchfrr-sd-timeout
Donald Sharp [Tue, 18 Jun 2019 00:47:06 +0000 (20:47 -0400)]
Merge pull request #4540 from opensourcerouting/7.0/watchfrr-sd-timeout

[7.0] tools: retain sanity when reloading under systemd

5 years agotools: retain sanity when reloading under systemd 4540/head
David Lamparter [Sun, 9 Jun 2019 23:35:04 +0000 (01:35 +0200)]
tools: retain sanity when reloading under systemd

Without this, we end up restarting watchfrr with the systemd watchdog
non-functional & tripped a bit later.  Also, if watchfrr is in the
"control" cgroup, systemd 232 will kill it.  (241 apparently doesn't.
Can't find anything about this in systemd's ChangeLog though.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 9c251d376ad8e604c25767b32c2816e9ae75a738)

5 years agoMerge pull request #4507 from opensourcerouting/fix-outdated-candidate-7.0
Donald Sharp [Thu, 13 Jun 2019 10:01:41 +0000 (06:01 -0400)]
Merge pull request #4507 from opensourcerouting/fix-outdated-candidate-7.0

[7.0] lib: fix outdated candidate configuration issue

5 years agolib: fix outdated candidate configuration issue 4507/head
Renato Westphal [Mon, 27 May 2019 22:48:13 +0000 (19:48 -0300)]
lib: fix outdated candidate configuration issue

Even when using the classic CLI mode (i.e. when --tcli is not
used), the northbound code still uses vty->candidate_config
to perform configuration changes. From the perspective of the
user, the running configuration is being edited directly, but
under the hood the northbound layer does a full configuration
transaction for each command.  When the running configuration is
edited by a northbound client other than the CLI (e.g. kernel,
gRPC), vty->candidate_config might become outdated, and this can
lead to lots of weird problems. To fix this, always regenerate
vty->candidate_config before each configuration command when
using the classic CLI mode. When using the transactional CLI,
the user needs to update the candidate manually using the "update"
command, otherwise the "commit" command will fail with this error:
"% Candidate configuration needs to be updated before commit".

Fixes some problems reported by Don after moving an interface from
one VRF to another one while zebra is running.

Reported-by: Don Slice <dslice@cumulusnetworks.com>
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
5 years ago7.0 isisd: The RFC states that v6 addresses are limited to 16 in a hello … (#4476)
David Lamparter [Thu, 6 Jun 2019 17:44:20 +0000 (19:44 +0200)]
7.0 isisd: The RFC states that v6 addresses are limited to 16 in a hello … (#4476)

7.0 isisd: The RFC states that v6 addresses are limited to 16 in a hello …

5 years agoisisd: The RFC states that v6 addresses are limited to 16 in a hello packet 4476/head
Donald Sharp [Wed, 5 Jun 2019 01:15:43 +0000 (21:15 -0400)]
isisd: The RFC states that v6 addresses are limited to 16 in a hello packet

The RFC states we can send only up to 16 v6 addresses in a hello packet
and cannot send sub tlv's of that type.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
5 years agoMerge pull request #4463 from donaldsharp/7.0_bfd_access_list
Rafael Zalamena [Wed, 5 Jun 2019 14:38:11 +0000 (11:38 -0300)]
Merge pull request #4463 from donaldsharp/7.0_bfd_access_list

7.0 bfdd: Modify bfdd to quietly accept access-lists

5 years agobfdd: Modify bfdd to quietly accept access-lists 4463/head
Donald Sharp [Wed, 5 Jun 2019 01:38:11 +0000 (21:38 -0400)]
bfdd: Modify bfdd to quietly accept access-lists

The `access-list ...` command was causing bfdd to return
'unknown commands'.  Make bfdd at least cognizant of
access-lists enough to not create strange error messages

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
5 years agoMerge pull request #4424 from ton31337/feature/show_fqdn_in_show_ip_bgp_7.0
Donald Sharp [Thu, 30 May 2019 15:21:35 +0000 (11:21 -0400)]
Merge pull request #4424 from ton31337/feature/show_fqdn_in_show_ip_bgp_7.0

bgpd: [7.0] Show FQDN in `show [ip] bgp` output

5 years agobgpd: Show FQDN in `show [ip] bgp` output 4424/head
Donatas Abraitis [Mon, 20 May 2019 13:43:01 +0000 (16:43 +0300)]
bgpd: Show FQDN in `show [ip] bgp` output

We already show this information in `show [ip] bgp <prefix`, thus why don't
show it in global output. It's very handy when using at scale and to see
the whole picture instead of resolving neighbor manually.

It will show FQDN only if `bgp default show-hostname` is toggled.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
5 years agoMerge pull request #4419 from ton31337/stable/7.0
Donald Sharp [Thu, 30 May 2019 11:42:55 +0000 (07:42 -0400)]
Merge pull request #4419 from ton31337/stable/7.0

plist: [7.0] Delete prefix-list by sequence number

5 years agoplist: Delete prefix-list by sequence number 4419/head
Donatas Abraitis [Fri, 24 May 2019 06:22:09 +0000 (09:22 +0300)]
plist: Delete prefix-list by sequence number

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
5 years agoMerge pull request #4405 from opensourcerouting/snap-fix-7.0
Donald Sharp [Wed, 29 May 2019 01:05:44 +0000 (21:05 -0400)]
Merge pull request #4405 from opensourcerouting/snap-fix-7.0

[7.0] snapcraft: Add libdb5.3 dependency

5 years agosnapcraft: Add libdb5.3 dependency 4405/head
Martin Winter [Tue, 28 May 2019 22:56:24 +0000 (00:56 +0200)]
snapcraft: Add libdb5.3 dependency

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
5 years agoMerge pull request #4334 from mjstapp/fix_vrf_lsps_7_0
Donald Sharp [Tue, 14 May 2019 17:36:11 +0000 (13:36 -0400)]
Merge pull request #4334 from mjstapp/fix_vrf_lsps_7_0

zebra: [7.0] remove vrf LSPs when vrf is deleted

5 years agozebra: [7.0] remove vrf LSPs when vrf is deleted 4334/head
Mark Stapp [Tue, 14 May 2019 15:28:30 +0000 (11:28 -0400)]
zebra: [7.0] remove vrf LSPs when vrf is deleted

Try to remove any LSPs associated with a vrf when the vrf is
deleted. The vrf code was calling a helpful zebra_mpls api,
but that api was basically a no-op for vrfs other than
the default.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
5 years agoFRRouting Releast 7.0.1 frr-7.0.1
Martin Winter [Mon, 13 May 2019 11:49:49 +0000 (04:49 -0700)]
FRRouting Releast 7.0.1

Changes since 7.0:
- bgp:
-   Don't send Updates with BGP Max-Prefix Overflow
-   Make sure `next-hop-self all` backward compatible with force
-   Fix as-path validation in "show bgp regexp"
-   Fix interface-based peers to override peergroups
-   Fix removing private AS numbers if local-as is used
-   Fix show bgp labeled_unicast
-   Add command to lookup prefixes in rpki table
-   Fix peer count in "show bgp ipv6 summary"
-   Add missing ipv6 only peer flag action
-   Fix address family output in "show bgp [ipv4|ipv6] neighbors"
-   Add missing checks for vpnv6 nexthops
-   Fix nexthop for ipv6 vpn case
- rip: Fix removal of passive interfaces
- ospf:
-   Fix json timer output
-   Fix milliseconds in json output
- bfd:
-   Fix source port according RFC 5881, Sec 4
-   Fix IPv6 link-local peer removal
-   Fix interface clean up when deleting interface
- pim: Fix interface clean up when deleting interface
- nhrp: Fix interface clean up when deleting interface
- lib:
-   Workaround to get FRR building with libyang 0.x and 1.x
-   Fix in priv handling
-   Make priv elevation thread-safe
- zebra:
-   Pseudowire event recovery
-   Fix race condition in label manager
-   Fix system routes selection and next-hop tracking
-   Set connected route metric based on devaddr metric
-   Display metric for connected routes
-   Add selected fib details to json output
-   Always use replace if installing new route
- watchfrr: Silently ignore declare failures (for backward compatibility)
- RPM packages: Switch to new init script

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
5 years agoMerge pull request #4271 from opensourcerouting/libyang-compat-7.0
Lou Berger [Tue, 7 May 2019 15:07:56 +0000 (11:07 -0400)]
Merge pull request #4271 from opensourcerouting/libyang-compat-7.0

[7.0] lib, yang: disable libyang custom user types temporarily

5 years agolib, yang: disable libyang custom user types temporarily 4271/head
Renato Westphal [Mon, 6 May 2019 18:57:02 +0000 (15:57 -0300)]
lib, yang: disable libyang custom user types temporarily

libyang 1.0 introduced a few changes in the user types API, and
these changes made FRR incompatible with libyang 1.x. In order to
ease our migration from libyang 0.x to libyang 1.x, let's disable
our libyang custom user types temporarily so that FRR can work
with both libyang 0.x and libyang 1.x. This should be especially
helpful to the CI systems during the transition. Once the migration
to libyang 1.x is complete, this commit will be reverted.

Disabling our libyang custom user types should have only
minimal performance implications when processing configuration
transactions. The user types infrastructure should be more important
in the future to perform canonization of YANG data values when
necessary.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
6 years agoMerge pull request #4210 from ton31337/feature/do_not_send_update_with_prefix_overflo...
Quentin Young [Mon, 29 Apr 2019 17:01:04 +0000 (13:01 -0400)]
Merge pull request #4210 from ton31337/feature/do_not_send_update_with_prefix_overflow_7.0

bgpd: [7.0] Do not send UPDATE message with maximum-prefix

6 years agoMerge pull request #4212 from ton31337/feature/all_alias_for_force_next_self_host_7.0
Quentin Young [Mon, 29 Apr 2019 16:56:50 +0000 (12:56 -0400)]
Merge pull request #4212 from ton31337/feature/all_alias_for_force_next_self_host_7.0

bgpd: [7.0] Make sure `next-hop-self all` backward compatible with force

6 years agobgpd: Make sure `next-hop-self all` backward compatible with force 4212/head
Donatas Abraitis [Thu, 25 Apr 2019 13:39:49 +0000 (16:39 +0300)]
bgpd: Make sure `next-hop-self all` backward compatible with force

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
6 years agobgpd: Do not send UPDATE message with maximum-prefix 4210/head
Donatas Abraitis [Mon, 15 Apr 2019 20:53:20 +0000 (23:53 +0300)]
bgpd: Do not send UPDATE message with maximum-prefix

When using maximum-prefix and count is overflow BGP
sends UPDATE message:

Apr 15 20:45:06 exit1-debian-9 bgpd[9818]: 192.168.0.2 [Error] Error parsing NLRI
Apr 15 20:45:06 exit1-debian-9 bgpd[9818]: %NOTIFICATION: sent to neighbor 192.168.0.2 3/10 (UPDATE Message Error/Invalid Network Field) 0 bytes

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
6 years agoMerge pull request #4206 from opensourcerouting/70-bfd-fix-source-port
Mark Stapp [Thu, 25 Apr 2019 21:08:48 +0000 (17:08 -0400)]
Merge pull request #4206 from opensourcerouting/70-bfd-fix-source-port

7.0: bfdd: fix UDP source port range

6 years agobfdd: fix UDP source port range 4206/head
Rafael Zalamena [Thu, 25 Apr 2019 17:41:44 +0000 (14:41 -0300)]
bfdd: fix UDP source port range

RFC 5881 Section 4 tells us that the BFD source port must be between
49152 and 65535 inclusive.

Spotted by Lucian Cristian.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
(cherry picked from commit 545d3f704699ac8a7f6600f0ecb031c68c2c13e8)

6 years agoMerge pull request #4195 from mjstapp/fix_privs_even_more_7_0
Quentin Young [Thu, 25 Apr 2019 18:40:05 +0000 (14:40 -0400)]
Merge pull request #4195 from mjstapp/fix_privs_even_more_7_0

[7.0] lib: control privs changes with refcount

6 years agoMerge pull request #4196 from mjstapp/fix_privs_uninit_7_0
Quentin Young [Wed, 24 Apr 2019 20:59:44 +0000 (16:59 -0400)]
Merge pull request #4196 from mjstapp/fix_privs_uninit_7_0

[7.0] lib: fix uninit and incorrect array-size in privs.c

6 years agolib: fix uninit and incorrect array-size in privs.c 4196/head
Mark Stapp [Wed, 24 Apr 2019 19:25:48 +0000 (15:25 -0400)]
lib: fix uninit and incorrect array-size in privs.c

Double commit of PR 3805 to 7.0.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
6 years agolib: control privs changes with refcount 4195/head
Mark Stapp [Wed, 24 Apr 2019 19:20:02 +0000 (15:20 -0400)]
lib: control privs changes with refcount

Use a refcount to control privs changes. Support process-wide
privs apis, as well as per-pthread apis. Double-commit of
PR 4057.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
6 years agoMerge pull request #4188 from ton31337/feature/validate_regexp_in_show_bgp
Quentin Young [Wed, 24 Apr 2019 17:15:03 +0000 (13:15 -0400)]
Merge pull request #4188 from ton31337/feature/validate_regexp_in_show_bgp

bgpd: [7.0] Validate as-path in `show bgp regexp`

6 years agobgpd: Validate as-path in `show bgp regexp` 4188/head
Donatas Abraitis [Thu, 18 Apr 2019 07:17:57 +0000 (10:17 +0300)]
bgpd: Validate as-path in `show bgp regexp`

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
6 years agoMerge pull request #4182 from ton31337/fix/backslash_backport_for_as-path_filter_7.0
Donald Sharp [Tue, 23 Apr 2019 14:26:55 +0000 (10:26 -0400)]
Merge pull request #4182 from ton31337/fix/backslash_backport_for_as-path_filter_7.0

bgpd: [7.0] Allow backslash in as-path filter lists

6 years agobgpd: Allow backslash in as-path filter lists 4182/head
Donatas Abraitis [Thu, 18 Apr 2019 06:59:51 +0000 (09:59 +0300)]
bgpd: Allow backslash in as-path filter lists

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
6 years agoMerge pull request #4098 from donaldsharp/override_intf_7.0
Russ White [Thu, 11 Apr 2019 21:46:52 +0000 (17:46 -0400)]
Merge pull request #4098 from donaldsharp/override_intf_7.0

[7.0]bgpd: interface based peers should automatically override it's peer g…

6 years agoMerge pull request #4120 from pacovn/201904_7.0__pw_fixes
Donald Sharp [Thu, 11 Apr 2019 12:20:17 +0000 (08:20 -0400)]
Merge pull request #4120 from pacovn/201904_7.0__pw_fixes

zebra: pseudowire event recovery (DoS fix) [7.0]

6 years agozebra: pseudowire event recovery (DoS fix) 4120/head
F. Aragon [Wed, 10 Apr 2019 17:08:50 +0000 (19:08 +0200)]
zebra: pseudowire event recovery (DoS fix)

When having a route recovery, because of the route installation
cycling and the next hop label check, it could happen that the PW
never gets recovered. The original code shows the intention of retrying,
but the code was missing. The fix includes the call to the timer programming
the recovery attempt.

Example for reproducing the issue:

      |P1|  <->  |P2|  <->  |P3|

- Being P1, P2, P3 nodes, using IS-IS as IGP, and having a pseudowire
betwen P1 and P3 (P1, P2, P3 having configured LDP daemons).
- After 60 seconds, kill the IS-IS daemon in P2.
- Wait 30 seconds
- Launch again the IS-IS daemon in P2
- The bug/issue is that after P1 <-> P3 recovering connectivity sometimes
  the PW is not recovered because the reason explained in the first paragraph.

Signed-off-by: F. Aragon <paco@voltanet.io>
6 years agoMerge pull request #4109 from pacovn/201904_7.0__lm_aliasing_fixes
Donald Sharp [Tue, 9 Apr 2019 17:52:44 +0000 (13:52 -0400)]
Merge pull request #4109 from pacovn/201904_7.0__lm_aliasing_fixes

zebra: label manager race condition fix  (7.0 branch)

6 years agozebra: label manager race condition fix 4109/head
F. Aragon [Fri, 5 Apr 2019 13:26:14 +0000 (15:26 +0200)]
zebra: label manager race condition fix

This fix covers the case where two or more events are processed but only one
becoming effective. E.g. when mixing a synchronous label request from a LDP
deamon and an asynchronous request from a BGP daemon it could happen to the
BGP having the label chunk, but the LDP stuck waiting for the response.

Given e.g.

  ldpd     <-------->
  (sync label request)
                       Zebra (label proxy)  <-->  Zebra (shared label manager)
  bgpd     <-------->
  (async label request)

Sequence:

   LDP label request ----->
                               Zebra (label proxy FW) ----> Zebra (LM)
   BGP label request ----->
                               Zebra (label proxy FW) ----> Zebra (LM)
                                                      <---- Zebra (LM) RP LDP
                                                      <---- Zebra (LM) RP BGP

Signed-off-by: F. Aragon <paco@voltanet.io>
6 years agobgpd: interface based peers should automatically override it's peer group 4098/head
Donald Sharp [Wed, 28 Nov 2018 23:46:36 +0000 (18:46 -0500)]
bgpd: interface based peers should automatically override it's peer group

When a interface based peer is setup and if it is part of a peer
group we should ignore this and just use the PEER_FLAG_CAPABILITY_ENHE
no matter what.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoMerge pull request #4089 from ton31337/stable/7.0
Donald Sharp [Fri, 5 Apr 2019 12:14:17 +0000 (08:14 -0400)]
Merge pull request #4089 from ton31337/stable/7.0

bgpd: [7.0] Remove private AS numbers if local-as is defined

6 years agobgpd: Remove private AS numbers if local-as is defined 4089/head
Donatas Abraitis [Sat, 2 Mar 2019 20:36:31 +0000 (22:36 +0200)]
bgpd: Remove private AS numbers if local-as is defined

When using remove-private-AS together with local-as
aspath_remove_private_asns() is called before bgp_packet_attribute().

In this case, private AS will always appear in front of change_local_as.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
6 years agoMerge pull request #4049 from donaldsharp/interface_deletion_7.0
Renato Westphal [Sat, 30 Mar 2019 03:23:22 +0000 (00:23 -0300)]
Merge pull request #4049 from donaldsharp/interface_deletion_7.0

bfdd, nhrpd, pimd: When deleting an interface clean up

6 years agobfdd, nhrpd, pimd: When deleting an interface clean up 4049/head
Donald Sharp [Fri, 29 Mar 2019 02:08:37 +0000 (22:08 -0400)]
bfdd, nhrpd, pimd: When deleting an interface clean up

When we delete an interface, we need to set the interface
ifindex to an internal value so that we don't end up in
a state where the re-addition of the same ifindex, due to
a rename operation, causes an infinite loop.

Fixes:#4007
Fix-Suggested-by: Saravanan K
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoMerge pull request #4039 from manuhalo/fix-lu-bgp-7.0
Donald Sharp [Fri, 29 Mar 2019 00:18:15 +0000 (20:18 -0400)]
Merge pull request #4039 from manuhalo/fix-lu-bgp-7.0

[7.0] bgpd: fix show bgp labeled_unicast

6 years agobgpd: fix show bgp labeled_unicast 4039/head
Emanuele Di Pascale [Thu, 28 Mar 2019 16:02:33 +0000 (17:02 +0100)]
bgpd: fix show bgp labeled_unicast

while labeled_unicast routes should be fetched in the
unicast table, we cannot set the safi to SAFI_UNICAST
else the peer afc checks and subgroup retrieval will fail

Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
6 years agoMerge pull request #3961 from donaldsharp/connected_7.0
Mark Stapp [Thu, 28 Mar 2019 14:18:01 +0000 (10:18 -0400)]
Merge pull request #3961 from donaldsharp/connected_7.0

Connected 7.0

6 years agozebra: System routes sometimes can not be properly selected 3961/head
Donald Sharp [Mon, 11 Mar 2019 13:39:19 +0000 (09:39 -0400)]
zebra: System routes sometimes can not be properly selected

System Routes if received over the netlink bus in a
specific pattern that causes an update operation for that
route in zebra can leave the dest->selected_fib pointer NULL,
while having the ZEBRA_FLAG_SELECTED flag set. Specifically
one way to achieve this is to do this:

`ip addr del 4.5.6.7/32 dev swp1 ; ip addr add 4.5.6.7/32 dev swp1 metric 9`

Why is this a big deal?
Because nexthop tracking is looking at ZEBRA_FLAG_SELECTED to
know if we can use a route, while nexthop active checking uses
dest->selected_fib.

So imagine we have bgp registering a nexthop. nexthop tracking in
the above case will be able to choose the 4.5.6.7/32 route
if that is what the nexthop is, due to the ZEBRA_FLAG_SELECTED being
properly set. BGP then allows the peers connection to come up and we
install routes with a 4.5.6.7 nexthop. The rib processing for route
installation will then look at the 4.5.6.7 route see no
dest->selected_fib and then start walking up the tree to resolve
the route. In our case we could easily hit the default route and be
unable to resolve the route. Which then becomes inactive in the
rib so we never attempt to install it.

This commit fixes this problem because when the rib_process decides
that we need to update the fib( ie replace old w/ new ), the
replacement with new was not setting the `dest->selected_fib` pointer
to the new route_entry, when the route was a system route.

Ticket: CM-24203
Signed-off-by: Donald Sharp <sharpd@cumulusnetworkscom>
6 years agozebra: set connected route metric based on the devaddr metric
Anuradha Karuppiah [Mon, 14 Jan 2019 23:45:33 +0000 (15:45 -0800)]
zebra: set connected route metric based on the devaddr metric

MACVLAN devices are typically used for applications such as VRR/VRRP that
require a second MAC address (virtual). These devices have a corresponding
SVI/VLAN device -
root@TORC11:~# ip addr show vlan1002
39: vlan1002@bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9152 qdisc noqueue master vrf1 state UP group default
    link/ether 00:02:00:00:00:2e brd ff:ff:ff:ff:ff:ff
    inet6 2001:aa:1::2/64 scope global
       valid_lft forever preferred_lft forever
root@TORC11:~# ip addr show vlan1002-v0
40: vlan1002-v0@vlan1002: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9152 qdisc noqueue master vrf1 state UP group default
    link/ether 00:00:5e:00:01:01 brd ff:ff:ff:ff:ff:ff
    inet6 2001:aa:1::a/64 metric 1024 scope global
       valid_lft forever preferred_lft forever
root@TORC11:~#

The macvlan device is used primarily for RX (VR-IP/VR-MAC). And TX is via
the SVI. To acheive that functionality the macvlan network's metric
is set to a higher value.

Zebra currently ignores the devaddr metric sent by the kernel and hardcodes
it to 0. This commit eliminates that hardcoding. If the devaddr metric
is available (METRIC_MAX) it is used for setting up the connected route
otherwise we fallback to the dev/interface metric.

Setting the macvlan metric to a higher value ensures that zebra will always
select the connected route on the SVI (and subsequently use it for next hop
resolution etc.) -
root@TORC11:~# vtysh -c "show ip route vrf vrf1 2001:aa:1::/64"
Routing entry for 2001:aa:1::/64
  Known via "connected", distance 0, metric 1024, vrf vrf1
  Last update 11:30:56 ago
  * directly connected, vlan1002-v0

Routing entry for 2001:aa:1::/64
  Known via "connected", distance 0, metric 0, vrf vrf1, best
  Last update 11:30:56 ago
  * directly connected, vlan1002

root@TORC11:~#

Ticket: CM-23511
Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
6 years agozebra: display metric for connected routes
Anuradha Karuppiah [Mon, 14 Jan 2019 23:56:30 +0000 (15:56 -0800)]
zebra: display metric for connected routes

In a VRR/VRRP setup we can have connected routes with different costs.
So this change eliminates suppressing metric display for connected routes.

Sample output -
root@TORC11:~# vtysh -c "show ipv6 route vrf vrf1"
Codes: K - kernel route, C - connected, S - static, R - RIPng,
       O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table,
       v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR,
       > - selected route, * - FIB route

VRF vrf1:
K * ::/0 [255/8192] unreachable (ICMP unreachable), 00:00:36
C * 2001:aa:1::/64 [0/100] is directly connected, vlan1002-v0, 00:00:36
C>* 2001:aa:1::/64 [0/90] is directly connected, vlan1002, 00:00:36

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
6 years agoMerge pull request #4016 from rtrlib/rpki_prefix_lookup_stable_7_0
David Lamparter [Tue, 26 Mar 2019 15:59:27 +0000 (16:59 +0100)]
Merge pull request #4016 from rtrlib/rpki_prefix_lookup_stable_7_0

bgpd: add command to lookup prefixes in the rpki table (stable/7.0)

6 years agobgpd: add command to lookup prefixes in the rpki table 4016/head
Marcel Röthke [Sat, 23 Mar 2019 10:57:09 +0000 (11:57 +0100)]
bgpd: add command to lookup prefixes in the rpki table

Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
6 years agoMerge pull request #3990 from opensourcerouting/7.0/redhat-new-init
Donald Sharp [Mon, 25 Mar 2019 11:45:20 +0000 (07:45 -0400)]
Merge pull request #3990 from opensourcerouting/7.0/redhat-new-init

[7.0] redhat: switch to new init script

6 years agotools/frrcommon.sh: ignore 'declare' failures 3990/head
David Lamparter [Sun, 24 Mar 2019 14:52:02 +0000 (15:52 +0100)]
tools/frrcommon.sh: ignore 'declare' failures

The "declare -p watchfrr_options" call is just to support backwards
compatibility.  If it fails, silently ignore that.

Signed-off-by: David Lamparter <equinox@diac24.net>
6 years agoredhat: switch to new init script
David Lamparter [Mon, 18 Feb 2019 23:44:01 +0000 (00:44 +0100)]
redhat: switch to new init script

Drop the special versions of frr.init/frr.service/daemons from redhat/
and use the generic versions instead.

Tested-by: Liam McBirnie <liam.mcbirnie@boeing.com>
Signed-off-by: David Lamparter <equinox@diac24.net>
6 years agoMerge pull request #3955 from donaldsharp/dest_selected_7.0
Sri Mohana Singamsetty [Sun, 17 Mar 2019 17:41:38 +0000 (10:41 -0700)]
Merge pull request #3955 from donaldsharp/dest_selected_7.0

zebra: Allow json output to give a bit more data

6 years agoMerge pull request #3956 from mjstapp/fix_ospf_json_70
Donald Sharp [Fri, 15 Mar 2019 16:15:21 +0000 (12:15 -0400)]
Merge pull request #3956 from mjstapp/fix_ospf_json_70

ospfd: [7.0] fix some json timer output

6 years agoMerge pull request #3917 from AkhileshSamineni/show_bgp_ipv6_summary_fix_7.0
Donald Sharp [Fri, 15 Mar 2019 14:00:07 +0000 (10:00 -0400)]
Merge pull request #3917 from AkhileshSamineni/show_bgp_ipv6_summary_fix_7.0

[7.0] bgpd: Incorrect number of peers count in "show bgp ipv6 summary output

6 years agoospfd: fix some json timer output 3956/head
Mark Stapp [Fri, 15 Mar 2019 13:40:38 +0000 (09:40 -0400)]
ospfd: fix some json timer output

Fix a few json output values: a few are in seconds, not msecs,
and one is a number-per-second, not a duration [7.0 version].

Signed-off-by: Mark Stapp <mjs@voltanet.io>
6 years agozebra: Allow json output to give a bit more data 3955/head
Donald Sharp [Sun, 10 Mar 2019 01:28:49 +0000 (20:28 -0500)]
zebra: Allow json output to give a bit more data

The dest->selected_fib should be reported in json output
so that we can debug subtle conditions a bit better in the
future.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoMerge pull request #3901 from opensourcerouting/7.0-ripd-fix-no-passive-iface
Donald Sharp [Fri, 15 Mar 2019 12:39:26 +0000 (08:39 -0400)]
Merge pull request #3901 from opensourcerouting/7.0-ripd-fix-no-passive-iface

[7.0] ripd: fix removal of configured passive interfaces

6 years agoMerge pull request #3934 from ton31337/fix/add_missing_ipv6_only_peer_flag_action
Donald Sharp [Fri, 15 Mar 2019 12:35:54 +0000 (08:35 -0400)]
Merge pull request #3934 from ton31337/fix/add_missing_ipv6_only_peer_flag_action

bgpd: [7.0] Add peer action for PEER_FLAG_IFPEER_V6ONLY flag

6 years agoMerge pull request #3948 from opensourcerouting/70-bfd-fix-linklocal-cli
Donald Sharp [Fri, 15 Mar 2019 12:33:11 +0000 (08:33 -0400)]
Merge pull request #3948 from opensourcerouting/70-bfd-fix-linklocal-cli

7.0: bfdd: fix IPv6 link-local peer removal

6 years agobfdd: remove scope-id from the session key 3948/head
Rafael Zalamena [Thu, 14 Mar 2019 15:28:07 +0000 (12:28 -0300)]
bfdd: remove scope-id from the session key

Unbreaks CLI ability to remove IPv6 sessions using link-local
addresses. This moves the scope-id logic to the packet sending
functions.

6 years agoMerge pull request #3939 from donaldsharp/ospf_1000_club_7.0
Olivier Dugeon [Wed, 13 Mar 2019 16:57:53 +0000 (17:57 +0100)]
Merge pull request #3939 from donaldsharp/ospf_1000_club_7.0

[7.0] ospfd: When converting to ms divide by 1000

6 years agoospfd: When converting to ms divide by 1000 3939/head
Donald Sharp [Wed, 13 Mar 2019 00:44:31 +0000 (20:44 -0400)]
ospfd: When converting to ms divide by 1000

When converting to miliseconds divide by 1000 not
the other way around.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agobgpd: Add peer action for PEER_FLAG_IFPEER_V6ONLY flag 3934/head
Donatas Abraitis [Mon, 25 Feb 2019 19:16:02 +0000 (21:16 +0200)]
bgpd: Add peer action for PEER_FLAG_IFPEER_V6ONLY flag

peer_flag_modify() will always return BGP_ERR_INVALID_FLAG because
the action was not defined for PEER_FLAG_IFPEER_V6ONLY flag.

```
global PEER_FLAG_IFPEER_V6ONLY = 16384;
global BGP_ERR_INVALID_FLAG = -2;

probe process("/usr/lib/frr/bgpd").statement("peer_flag_modify@/root/frr/bgpd/bgpd.c:3975")
{
if ($flag == PEER_FLAG_IFPEER_V6ONLY && $action->type == 0)
printf("action not found for the flag PEER_FLAG_IFPEER_V6ONLY\n");
}

probe process("/usr/lib/frr/bgpd").function("peer_flag_modify").return
{
if ($return == BGP_ERR_INVALID_FLAG)
printf("return BGP_ERR_INVALID_FLAG\n");
}
```
produces:
action not found for the flag PEER_FLAG_IFPEER_V6ONLY
return BGP_ERR_INVALID_FLAG

$ vtysh -c 'conf t' -c 'router bgp 20' -c 'neighbor eth1 interface v6only remote-as external'

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
6 years agoMerge pull request #3916 from AkhileshSamineni/show_bgp_af_neigh_fix_7.0
David Lamparter [Mon, 11 Mar 2019 18:44:07 +0000 (19:44 +0100)]
Merge pull request #3916 from AkhileshSamineni/show_bgp_af_neigh_fix_7.0

[7.0] bgpd: 'show bgp [ipv4|ipv6] neighbors' displays all address family neighbors

6 years agoMerge pull request #3913 from mjstapp/fix_privs_elev_7.0
Quentin Young [Wed, 6 Mar 2019 18:50:15 +0000 (13:50 -0500)]
Merge pull request #3913 from mjstapp/fix_privs_elev_7.0

libs: [7.0] make privs elevation thread-safe

6 years ago[7.0] bgpd: Incorrect number of peers count in "show bgp ipv6 summary" output 3917/head
Akhilesh Samineni [Wed, 6 Mar 2019 18:14:14 +0000 (23:44 +0530)]
[7.0] bgpd: Incorrect number of peers count in "show bgp ipv6 summary" output

The "show bgp ipv6 summary" output displays incorrect number of peers count.

sonic# show bgp ipv6 summary

IPv6 Unicast Summary:
BGP router identifier 10.1.0.1, local AS number 65100 vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 5, using 103 KiB of memory
Peer groups 1, using 64 bytes of memory

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
2003::1 4 65099 0 0 0 0 0 never Active
2088::1 4 65100 0 0 0 0 0 never Active
3021::2 4 65100 0 0 0 0 0 never Active

Total number of neighbors 3
sonic#
In the above output, the peers count displays as 5 but the actual peer count is 3, i.e.. 3 neighbors are activated in ipv6 unicast address family.
Displayed peer count (5) is the number of the neighbors activated in a BGP instance.

Fix : Now the peers count displays the number of neighbors activated per afi/safi.
After Fix:
sonic# show bgp ipv6 summary

IPv6 Unicast Summary:
BGP router identifier 10.1.0.1, local AS number 65100 vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 3, using 62 KiB of memory
Peer groups 1, using 64 bytes of memory

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
2003::1 4 65099 0 0 0 0 0 never Active
2088::1 4 65100 0 0 0 0 0 never Active
3021::2 4 65100 0 0 0 0 0 never Active

Total number of neighbors 3
sonic#

Signed-off-by: Akhilesh Samineni <akhilesh.samineni@broadcom.com>
6 years ago[7.0] bgpd: 'show bgp [ipv4|ipv6] neighbors' displays all address family neighbors 3916/head
Akhilesh Samineni [Wed, 6 Mar 2019 15:53:41 +0000 (21:23 +0530)]
[7.0] bgpd: 'show bgp [ipv4|ipv6] neighbors' displays all address family neighbors

Display only ipv4 neighbors when 'show bgp ipv4 neighbors' command is issued.
Display only ipv6 neighbors when 'show bgp ipv6 neighbors' command is issued.
Take the address family of the peer address into account, while displaying the neighbors.

Signed-off-by: Akhilesh Samineni <akhilesh.samineni@broadcom.com>
6 years agolibs: make privs elevation thread-safe 3913/head
Mark Stapp [Wed, 6 Mar 2019 15:41:47 +0000 (10:41 -0500)]
libs: make privs elevation thread-safe

[Double-commit PR 3911 to 7.0] Privs elevation is per-process,
and can deadlock if a multiple threads drive into the uid system
call. Add a refcount and a mutex to avoid reentrant calls to
the OS.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
6 years agoMerge pull request #3897 from donaldsharp/install_replace_7.0
Mark Stapp [Mon, 4 Mar 2019 14:03:57 +0000 (09:03 -0500)]
Merge pull request #3897 from donaldsharp/install_replace_7.0

zebra: When installing a new route always use REPLACE

6 years agoripd: fix removal of configured passive interfaces 3901/head
Renato Westphal [Sat, 2 Mar 2019 20:45:14 +0000 (17:45 -0300)]
ripd: fix removal of configured passive interfaces

libyang-0.16-rc3 fixed a bug [1] in which data would be auto-deleted
when it shouldn't. The problem is that the "no passive-interface"
command was relying on that wrong behavior, so the command was
affected when the libyang bug was fixed. Adapt the command to do
the right thing in order to get rid of the problem (regardless of
the libyang version being used).

"passive-interface default" still has problems though, but that
will be addressed separetely in the future.

Fixes #3870.

[1] https://github.com/CESNET/libyang/commit/8af82206908

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
6 years agoMerge pull request #3896 from opensourcerouting/7.0-fix-6vpe
Donald Sharp [Sat, 2 Mar 2019 14:03:34 +0000 (09:03 -0500)]
Merge pull request #3896 from opensourcerouting/7.0-fix-6vpe

[7.0] 6VPE fixes

6 years agozebra: When installing a new route always use REPLACE 3897/head
Donald Sharp [Fri, 1 Mar 2019 18:56:12 +0000 (13:56 -0500)]
zebra: When installing a new route always use REPLACE

When we install a new route into the kernel always use
REPLACE.  Else if the route is already there it can
be translated into an append with the flags we are
using.

This is especially true for the way we handle pbr
routes as that we are re-installing the same route
entry from pbr at the moment.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agobgpd: add missing checks for vpnv6 nexthop lengths 3896/head
Renato Westphal [Tue, 26 Feb 2019 21:22:27 +0000 (18:22 -0300)]
bgpd: add missing checks for vpnv6 nexthop lengths

A few code paths weren't handling the vpnv6 nexthop lenghts as
expected, which was leading to problems like imported vpnv6 routes
not being marked as valid when they should. Fix this.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
6 years agoRevert "bgpd: in case nexthop is ipv6, set nh attribute flag in mpls vpn case"
Renato Westphal [Tue, 26 Feb 2019 21:22:10 +0000 (18:22 -0300)]
Revert "bgpd: in case nexthop is ipv6, set nh attribute flag in mpls vpn case"

BGP IPv6 routes should never contain the NEXT_HOP attribute
(MP_REACH_NLRI should be used instead).

This reverts commit 75cd35c6977137a14ac37347a465d4e8a91eb4c4.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
6 years agoFRRouting Release 7.0 frr-7.0
Martin Winter [Thu, 28 Feb 2019 23:32:04 +0000 (15:32 -0800)]
FRRouting Release 7.0

Major Changes since 6.0.x:
- Added libyang dependency: New work for northbound interface based on libyang
- Fabricd: New Daemon based on https://datatracker.ietf.org/doc/draft-white-openfabric/
- various bug fixes and other enhancements

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
6 years agoMerge pull request #3867 from donaldsharp/ospf_allow_vrf_starup_7.0
Olivier Dugeon [Tue, 26 Feb 2019 08:49:57 +0000 (09:49 +0100)]
Merge pull request #3867 from donaldsharp/ospf_allow_vrf_starup_7.0

[7.0] ospfd: Allow pre-existing vrf's to work

6 years agoospfd: Allow pre-existing vrf's to work 3867/head
Donald Sharp [Mon, 25 Feb 2019 19:10:10 +0000 (14:10 -0500)]
ospfd: Allow pre-existing vrf's to work

When creating a ospf vrf based instance allow it to work
if the vrf has been created *before* we create the ospf
instance.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoMerge pull request #3857 from donaldsharp/dplane_use_after_free_7.0
Russ White [Sun, 24 Feb 2019 01:10:47 +0000 (20:10 -0500)]
Merge pull request #3857 from donaldsharp/dplane_use_after_free_7.0

zebra: Fix use after free in rib_process_result

6 years agozebra: Fix use after free in rib_process_result 3857/head
Donald Sharp [Sun, 24 Feb 2019 00:58:20 +0000 (19:58 -0500)]
zebra: Fix use after free in rib_process_result

Running zebra after commit 888756b208edc7935705d95b83f9513acc21e78a
in valgrind produces this item:

==17102== Invalid read of size 8
==17102==    at 0x44D84C: rib_dest_from_rnode (rib.h:375)
==17102==    by 0x4546ED: rib_process_result (zebra_rib.c:1904)
==17102==    by 0x45436D: rib_process_dplane_results (zebra_rib.c:3295)
==17102==    by 0x4D0902B: thread_call (thread.c:1607)
==17102==    by 0x4CC3983: frr_run (libfrr.c:1011)
==17102==    by 0x4266F6: main (main.c:473)
==17102==  Address 0x83bd468 is 88 bytes inside a block of size 96 free'd
==17102==    at 0x4A35F54: free (vg_replace_malloc.c:530)
==17102==    by 0x4CCAC00: qfree (memory.c:129)
==17102==    by 0x4D03DC6: route_node_destroy (table.c:501)
==17102==    by 0x4D039EE: route_node_free (table.c:90)
==17102==    by 0x4D03971: route_node_delete (table.c:382)
==17102==    by 0x44D82A: route_unlock_node (table.h:256)
==17102==    by 0x454617: rib_process_result (zebra_rib.c:1882)
==17102==    by 0x45436D: rib_process_dplane_results (zebra_rib.c:3295)
==17102==    by 0x4D0902B: thread_call (thread.c:1607)
==17102==    by 0x4CC3983: frr_run (libfrr.c:1011)
==17102==    by 0x4266F6: main (main.c:473)
==17102==  Block was alloc'd at
==17102==    at 0x4A36FF6: calloc (vg_replace_malloc.c:752)
==17102==    by 0x4CCAA2D: qcalloc (memory.c:110)
==17102==    by 0x4D03D88: route_node_create (table.c:489)
==17102==    by 0x4D0360F: route_node_new (table.c:65)
==17102==    by 0x4D034F8: route_node_set (table.c:74)
==17102==    by 0x4D03486: route_node_get (table.c:327)
==17102==    by 0x4CFB700: srcdest_rnode_get (srcdest_table.c:243)
==17102==    by 0x4545C1: rib_process_result (zebra_rib.c:1872)
==17102==    by 0x45436D: rib_process_dplane_results (zebra_rib.c:3295)
==17102==    by 0x4D0902B: thread_call (thread.c:1607)
==17102==    by 0x4CC3983: frr_run (libfrr.c:1011)
==17102==    by 0x4266F6: main (main.c:473)
==17102==

This is happening because of this order of events:

1) Route is deleted in the main thread and scheduled for rib processing.
2) Rib garbage collection is run and we remove the route node since it
is no longer needed.
3) Data plane returns from the deletion in the kernel and we call
the srcdest_rnode_get function to get the prefix that was deleted.
This recreates a new route node.  This creates a route_node with
a lock count of 1, which we freed via the route_unlock_node call.
Then we continued to use the rn pointer.  Which leaves us with use
after frees.

The solution is, of course, to just move the unlock the node at the
end of the function if we have a route_node.

Fixes: #3854
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoMerge pull request #3845 from opensourcerouting/rpm-new-libyang-7.0
Donald Sharp [Fri, 22 Feb 2019 21:11:45 +0000 (16:11 -0500)]
Merge pull request #3845 from opensourcerouting/rpm-new-libyang-7.0

[7.0] redhat: Require newer libyang (> 0.16.74) for embedded extensions

6 years agoMerge pull request #3842 from opensourcerouting/new-cli-fuzzer-fixes
Donald Sharp [Fri, 22 Feb 2019 21:11:06 +0000 (16:11 -0500)]
Merge pull request #3842 from opensourcerouting/new-cli-fuzzer-fixes

[7.0] More cli fuzzer fixes

6 years agoMerge pull request #3629 from opensourcerouting/debian/7.0-kill-backports
Donald Sharp [Fri, 22 Feb 2019 19:45:41 +0000 (14:45 -0500)]
Merge pull request #3629 from opensourcerouting/debian/7.0-kill-backports

[7.0] debian packaging

6 years agoMerge pull request #3852 from mjstapp/fix_rnode_unlock_7.0
Donald Sharp [Fri, 22 Feb 2019 19:17:49 +0000 (14:17 -0500)]
Merge pull request #3852 from mjstapp/fix_rnode_unlock_7.0

[7.0] zebra: unlock route-node when processing dplane results

6 years agozebra: unlock route-node when processing dplane results 3852/head
Mark Stapp [Thu, 21 Feb 2019 21:41:24 +0000 (16:41 -0500)]
zebra: unlock route-node when processing dplane results

Unlock the route-node datastruct we access while processing
results from the async dataplane. [7.0]

Signed-off-by: Mark Stapp <mjs@voltanet.io>
6 years agoredhat: Require newer libyang (> 0.16.74) for embedded extensions 3845/head
Martin Winter [Wed, 20 Feb 2019 13:09:03 +0000 (05:09 -0800)]
redhat: Require newer libyang (> 0.16.74) for embedded extensions

The support of embedded extensions doesn't allow to build the
RPM with and without (for older version). Require new version of
Lbyang with embedded extensions supported

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
6 years agoMerge pull request #3821 from opensourcerouting/snap_libyang_nocache
Donald Sharp [Thu, 21 Feb 2019 12:59:02 +0000 (07:59 -0500)]
Merge pull request #3821 from opensourcerouting/snap_libyang_nocache

snapcraft: Disable libyang CACHE for snap package (Temp workaround)

6 years agoMerge pull request #3829 from opensourcerouting/7.0/cherrypicks
Donald Sharp [Thu, 21 Feb 2019 02:28:46 +0000 (21:28 -0500)]
Merge pull request #3829 from opensourcerouting/7.0/cherrypicks

[7.0] cherrypick backlog

6 years agobgpd: fix the add-path code to understand the mpls-vpn safi 3842/head
Renato Westphal [Wed, 20 Feb 2019 18:54:32 +0000 (15:54 -0300)]
bgpd: fix the add-path code to understand the mpls-vpn safi

In order to iterate over MPLS VPN routes, it's necessary to use
two nested loops (the outer loop iterates over the MPLS VPN RDs,
and the inner loop iterates over the VPN routes from that RD).

The add-path code wasn't doing this, which was leading to lots of
crashes when add-path was enabled for the MPLS VPN SAFI. This patch
fixes the problem.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
6 years agobgpd: fix null pointer dereference bug
Renato Westphal [Wed, 20 Feb 2019 18:37:29 +0000 (15:37 -0300)]
bgpd: fix null pointer dereference bug

If path->net is NULL in the bgp_path_info_free() function, then
bgpd would crash in bgp_addpath_free_info_data() with the following
backtrace:

 (gdb) bt
 #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
 #1  0x00007ff7b267a42a in __GI_abort () at abort.c:89
 #2  0x00007ff7b39c1ca0 in core_handler (signo=11, siginfo=0x7ffff66414f0, context=<optimized out>) at lib/sigevent.c:249
 #3  <signal handler called>
 #4  idalloc_free_to_pool (pool_ptr=pool_ptr@entry=0x0, id=3) at lib/id_alloc.c:368
 #5  0x0000560096246688 in bgp_addpath_free_info_data (d=d@entry=0x560098665468, nd=0x0) at bgpd/bgp_addpath.c:100
 #6  0x00005600961bb522 in bgp_path_info_free (path=0x560098665400) at bgpd/bgp_route.c:252
 #7  bgp_path_info_unlock (path=0x560098665400) at bgpd/bgp_route.c:276
 #8  0x00005600961bb719 in bgp_path_info_reap (rn=rn@entry=0x5600986b2110, pi=pi@entry=0x560098665400) at bgpd/bgp_route.c:320
 #9  0x00005600961bf4db in bgp_process_main_one (safi=SAFI_MPLS_VPN, afi=AFI_IP, rn=0x5600986b2110, bgp=0x560098587320) at bgpd/bgp_route.c:2476
 #10 bgp_process_wq (wq=<optimized out>, data=0x56009869b8f0) at bgpd/bgp_route.c:2503
 #11 0x00007ff7b39d5fcc in work_queue_run (thread=0x7ffff6641e10) at lib/workqueue.c:294
 #12 0x00007ff7b39ce3b1 in thread_call (thread=thread@entry=0x7ffff6641e10) at lib/thread.c:1606
 #13 0x00007ff7b39a3538 in frr_run (master=0x5600980795b0) at lib/libfrr.c:1011
 #14 0x000056009618a5a3 in main (argc=3, argv=0x7ffff6642078) at bgpd/bgp_main.c:481

Add a null-check protection to fix this problem.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
6 years agoisisd: fix crash when entering "no ip[v6] router isis" twice
Renato Westphal [Wed, 20 Feb 2019 18:36:50 +0000 (15:36 -0300)]
isisd: fix crash when entering "no ip[v6] router isis" twice

isisd CLI has some housekeeping code that removes the
"frr-isisd:isis" container from the interface configuration when
IS-IS is disabled for both IPv4 and IPv6 in the corresponding
interface.

The problem is that the code was checking the values of the
"ipv4-routing" and "ipv6-routing" leafs without checking if the
parent "frr-isisd:isis" container was present. So, entering "no
ip[v6] router isis" twice would cause isisd to crash since the
"frr-isisd:isis" container wouldn't be present the second time the
command is processed. Fix this.

isisd aborted: vtysh -c "configure terminal" -c "interface eth99" -c "no ip router isis WORD"
isisd aborted: vtysh -c "configure terminal" -c "interface eth99" -c "no ipv6 router isis"

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
6 years agopbrd: add missing newline at the end of warning message
Renato Westphal [Wed, 20 Feb 2019 18:34:17 +0000 (15:34 -0300)]
pbrd: add missing newline at the end of warning message

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
6 years agopbrd: fix removal of ipv6 nexthops
Renato Westphal [Wed, 20 Feb 2019 18:32:55 +0000 (15:32 -0300)]
pbrd: fix removal of ipv6 nexthops

Fix bug in the code that compares IPv6 addresses. If memcmp()
returns 0 then the two addresses are equal.

Because of this problem, hash_release() could return NULL in a few
places, leading to the following crashes (found by the CLI fuzzer):
pbrd aborted: vtysh -c "configure terminal" -c "pbr-map WORD seq 100" -c "no set nexthop 2001:db8::1"
pbrd aborted: vtysh -c "configure terminal" -c "nexthop-group NHGROUP" -c "no nexthop 2001:db8::1"

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
6 years agotools: fix new init script wrt. multi-instance 3829/head
David Lamparter [Mon, 18 Feb 2019 23:27:45 +0000 (00:27 +0100)]
tools: fix new init script wrt. multi-instance

TBH when I looked at watchfrr I didn't see any MI support and hence
assumed this just didn't work to begin with.  However, it actually does
(transparently to watchfrr, by just using "ospfd-1" as daemon name.)

So, fix this up and make it work again.

(Also remove 2 extraneous \n in messages.)

Signed-off-by: David Lamparter <equinox@diac24.net>
6 years agodoc: update for new daemons settings
David Lamparter [Thu, 24 Jan 2019 17:20:56 +0000 (18:20 +0100)]
doc: update for new daemons settings

watchfrr_enable is ignored, watchfrr_options is unneeded and the
valgrind options have been replaced with daemon_wrap/all_wrap.

Signed-off-by: David Lamparter <equinox@diac24.net>
6 years agowatchfrr: build in defaults for -r/-s/-k 3629/head
David Lamparter [Thu, 24 Jan 2019 17:17:40 +0000 (18:17 +0100)]
watchfrr: build in defaults for -r/-s/-k

There's no good reason to not have these options default to the
installation path of tools/watchfrr.sh.  Doing so allows us to ditch
watchfrr_options from daemons/daemons.conf completely.

Fixes: #3652
Signed-off-by: David Lamparter <equinox@diac24.net>