Message ID | 20190808210005.18980-1-mmichels@redhat.com |
---|---|
State | Accepted |
Headers | show |
Series | [ovs-dev,PATCHv2,ovn] Prevent erroneous duplicate IP address messages. | expand |
I pushed this to master. On 8/8/19 5:00 PM, Mark Michelson wrote: > When using dynamic address assignment for logical switches, OVN reserves > the first address in the subnet for the attached router port to use. > > In commit 488d153ee87841c042af05bc0eb8b5481aaa98cf, the IPAM code was > modified to add assigned router port addresses to IPAM. The use case for > this was when a switch was joined to multiple routers, and all router > addresses were dynamically assigned. > > However, that commit also made it so that when a router rightly claimed > the first address in the subnet, ovn-northd would issue a warning about > a duplicate IP address being set. This change fixes the issue by adding > a special case so that we don't add the router's IP address to IPAM if > it is the first address in the subnet. This prevents the warning message > from appearing. > > Signed-off-by: Mark Michelson <mmichels@redhat.com> > Acked-by: Numan Siddique <nusiddiq@redhat.com> > Acked-by: Han ZHou <hzhou8@ebay.com> > --- > v1->v2: Added "ovn" to subject line > --- > northd/ovn-northd.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c > index e6953a405..f27fb70e4 100644 > --- a/northd/ovn-northd.c > +++ b/northd/ovn-northd.c > @@ -1194,7 +1194,14 @@ ipam_add_port_addresses(struct ovn_datapath *od, struct ovn_port *op) > > for (size_t i = 0; i < lrp_networks.n_ipv4_addrs; i++) { > uint32_t ip = ntohl(lrp_networks.ipv4_addrs[i].addr); > - ipam_insert_ip(op->peer->od, ip); > + /* If the router has the first IP address of the subnet, don't add > + * it to IPAM. We already added this when we initialized IPAM for > + * the datapath. This will just result in an erroneous message > + * about a duplicate IP address. > + */ > + if (ip != op->peer->od->ipam_info.start_ipv4) { > + ipam_insert_ip(op->peer->od, ip); > + } > } > > destroy_lport_addresses(&lrp_networks); >
diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c index e6953a405..f27fb70e4 100644 --- a/northd/ovn-northd.c +++ b/northd/ovn-northd.c @@ -1194,7 +1194,14 @@ ipam_add_port_addresses(struct ovn_datapath *od, struct ovn_port *op) for (size_t i = 0; i < lrp_networks.n_ipv4_addrs; i++) { uint32_t ip = ntohl(lrp_networks.ipv4_addrs[i].addr); - ipam_insert_ip(op->peer->od, ip); + /* If the router has the first IP address of the subnet, don't add + * it to IPAM. We already added this when we initialized IPAM for + * the datapath. This will just result in an erroneous message + * about a duplicate IP address. + */ + if (ip != op->peer->od->ipam_info.start_ipv4) { + ipam_insert_ip(op->peer->od, ip); + } } destroy_lport_addresses(&lrp_networks);