Commit Graph

27330 Commits

Author SHA1 Message Date
Donald Sharp
a7704e1b98 zebra: Modify route_notify_internal to use a route_node
Pass in the route_node that is under consideration
into route_notify_internal to allow calling functions
to reduce stack size as well as looking up data.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:41 -05:00
Donald Sharp
69a2d597d2 zebra: Cleanup %pFX to %pRN in rib_process_result
The dest_pfx was pretty much only ever used for
debug output and FRR already knows the rn.  So
use that instead.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:41 -05:00
Donald Sharp
085e8f8f6b zebra: Reduce unneeded lookup in rib_process
the lookup of the src_p and dest_p is not needed
since the values are never used.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:40 -05:00
Donald Sharp
898b4a6d3b zebra: Reduce lookups in rib_process_dplane_notify
the dest_p and src_p values were only ever used for
debugs and %pFX, when we already have the rn.
There is no need to do this lookup

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:40 -05:00
Donald Sharp
a1742ba8af zebra: Fix redistribute.h up to our standards
FRR must give variable names instead of not defining
them in the .h file.  This just cleans up this
problem for redistribute.h

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:40 -05:00
Donald Sharp
84faa42066 zebra: Modify zsend_redistribute_route to receive struct route_node
The function zsend_redistribute_route uses the prefix and
source prefix.  Just pass in the route_node instead.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:40 -05:00
Donald Sharp
c8671e9f9b zebra: Pass rn to zebra_redistribute_check instead
FRR is using struct prefix and afi to be passed
around.  When all that is needed is the route node.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:40 -05:00
Donald Sharp
ee78ed680b zebra: Convert redistribute_update to use a route_node
FRR is passing around a bunch of data that is encapsulated
within the route node.  Let's just pass that around instead.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:40 -05:00
Donald Sharp
b3a9fca150 zebra: Convert redistribute_delete to use a route_node
FRR is passing around a bunch of data that is encapsulated
within the route node.  Let's just pass that around instead.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:40 -05:00
Donald Sharp
40e9c14429 tests: Add ospf_instance_redistribute testing
Redistribution for ospf with instance id's using instance id's
was incorrect.  Add some small tests to make sure it catches the
issues and we don't regress.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:40 -05:00
Donald Sharp
deb39cca21 zebra: Do not allow instance redistribution to happen no matter what
If you have this setup:

router ospf 3
  redistribute sharp
!

and then install:
sharp install route 4.5.6.7 nexthop 192.168.100.1 1
sharp install route 4.5.6.8 nexthop 192.168.100.1 1 instance 3
sharp install route 4.5.6.9 nexthop 192.168.100.1 1 instance 4

The .8 and .9 routes are auto redistributed into ospf instance 3:

eva# show ip ospf data

OSPF Instance: 3

       OSPF Router with ID (192.168.122.1)

                AS External Link States

Link ID         ADV Router      Age  Seq#       CkSum  Route
4.5.6.7        192.168.122.1     13 0x80000001 0x477c E2 4.5.6.7/32 [0x0]
4.5.6.8        192.168.122.1      5 0x80000001 0x3d85 E2 4.5.6.8/32 [0x0]
4.5.6.9        192.168.122.1      5 0x80000001 0x338e E2 4.5.6.9/32 [0x0]

This cannot be correct behavior.  When redistributing in the absense
of an instance number the default instance of 0 should be used and should
be the only route redistributed.  Here is the correct behavior:

eva# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

K>* 0.0.0.0/0 [0/100] via 192.168.119.1, enp39s0, 00:00:28
D>* 4.5.6.7/32 [150/0] via 192.168.100.1, virbr1, weight 1, 00:00:02
D[3]>* 4.5.6.8/32 [150/0] via 192.168.100.1, virbr1, weight 1, 00:00:02
D[4]>* 4.5.6.9/32 [150/0] via 192.168.100.1, virbr1, weight 1, 00:00:02
C>* 192.168.100.0/24 is directly connected, virbr1, 00:00:28
C>* 192.168.110.0/24 is directly connected, virbr2, 00:00:28
C>* 192.168.119.0/24 is directly connected, enp39s0, 00:00:28
C>* 192.168.122.0/24 is directly connected, virbr0, 00:00:28
eva# show ip ospf data

