]> git.proxmox.com Git - mirror_qemu.git/commitdiff
slirp: factor out guestfwd addition checks
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Wed, 21 Nov 2018 22:06:23 +0000 (02:06 +0400)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Sun, 13 Jan 2019 23:44:29 +0000 (00:44 +0100)
This will allow reusing the function in a following patch.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
slirp/misc.c
slirp/slirp.c

index a0f104be5ed92cdd4c4468819f969574f1c64ab0..eae9596a55d3e92dfac81cac1ef9e65214de269c 100644 (file)
@@ -37,13 +37,6 @@ int add_exec(struct gfwd_list **ex_ptr, void *chardev, const char *cmdline,
 {
        struct gfwd_list *tmp_ptr;
 
-       /* First, check if the port is "bound" */
-       for (tmp_ptr = *ex_ptr; tmp_ptr; tmp_ptr = tmp_ptr->ex_next) {
-               if (port == tmp_ptr->ex_fport &&
-                   addr.s_addr == tmp_ptr->ex_addr.s_addr)
-                       return -1;
-       }
-
        tmp_ptr = *ex_ptr;
        *ex_ptr = g_new0(struct gfwd_list, 1);
        (*ex_ptr)->ex_fport = port;
index 851462a4cd3a5fee7e166b99dc975b9a2f364bd3..882d28a4deb2876c7b8b65e6d286068e2a87fa17 100644 (file)
@@ -1046,9 +1046,11 @@ int slirp_add_hostfwd(Slirp *slirp, int is_udp, struct in_addr host_addr,
     return 0;
 }
 
-int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
-                   struct in_addr *guest_addr, int guest_port)
+static bool
+check_guestfwd(Slirp *slirp, struct in_addr *guest_addr, int guest_port)
 {
+    struct gfwd_list *tmp_ptr;
+
     if (!guest_addr->s_addr) {
         guest_addr->s_addr = slirp->vnetwork_addr.s_addr |
             (htonl(0x0204) & ~slirp->vnetwork_mask.s_addr);
@@ -1057,6 +1059,23 @@ int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
         slirp->vnetwork_addr.s_addr ||
         guest_addr->s_addr == slirp->vhost_addr.s_addr ||
         guest_addr->s_addr == slirp->vnameserver_addr.s_addr) {
+        return false;
+    }
+
+    /* check if the port is "bound" */
+    for (tmp_ptr = slirp->guestfwd_list; tmp_ptr; tmp_ptr = tmp_ptr->ex_next) {
+        if (guest_port == tmp_ptr->ex_fport &&
+            guest_addr->s_addr == tmp_ptr->ex_addr.s_addr)
+            return false;
+    }
+
+    return true;
+}
+
+int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
+                   struct in_addr *guest_addr, int guest_port)
+{
+    if (!check_guestfwd(slirp, guest_addr, guest_port)) {
         return -1;
     }