Glad to hear that.

I’ve sent a new patch version: 
https://patchwork.ozlabs.org/project/ovn/patch/[email protected]/
BTW, is there any other way to update patch except posting a complete new patch 
to patchwork with vN version prefix? Sorry if it’s a stupid question, I’m new 
to mail list patches submission :) How can I close previous patch versions in 
patchwork?

Regards,
Vladislav Odintsov

> On 15 Jun 2021, at 15:35, Numan Siddique <[email protected]> wrote:
> 
> On Tue, Jun 15, 2021 at 5:00 AM Vladislav Odintsov <[email protected]> wrote:
>> 
>> Hi Numan,
>> 
>> Thanks for review.
>> 
>> I’ve been thinking about such approach to set hostnames via DHCP_Options. In 
>> my opinion it can be an overkill to have a special DHCP_Options record per 
>> each logical switch port in case where we want to return hostnames in DHCP 
>> Reply. I understand hostname as a special per-LSP specific DHCP option 
>> (maybe even mostly unique for project/tenant). So in such behaviour where 
>> hostname is in DHCP_Options instead of LSP, if one wants to return hostnames 
>> in DHCP, he/she would always have many DHCP_Options records with same 
>> content which differs only in one: hostname.
>> 
>> For CMS to manage reduced count of DHCP_Options (comparing to per-LSP 
>> DHCP_Options records) looks better too. I don’t have statistics about common 
>> DHCP usage pattern in OVN, but in our deployment we have one DHCP_Options 
>> record for each L3 subnet. Updating DHCP settings for this subnet is very 
>> comfortable just modifying options in one associated record. And if we want 
>> just to add hostnames to this scheme, right away we have to maintain 
>> separate DHCP_Options record for each LSP and each time we want to update, 
>> for instance domain_name, we have to rewrite tens of DHCP_Options records, 
>> which differ only in hostnames.
> 
> Ok. I do understand that managing all the dhcp rows by CMS could be
> challenging.  If the requirement is to set the hostname for each of
> the VMs, then I'm fine with your approach.
> 
> Can you please also update the documentation in ovn-nb.xml in tthe
> DHCP_Options table section ?
> 
> Thanks
> Numan
> 
>> 
>> Let me know your thoughts on this, please.
>> 
>> Regards,
>> Vladislav Odintsov
>> 
>>> On 14 Jun 2021, at 21:29, Numan Siddique <[email protected]> wrote:
>>> 
>>> On Fri, May 28, 2021 at 7:32 AM Vladislav Odintsov <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>>> 
>>>> DHCP Option Hostname is a per-Logical_Switch_Port property, configured in
>>>> Logical_Switch_Port's options:hostname field. It is used if DHCPv4 is
>>>> enabled for this LSP.
>>>> 
>>>> Signed-off-by: Vladislav Odintsov <[email protected] 
>>>> <mailto:[email protected]>>
>>> 
>>> Thanks for the patch.  Each Logical switch port has a column - dhcp_options.
>>> 
>>> Openstack neutron when using the native OVN DHCP feature creates a
>>> dhcp_options row
>>> in the DHCP_option table and associates this with the logical ports.
>>> In case if there are
>>> neutron port specific dhcp options which need to be overridden,
>>> neutron creates an additional row in DHCP_Options table and
>>> associates that row to the specific logical port.  I think the same
>>> can be done here instead of setting the hostname in the options
>>> of logical switch port.
>>> 
>>> Can you also please update the documentation in ovn-nb.xml about the
>>> new supported option in the DHCP_Options table section.
>>> 
>>> Thanks
>>> Numan
>>> 
>>> 
>>> 
>>> 
>>> 
>>>> ---
>>>> The implementation for ovn-northd-ddlog is absent, it needs help from
>>>> somebody, who's familiar with ddlog.
>>>> 
>>>> lib/ovn-l7.h        | 1 +
>>>> northd/ovn-northd.c | 9 +++++++++
>>>> ovn-nb.xml          | 9 +++++++++
>>>> tests/ovn.at        | 3 +++
>>>> tests/test-ovn.c    | 1 +
>>>> 5 files changed, 23 insertions(+)
>>>> 
>>>> diff --git a/lib/ovn-l7.h b/lib/ovn-l7.h
>>>> index 5e33d619c..9a33f5cda 100644
>>>> --- a/lib/ovn-l7.h
>>>> +++ b/lib/ovn-l7.h
>>>> @@ -81,6 +81,7 @@ struct gen_opts_map {
>>>> #define DHCP_OPT_DNS_SERVER  DHCP_OPTION("dns_server", 6, "ipv4")
>>>> #define DHCP_OPT_LOG_SERVER  DHCP_OPTION("log_server", 7, "ipv4")
>>>> #define DHCP_OPT_LPR_SERVER  DHCP_OPTION("lpr_server", 9, "ipv4")
>>>> +#define DHCP_OPT_HOSTNAME    DHCP_OPTION("hostname", 12, "str")
>>>> #define DHCP_OPT_DOMAIN_NAME DHCP_OPTION("domain_name", 15, "str")
>>>> #define DHCP_OPT_SWAP_SERVER DHCP_OPTION("swap_server", 16, "ipv4")
>>>> 
>>>> diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
>>>> index c39d451ec..e43c6d91a 100644
>>>> --- a/northd/ovn-northd.c
>>>> +++ b/northd/ovn-northd.c
>>>> @@ -4574,6 +4574,14 @@ build_dhcpv4_action(struct ovn_port *op, ovs_be32 
>>>> offer_ip,
>>>>                  REGBIT_DHCP_OPTS_RESULT" = put_dhcp_opts(offerip = "
>>>>                  IP_FMT", ", IP_ARGS(offer_ip));
>>>> 
>>>> +    /* hostname is a per Logical_Switch_Port dhcp option,
>>>> +     * so try to get it from ovn_port and put it to options_action
>>>> +     * if it exists. */
>>>> +    const char *hostname = smap_get(&op->nbsp->options, "hostname");
>>>> +    if (hostname) {
>>>> +        ds_put_format(options_action, "%s = %s, ", "hostname", hostname);
>>>> +    }
>>>> +
>>>>    /* We're not using SMAP_FOR_EACH because we want a consistent order of 
>>>> the
>>>>     * options on different architectures (big or little endian, SSE4.2) */
>>>>    const struct smap_node **sorted_opts = smap_sort(&dhcpv4_options);
>>>> @@ -13561,6 +13569,7 @@ static struct gen_opts_map supported_dhcp_opts[] = 
>>>> {
>>>>    DHCP_OPT_BOOTFILE,
>>>>    DHCP_OPT_PATH_PREFIX,
>>>>    DHCP_OPT_TFTP_SERVER_ADDRESS,
>>>> +    DHCP_OPT_HOSTNAME,
>>>>    DHCP_OPT_DOMAIN_NAME,
>>>>    DHCP_OPT_ARP_CACHE_TIMEOUT,
>>>>    DHCP_OPT_TCP_KEEPALIVE_INTERVAL,
>>>> diff --git a/ovn-nb.xml b/ovn-nb.xml
>>>> index cf1e3aac4..404b15608 100644
>>>> --- a/ovn-nb.xml
>>>> +++ b/ovn-nb.xml
>>>> @@ -929,6 +929,15 @@
>>>>          If set, indicates the maximum burst size for data sent from this
>>>>          interface, in bits.
>>>>        </column>
>>>> +
>>>> +        <column name="options" key="hostname">
>>>> +          <p>
>>>> +            If set, indicates the DHCPv4 option "Hostname" (option code 
>>>> 12)
>>>> +            associated for this Logical Switch Port. If DHCPv4 is enabled 
>>>> for
>>>> +            this Logical Switch Port, hostname dhcp option will be 
>>>> included in
>>>> +            DHCP reply.
>>>> +          </p>
>>>> +        </column>
>>>>      </group>
>>>> 
>>>>      <group title="Virtual port Options">
>>>> diff --git a/tests/ovn.at b/tests/ovn.at
>>>> index 71d2bab4d..757e15972 100644
>>>> --- a/tests/ovn.at
>>>> +++ b/tests/ovn.at
>>>> @@ -1345,6 +1345,9 @@ reg2[5] = 
>>>> put_dhcp_opts(offerip=10.0.0.4,router=10.0.0.1,netmask=255.255.254.0,m
>>>> reg2[5] = 
>>>> put_dhcp_opts(offerip=10.0.0.4,router=10.0.0.1,netmask=255.255.254.0,mtu=1400,domain_name="ovn.org",wpad="https://example.org",bootfile_name="https://127.0.0.1/boot.ipxe",path_prefix="/tftpboot",domain_search_list="ovn.org,abc.ovn.org,def.ovn.org,ovn.test,def.ovn.test,test.org,abc.com";);
>>>>    formats as reg2[5] = put_dhcp_opts(offerip = 10.0.0.4, router = 
>>>> 10.0.0.1, netmask = 255.255.254.0, mtu = 1400, domain_name = "ovn.org", 
>>>> wpad = "https://example.org";, bootfile_name = 
>>>> "https://127.0.0.1/boot.ipxe";, path_prefix = "/tftpboot", 
>>>> domain_search_list = 
>>>> "ovn.org,abc.ovn.org,def.ovn.org,ovn.test,def.ovn.test,test.org,abc.com");
>>>>    encodes as 
>>>> controller(userdata=00.00.00.02.00.00.00.00.00.01.de.10.00.00.00.25.0a.00.00.04.43.1b.68.74.74.70.73.3a.2f.2f.31.32.37.2e.30.2e.30.2e.31.2f.62.6f.6f.74.2e.69.70.78.65.03.04.0a.00.00.01.01.04.ff.ff.fe.00.1a.02.05.78.0f.07.6f.76.6e.2e.6f.72.67.fc.13.68.74.74.70.73.3a.2f.2f.65.78.61.6d.70.6c.65.2e.6f.72.67.d2.09.2f.74.66.74.70.62.6f.6f.74.77.35.03.6f.76.6e.03.6f.72.67.00.03.61.62.63.c0.00.03.64.65.66.c0.00.03.6f.76.6e.04.74.65.73.74.00.03.64.65.66.c0.15.04.74.65.73.74.c0.04.03.61.62.63.03.63.6f.6d.00,pause)
>>>> +reg2[5] = 
>>>> put_dhcp_opts(offerip=10.0.0.4,router=10.0.0.1,netmask=255.255.254.0,mtu=1400,domain_name="ovn.org",hostname="ip-10-0-0-4");
>>>> +    formats as reg2[5] = put_dhcp_opts(offerip = 10.0.0.4, router = 
>>>> 10.0.0.1, netmask = 255.255.254.0, mtu = 1400, domain_name = "ovn.org", 
>>>> hostname = "ip-10-0-0-4");
>>>> +    encodes as 
>>>> controller(userdata=00.00.00.02.00.00.00.00.00.01.de.10.00.00.00.25.0a.00.00.04.03.04.0a.00.00.01.01.04.ff.ff.fe.00.1a.02.05.78.0f.07.6f.76.6e.2e.6f.72.67.0c.0b.69.70.2d.31.30.2d.30.2d.30.2d.34,pause)
>>>> 
>>>> reg1[0..1] = put_dhcp_opts(offerip = 1.2.3.4, router = 10.0.0.1);
>>>>    Cannot use 2-bit field reg1[0..1] where 1-bit field is required.
>>>> diff --git a/tests/test-ovn.c b/tests/test-ovn.c
>>>> index 98cc2c503..a4701b4cb 100644
>>>> --- a/tests/test-ovn.c
>>>> +++ b/tests/test-ovn.c
>>>> @@ -168,6 +168,7 @@ create_gen_opts(struct hmap *dhcp_opts, struct hmap 
>>>> *dhcpv6_opts,
>>>>    dhcp_opt_add(dhcp_opts, "dns_server", 6, "ipv4");
>>>>    dhcp_opt_add(dhcp_opts, "log_server", 7, "ipv4");
>>>>    dhcp_opt_add(dhcp_opts, "lpr_server",  9, "ipv4");
>>>> +    dhcp_opt_add(dhcp_opts, "hostname", 12, "str");
>>>>    dhcp_opt_add(dhcp_opts, "domain_name", 15, "str");
>>>>    dhcp_opt_add(dhcp_opts, "swap_server", 16, "ipv4");
>>>>    dhcp_opt_add(dhcp_opts, "policy_filter", 21, "ipv4");
>>>> --
>>>> 2.30.0
>>>> 
>>>> _______________________________________________
>>>> dev mailing list
>>>> [email protected] <mailto:[email protected]>
>>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev 
>>>> <https://mail.openvswitch.org/mailman/listinfo/ovs-dev>
>>>> 
>>> _______________________________________________
>>> dev mailing list
>>> [email protected] <mailto:[email protected]>
>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev 
>>> <https://mail.openvswitch.org/mailman/listinfo/ovs-dev>
>> _______________________________________________
>> dev mailing list
>> [email protected]
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to