OSPF Instance: 3

       OSPF Router with ID (192.168.122.1)

                AS External Link States

Link ID         ADV Router      Age  Seq#       CkSum  Route
4.5.6.7        192.168.122.1      6 0x80000001 0x477c E2 4.5.6.7/32 [0x0]

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:40 -05:00
Donald Sharp
ffa484b4bd ospfd: Get default-information originate working for ospf instances
The ospf instance code is not properly handling the default route
when using default-information originate.  This is because
the code is looking for the default route to be saved with an
instance of <ospf instance id> but we always save it as a instance
id of 0.  In fact OSPF asks zebra for the default route as a special
case in instance 0, always.

Here is the correct behavior:

eva# show ip ospf data

OSPF Instance: 3

       OSPF Router with ID (192.168.122.1)

                AS External Link States

Link ID         ADV Router      Age  Seq#       CkSum  Route
0.0.0.0        192.168.122.1      8 0x80000001 0xdb08 E2 0.0.0.0/0 [0x0]

eva# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup
       t - trapped, o - offload failure

K>* 0.0.0.0/0 [0/100] via 192.168.119.1, enp39s0, 00:02:03

Fixes: #10251
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:40 -05:00
Donald Sharp
0fa6d92b90 ospfd: Add counts of lsa types to summary command
Add the ability to know the number of lsa type's we
hold in the database as part of the json output.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:39:40 -05:00
Donald Sharp
1945fb7a07 zebra: Add hint to what instance we are looking at
FRR allows redistribution to a client with a specific
instance in mind.  The code was not allowing you to figure
out what instance was being looked at.  So let's clarify this
in the debugs.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2022-01-18 08:36:26 -05:00
Mobashshera Rasool
2b59c0b901 pimd: remove redundant header include
Removing redundant header inclusion of pim_cmd.h

Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
2022-01-18 04:35:37 -08:00
David Lamparter
c748ab2567
Merge pull request #10276 from patrasar/mld_northbound 2022-01-18 11:20:28 +01:00
anlan_cs
95fd223cc3 bfdd: fix the possibly wrong counter of control packets
Since control packets may be dropped by ttl check, the counter
operation should be put after all check including ttl check.

Signed-off-by: anlan_cs <vic.lan@pica8.com>
2022-01-18 05:19:54 -05:00
David Lamparter
cfc45e911e lib/clippy: don't endian-convert twice
elf_getdata_rawchunk() already endian-converts; doing it again is, uh,
counterproductive.

Fixes: #10051
Reported-by: Lucian Cristian <lucian.cristian@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-18 10:20:34 +01:00
Donatas Abraitis
84de148355 bgpd: List peer-group as neighbor once and not for IPv4/IPv6/WORD
Before:

```
exit1-debian-11(config-router)# neighbor ?
  A.B.C.D   Neighbor address
     192.168.0.2 PEER PG
  WORD      Interface name or neighbor tag
     PEER PG
  X:X::X:X  Neighbor IPv6 address
     2a02🔤:17 2a02:bbd::2 PEER PG
```

After:

```
exit1-debian-11(config-router)# neighbor ?
  A.B.C.D   Neighbor address
     192.168.0.2
  WORD      Interface name or neighbor tag
     PEER PG
  X:X::X:X  Neighbor IPv6 address
     2a02🔤:17 2a02:bbd::2
```

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2022-01-18 11:09:48 +02:00
Donatas Abraitis
0fd57f5600
Merge pull request #10358 from idryzhov/workflow-pr-cleanup
doc: cleanup submitting patches and enhancements
2022-01-18 10:48:30 +02:00
Igor Ryzhov
85c6eccad9 doc: cleanup submitting patches and enhancements
Remove some remains from the times when patches were accepted via email.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
2022-01-17 20:21:08 +03:00
Donatas Abraitis
4122b697bb bgpd: Relax peer to be on the same host
If the existing listener is the same as the peer, treat as self and reject.

