Commit Graph

4113 Commits

Author SHA1 Message Date
Donald Sharp
cd8cae5489
Merge pull request #7415 from mjstapp/fix_sa_strlen
ospfd, zebra: Fix SA warnings
2020-10-30 07:21:45 -04:00
Jafar Al-Gharaibeh
b131b5f539
Merge pull request #7414 from donaldsharp/32bitflags
zebra: Consolidate on 32 bits as the flag size for route flags
2020-10-29 21:47:15 -05:00
Mark Stapp
904e9b0570 zebra: clean up zebra_protodown_rc_str()
Clean up api SA warning, use 'const', and replace snprintf+
pointer math with strlcat.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-10-29 12:03:25 -04:00
Donald Sharp
acde7f6b8e zebra: Consolidate on 32 bits as the flag size for route flags
When we get a route for installation via any method we should
consolidate on 32 bits as the flag size, since we have
actually more than 8 bits of data to bass around.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-10-29 09:13:59 -04:00
Donald Sharp
82144f532b zebra: Don't do expensive string manip if not in debug
Modify the code to not load up a string that is only used
in debugging unless we are debugging.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-10-29 09:00:43 -04:00
Russ White
763a60663c
Merge pull request #7371 from AnuradhaKaruppiah/mh-uplink-tracking-1
evpn-mh: uplink tracking and startup delay
2020-10-28 12:13:57 -04:00
Donald Sharp
4d8fa81fbe
Merge pull request #7352 from mjstapp/fix_rt_netlink_indent
zebra: fix strange indentation
2020-10-27 20:07:15 -04:00
Anuradha Karuppiah
c36e442c4b zebra: uplink tracking and startup delay for EVPN-MH
Local ethernet segments are held in a protodown or error-disabled state
if access to the VxLAN overlay is not ready -
1. When FRR comes up the local-ESs/access-port are kept protodown
for the startup-delay duration. During this time the underlay and
EVPN routes via it are expected to converge.
2. When all the uplinks/core-links attached to the underlay go down
the access-ports are similarly protodowned.

The ES-bond protodown state is propagated to each ES-bond member
and programmed in the dataplane/kernel (per-bond-member).

Configuring uplinks -
vtysh -c "conf t" vtysh -c "interface swp4" vtysh -c "evpn mh uplink"

Configuring startup delay -
vtysh -c "conf t" vtysh -c "evpn mh startup-delay 100"

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EVPN protodown display -
========================
root@torm-11:mgmt:~# vtysh -c "show evpn"
L2 VNIs: 10
L3 VNIs: 3
Advertise gateway mac-ip: No
Advertise svi mac-ip: No
Duplicate address detection: Disable
  Detection max-moves 5, time 180
EVPN MH:
  mac-holdtime: 60s, neigh-holdtime: 60s
  startup-delay: 180s, start-delay-timer: 00:01:14 <<<<<<<<<<<<
  uplink-cfg-cnt: 4, uplink-active-cnt: 4
  protodown: startup-delay <<<<<<<<<<<<<<<<<<<<<<<
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ES-bond protodown display -
===========================
root@torm-11:mgmt:~# vtysh -c "show interface hostbond1"
Interface hostbond1 is up, line protocol is down
  Link ups:       0    last: (never)
  Link downs:     1    last: 2020/04/26 20:38:03.53
  PTM status: disabled
  vrf: default
  OS Description: Local Node/s torm-11 and Ports swp5 <==> Remote  Node/s hostd-11 and Ports swp1
  index 58 metric 0 mtu 9152 speed 4294967295
  flags: <UP,BROADCAST,MULTICAST>
  Type: Ethernet
  HWaddr: 00:02:00:00:00:35
  Interface Type bond
  Master interface: bridge
  EVPN-MH: ES id 1 ES sysmac 00:00:00:00:01:11
  protodown: off rc: startup-delay  <<<<<<<<<<<<<<<<<
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ES-bond member protodown display -
==================================
root@torm-11:mgmt:~# vtysh -c "show interface swp5"
Interface swp5 is up, line protocol is down
  Link ups:       0    last: (never)
  Link downs:     3    last: 2020/04/26 20:38:03.52
  PTM status: disabled
  vrf: default
  index 7 metric 0 mtu 9152 speed 10000
  flags: <UP,BROADCAST,MULTICAST>
  Type: Ethernet
  HWaddr: 00:02:00:00:00:35
  Interface Type Other
  Master interface: hostbond1
  protodown: on rc: startup-delay <<<<<<<<<<<<<<<<
