[ovs-dev] [PATCH v2] OVN: add mac address only support to IPAM/MACAM

Mark Michelson mmichels at redhat.com
Thu Dec 13 22:08:00 UTC 2018


Acked-by: Mark Michelson <mmichels at redhat.com>

On 12/12/18 6:06 PM, 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 at redhat.com>
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi at redhat.com>
> ---
> Changes since v1:
> - fix documentation
> ---
>   ovn/northd/ovn-northd.c |  8 +++++++-
>   ovn/ovn-nb.xml          |  5 +++++
>   tests/ovn.at            | 17 +++++++++++++++++
>   3 files changed, 29 insertions(+), 1 deletion(-)
> 
> 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..6d6fb055a 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" type='{"type": "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 afefb8ad6..85fb81d46 100644
> --- a/tests/ovn.at
> +++ b/tests/ovn.at
> @@ -5754,6 +5754,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])
>   
> 



More information about the dev mailing list