Move the latter case of net_init_tap() to a separate function.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Tested-by: Lei Yang <leiyang@redhat.com>
---
net/tap.c | 96 ++++++++++++++++++++++++++++++-------------------------
1 file changed, 53 insertions(+), 43 deletions(-)
diff --git a/net/tap.c b/net/tap.c
index d2f84586ed..faee5cbeb3 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -805,6 +805,49 @@ failed:
return -1;
}
+static int net_tap_open(const Netdev *netdev,
+ const char *name,
+ NetClientState *peer,
+ Error **errp)
+{
+ const NetdevTapOptions *tap = &netdev->u.tap;
+ const char *script = tap->script;
+ const char *downscript = tap->downscript;
+ int queues = tap->has_queues ? tap->queues : 1;
+ g_autofree char *default_script = NULL;
+ g_autofree char *default_downscript = NULL;
+ char ifname[128];
+ int i, ret;
+
+ assert(netdev->type == NET_CLIENT_DRIVER_TAP);
+
+ if (!script) {
+ script = default_script = get_relocated_path(DEFAULT_NETWORK_SCRIPT);
+ }
+ if (!downscript) {
+ downscript = default_downscript =
+ get_relocated_path(DEFAULT_NETWORK_DOWN_SCRIPT);
+ }
+
+ if (tap->ifname) {
+ pstrcpy(ifname, sizeof ifname, tap->ifname);
+ } else {
+ ifname[0] = '\0';
+ }
+
+ for (i = 0; i < queues; i++) {
+ ret = net_tap_open_one(netdev, name, peer,
+ i >= 1 ? "no" : script,
+ i >= 1 ? "no" : downscript,
+ ifname, sizeof ifname, queues > 1, errp);
+ if (ret < 0) {
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
int net_init_tap(const Netdev *netdev, const char *name,
NetClientState *peer, Error **errp)
{
@@ -857,12 +900,9 @@ int net_init_tap(const Netdev *netdev, const char *name,
return -1;
}
- ret = net_init_tap_one(netdev, peer, "tap", name, NULL,
- NULL, NULL,
- tap->vhostfd, vnet_hdr, fd, errp);
- if (ret < 0) {
- return -1;
- }
+ return net_init_tap_one(netdev, peer, "tap", name, NULL,
+ NULL, NULL,
+ tap->vhostfd, vnet_hdr, fd, errp);
} else if (tap->fds) {
g_auto(GStrv) fds = NULL;
g_auto(GStrv) vhost_fds = NULL;
@@ -914,6 +954,8 @@ int net_init_tap(const Netdev *netdev, const char *name,
return -1;
}
}
+
+ return 0;
} else if (tap->helper) {
if (tap->vhostfds) {
error_setg(errp, "vhostfds= is invalid with helper=");
@@ -921,46 +963,14 @@ int net_init_tap(const Netdev *netdev, const char *name,
}
return net_init_bridge(netdev, name, peer, errp);
- } else {
- const char *script = tap->script;
- const char *downscript = tap->downscript;
- int queues = tap->has_queues ? tap->queues : 1;
- g_autofree char *default_script = NULL;
- g_autofree char *default_downscript = NULL;
- char ifname[128];
-
- if (tap->vhostfds) {
- error_setg(errp, "vhostfds= is invalid if fds= wasn't specified");
- return -1;
- }
-
- if (!script) {
- script = default_script = get_relocated_path(DEFAULT_NETWORK_SCRIPT);
- }
- if (!downscript) {
- downscript = default_downscript =
- get_relocated_path(DEFAULT_NETWORK_DOWN_SCRIPT);
- }
-
- if (tap->ifname) {
- pstrcpy(ifname, sizeof ifname, tap->ifname);
- } else {
- ifname[0] = '\0';
- }
-
- for (i = 0; i < queues; i++) {
- ret = net_tap_open_one(netdev, name, peer,
- i >= 1 ? "no" : script,
- i >= 1 ? "no" : downscript,
- ifname, sizeof ifname, queues > 1, errp);
- if (ret < 0) {
- return -1;
- }
+ }
- }
+ if (tap->vhostfds) {
+ error_setg(errp, "vhostfds= is invalid if fds= wasn't specified");
+ return -1;
}
- return 0;
+ return net_tap_open(netdev, name, peer, errp);
}
int tap_enable(NetClientState *nc)
--
2.48.1