root@torm-11:mgmt:~#
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-10-27 09:34:09 -07:00
Patrick Ruddy
dd51171227
Merge pull request #7158 from AnuradhaKaruppiah/mh-df-election
evpn-mh: support for DF election
2020-10-27 16:09:45 +00:00
Mark Stapp
bdd085a874 zebra: fix strange indentation
Fix some odd indentation in rt_netlink.c - merge damage, maybe?

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-10-27 12:03:41 -04:00
Mark Stapp
aa9d75efaf
Merge pull request #7381 from sworleys/NHG-Show-Proto-Filter
zebra: add type specifier to show nexthop-group
2020-10-27 11:33:00 -04:00
Donald Sharp
f1dbb1c7e1 zebra: Add uptime to show evpn mac vni ... detail
Add the uptime a mac entry has been in the system.

New Output:

eva# show evpn mac vni all detail

VNI 1000 #MACs (local and remote) 16

MAC: 4e:2d:f3:75:ff:db
 ESI: 03:44:38:39:ff:ff:01:00:00:02
 Intf: hostbond2(10) VLAN: 1000
 Sync-info: neigh#: 0 peer-active
 Local Seq: 0 Remote Seq: 0
 Uptime: 00:00:28
 Neighbors:
    No Neighbors

MAC: 7a:a4:f2:30:dd:5d
 ESI: 03:44:38:39:ff:ff:01:00:00:01
 Intf: hostbond1(9) VLAN: 1000
 Sync-info: neigh#: 0 peer-active
 Local Seq: 0 Remote Seq: 0
 Uptime: 00:00:28
 Neighbors:
    No Neighbors

MAC: 66:9e:d7:3a:f1:f1
 Remote VTEP: 192.168.100.18
 Sync-info: neigh#: 0
 Local Seq: 0 Remote Seq: 0
 Uptime: 00:00:26
 Neighbors:
    45.0.0.5 Active
    fe80::649e:d7ff:fe3a:f1f1 Active

MAC: 26:f1:bd:5f:e1:77
 Remote ES: 03:44:38:39:ff:ff:02:00:00:02
 Sync-info: neigh#: 0
 Local Seq: 0 Remote Seq: 0
 Uptime: 00:00:23
 Neighbors:
    No Neighbors

MAC: 16:80:eb:c4:43:6d
 ESI: 03:44:38:39:ff:ff:01:00:00:01
 Intf: hostbond1(9) VLAN: 1000
 Sync-info: neigh#: 0 peer-active
 Local Seq: 0 Remote Seq: 0
 Uptime: 00:00:28
 Neighbors:
    No Neighbors

MAC: 00:00:00:00:00:22
 Remote ES: 03:44:38:39:ff:ff:02:00:00:02
 Sync-info: neigh#: 0
 Local Seq: 0 Remote Seq: 0
 Uptime: 00:00:26
 Neighbors:
    No Neighbors

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-10-26 16:47:07 -04:00
Donald Sharp
a05111ba3d zebra: Add uptime to show evpn arp-cache vni .. detail
Add uptime data to `show evpn arp-cache vni ... detail` command.

Effectively when we create a neighbor entry store the time it
was created.  When we modify the neighbor entry store the time it
was modified.  Display under detail output and json output.

New output:
eva# show evpn arp-cache vni all detail

VNI 1000 #ARP (IPv4 and IPv6, local and remote) 8

IP: 45.0.0.5
 Type: remote
 State: active
 Uptime: 00:01:59
 MAC: 0a:fd:87:ca:7c:00
 Sync-info: -
 Remote VTEP: 192.168.100.18
 Local Seq: 0 Remote Seq: 0
IP: fe80::8fd:87ff:feca:7c00
 Type: remote
 State: active
 Uptime: 00:01:59
 MAC: 0a:fd:87:ca:7c:00
 Sync-info: -
 Remote VTEP: 192.168.100.18
 Local Seq: 0 Remote Seq: 0
IP: fe80::14e5:c2ff:fe50:fa59
 Type: local
 State: active
 Uptime: 00:02:04
 MAC: 16:e5:c2:50:fa:59
 Sync-info: -
 Local Seq: 0 Remote Seq: 0
