[Qemu-devel] [PULL 59/65] slirp: factor out guestfwd addition checks

2019-01-14 Thread Samuel Thibault
From: Marc-André Lureau 

This will allow reusing the function in a following patch.

Signed-off-by: Marc-André Lureau 
Signed-off-by: Samuel Thibault 
---
 slirp/misc.c  |  7 ---
 slirp/slirp.c | 23 +--
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index a0f104be5e..eae9596a55 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -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;
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 851462a4cd..882d28a4de 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -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;
 }
 
-- 
2.20.1




[Qemu-devel] [PULL 59/65] slirp: factor out guestfwd addition checks

2019-01-13 Thread Samuel Thibault
From: Marc-André Lureau 

This will allow reusing the function in a following patch.

Signed-off-by: Marc-André Lureau 
Signed-off-by: Samuel Thibault 
---
 slirp/misc.c  |  7 ---
 slirp/slirp.c | 23 +--
 2 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/slirp/misc.c b/slirp/misc.c
index a0f104be5e..eae9596a55 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -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;
diff --git a/slirp/slirp.c b/slirp/slirp.c
index 851462a4cd..882d28a4de 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -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;
 }
 
-- 
2.20.1