[ovs-dev] [PATCH V8 2/3] ovn-controller-vtep: Extend vtep module to install Ucast_Macs_Remote.

Alex Wang alexw at nicira.com
Fri Aug 28 06:13:54 UTC 2015


Hey Russell,

Sorry for this very delayed reply,~

Please see my reply inline,

Thanks,
Alex Wang,

On Mon, Aug 24, 2015 at 10:48 AM, Russell Bryant <rbryant at redhat.com> wrote:

> On 08/23/2015 02:06 PM, Alex Wang wrote:
> > This commit extends the vtep module to support creating the
> > 'Ucast_Macs_Remote' table entries in the vtep database for
> > MAC addresses on the ovn logical ports.
> >
> > Signed-off-by: Alex Wang <alexw at nicira.com>
>
> Acked-by: Russell Bryant <rbryant at redhat.com>
>
> > +/* Updates the vtep 'Ucast_Macs_Remote' table based on non-vtep port
> > + * bindings. */
> > +static void
> > +vtep_macs_run(struct ovsdb_idl_txn *vtep_idl_txn, struct shash
> *ucast_macs_rmts,
> > +              struct shash *physical_locators, struct shash
> *vtep_lswitches,
> > +              struct shash *other_pbs)
> > +{
> > +    struct shash_node *node;
> > +    struct hmap ls_map;
> > +
> > +    /* Maps from ovn logical datapath tunnel key (which is also the vtep
> > +     * logical switch tunnel key) to the corresponding vtep logical
> switch
> > +     * instance.  Also, the shash map 'added_macs' is used for checking
> > +     * duplicated MAC addresses in the same ovn logical datapath. */
> > +    struct ls_hash_node {
> > +        struct hmap_node hmap_node;
> > +
> > +        const struct vteprec_logical_switch *vtep_ls;
> > +        struct shash added_macs;
> > +    };
> > +
> > +    hmap_init(&ls_map);
> > +    SHASH_FOR_EACH (node, vtep_lswitches) {
> > +        struct ls_hash_node *ls_node = xmalloc(sizeof *ls_node);
> > +
> > +        ls_node->vtep_ls = node->data;
> > +        shash_init(&ls_node->added_macs);
> > +        hmap_insert(&ls_map, &ls_node->hmap_node,
> > +                    hash_uint64((uint64_t)
> ls_node->vtep_ls->tunnel_key[0]));
> > +    }
> > +
> > +    SHASH_FOR_EACH (node, other_pbs) {
> > +        const struct sbrec_port_binding *port_binding_rec = node->data;
> > +        const struct sbrec_chassis *chassis_rec;
> > +        struct ls_hash_node *ls_node;
> > +        const char *chassis_ip;
> > +        int64_t tnl_key;
> > +        size_t i;
> > +
> > +        chassis_rec = port_binding_rec->chassis;
> > +        chassis_ip = get_chassis_vtep_ip(chassis_rec);
> > +
> > +        /* Unreachable chassis, continue. */
> > +        if (!chassis_ip) {
>
> It may be worth logging a rate-limited warning here if chassis_rec is
> non-NULL.  It seems like this could be pretty easy to hit with a config
> mistake (forgetting to configure the vxlan encap on a regular chassis).
>
>

At this stage, we do not know if this port_binding entry is in a logical
network extended by vtep switch or not...  so this could be a false alarm,

So, I move it a bit later and add the VLOG_INFO_RL().



> > +            continue;
> > +        }
> > +
> > +        tnl_key = port_binding_rec->datapath->tunnel_key;
> > +        HMAP_FOR_EACH_WITH_HASH (ls_node, hmap_node,
> > +                                 hash_uint64((uint64_t) tnl_key),
> > +                                 &ls_map) {
> > +            if (ls_node->vtep_ls->tunnel_key[0] == tnl_key) {
> > +                break;
> > +            }
> > +        }
> > +        /* If 'ls_node' is NULL, that means no vtep logical switch is
> > +         * attached to the corresponding ovn logical datapath, so pass.
> > +         * 'ls_node' will be NULL, if the previous loop does not break,
> > +         * since the 'hmap_node' is the first member of the struct. */
>
> It's not a big deal, but Ben merged my patch that ensures ls_node will
> always be NULL, even if it isn't the first struct member, so the comment
> isn't needed anymore.
>
>
Yeah, I removed the part explaining 'hmap_node' is the first member of
struct.



>
>
> --
> Russell Bryant
>



More information about the dev mailing list