IP: 45.0.0.3
 Type: remote
 State: active
 Uptime: 00:02:02
 MAC: 0e:50:e8:cf:6b:eb
 Sync-info: -
 Remote VTEP: 192.168.100.16
 Local Seq: 0 Remote Seq: 0
IP: 45.0.0.2
 Type: local
 State: active
 Uptime: 00:02:05
 MAC: 16:e5:c2:50:fa:59
 Sync-info: -
 Local Seq: 0 Remote Seq: 0
IP: fe80::c50:e8ff:fecf:6beb
 Type: remote
 State: active
 Uptime: 00:02:02
 MAC: 0e:50:e8:cf:6b:eb
 Sync-info: -
 Remote VTEP: 192.168.100.16
 Local Seq: 0 Remote Seq: 0
IP: 45.0.0.4
 Type: remote
 State: active
 Uptime: 00:01:55
 MAC: 02:ad:5f:d8:da:80
 Sync-info: -
 Remote VTEP: 192.168.100.17
 Local Seq: 0 Remote Seq: 0
IP: fe80::ad:5fff:fed8:da80
 Type: remote
 State: active
 Uptime: 00:01:55
 MAC: 02:ad:5f:d8:da:80
 Sync-info: -
 Remote VTEP: 192.168.100.17
 Local Seq: 0 Remote Seq: 0
