[ovs-dev] [PATCH v2 2/2] ovn-northd ipam: Support IPv6 dynamic assignment

Numan Siddique nusiddiq at redhat.com
Fri Mar 10 02:15:39 UTC 2017


Thanks for the review.


On Thu, Mar 9, 2017 at 2:48 AM, Ben Pfaff <blp at ovn.org> wrote:

> On Tue, Mar 07, 2017 at 07:19:45AM +0530, nusiddiq at redhat.com wrote:
> > From: Numan Siddique <nusiddiq at redhat.com>
> >
> > OVN will generate the IPv6 address for a logical port if requested
> > using the IPv6 prefix and the MAC address (as IEEE EUI64 identifier).
> > To generate the IPv6 address, CMS should define the IPv6 prefix in the
> > 'Logical_switch.other_config:ipv6_prefix' column.
> >
> > Signed-off-by: Numan Siddique <nusiddiq at redhat.com>
>
> The documentation uses <dl> for a bulleted list.  Please use <ul>.
>
>
​Done.
​


> The test uses explicit "sleep" calls.  Are these needed?  I guess that
> --wait=hv would also work, but faster.
>
>It was a mistake. WIll remove it.

​


> I found ipam_allocate_addresses() to be a little hard to follow.  How
> about rewriting it like this?  I have not tested it beyond compiling,
> but the general code flow seems more straightforward to me.
>
> static bool
> ipam_allocate_addresses(struct ovn_datapath *od, struct ovn_port *op,
>                         const char *addrspec)
> {
>     if (!op->nbsp || !od->ipam_info) {
>         return false;
>     }
>
>     /* Get or generate MAC address. */
>     struct eth_addr mac;
>     bool dynamic_mac;
>     int n = 0;
>     if (ovs_scan(addrspec, ETH_ADDR_SCAN_FMT" dynamic%n",
>                  ETH_ADDR_SCAN_ARGS(mac), &n)
>         && addrspec[n] == '\0') {
>         dynamic_mac = false;
>     } else {
>         uint64_t mac64 = ipam_get_unused_mac();
>         if (!mac64) {
>             return false;
>         }
>         eth_addr_from_uint64(mac64, &mac);
>         dynamic_mac = true;
>     }
>
>     /* Generate IPv4 address, if desirable. */
>     bool dynamic_ip4 = od->ipam_info->allocated_ipv4s != NULL;
>     uint32_t ip4 = dynamic_ip4 ? ipam_get_unused_ip(od) : 0;
>
>     /* Generate IPv6 address, if desirable. */
>     bool dynamic_ip6 = od->ipam_info->ipv6_prefix_set;
>     struct in6_addr ip6;
>     if (dynamic_ip6) {
>         in6_generate_eui64(mac, &od->ipam_info->ipv6_prefix, &ip6);
>     }
>
>     /* If we didn't generate anything, bail out. */
>     if (!dynamic_ip4 && !dynamic_ip6) {
>         return false;
>     }
>
>     /* Save the dynamic addresses. */
>     struct ds new_addr = DS_EMPTY_INITIALIZER;
>     ds_put_format(&new_addr, ETH_ADDR_FMT, ETH_ADDR_ARGS(mac));
>     if (dynamic_ip4) {
>         ipam_insert_ip(od, ip4);
>         ds_put_format(&new_addr, " "IP_FMT, IP_ARGS(htonl(ip4)));
>     }
>     if (dynamic_ip6) {
>         char ip6_s[INET6_ADDRSTRLEN + 1];
>         ipv6_string_mapped(ip6_s, &ip6);
>         ds_put_format(&new_addr, " %s", ip6_s);
>     }
>     ipam_insert_mac(&mac, !dynamic_mac);
>     nbrec_logical_switch_port_set_dynamic_addresses(op->nbsp,
>                                                     ds_cstr(&new_addr));
>     ds_destroy(&new_addr);
>     return true;
> }
>

​Thanks for making it cleaner.
​


>
> I am a little concerned that, when no dynamic address is assigned, the
> code does not clear the dynamic_addresses column.  That means that, if
> "dynamic" is removed from the addresses column, the former dynamic
> addresses will still appear.  I suspect that the code should clear
> dynamic_addresses when there are no dynamic addresses.
>

​
I have addressed this in the v3 patch 1.
​

>
> Thanks,
>
> Ben.
>


More information about the dev mailing list