[ovs-dev] [PATCH v10 2/2] ovn-northd: Add logical flows to support native DHCP

Numan Siddique nusiddiq at redhat.com
Fri Jun 10 03:22:15 UTC 2016


On Fri, Jun 10, 2016 at 3:34 AM, FlaviofOvsML <ovs at flaviof.com> wrote:

>
>
> On Tue, Jun 7, 2016 at 1:49 AM, Numan Siddique <nusiddiq at redhat.com>
> wrote:
>
>> OVN implements a native DHCP support which caters to the common
>> use case of providing an IP address to a booting instance by
>> providing stateless replies to DHCP requests based on statically
>> configured address mappings. To do this it allows a short list of
>> DHCP options to be configured and applied at each compute host
>> running ovn-controller.
>>
>> A new table 'Subnet' is added in OVN NB DB to store the DHCP options.
>>
>> For each logical port following flows are added if the CMS has defined
>> DHCP options in the 'Subnet' column
>>
>>  - A logical flow which copies the DHCP options to the DHCP
>>    request packets using the 'put_dhcp_opts' action and advances the
>>    packet to the next stage.
>>
>>  - A logical flow which implements the DHCP reponder by sending
>>    the DHCP reply back to the inport once the 'put_dhcp_opts' action
>>    is applied.
>>
>> Signed-Off-by: Numan Siddique <nusiddiq at redhat.com>
>> ---
>>  ovn/northd/ovn-northd.8.xml   |  89 +++++++++++-
>>  ovn/northd/ovn-northd.c       | 265 ++++++++++++++++++++++++++++++++++-
>>  ovn/ovn-nb.ovsschema          |  19 ++-
>>  ovn/ovn-nb.xml                | 314
>> +++++++++++++++++++++++++++++++++++++++++-
>>  ovn/utilities/ovn-nbctl.8.xml |  29 ++++
>>  ovn/utilities/ovn-nbctl.c     | 196 ++++++++++++++++++++++++++
>>  tests/ovn.at                  | 250 +++++++++++++++++++++++++++++++++
>>  tests/test-ovn-dhcp.c         | 135 ++++++++++++++++++
>>  8 files changed, 1287 insertions(+), 10 deletions(-)
>>
>>
> Hi Numan,
>
> I see that this version is beind superseded... but may I point out a
> feedback
> on something that looks missing.
>
> <snip>
>
>
>
>> diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c
>>
> index cac0148..325fbc0 100644
>> --- a/ovn/northd/ovn-northd.c
>> +++ b/ovn/northd/ovn-northd.c
>>
>>
> <snip>
>
>
>>  static void
>>  build_acls(struct ovn_datapath *od, struct hmap *lflows, struct hmap
>> *ports)
>>  {
>> @@ -1475,6 +1555,36 @@ build_acls(struct ovn_datapath *od, struct hmap
>> *lflows, struct hmap *ports)
>>                            acl->match, "drop;");
>>          }
>>      }
>> +
>> +    /* Add 34000 priority flow to allow DHCP reply from ovn-controller
>> to all
>> +     * logical ports of the datapath if the CMS has configured DHCP
>> options*/
>> +    if (od->nbs && od->nbs->n_ports && od->nbs->n_subnets) {
>> +        for (size_t i = 0; i < od->nbs->n_subnets; i++) {
>> +             if (!(od->nbs->subnets[i]->gateway_ip &&
>> +                   od->nbs->subnets[i]->enable_dhcp &&
>> +                   od->nbs->subnets[i]->ip_version == 4)) {
>> +                 continue;
>> +             }
>> +
>> +             const char *server_id = smap_get(
>> +                 &od->nbs->subnets[i]->dhcp_options, "server_id");
>> +             const char *server_mac = smap_get(
>> +                 &od->nbs->subnets[i]->dhcp_options, "server_mac");
>> +             const char *lease_time = smap_get(
>> +                 &od->nbs->subnets[i]->dhcp_options, "lease_time");
>> +             if (server_id && server_mac && lease_time) {
>> +                 struct ds match = DS_EMPTY_INITIALIZER;
>> +                 const char *actions = has_stateful ? "ct_commit; next;"
>> :
>> +                                       "next;";
>> +                 ds_put_format(&match, "eth.src == %s && ip4.src == %s
>> &&"
>> +                               " udp && udp.src == 67 && udp.dst == 68",
>> +                               server_mac, server_id);
>> +                 ovn_lflow_add(
>> +                     lflows, od, S_SWITCH_OUT_ACL, 34000,
>> ds_cstr(&match),
>> +                     actions);
>>
>
> ds_destroy(&match);    <== missing that, right?
>

​Ack. It is missing. Thanks for finding it out.
​


>
>
>> +             }
>> +        }
>> +    }
>>  }
>>
>>
> <snip>
>
> -- flaviof
>
>



More information about the dev mailing list