Message ID | ce54e2d189c55366886a769d9d804faa789f7634.1544610345.git.lorenzo.bianconi@redhat.com |
---|---|
State | Changes Requested |
Headers | show |
Series | [ovs-dev] OVN: add mac address only support to IPAM/MACAM | expand |
On Wed, Dec 12, 2018 at 11:53:49AM +0100, Lorenzo Bianconi wrote: > Add the capability to assign just L2 address to IPAM/MACAM since > in the current implementation either subnet or ipv6_prefix are mandatory > to enable IPAM > > Tested-by: Yossi Segev <ysegev@redhat.com> > Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Hi Lorenzo, thank you for the patch. I have one suggestion for the documentation. It uses text to say that the column is Boolean, but usually we would allow the documentation translator to do that by telling it that the value is boolean, with type='{"type": "boolean"}' inside the <column> tag: > + <column name="other_config" key="mac_only"> > + Boolean value used to request to assign L2 address only if neither > + subnet nor ipv6_prefix are specified > + </column> > </group> Thanks, Ben.
> > On Wed, Dec 12, 2018 at 11:53:49AM +0100, Lorenzo Bianconi wrote: > > Add the capability to assign just L2 address to IPAM/MACAM since > > in the current implementation either subnet or ipv6_prefix are mandatory > > to enable IPAM > > > > Tested-by: Yossi Segev <ysegev@redhat.com> > > Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> > > Hi Lorenzo, thank you for the patch. > > I have one suggestion for the documentation. It uses text to say that > the column is Boolean, but usually we would allow the documentation > translator to do that by telling it that the value is boolean, with > type='{"type": "boolean"}' inside the <column> tag: Hi Ben, thx for the review. I will fix it in v2. Regards, Lorenzo > > > + <column name="other_config" key="mac_only"> > > + Boolean value used to request to assign L2 address only if neither > > + subnet nor ipv6_prefix are specified > > + </column> > > </group> > > Thanks, > > Ben.
diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c index e1fbf60f3..0284b3796 100644 --- a/ovn/northd/ovn-northd.c +++ b/ovn/northd/ovn-northd.c @@ -414,6 +414,7 @@ struct ipam_info { unsigned long *allocated_ipv4s; /* A bitmap of allocated IPv4s */ bool ipv6_prefix_set; struct in6_addr ipv6_prefix; + bool mac_only; }; /* The 'key' comes from nbs->header_.uuid or nbr->header_.uuid or @@ -559,6 +560,10 @@ init_ipam_info_for_datapath(struct ovn_datapath *od) } if (!subnet_str) { + if (!ipv6_prefix) { + od->ipam_info.mac_only = smap_get_bool(&od->nbs->other_config, + "mac_only", false); + } return; } @@ -1382,7 +1387,8 @@ build_ipam(struct hmap *datapaths, struct hmap *ports) const struct nbrec_logical_switch_port *nbsp = od->nbs->ports[i]; if (!od->ipam_info.allocated_ipv4s && - !od->ipam_info.ipv6_prefix_set) { + !od->ipam_info.ipv6_prefix_set && + !od->ipam_info.mac_only) { if (nbsp->dynamic_addresses) { nbrec_logical_switch_port_set_dynamic_addresses(nbsp, NULL); diff --git a/ovn/ovn-nb.xml b/ovn/ovn-nb.xml index 4141751f8..f678adf1a 100644 --- a/ovn/ovn-nb.xml +++ b/ovn/ovn-nb.xml @@ -267,6 +267,11 @@ <li><code>8230:5678::</code></li> </ul> </column> + + <column name="other_config" key="mac_only"> + Boolean value used to request to assign L2 address only if neither + subnet nor ipv6_prefix are specified + </column> </group> <group title="Common Columns"> diff --git a/tests/ovn.at b/tests/ovn.at index 30533a03b..6bdcfe806 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -5646,6 +5646,23 @@ AT_CHECK([test "$p71_addr" != "$p72_addr"], [0], []) AT_CHECK([test "$p71_addr" != "$p73_addr"], [0], []) AT_CHECK([test "$p72_addr" != "$p73_addr"], [0], []) +# request to assign mac only +# +ovn-nbctl ls-add sw8 +ovn-nbctl --wait=sb set Logical-Switch sw8 other_config:mac_only=true +for n in $(seq 1 3); do + ovn-nbctl --wait=sb lsp-add sw8 "p8$n" -- lsp-set-addresses "p8$n" dynamic +done +AT_CHECK([ovn-nbctl get Logical-Switch-Port p81 dynamic_addresses], [0], + ["00:11:22:00:00:06" +]) +AT_CHECK([ovn-nbctl get Logical-Switch-Port p82 dynamic_addresses], [0], + ["00:11:22:00:00:07" +]) +AT_CHECK([ovn-nbctl get Logical-Switch-Port p83 dynamic_addresses], [0], + ["00:11:22:00:00:08" +]) + as ovn-sb OVS_APP_EXIT_AND_WAIT([ovsdb-server])