Skip to content

Commit

Permalink
Allow LR to send RAs with only link local Ipv6.
Browse files Browse the repository at this point in the history
This fixes a bug in OVN that causes ovn-controller to fail when Logical
Router Port configures send_periodic=true, but the Logical Router itself
doesn't have any globally routable IPv6 networks.

This is supported by RFC 4861 [0], in sections 6.2.2 and 4.2

This is part of a larger effort to get BGP unnumbered working within OVN.
Backport specific patch for v24.03.4.

[0]: https://datatracker.ietf.org/doc/html/rfc4861

Signed-off-by: MJ Ponsonby <[email protected]>
Signed-off-by: Dumitru Ceara <[email protected]>
(cherry picked from commit ebe5d70)
  • Loading branch information
crypticC0der authored and dceara committed Dec 20, 2024
1 parent ce19453 commit 21e14f6
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
3 changes: 2 additions & 1 deletion controller/pinctrl.c
Original file line number Diff line number Diff line change
Expand Up @@ -3766,7 +3766,8 @@ ipv6_ra_update_config(const struct sbrec_port_binding *pb)
}

const char *prefixes = smap_get(&pb->options, "ipv6_ra_prefixes");
if (prefixes && !extract_ip_addresses(prefixes, &config->prefixes)) {
if (prefixes && *prefixes != '\0' &&
!extract_ip_addresses(prefixes, &config->prefixes)) {
VLOG_WARN("Invalid IPv6 prefixes: %s", prefixes);
goto fail;
}
Expand Down
16 changes: 13 additions & 3 deletions tests/ovn.at
Original file line number Diff line number Diff line change
Expand Up @@ -16636,7 +16636,7 @@ ovs-vsctl add-br br-phys
ovn_attach n1 br-phys 192.168.0.3

ovn-nbctl lr-add ro
ovn-nbctl lrp-add ro ro-sw 00:00:00:00:00:01 aef0:0:0:0:0:0:0:1/64
ovn-nbctl lrp-add ro ro-sw 00:00:00:00:00:01 20.0.0.1/24

ovn-nbctl ls-add sw
ovn-nbctl lsp-add sw sw-ro
Expand Down Expand Up @@ -16742,6 +16742,11 @@ ra_test() {
rm -f expected
}

echo "Baseline test with no ipv6"
ra_test 0 00 0 0 0 c0

ovn-nbctl --wait=hv set Logical_Router_port ro-sw networks='aef0\:\:1/64'

echo "Baseline test with no MTU"
ra_test 0 00 0 0 0 c0 40 aef00000000000000000000000000000

Expand Down Expand Up @@ -16883,7 +16888,7 @@ check ovs-vsctl set open . external-ids:ovn-bridge-mappings=phys:br-phys
ovn_attach n1 br-phys 192.168.0.3

check ovn-nbctl lr-add ro
check ovn-nbctl lrp-add ro ro-sw 00:00:00:00:00:01 aef0:0:0:0:0:0:0:1/64
check ovn-nbctl lrp-add ro ro-sw 00:00:00:00:00:01 20.0.0.1/24

check ovn-nbctl ls-add sw
check ovn-nbctl lsp-add sw ln
Expand Down Expand Up @@ -16998,8 +17003,13 @@ ra_test() {
rm -f expected
}


echo "Baseline test with no ipv6"
check ra_test 0 00 0 0 0 c0
ovn-nbctl --wait=hv set Logical_Router_port ro-sw networks='aef0\:\:1/64'

# check that RAs are sent to vifs
ra_test 0 00 0 0 0 c0 40 aef00000000000000000000000000000
check ra_test 0 00 0 0 0 c0 40 aef00000000000000000000000000000

# check that RAs don't leak into provider networks
for i in hv1 hv2 ; do
Expand Down

0 comments on commit 21e14f6

Please sign in to comment.