ipam_add_port_adresses() needs to be called after the peer field is set on the ovn_port structures. This way, addresses taken by peered router ports will be added to the logical switch's IPAM and therefore will be barred from assignment to other ports.
Reported-by: Girish Moodalbail <gmoodalb...@nvidia.com> Signed-off-by: Mark Michelson <mmich...@redhat.com> Signed-off-by: Ben Pfaff <b...@ovn.org> --- ovn/northd/ovn-northd.c | 4 ++-- tests/ovn.at | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c index fc178f2dc..81fc32ada 100644 --- a/ovn/northd/ovn-northd.c +++ b/ovn/northd/ovn-northd.c @@ -1614,7 +1614,6 @@ join_logical_ports(struct northd_context *ctx, } op->od = od; - ipam_add_port_addresses(od, op); tag_alloc_add_existing_tags(tag_alloc_table, nbsp); } } else { @@ -1658,7 +1657,6 @@ join_logical_ports(struct northd_context *ctx, op->lrp_networks = lrp_networks; op->od = od; - ipam_add_port_addresses(op->od, op); const char *redirect_chassis = smap_get(&op->nbrp->options, "redirect-chassis"); @@ -1760,6 +1758,8 @@ join_logical_ports(struct northd_context *ctx, } } } + + ipam_add_port_addresses(op->od, op); } } diff --git a/tests/ovn.at b/tests/ovn.at index 6612b43e9..f7f1ab5a8 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -11314,3 +11314,24 @@ ovn-nbctl get Logical-Switch-Port p0 dynamic_addresses AT_CHECK([ovn-nbctl get Logical-Switch-Port p0 dynamic_addresses], [0], [[[]] ]) AT_CLEANUP + +AT_SETUP([ovn -- ipam router ports]) +ovn_start + +ovn-nbctl ls-add sw +ovn-nbctl set logical_switch sw other-config:subnet=192.168.1.0/24 + +for i in 2 3 4; do + ovn-nbctl lr-add ro$i + ovn-nbctl lsp-add sw swp$i + ovn-nbctl --wait=sb lsp-set-addresses swp$i "02:00:00:00:00:0$i dynamic" + cidr=$(ovn-nbctl get logical_switch_port swp$i dynamic_addresses |cut -f2 -d' '|cut -f1 -d\") + ovn-nbctl lrp-add ro$i rop$i 02:00:00:00:00:0$i $cidr/24 -- set logical_switch_port swp$i type=router options:router-port=rop$i addresses=router; + AT_CHECK_UNQUOTED([ovn-nbctl get logical_router_port rop$i networks], [0], [[["192.168.1.$i/24"]] +]) +done + +ovn-nbctl list logical_switch_port +ovn-nbctl list logical_router_port + +AT_CLEANUP -- 2.14.5 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev