> From: Ben Pfaff [mailto:b...@nicira.com]
> On Fri, Mar 06, 2015 at 03:37:38PM +0000, Mark D. Gray wrote:
> > From: "Mark D. Gray" <mark.d.g...@intel.com>
> >
> > This patch enumerates datapath and port types and adds this
> > information to the datapath_types and port_types columns in the ovsdb.
> >
> > This allows an ovsdb client to query the datapath in order to
> > determine if certain datapath and port types exist. For example, by
> > querying the port_types column, an ovsdb client will be able to
> > determine if this instance of ovs-vswitchd was compiled with DPDK
> > support.
> >
> > Signed-off-by: Mark D. Gray <mark.d.g...@intel.com>
> 
> I'd fold this in with the previous patch that adds the columns.
Ok
> 
> We don't generally use double new-lines, so I'd drop this hunk:
> > @@ -317,6 +319,7 @@ static ofp_port_t iface_get_requested_ofp_port(
> >      const struct ovsrec_interface *);  static ofp_port_t
> > iface_pick_ofport(const struct ovsrec_interface *);
> >
> > +
> >  /* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.)
> >   *
> >   * This is deprecated.  It is only for compatibility with broken
> > device drivers
> 
> CodingStyle requires {} here.  However, it's wasteful to do this on every trip
> through the OVS main loop; it should not be necessary:
Ok, will have a look at this

> > @@ -2889,6 +2896,9 @@ bridge_run(void)
> >      }
> >      cfg = ovsrec_open_vswitch_first(idl);
> >
> > +    if (cfg)
> > +        discover_types(cfg);
> > +
> >      /* Initialize the ofproto library.  This only needs to run once, but
> >       * it must be done after the configuration is set.  If the
> >       * initialization has already occurred, bridge_init_ofproto()
> 
> 
> > +/*
> > + * Add registered netdev and dpif types to ovsdb to allow external
> > + * applications to query the capabilities of the Open vSwitch
> > +instance
> > + * running on the node.
> > + */
> > +static void
> > +discover_types(const struct ovsrec_open_vswitch *cfg) {
> > +    struct sset types;
> > +    const char *type;
> > +    struct ovsdb_idl_txn *txn;
> > +    size_t n_dp_types, n_port_types;
> > +    unsigned int i;
> > +    const char **datapath_types;
> > +    const char **port_types;
> > +
> > +    txn = ovsdb_idl_txn_create(idl);
> > +
> > +    /* datapath types */
> > +    sset_init(&types);
> > +    dp_enumerate_types(&types);
> > +    n_dp_types = sset_count(&types);
> 
> Please use "sizeof *datapath_types" instead of "sizeof(char *)" as
> recommended by CodingStyle.  Ditto one other place below:
> > +    datapath_types = xmalloc(sizeof(char *) * n_dp_types);
> > +
> > +    i = 0;
> > +    SSET_FOR_EACH(type, &types) {
> 
> I don't think there's value in doing the xstrdup() here.  It just creates more
> data to free later.  Ditto one other place later:
Ok
> > +        datapath_types[i++] = xstrdup(type);
> > +    }
> > +
> > +    ovsrec_open_vswitch_set_datapath_types(cfg, datapath_types,
> > + n_dp_types);
> > +
> > +    sset_destroy(&types);
> > +
> > +    /* port types */
> > +    sset_init(&types);
> > +    netdev_enumerate_types(&types);
> > +    n_port_types = sset_count(&types);
> > +
> > +    port_types = xmalloc(sizeof(char *) * n_port_types);
> > +
> > +    i = 0;
> > +    SSET_FOR_EACH(type, &types) {
> > +        port_types[i++] = xstrdup(type);
> > +    }
> > +
> > +    ovsrec_open_vswitch_set_port_types(cfg, port_types, n_port_types);
> > +    sset_destroy(&types);
> > +
> > +    /* clean up any allocated memory */
> > +    for (i = 0; i < n_dp_types; i++) {
> > +         free((char *)datapath_types[i]);
> > +    }
> > +
> > +    free(datapath_types);
> > +    for (i = 0; i < n_port_types; i++) {
> > +         free((char *)port_types[i]);
> > +    }
> > +    free(port_types);
> > +
> > +    ovsdb_idl_txn_commit(txn);
> > +    ovsdb_idl_txn_destroy(txn);
> > +}
> 
> Thanks,
> 
> Ben.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to