Move checks to the top of the function to simplify further refactoring. Merge duplicated checks.
Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]> --- net/tap.c | 53 +++++++++++++++++++++++------------------------------ 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/net/tap.c b/net/tap.c index 55b8b33ea8..331a779585 100644 --- a/net/tap.c +++ b/net/tap.c @@ -841,16 +841,30 @@ int net_init_tap(const Netdev *netdev, const char *name, return -1; } - if (tap->fd) { - if (tap->ifname || tap->script || tap->downscript || - tap->has_vnet_hdr || tap->helper || tap->has_queues || - tap->fds || tap->vhostfds) { - error_setg(errp, "ifname=, script=, downscript=, vnet_hdr=, " - "helper=, queues=, fds=, and vhostfds= " - "are invalid with fd="); - return -1; - } + if (tap->has_queues + !!tap->helper + !!tap->fds + !!tap->fd > 1) { + error_setg(errp, "queues=, helper=, fds= and fd= are mutual exclusive"); + return -1; + } + if ((tap->fd || tap->fds || tap->helper) && + (tap->ifname || tap->script || tap->downscript || + tap->has_vnet_hdr)) { + error_setg(errp, "ifname=, script=, downscript=, vnet_hdr= " + "are invalid with fd=/fds=/helper="); + return -1; + } + + if (tap->vhostfds && !tap->fds) { + error_setg(errp, "vhostfds= is invalid if fds= wasn't specified"); + return -1; + } + + if (tap->vhostfd && tap->fds) { + error_setg(errp, "vhostfd= is invalid with fds="); + return -1; + } + + if (tap->fd) { fd = monitor_fd_param(monitor_cur(), tap->fd, errp); if (fd == -1) { return -1; @@ -878,15 +892,6 @@ int net_init_tap(const Netdev *netdev, const char *name, char **vhost_fds; int nfds = 0, nvhosts = 0; - if (tap->ifname || tap->script || tap->downscript || - tap->has_vnet_hdr || tap->helper || tap->has_queues || - tap->vhostfd) { - error_setg(errp, "ifname=, script=, downscript=, vnet_hdr=, " - "helper=, queues=, and vhostfd= " - "are invalid with fds="); - return -1; - } - fds = g_new0(char *, MAX_TAP_QUEUES); vhost_fds = g_new0(char *, MAX_TAP_QUEUES); @@ -946,13 +951,6 @@ free_fail: g_free(vhost_fds); return ret; } else if (tap->helper) { - if (tap->ifname || tap->script || tap->downscript || - tap->has_vnet_hdr || tap->has_queues || tap->vhostfds) { - error_setg(errp, "ifname=, script=, downscript=, vnet_hdr=, " - "queues=, and vhostfds= are invalid with helper="); - return -1; - } - fd = net_bridge_run_helper(tap->helper, tap->br ?: DEFAULT_BRIDGE_INTERFACE, errp); @@ -981,11 +979,6 @@ free_fail: g_autofree char *downscript = tap_parse_script(tap->downscript, DEFAULT_NETWORK_DOWN_SCRIPT); - if (tap->vhostfds) { - error_setg(errp, "vhostfds= is invalid if fds= wasn't specified"); - return -1; - } - if (tap->ifname) { pstrcpy(ifname, sizeof ifname, tap->ifname); } else { -- 2.52.0