eva#

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-10-26 16:47:07 -04:00
Stephen Worley
a8ad9a89ea zebra,doc: add type specifier to show nexthop-group
Add a type specifier to the `show nexthop-group` command
so we can easily filter by type when using proto created
nexthop groups.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-10-26 15:55:02 -04:00
Anuradha Karuppiah
2747f6f786 zebra: cleanup inet_ntoa usage in zebra_evpn_mh.c logs
Replaced inet_ntoa with %pI4 in the zebra debugs logs.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-10-26 10:43:05 -07:00
Anuradha Karuppiah
acffa256ba zebra: add json output for zebra ES, ES-EVI and access vlan dumps
1. ES
root@torm-11:mgmt:~# vtysh -c "show evpn es 03:44:38:39:ff:ff:01:00:00:01 json"
|python -m json.tool
{
    "accessPort": "hostbond1",
    "dfPreference": 50000,
    "esi": "03:44:38:39:ff:ff:01:00:00:01",
    "flags": [
        "local",
        "remote",
        "readyForBgp",
        "bridgePort",
        "operUp",
        "nexthopGroupActive"
    ],
    "macCount": 10,
    "nexthopGroup": 536870913,
    "vniCount": 10,
    "vteps": [
        {
            "dfAlgorithm": "preference",
            "dfPreference": 32767,
            "nexthopId": 268435460,
            "vtep": "27.0.0.16"
        },
        {
            "dfAlgorithm": "preference",
            "dfPreference": 32767,
            "nexthopId": 268435463,
            "vtep": "27.0.0.17"
        }
    ]
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

2. ES-EVI -
root@torm-11:mgmt:~# vtysh -c "show evpn es-evi vni 1001 detail json" |python -m json.tool
[
    {
        "esi": "03:44:38:39:ff:ff:01:00:00:01",
        "flags": [
            "local",
            "readyForBgp"
        ],
        "vni": 1001
    },
    {
        "esi": "03:44:38:39:ff:ff:01:00:00:02",
        "flags": [
            "local",
            "readyForBgp"
        ],
        "vni": 1001
    },
]
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

3. access-vlan
root@torm-11:mgmt:~# vtysh -c "show evpn access-vlan 1001 json" |python -m json.
tool
{
    "memberIfCount": 4,
    "members": [
        {
            "ifName": "hostbond4"
        },
        {
            "ifName": "hostbond1"
        },
        {
            "ifName": "hostbond2"
        },
        {
            "ifName": "hostbond3"
        }
    ],
    "vlan": 1001,
    "vni": 1001,
    "vxlanIf": "vx-1001"
}
root@torm-11:mgmt:~#
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-10-26 10:33:21 -07:00
Anuradha Karuppiah
72f2674a95 zebra: handle local-es bridge port association
A local ES can be added or removed to a bridge after it is created.
When it becomes a bridge port member the dataplane attributes need
to be programmed.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-10-26 10:33:21 -07:00
Anuradha Karuppiah
28e80a037f zebra: changes for programming SPH, non-DF and backup NHG br-port attrs
split horizon filter, non-DF block filter and backup nexthop group
are passed as bridge port attributes to the dataplane.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-10-26 10:33:19 -07:00
Anuradha Karuppiah
c60522f702 zebra: dplane APIs for programming evpn-mh access port attributes
This includes -
1. non-DF block filter
2. List of es-peers that need to be blocked per-access port (for
split horizon filtering)
3. Backup nexthop group to failover local-es via the VxLAN overlay

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-10-26 10:32:51 -07:00
Anuradha Karuppiah
1103c5c6cd zebra: changes to run DF election
1. DF preference is configurable per-ES
!
interface hostbond1
 evpn mh es-df-pref 100 >>>>>>>>>>>
 evpn mh es-id 1
 evpn mh es-sys-mac 00:00:00:00:01:11
!
2. This parameter is sent to BGP and advertised via the ESR.
3. The peer-ESs' DF params are sent to zebra (by BGP) and used
for running the DF election.
4. If the local VTEP becomes non-DF on an ES a block filter is
programmed in the dataplane to drop de-capsulated BUM packets
destined to that ES.

Sample output
=============
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
torm-11# sh evpn es
Type: L local, R remote, N non-DF
ESI                            Type ES-IF                 VTEPs
03:00:00:00:00:01:11:00:00:01  LRN  hostbond1             27.0.0.16
03:00:00:00:00:01:22:00:00:02  LR   hostbond2             27.0.0.16
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
torm-11# sh evpn es 03:00:00:00:00:01:11:00:00:01
ESI: 03:00:00:00:00:01:11:00:00:01
 Type: Local,Remote
 Interface: hostbond1
 State: up
 Ready for BGP: yes
 VNI Count: 10
 MAC Count: 2
 DF: status: non-df preference: 100 >>>>>>>>
 Nexthop group: 0x2000001
 VTEPs:
     27.0.0.16 df_alg: preference df_pref: 32767 nh: 0x100000d >>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-10-26 10:32:49 -07:00
Donald Sharp
b467b4b462 zebra: Fix prefix2str buf and some invalid data output in zebra_mpls.c
There are several places where prefix2str was used to convert
a prefix but they were debug guarded and the buffer was
used for flog_err/warn.  This would lead to corrupt data
being output in the failure cases if debugs were not turned
on.

Modify the code in zebra_mpls.c to not use prefix2str

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-10-26 09:38:33 -04:00
Donald Sharp
2919eea86a zebra: Replace some prefix2str with %pFX
We are loading a buffer with the prefix2str results then
using it in the debugs throughout functions.  Replace
with just using %pFX and remove the buffer.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-10-26 09:38:29 -04:00
Patrick Ruddy
d7bd0c043c
Merge pull request #7217 from AnuradhaKaruppiah/fix-es-del-regression
zebra: fix double clearing of zif->es_info.es
2020-10-26 10:12:54 +00:00
Mark Stapp
874e77acce
Merge pull request #7374 from sworleys/Revert-Revert-NHG-Dependents
zebra: Fix the NHG dependents relationship
2020-10-24 16:49:09 -04:00
Mark Stapp
33fa4b14db
Merge pull request #7382 from sworleys/Fix-Msg-Buff
zebra: fix unitialized msg header reading at startup
2020-10-23 18:05:04 -04:00
Quentin Young
939bd6ac52
Merge pull request #6788 from mjstapp/thread_cancel_off
*: unify thread/task cancel apis
2020-10-23 15:02:50 -04:00
Stephen Worley
9d06e1219a zebra: fix unitialized msg header reading at startup
Fixes the valgrind error we were seeing on startup due to
initializing the msg header struct:

```
==2534283== Thread 3 zebra_dplane:
==2534283== Syscall param recvmsg(msg) points to uninitialised byte(s)
==2534283==    at 0x4D616DD: recvmsg (in /usr/lib64/libpthread-2.31.so)
==2534283==    by 0x43107C: netlink_recv_msg (kernel_netlink.c:744)
==2534283==    by 0x4330E4: nl_batch_read_resp (kernel_netlink.c:1070)
==2534283==    by 0x431D12: nl_batch_send (kernel_netlink.c:1201)
==2534283==    by 0x431E8B: kernel_update_multi (kernel_netlink.c:1369)
==2534283==    by 0x46019B: kernel_dplane_process_func (zebra_dplane.c:3979)
==2534283==    by 0x45EB7F: dplane_thread_loop (zebra_dplane.c:4368)
==2534283==    by 0x493F5CC: thread_call (thread.c:1585)
==2534283==    by 0x48D3450: fpt_run (frr_pthread.c:303)
==2534283==    by 0x48D3D41: frr_pthread_inner (frr_pthread.c:156)
==2534283==    by 0x4D56431: start_thread (in /usr/lib64/libpthread-2.31.so)
==2534283==    by 0x4E709D2: clone (in /usr/lib64/libc-2.31.so)
==2534283==  Address 0x85cd850 is on thread 3's stack
==2534283==  in frame #2, created by nl_batch_read_resp (kernel_netlink.c:1051)
==2534283==
==2534283== Syscall param recvmsg(msg.msg_control) points to unaddressable byte(s)
==2534283==    at 0x4D616DD: recvmsg (in /usr/lib64/libpthread-2.31.so)
==2534283==    by 0x43107C: netlink_recv_msg (kernel_netlink.c:744)
==2534283==    by 0x4330E4: nl_batch_read_resp (kernel_netlink.c:1070)
==2534283==    by 0x431D12: nl_batch_send (kernel_netlink.c:1201)
==2534283==    by 0x431E8B: kernel_update_multi (kernel_netlink.c:1369)
==2534283==    by 0x46019B: kernel_dplane_process_func (zebra_dplane.c:3979)
==2534283==    by 0x45EB7F: dplane_thread_loop (zebra_dplane.c:4368)
==2534283==    by 0x493F5CC: thread_call (thread.c:1585)
==2534283==    by 0x48D3450: fpt_run (frr_pthread.c:303)
==2534283==    by 0x48D3D41: frr_pthread_inner (frr_pthread.c:156)
==2534283==    by 0x4D56431: start_thread (in /usr/lib64/libpthread-2.31.so)
==2534283==    by 0x4E709D2: clone (in /usr/lib64/libc-2.31.so)
==2534283==  Address 0xa0 is not stack'd, malloc'd or (recently) free'd
==2534283==
```

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-10-23 14:57:29 -04:00
Mark Stapp
5047884528 *: unify thread/event cancel macros
Replace all lib/thread cancel macros, use thread_cancel()
everywhere. Only the THREAD_OFF macro and thread_cancel() api are
supported. Also adjust thread_cancel_async() to NULL caller's pointer (if
present).

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-10-23 12:16:52 -04:00
Mark Stapp
1e4fa7f46c
Merge pull request #7364 from donaldsharp/zebra_nhg_keep
zebra: Do not delete nhg's when retain_mode is engaged
2020-10-23 10:28:31 -04:00
Mark Stapp
b3d6bc6ef0 * : update signature of thread_cancel api
Change thread_cancel to take a ** to an event, NULL-check
before dereferencing, and NULL the caller's pointer. Update
many callers to use the new signature.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-10-23 08:59:34 -04:00
Stephen Worley
7fa239f165 zebra: disable dependent backpointers for backup nexthops
Because the backup nexthop groups currently are more like pseudo-NHEs
(they don't have IDs and are not inserted into the ID table or
hashed), they can't really have this depends/dependents relationship
yet in both directions. Some work needs to be done there to make
them more like first class citizens like "normal" NHGs to enable
this.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-10-22 18:10:44 -04:00
Stephen Worley
8459128259 Revert "Revert "zebra: fix NHE dependents backpointer relationship""
This reverts commit a682deea0f.
2020-10-22 18:09:44 -04:00
Mark Stapp
9bcef951be zebra: replace inet_ntoa
Stop using inet_ntoa - use %pI4 or inet_ntop instead

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-10-22 13:37:25 -04:00
Donald Sharp
b1b07ef5a6 zebra: Do not delete nhg's when retain_mode is engaged
When `-r` is specified to zebra, on shutdown we should
not remove any routes from the fib.  This was a problem
with nhg's on shutdown due to their ref-count behavior.

