[ovs-dev] [netdevs 4/4] netdev: Get rid of struct netdev_options and netdev_open_default().
Ethan Jackson
ethan at nicira.com
Mon Aug 8 13:04:12 PDT 2011
Looks good.
Ethan
On Fri, Aug 5, 2011 at 14:42, Ben Pfaff <blp at nicira.com> wrote:
> Now that netdev_options only has two members, we might as well pass them
> directly as parameters.
> ---
> lib/bond.c | 2 +-
> lib/dpif-netdev.c | 9 +++------
> lib/netdev-vport.c | 2 +-
> lib/netdev.c | 32 +++++++++++---------------------
> lib/netdev.h | 8 +-------
> ofproto/in-band.c | 4 ++--
> ofproto/ofproto-dpif-sflow.c | 4 ++--
> ofproto/ofproto.c | 7 +------
> tests/test-openflowd.c | 2 +-
> utilities/ovs-dpctl.c | 29 ++++++++++++-----------------
> vswitchd/bridge.c | 10 ++--------
> vswitchd/ovs-brcompatd.c | 2 +-
> 12 files changed, 38 insertions(+), 73 deletions(-)
>
> diff --git a/lib/bond.c b/lib/bond.c
> index 9a13874..ae914dd 100644
> --- a/lib/bond.c
> +++ b/lib/bond.c
> @@ -1507,7 +1507,7 @@ bond_update_fake_slave_stats(struct bond *bond)
> }
> }
>
> - if (!netdev_open_default(bond->name, &bond_dev)) {
> + if (!netdev_open(bond->name, "system", &bond_dev)) {
> netdev_set_stats(bond_dev, &bond_stats);
> netdev_close(bond_dev);
> }
> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> index fa6b549..9f281c2 100644
> --- a/lib/dpif-netdev.c
> +++ b/lib/dpif-netdev.c
> @@ -331,7 +331,6 @@ do_add_port(struct dp_netdev *dp, const char *devname, const char *type,
> uint16_t port_no)
> {
> struct dp_netdev_port *port;
> - struct netdev_options netdev_options;
> struct netdev *netdev;
> bool internal;
> int mtu;
> @@ -348,15 +347,13 @@ do_add_port(struct dp_netdev *dp, const char *devname, const char *type,
> }
>
> /* Open and validate network device. */
> - memset(&netdev_options, 0, sizeof netdev_options);
> - netdev_options.name = devname;
> if (dp->class == &dpif_dummy_class) {
> - netdev_options.type = "dummy";
> + type = "dummy";
> } else if (internal) {
> - netdev_options.type = "tap";
> + type = "tap";
> }
>
> - error = netdev_open(&netdev_options, &netdev);
> + error = netdev_open(devname, type, &netdev);
> if (error) {
> return error;
> }
> diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c
> index fc20232..8e5b5b5 100644
> --- a/lib/netdev-vport.c
> +++ b/lib/netdev-vport.c
> @@ -435,7 +435,7 @@ netdev_vport_get_status(const struct netdev *netdev, struct shash *sh)
>
> shash_add(sh, "tunnel_egress_iface", xstrdup(iface));
>
> - if (!netdev_open_default(iface, &egress_netdev)) {
> + if (!netdev_open(iface, "system", &egress_netdev)) {
> shash_add(sh, "tunnel_egress_iface_carrier",
> xstrdup(netdev_get_carrier(egress_netdev)
> ? "up" : "down"));
> diff --git a/lib/netdev.c b/lib/netdev.c
> index ec8ae4f..cd824f8 100644
> --- a/lib/netdev.c
> +++ b/lib/netdev.c
> @@ -192,14 +192,15 @@ netdev_enumerate_types(struct sset *types)
> }
> }
>
> -/* Opens the network device named 'name' (e.g. "eth0") and returns zero if
> - * successful, otherwise a positive errno value. On success, sets '*netdevp'
> - * to the new network device, otherwise to null.
> +/* Opens the network device named 'name' (e.g. "eth0") of the specified 'type'
> + * (e.g. "system") and returns zero if successful, otherwise a positive errno
> + * value. On success, sets '*netdevp' to the new network device, otherwise to
> + * null.
> *
> * Some network devices may need to be configured (with netdev_set_config())
> * before they can be used. */
> int
> -netdev_open(struct netdev_options *options, struct netdev **netdevp)
> +netdev_open(const char *name, const char *type, struct netdev **netdevp)
> {
> struct netdev_dev *netdev_dev;
> int error;
> @@ -207,18 +208,18 @@ netdev_open(struct netdev_options *options, struct netdev **netdevp)
> *netdevp = NULL;
> netdev_initialize();
>
> - netdev_dev = shash_find_data(&netdev_dev_shash, options->name);
> + netdev_dev = shash_find_data(&netdev_dev_shash, name);
>
> if (!netdev_dev) {
> const struct netdev_class *class;
>
> - class = netdev_lookup_provider(options->type);
> + class = netdev_lookup_provider(type);
> if (!class) {
> VLOG_WARN("could not create netdev %s of unknown type %s",
> - options->name, options->type);
> + name, type);
> return EAFNOSUPPORT;
> }
> - error = class->create(class, options->name, &netdev_dev);
> + error = class->create(class, name, &netdev_dev);
> if (error) {
> return error;
> }
> @@ -239,17 +240,6 @@ netdev_open(struct netdev_options *options, struct netdev **netdevp)
> return error;
> }
>
> -int
> -netdev_open_default(const char *name, struct netdev **netdevp)
> -{
> - struct netdev_options options;
> -
> - memset(&options, 0, sizeof options);
> - options.name = name;
> -
> - return netdev_open(&options, netdevp);
> -}
> -
> /* Reconfigures the device 'netdev' with 'args'. 'args' may be empty
> * or NULL if none are needed. */
> int
> @@ -321,7 +311,7 @@ netdev_exists(const char *name)
> struct netdev *netdev;
> int error;
>
> - error = netdev_open_default(name, &netdev);
> + error = netdev_open(name, "system", &netdev);
> if (!error) {
> netdev_close(netdev);
> return true;
> @@ -1265,7 +1255,7 @@ netdev_find_dev_by_in4(const struct in_addr *in4)
> SSET_FOR_EACH (name, &dev_list) {
> struct in_addr dev_in4;
>
> - if (!netdev_open_default(name, &netdev)
> + if (!netdev_open(name, "system", &netdev)
> && !netdev_get_in4(netdev, &dev_in4, NULL)
> && dev_in4.s_addr == in4->s_addr) {
> goto exit;
> diff --git a/lib/netdev.h b/lib/netdev.h
> index bcbd8b0..13d2ee7 100644
> --- a/lib/netdev.h
> +++ b/lib/netdev.h
> @@ -75,11 +75,6 @@ struct netdev_stats {
> uint64_t tx_window_errors;
> };
>
> -struct netdev_options {
> - const char *name;
> - const char *type;
> -};
> -
> struct netdev;
> struct netdev_class;
>
> @@ -89,8 +84,7 @@ void netdev_wait(void);
> void netdev_enumerate_types(struct sset *types);
>
> /* Open and close. */
> -int netdev_open(struct netdev_options *, struct netdev **);
> -int netdev_open_default(const char *name, struct netdev **);
> +int netdev_open(const char *name, const char *type, struct netdev **);
> void netdev_close(struct netdev *);
>
> bool netdev_exists(const char *name);
> diff --git a/ofproto/in-band.c b/ofproto/in-band.c
> index 764b252..f9dd218 100644
> --- a/ofproto/in-band.c
> +++ b/ofproto/in-band.c
> @@ -131,7 +131,7 @@ refresh_remote(struct in_band *ib, struct in_band_remote *r)
> {
> netdev_close(r->remote_netdev);
>
> - retval = netdev_open_default(next_hop_dev, &r->remote_netdev);
> + retval = netdev_open(next_hop_dev, "system", &r->remote_netdev);
> if (retval) {
> VLOG_WARN_RL(&rl, "cannot open netdev %s (next hop "
> "to controller "IP_FMT"): %s",
> @@ -472,7 +472,7 @@ in_band_create(struct ofproto *ofproto, const char *local_name,
> int error;
>
> *in_bandp = NULL;
> - error = netdev_open_default(local_name, &local_netdev);
> + error = netdev_open(local_name, "system", &local_netdev);
> if (error) {
> VLOG_ERR("failed to initialize in-band control: cannot open "
> "datapath local port %s (%s)", local_name, strerror(error));
> diff --git a/ofproto/ofproto-dpif-sflow.c b/ofproto/ofproto-dpif-sflow.c
> index d2da42b..303623c 100644
> --- a/ofproto/ofproto-dpif-sflow.c
> +++ b/ofproto/ofproto-dpif-sflow.c
> @@ -235,7 +235,7 @@ sflow_choose_agent_address(const char *agent_device, const char *control_ip,
> if (agent_device) {
> struct netdev *netdev;
>
> - if (!netdev_open_default(agent_device, &netdev)) {
> + if (!netdev_open(agent_device, "system", &netdev)) {
> int error = netdev_get_in4(netdev, &in4, NULL);
> netdev_close(netdev);
> if (!error) {
> @@ -337,7 +337,7 @@ dpif_sflow_add_port(struct dpif_sflow *ds, uint16_t odp_port,
> dpif_sflow_del_port(ds, odp_port);
>
> /* Open network device. */
> - error = netdev_open_default(netdev_name, &netdev);
> + error = netdev_open(netdev_name, "system", &netdev);
> if (error) {
> VLOG_WARN_RL(&rl, "failed to open network device \"%s\": %s",
> netdev_name, strerror(error));
> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
> index 8054d05..6203676 100644
> --- a/ofproto/ofproto.c
> +++ b/ofproto/ofproto.c
> @@ -1107,16 +1107,11 @@ static struct netdev *
> ofport_open(const struct ofproto_port *ofproto_port, struct ofp_phy_port *opp)
> {
> uint32_t curr, advertised, supported, peer;
> - struct netdev_options netdev_options;
> enum netdev_flags flags;
> struct netdev *netdev;
> int error;
>
> - memset(&netdev_options, 0, sizeof netdev_options);
> - netdev_options.name = ofproto_port->name;
> - netdev_options.type = ofproto_port->type;
> -
> - error = netdev_open(&netdev_options, &netdev);
> + error = netdev_open(ofproto_port->name, ofproto_port->type, &netdev);
> if (error) {
> VLOG_WARN_RL(&rl, "ignoring port %s (%"PRIu16") because netdev %s "
> "cannot be opened (%s)",
> diff --git a/tests/test-openflowd.c b/tests/test-openflowd.c
> index 2c91310..016e1cb 100644
> --- a/tests/test-openflowd.c
> +++ b/tests/test-openflowd.c
> @@ -124,7 +124,7 @@ main(int argc, char *argv[])
> SSET_FOR_EACH (port, &s.ports) {
> struct netdev *netdev;
>
> - error = netdev_open_default(port, &netdev);
> + error = netdev_open(port, "system", &netdev);
> if (error) {
> VLOG_FATAL("%s: failed to open network device (%s)",
> port, strerror(error));
> diff --git a/utilities/ovs-dpctl.c b/utilities/ovs-dpctl.c
> index 3b4749c..e084868 100644
> --- a/utilities/ovs-dpctl.c
> +++ b/utilities/ovs-dpctl.c
> @@ -166,7 +166,7 @@ static int if_up(const char *netdev_name)
> struct netdev *netdev;
> int retval;
>
> - retval = netdev_open_default(netdev_name, &netdev);
> + retval = netdev_open(netdev_name, "system", &netdev);
> if (!retval) {
> retval = netdev_turn_flags_on(netdev, NETDEV_UP, true);
> netdev_close(netdev);
> @@ -222,17 +222,17 @@ do_add_if(int argc OVS_UNUSED, char *argv[])
>
> run(parsed_dpif_open(argv[1], false, &dpif), "opening datapath");
> for (i = 2; i < argc; i++) {
> + const char *name, *type;
> char *save_ptr = NULL;
> - struct netdev_options options;
> struct netdev *netdev = NULL;
> struct shash args;
> char *option;
> int error;
>
> - options.name = strtok_r(argv[i], ",", &save_ptr);
> - options.type = "system";
> + name = strtok_r(argv[i], ",", &save_ptr);
> + type = "system";
>
> - if (!options.name) {
> + if (!name) {
> ovs_error(0, "%s is not a valid network device name", argv[i]);
> continue;
> }
> @@ -249,33 +249,31 @@ do_add_if(int argc OVS_UNUSED, char *argv[])
> }
>
> if (!strcmp(key, "type")) {
> - options.type = value;
> + type = value;
> } else if (!shash_add_once(&args, key, value)) {
> ovs_error(0, "duplicate \"%s\" option", key);
> }
> }
>
> - error = netdev_open(&options, &netdev);
> + error = netdev_open(name, type, &netdev);
> if (error) {
> - ovs_error(error, "%s: failed to open network device",
> - options.name);
> + ovs_error(error, "%s: failed to open network device", name);
> goto next;
> }
>
> error = netdev_set_config(netdev, &args);
> if (error) {
> - ovs_error(error, "%s: failed to configure network device",
> - options.name);
> + ovs_error(error, "%s: failed to configure network device", name);
> goto next;
> }
>
> error = dpif_port_add(dpif, netdev, NULL);
> if (error) {
> - ovs_error(error, "adding %s to %s failed", options.name, argv[1]);
> + ovs_error(error, "adding %s to %s failed", name, argv[1]);
> goto next;
> }
>
> - error = if_up(options.name);
> + error = if_up(name);
>
> next:
> netdev_close(netdev);
> @@ -383,15 +381,12 @@ show_dpif(struct dpif *dpif)
> printf("\tport %u: %s", dpif_port.port_no, dpif_port.name);
>
> if (strcmp(dpif_port.type, "system")) {
> - struct netdev_options netdev_options;
> struct netdev *netdev;
> int error;
>
> printf (" (%s", dpif_port.type);
>
> - netdev_options.name = dpif_port.name;
> - netdev_options.type = dpif_port.type;
> - error = netdev_open(&netdev_options, &netdev);
> + error = netdev_open(dpif_port.name, dpif_port.type, &netdev);
> if (!error) {
> struct shash config;
>
> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
> index f417859..bc153fc 100644
> --- a/vswitchd/bridge.c
> +++ b/vswitchd/bridge.c
> @@ -850,10 +850,7 @@ bridge_add_ofproto_ports(struct bridge *br)
>
> /* Open the netdev. */
> if (!iface->netdev) {
> - struct netdev_options options;
> - options.name = iface->name;
> - options.type = iface->type;
> - error = netdev_open(&options, &iface->netdev);
> + error = netdev_open(iface->name, iface->type, &iface->netdev);
> if (error) {
> VLOG_WARN("could not open network device %s (%s)",
> iface->name, strerror(error));
> @@ -928,13 +925,10 @@ bridge_add_ofproto_ports(struct bridge *br)
> if (port_is_bond_fake_iface(port)) {
> if (ofproto_port_query_by_name(br->ofproto, port->name,
> &ofproto_port)) {
> - struct netdev_options options;
> struct netdev *netdev;
> int error;
>
> - options.name = port->name;
> - options.type = "internal";
> - error = netdev_open(&options, &netdev);
> + error = netdev_open(port->name, "internal", &netdev);
> if (!error) {
> ofproto_port_add(br->ofproto, netdev, NULL);
> netdev_close(netdev);
> diff --git a/vswitchd/ovs-brcompatd.c b/vswitchd/ovs-brcompatd.c
> index d9b3bc3..c1cc817 100644
> --- a/vswitchd/ovs-brcompatd.c
> +++ b/vswitchd/ovs-brcompatd.c
> @@ -488,7 +488,7 @@ handle_fdb_query_cmd(struct ofpbuf *buffer)
> struct mac *mac = &local_macs[n_local_macs];
> struct netdev *netdev;
>
> - error = netdev_open_default(iface_name, &netdev);
> + error = netdev_open(iface_name, "system", &netdev);
> if (!error) {
> if (!netdev_get_etheraddr(netdev, mac->addr)) {
> n_local_macs++;
> --
> 1.7.4.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
More information about the dev
mailing list