> On Feb 11, 2016, at 5:18 PM, Ramu Ramamurthy <ramu.ramamur...@gmail.com> 
> wrote:
> 
> @@ -65,6 +66,8 @@ get_local_iface_ids(const struct ovsrec_bridge *br_int, 
> struct shash *lports)
> 
>         for (j = 0; j < port_rec->n_interfaces; j++) {
>             const struct ovsrec_interface *iface_rec;
> +            const char *zone;
> +            int zone_id;
> 
>             iface_rec = port_rec->interfaces[j];
>             iface_id = smap_get(&iface_rec->external_ids, "iface-id");
> @@ -72,13 +75,65 @@ get_local_iface_ids(const struct ovsrec_bridge *br_int, 
> struct shash *lports)
>                 continue;
>             }
>             shash_add(lports, iface_id, iface_rec);
> +            zone = smap_get(&iface_rec->external_ids, "ovn-zone-id");

It would be good to document "ovn-zone-id" in the "OPEN VSWITCH DATABASE USAGE" 
section of the ovn-controller man page.

> +static void
> +update_local_zone_ids(const struct ovsrec_bridge *br_int, struct simap 
> *ct_zones,
> +                      struct controller_ctx *ctx)
> +{
> +    int i;
> +
> +    if (!ctx->ovs_idl_txn || !br_int) {
> +        return;
> +    }
> +
> +    for (i = 0; i < br_int->n_ports; i++) {
> +        const struct ovsrec_port *port_rec = br_int->ports[i];
> +        int j;
> +
> +        if (!strcmp(port_rec->name, br_int->name)) {
> +            continue;
> +        }
> +
> +        for (j = 0; j < port_rec->n_interfaces; j++) {
> +            const struct ovsrec_interface *iface_rec;
> +            const char *iface_id;
> +            struct smap new;
> +            int zone_id;
> +            char zone[12];
> +
> +            iface_rec = port_rec->interfaces[j];
> +            iface_id = smap_get(&iface_rec->external_ids, "iface-id");
> +
> +            if (!iface_id ||
> +                smap_get(&iface_rec->external_ids, "ovn-zone-id") ||
> +                !simap_contains(ct_zones, iface_id)) {
> +                continue;
> +            }
> +
> +            zone_id = simap_get(ct_zones, iface_id);
> +            snprintf(zone, sizeof zone, "%d", zone_id);
> +            smap_clone(&new, &iface_rec->external_ids);
> +            smap_replace(&new, "ovn-zone-id", zone);
> +            ovsrec_interface_verify_external_ids(iface_rec);
> +            ovsrec_interface_set_external_ids(iface_rec, &new);
> +            smap_destroy(&new);
>         }
>     }
> }
> 
> static void
> update_ct_zones(struct sset *lports, struct simap *ct_zones,
> -                unsigned long *ct_zone_bitmap)
> +                unsigned long *ct_zone_bitmap,
> +                const struct ovsrec_bridge *br_int,
> +                struct controller_ctx *ctx)
> {
>     struct simap_node *ct_zone, *ct_zone_next;
>     const char *iface_id;
> @@ -119,6 +174,7 @@ update_ct_zones(struct sset *lports, struct simap 
> *ct_zones,
>          * xxx zone, but we need a generic interface to the conntrack
>          * xxx table. */
>     }
> +    update_local_zone_ids(br_int, ct_zones, ctx);

Is it possible to remove update_local_zone_ids()?  It gets run every time 
through binding_run() and it just goes through all the interfaces on the system 
to see if any don't have "ovn-zone-id" and then sets them.  There's a call to 
get_local_iface_ids() in binding_run() that should retrieve all the existing 
zone ids from the interface records.  The only additions I can think of are 
coming from update_ct_zones() which is allocating and assigning the zone ids.  
Couldn't we just set "ovn-zone-id" there?

This will be a nice addition.  Don't forget to add yourself to AUTHORS, also.

--Justin


_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to