Introduce a methodology where on shutdown we don't mess
with the nexthop groups in the kernel.  That way on
next startup things will be ok.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-10-22 08:02:33 -04:00
Donatas Abraitis
2dbe669bdf :* Convert prefix2str to %pFX
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-10-22 09:07:41 +03:00
Stephen Worley
a682deea0f Revert "zebra: fix NHE dependents backpointer relationship"
This reverts commit f9f9466e04.
2020-10-20 17:11:35 -04:00
Donald Sharp
203098301c
Merge pull request #7348 from mjstapp/fix_router_id_lists
zebra: clean up all router id lists
2020-10-20 15:53:52 -04:00
Donatas Abraitis
9072f5c89a
Merge pull request #7311 from donaldsharp/table_lock_count
Abstract rn->lock accessing and cleanup usage to %pFX and %pRN
2020-10-20 16:04:15 +03:00
Mark Stapp
cdc09a4b04 zebra: clean up all router id lists
Clean up the ipv6 router-id lists associated with a zvrf - these
were being leaked.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-10-20 08:48:12 -04:00
Mark Stapp
658084c229
Merge pull request #7289 from sworleys/NHG-Crash-Start
zebra: a couple NHG fixes
2020-10-20 08:41:36 -04:00
Stephen Worley
dc1c436278 zebra: add alias for "show ip/ipv6 ro"
Add an alias so people can still type `show ip ro`.

