slirp: factor out guestfwd addition checks
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>
This commit is contained in:
parent
a857d91d8c
commit
4246e8cac7
|
@ -37,13 +37,6 @@ int add_exec(struct gfwd_list **ex_ptr, void *chardev, const char *cmdline,
|
||||||
{
|
{
|
||||||
struct gfwd_list *tmp_ptr;
|
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;
|
tmp_ptr = *ex_ptr;
|
||||||
*ex_ptr = g_new0(struct gfwd_list, 1);
|
*ex_ptr = g_new0(struct gfwd_list, 1);
|
||||||
(*ex_ptr)->ex_fport = port;
|
(*ex_ptr)->ex_fport = port;
|
||||||
|
|
|
@ -1046,9 +1046,11 @@ int slirp_add_hostfwd(Slirp *slirp, int is_udp, struct in_addr host_addr,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int slirp_add_exec(Slirp *slirp, void *chardev, const char *cmdline,
|
static bool
|
||||||
struct in_addr *guest_addr, int guest_port)
|
check_guestfwd(Slirp *slirp, struct in_addr *guest_addr, int guest_port)
|
||||||
{
|
{
|
||||||
|
struct gfwd_list *tmp_ptr;
|
||||||
|
|
||||||
if (!guest_addr->s_addr) {
|
if (!guest_addr->s_addr) {
|
||||||
guest_addr->s_addr = slirp->vnetwork_addr.s_addr |
|
guest_addr->s_addr = slirp->vnetwork_addr.s_addr |
|
||||||
(htonl(0x0204) & ~slirp->vnetwork_mask.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 ||
|
slirp->vnetwork_addr.s_addr ||
|
||||||
guest_addr->s_addr == slirp->vhost_addr.s_addr ||
|
guest_addr->s_addr == slirp->vhost_addr.s_addr ||
|
||||||
guest_addr->s_addr == slirp->vnameserver_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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue