Support tap in net_init_bridge() and reuse it for corresponding
case in net_init_tap().
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Tested-by: Lei Yang <leiyang@redhat.com>
---
net/tap.c | 47 +++++++++++++++++------------------------------
1 file changed, 17 insertions(+), 30 deletions(-)
diff --git a/net/tap.c b/net/tap.c
index 01f9277211..79225fb233 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -618,16 +618,24 @@ static int net_bridge_run_helper(const char *helper, const char *bridge,
int net_init_bridge(const Netdev *netdev, const char *name,
NetClientState *peer, Error **errp)
{
- const NetdevBridgeOptions *bridge;
+ const NetdevTapOptions *tap = NULL;
+ const NetdevBridgeOptions *bridge = NULL;
const char *helper, *br;
int fd, vnet_hdr, ret;
- assert(netdev->type == NET_CLIENT_DRIVER_BRIDGE);
- bridge = &netdev->u.bridge;
- helper = bridge->helper;
- br = bridge->br ?: DEFAULT_BRIDGE_INTERFACE;
+ if (netdev->type == NET_CLIENT_DRIVER_BRIDGE) {
+ bridge = &netdev->u.bridge;
+ helper = bridge->helper;
+ br = bridge->br;
+ } else {
+ assert(netdev->type == NET_CLIENT_DRIVER_TAP);
+
+ tap = &netdev->u.tap;
+ helper = tap->helper;
+ br = tap->br;
+ }
- fd = net_bridge_run_helper(helper, br, errp);
+ fd = net_bridge_run_helper(helper, br ?: DEFAULT_BRIDGE_INTERFACE, errp);
if (fd == -1) {
return -1;
}
@@ -643,7 +651,8 @@ int net_init_bridge(const Netdev *netdev, const char *name,
ret = net_init_tap_one(netdev, peer, "bridge", name,
NULL, NULL, NULL,
- NULL, vnet_hdr, fd, errp);
+ tap ? tap->vhostfd : NULL,
+ vnet_hdr, fd, errp);
if (ret < 0) {
close(fd);
return -1;
@@ -897,29 +906,7 @@ int net_init_tap(const Netdev *netdev, const char *name,
return -1;
}
- fd = net_bridge_run_helper(tap->helper,
- tap->br ?: DEFAULT_BRIDGE_INTERFACE,
- errp);
- if (fd == -1) {
- return -1;
- }
-
- if (!qemu_set_blocking(fd, false, errp)) {
- return -1;
- }
- vnet_hdr = tap_probe_vnet_hdr(fd, errp);
- if (vnet_hdr < 0) {
- close(fd);
- return -1;
- }
-
- ret = net_init_tap_one(netdev, peer, "bridge", name, NULL,
- NULL, NULL, tap->vhostfd,
- vnet_hdr, fd, errp);
- if (ret < 0) {
- close(fd);
- return -1;
- }
+ return net_init_bridge(netdev, name, peer, errp);
} else {
const char *script = tap->script;
const char *downscript = tap->downscript;
--
2.48.1