It became ambigious in a recent release.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-10-19 14:08:18 -04:00
Stephen Worley
f9f9466e04 zebra: fix NHE dependents backpointer relationship
Apparantly the dependents backpointer trees for singletons
got broken at some point and we never noticed. There is
not really any code making use of this right now so not
suprising but let's go ahead and fix it for zebra and proto
NHGs.

Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-10-19 12:52:39 -04:00
Anuradha Karuppiah
ab06b03315 zebra: fix double clearing of zif->es_info.es
This problem was accidentally introduced as a part of another fixup -
[
commit e378f5020d (anuradhak/mh-misc-fixes, mh-misc-fixes)
Author: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
Date:   Tue Sep 15 16:50:14 2020 -0700

    zebra: fix use of freed es during zebra shutdown
]

zif->es_info.es is cleared as a part of zebra_evpn_es_local_info_clear so it
cannot be passed around as a pointer from zebra_evpn_local_es_update/del.

Because of this bug removing ES from an interface resulted in
a zebra crash.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2020-10-19 09:36:44 -07:00
Donald Sharp
c85b63238a
Merge pull request #7333 from mjstapp/fix_multi_connected
zebra: support multiple connected subnets on an interface
2020-10-18 08:29:19 -04:00
Donald Sharp
c10e14e96d *: Create/Use accessor functions for lock count
Create appropriate accessor functions for the rn->lock
data.  We should be accessing this data through accessor
functions since it is private data to the data structure.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-10-17 13:39:10 -04:00
Donald Sharp
7e26b9d4a2 zebra: Fix use after free in debug path
When zebra is running with debugs turned on there
is a use after free reported by the address sanitizer:

2020/10/16 12:58:02 ZEBRA: rib_delnode: (0:254):4.5.6.16/32: rn 0x60b000026f20, re 0x6080000131a0, removing
2020/10/16 12:58:02 ZEBRA: rib_meta_queue_add: (0:254):4.5.6.16/32: queued rn 0x60b000026f20 into sub-queue 3
=================================================================
==3101430==ERROR: AddressSanitizer: heap-use-after-free on address 0x608000011d28 at pc 0x555555705ab6 bp 0x7fffffffdab0 sp 0x7fffffffdaa8
READ of size 8 at 0x608000011d28 thread T0
    #0 0x555555705ab5 in re_list_const_first zebra/rib.h:222
    #1 0x555555705b54 in re_list_first zebra/rib.h:222
    #2 0x555555711a4f in process_subq_route zebra/zebra_rib.c:2248
    #3 0x555555711d2e in process_subq zebra/zebra_rib.c:2286
    #4 0x555555711ec7 in meta_queue_process zebra/zebra_rib.c:2320
    #5 0x7ffff74701f7 in work_queue_run lib/workqueue.c:291
    #6 0x7ffff7450e9c in thread_call lib/thread.c:1581
    #7 0x7ffff738eaf7 in frr_run lib/libfrr.c:1099
    #8 0x55555561a578 in main zebra/main.c:455
    #9 0x7ffff7079cc9 in __libc_start_main ../csu/libc-start.c:308
    #10 0x5555555e3429 in _start (/usr/lib/frr/zebra+0x8f429)