```
exit1-debian-11# sh bgp listeners
Name             fd Address
---------------------------
default          24 192.168.10.123
exit1-debian-11# con
exit1-debian-11(config)# router bgp
exit1-debian-11(config-router)# neighbor 192.168.10.123 remote-as external
% Can not configure the local system as neighbor

exit1-debian-11# sh bgp listeners
Name             fd Address
---------------------------
default          24 0.0.0.0
default          25 ::
exit1-debian-11# con
exit1-debian-11(config)# router bgp
exit1-debian-11(config-router)# neighbor 192.168.10.123 remote-as external
% Can not configure the local system as neighbor
exit1-debian-11(config-router)#

exit1-debian-11# sh bgp listeners
Name             fd Address
---------------------------
default          24 192.168.0.1
exit1-debian-11# con
exit1-debian-11(config)# router bgp
exit1-debian-11(config-router)# neighbor 192.168.10.123 remote-as external
exit1-debian-11(config-router)#
```

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2022-01-17 18:44:57 +02:00
David Lamparter
a6751e2318 pimd: add more dual-family address bits
Another few definitions to aid in dealing with IPv4 and IPv6.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 14:19:11 +01:00
David Lamparter
3ca68c9cf3 pimd: remove PIM_INADDR_IS[NOT]_ANY macros
These really don't serve much of a purpose, especially with how
inconsistently they're used.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 14:11:08 +01:00
David Lamparter
6d7bf748b6 pimd: fix %pI4 that needs to be %pPA
There's only 2 locations of this.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 14:11:02 +01:00
David Lamparter
8e8be741b5 pimd: replace pim_inet4_dump with %pPAs
Only pim_sgaddr uses are covered by this since regular in_addr is still
used for singular addresses, so only a part of pim_inet4_dump calls are
gone with this.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 14:10:57 +01:00
sarita patra
3051f4438d pim: Keeping list of address-family under gmp container
Renamed frr-igmp.yang to frr-gmp.yang, igmp to gmp container.
to support IGMP and MLD protocol.

frr-gmp.yang, created a list of address family under mgmd
container. For PIMV4 the key is IPV4, where as for PIMV6
the key is IPV6. This is done for PIMV6 development.

This commit will have all the northbound changes to support
IPV4 address family.

Signed-off-by: sarita patra <saritap@vmware.com>
2022-01-17 05:10:20 -08:00
David Lamparter
bca160c6af pimd: add PIMADDR_ANY & tackle assignments
Need a separate constant that is IPv6 when needed.  Also assign the
whole struct rather than just s_addr.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 14:09:01 +01:00
David Lamparter
62f59b58ba pimd: deploy pim_sgaddr_* helpers
Use _cmp/_hash/_match helpers for operations on pim_sgaddr to prepare
IPv6 support.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 14:08:58 +01:00
David Lamparter
408ed95ed2 pimd: remove pim_addr_copy
This is not needed, pim_addr can just be assigned as a whole.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 14:08:32 +01:00
David Lamparter
032a741219 pimd: move & deploy pim_addr_cmp() helper
Comparing `s_addr` isn't cutting it for IPv6 support.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 14:08:29 +01:00
David Lamparter
2a27f13b21 pimd: move, rename and deploy pim_addr_is_any()
Replaces comparison against INADDR_ANY, so we can do IPv6 too.

