[ovs-dev] OVN: add mac address only support to IPAM/MACAM
diff mbox series

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
Related show

Commit Message

Lorenzo Bianconi Dec. 12, 2018, 10:53 a.m. UTC
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>
---
 ovn/northd/ovn-northd.c |  8 +++++++-
 ovn/ovn-nb.xml          |  5 +++++
 tests/ovn.at            | 17 +++++++++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

Comments

Ben Pfaff Dec. 12, 2018, 7:40 p.m. UTC | #1
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.
Lorenzo Bianconi Dec. 12, 2018, 8:52 p.m. UTC | #2
>
> 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.

Patch
diff mbox series

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])