0x608000011d28 is located 8 bytes inside of 88-byte region [0x608000011d20,0x608000011d78)
freed by thread T0 here:
    #0 0x7ffff768bb6f in __interceptor_free (/lib/x86_64-linux-gnu/libasan.so.6+0xa9b6f)
    #1 0x7ffff739ccad in qfree lib/memory.c:129
    #2 0x555555709ee4 in rib_gc_dest zebra/zebra_rib.c:746
    #3 0x55555570ca76 in rib_process zebra/zebra_rib.c:1240
    #4 0x555555711a05 in process_subq_route zebra/zebra_rib.c:2245
    #5 0x555555711d2e in process_subq zebra/zebra_rib.c:2286
    #6 0x555555711ec7 in meta_queue_process zebra/zebra_rib.c:2320
    #7 0x7ffff74701f7 in work_queue_run lib/workqueue.c:291
    #8 0x7ffff7450e9c in thread_call lib/thread.c:1581
    #9 0x7ffff738eaf7 in frr_run lib/libfrr.c:1099
    #10 0x55555561a578 in main zebra/main.c:455
    #11 0x7ffff7079cc9 in __libc_start_main ../csu/libc-start.c:308
previously allocated by thread T0 here:
    #0 0x7ffff768c037 in calloc (/lib/x86_64-linux-gnu/libasan.so.6+0xaa037)
    #1 0x7ffff739cb98 in qcalloc lib/memory.c:110
    #2 0x555555712ace in zebra_rib_create_dest zebra/zebra_rib.c:2515
    #3 0x555555712c6c in rib_link zebra/zebra_rib.c:2576
    #4 0x555555712faa in rib_addnode zebra/zebra_rib.c:2607
    #5 0x555555715bf0 in rib_add_multipath_nhe zebra/zebra_rib.c:3012
    #6 0x555555715f56 in rib_add_multipath zebra/zebra_rib.c:3049
    #7 0x55555571788b in rib_add zebra/zebra_rib.c:3327
    #8 0x5555555e584a in connected_up zebra/connected.c:254
    #9 0x5555555e42ff in connected_announce zebra/connected.c:94
    #10 0x5555555e4fd3 in connected_update zebra/connected.c:195
    #11 0x5555555e61ad in connected_add_ipv4 zebra/connected.c:340
    #12 0x5555555f26f5 in netlink_interface_addr zebra/if_netlink.c:1213
    #13 0x55555560f756 in netlink_information_fetch zebra/kernel_netlink.c:350
    #14 0x555555612e49 in netlink_parse_info zebra/kernel_netlink.c:941
    #15 0x55555560f9f1 in kernel_read zebra/kernel_netlink.c:402
    #16 0x7ffff7450e9c in thread_call lib/thread.c:1581
    #17 0x7ffff738eaf7 in frr_run lib/libfrr.c:1099
    #18 0x55555561a578 in main zebra/main.c:455
    #19 0x7ffff7079cc9 in __libc_start_main ../csu/libc-start.c:308
SUMMARY: AddressSanitizer: heap-use-after-free zebra/rib.h:222 in re_list_const_first

This is happening because we are using the dest pointer after a call into
rib_gc_dest.  In process_subq_route, we call rib_process() and if the
dest is deleted dest pointer is now garbage.  We must reload the
dest pointer in this case.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-10-17 08:55:26 -04:00
Mark Stapp
87009d7df0 zebra: support multiple connected subnets on an interface
We support configuration of multiple addresses in the same
subnet on a single interface: make sure that zebra supports
multiple instances of the corresponding connected route.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-10-16 16:46:33 -04:00
Mark Stapp
027b3ca2e0
Merge pull request #7244 from donaldsharp/mlag_backout_and_fix
Mlag backout and fix
2020-10-14 08:30:54 -04:00
Donald Sharp
4fe30ff1eb
Merge pull request #7298 from mjstapp/quiet_opaque_debugs
zebra: quiet the zebra opaque message debugs
2020-10-14 07:27:27 -04:00
Donald Sharp
ca3491262b zebra: Isolate mlag_rd_buf_offset to the actual using function
Isolate the mlag_rd_buf_offset variable to the actual used function,
instead of having it a global.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-10-13 16:02:05 -04:00