From: Ben Pfaff Date: Tue, 19 Aug 2008 20:56:28 +0000 (-0700) Subject: Eliminate dpctl dependency on /sbin/ifconfig. X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=5d3042a11f54361edc0e2ab49ef56d0175374dc3;p=sliver-openvswitch.git Eliminate dpctl dependency on /sbin/ifconfig. --- diff --git a/utilities/dpctl.c b/utilities/dpctl.c index bade78ab9..381a1c785 100644 --- a/utilities/dpctl.c +++ b/utilities/dpctl.c @@ -44,23 +44,25 @@ #include #include -#include "command-line.h" -#include "compiler.h" -#include "buffer.h" -#include "dpif.h" #ifdef HAVE_NETLINK +#include "netdev.h" #include "netlink.h" #include "openflow-netlink.h" #endif -#include "util.h" -#include "socket-util.h" -#include "openflow.h" + +#include "buffer.h" +#include "command-line.h" +#include "compiler.h" +#include "dpif.h" #include "ofp-print.h" +#include "openflow.h" #include "packets.h" #include "random.h" +#include "socket-util.h" #include "timeval.h" -#include "vconn.h" +#include "util.h" #include "vconn-ssl.h" +#include "vconn.h" #include "vlog.h" #define THIS_MODULE VLM_dpctl @@ -68,8 +70,6 @@ #define DEFAULT_IDLE_TIMEOUT 60 #define MAX_ADD_ACTS 5 -static const char* ifconfigbin = "/sbin/ifconfig"; - #define MOD_PORT_CMD_UP "up" #define MOD_PORT_CMD_DOWN "down" #define MOD_PORT_CMD_FLOOD "flood" @@ -246,12 +246,17 @@ static void run(int retval, const char *message, ...) #ifdef HAVE_NETLINK /* Netlink-only commands. */ -static int if_up(const char* intf) +static int if_up(const char *netdev_name) { - char command[256]; - snprintf(command, sizeof command, "%s %s up &> /dev/null", - ifconfigbin, intf); - return system(command); + struct netdev *netdev; + int retval; + + retval = netdev_open(netdev_name, NETDEV_ETH_TYPE_NONE, &netdev); + if (!retval) { + retval = netdev_turn_flags_on(netdev, NETDEV_UP, true); + netdev_close(netdev); + } + return retval; } static void open_nl_vconn(const char *name, bool subscribe, struct dpif *dpif) @@ -305,8 +310,8 @@ static void add_del_ports(int argc UNUSED, char *argv[], static int ifup_and_add_port(struct dpif *dpif, const char *netdev) { - if_up(netdev); - return dpif_add_port(dpif, netdev); + int retval = if_up(netdev); + return retval ? retval : dpif_add_port(dpif, netdev); } static void do_add_port(int argc UNUSED, char *argv[])