(Renamed from "pim_is_addr_any" for "pim_addr_*" naming pattern, and
type fixed to bool.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 14:03:26 +01:00
David Lamparter
98a81d2bff pimd: remove pim_str_sg_dump()
... and replace with `%pSG` printfrr specifier.  This actually used a
static buffer in the formatting function, so subsequent formatting would
overwrite earlier uses.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 14:02:18 +01:00
David Lamparter
9bace5c2d3 pimd: remove pim_str_sg_set()
... and replace with `%pSG` printfrr specifier.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 14:00:04 +01:00
David Lamparter
40a19188d5
Merge pull request #10179 from patrasar/pimv6_northbound 2022-01-17 13:23:21 +01:00
Rafael Zalamena
4e4c027803
Merge pull request #10183 from idryzhov/rework-vrf-rename
*: rework renaming the default VRF
2022-01-17 08:45:12 -03:00
David Lamparter
17a4c65576 zebra: remove netlink buffer size log message
... really not much point in printing this.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 09:46:19 +01:00
David Lamparter
908e4c85b8 lib: avoid pointless search for built-in IETF YANG
This causes confusing/annoying log messages at startup otherwise:
`YANG model "ietf-inet-types@*" "*@*"not embedded, trying external file`

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 09:46:15 +01:00
Igor Ryzhov
1f325f8438
Merge pull request #10350 from Drumato/fix-zebra-srv6-segment-routing-block 2022-01-17 06:33:17 +03:00
David Lamparter
28297b1e84 tests: fuzzing target for zlog_5424 code
This just tries logging messages in random ways to allow the fuzzer to
do its thing and try to find weird edge cases.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 00:39:00 +01:00
David Lamparter
f93640b810 doc: add new RFC5424 & journald logging targets
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 00:39:00 +01:00
David Lamparter
29bb23de31 lib: autodetect systemd/journald log on stdout
systemd sets up environment variables to allow autodetecting and
switching the log format to journald native.  Make use of that for the
stdout logging target.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 00:39:00 +01:00
David Lamparter
1c6261a99e lib: RFC5424 & journald extended syslog target
Not much to say here, user docs are coming up in a separate commit.
RFC5424 and (systemd's) journald allow passing structured key-value
data.  This stuffs the metadata we have available into there.

The "does the system syslogd support RFC5424" question is unfortunately
not easily answered, so we can only give an affirmative answer on NetBSD
5.0+ or FreeBSD 12+.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 00:39:00 +01:00
David Lamparter
603c61656f lib: add frr_early_init hook
To bring up bits that use thread_master before other init happens.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-01-17 00:39:00 +01:00
David Lamparter
d948c317c5 build: check for sendmmsg() and struct mmsghdr
These will be used by the RFC5424 log target.

Signed-off-by: David Lamparter <equinox@diac24.net>
2022-01-17 00:38:56 +01:00
Donatas Abraitis
8c20061f40 bgpd: Add peer-groups to neighbor autocomplete
```
exit1-debian-11(config-router)# neighbor PGTEST peer-group
exit1-debian-11(config-router)# neighbor PEER peer-group
exit1-debian-11(config-router)# neighbor ?
  A.B.C.D   Neighbor address
     192.168.0.2 PEER PGTEST
  WORD      Interface name or neighbor tag
     PEER PGTEST
  X:X::X:X  Neighbor IPv6 address
     2a02🔤:17 2a02:bbd::2 PEER PGTEST
```

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2022-01-16 22:08:57 +02:00
Yamato Sugawara
1b3aea985e zebra: fix segment-routing command not found error with --disable-pathd
Signed-off-by: Yamato Sugawara <yamato.sugawara@linecorp.com>
2022-01-16 21:46:22 +09:00
Igor Ryzhov
3ae667e527
Merge pull request #10349 from anlancs/doc-ospf-no
doc: adjust small words for ospfd
2022-01-16 15:31:04 +03:00
Mobashshera Rasool
3996d25e3c tests: Fix random failure in test_PIM_hello_tx_rx_p1
The test case test_PIM_hello_tx_rx_p1 is failing randomly because
sometimes the hello packet is received and sometimes not received while getting
the stats data.
When the hello packet is received HelloRx gets incremented to 1 and then
shutdown of the interface is executed which resets the stats to 0
and again when "no shutdown" of the interface is done, the stats get incremented to 1.
The test case checks after "no shutdown" of the interface whether the stats is incremented
but in this case although the stats got incremented the before and after value is same.
Hence the test case failed.

Adding correct expectations in the test case.

Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
2022-01-16 04:00:11 -08:00
anlan_cs
94184417fc doc: adjust small words for ospfd
Signed-off-by: anlan_cs <anlan_cs@tom.com>
2022-01-15 20:38:30 -05:00