Download raw body.
net/libslirp: update to 4.9.3; backport guestfwd fix
ports@, Brad,
I'd like to update net/libslirp to 4.9.3 and backport from future release
guestfwd fix which allows to bind on vhost IP.
Tested with qemu on -current, no regression to report.
Ok?
Index: Makefile
===================================================================
RCS file: /home/cvs/ports/net/libslirp/Makefile,v
diff -u -p -r1.3 Makefile
--- Makefile 27 Sep 2023 14:18:16 -0000 1.3
+++ Makefile 10 Jun 2026 10:10:44 -0000
@@ -1,13 +1,13 @@
COMMENT= general purpose TCP-IP emulator library
-VER= 4.7.0
+VER= 4.9.3
DISTNAME= libslirp-v${VER}
PKGNAME= libslirp-${VER}
CATEGORIES= net
SITES= https://gitlab.freedesktop.org/slirp/libslirp/-/archive/v${VER}/
EXTRACT_SUFX= .tar.bz2
-SHARED_LIBS+= slirp 0.1
+SHARED_LIBS+= slirp 0.2
HOMEPAGE= https://gitlab.freedesktop.org/slirp/libslirp
Index: distinfo
===================================================================
RCS file: /home/cvs/ports/net/libslirp/distinfo,v
diff -u -p -r1.2 distinfo
--- distinfo 2 May 2022 07:33:55 -0000 1.2
+++ distinfo 10 Jun 2026 10:10:07 -0000
@@ -1,2 +1,2 @@
-SHA256 (libslirp-v4.7.0.tar.bz2) = NYzotupZ7J3qyTfMdU8BFbmSg557DN3zD/uPd9wh2oI=
-SIZE (libslirp-v4.7.0.tar.bz2) = 109085
+SHA256 (libslirp-v4.9.3.tar.bz2) = yC4ixzvcPywDjlONTwycIWbe+yQCIS1hu3yxtTC6lS8=
+SIZE (libslirp-v4.9.3.tar.bz2) = 133720
Index: patches/patch-src_slirp_c
===================================================================
RCS file: patches/patch-src_slirp_c
diff -N patches/patch-src_slirp_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_slirp_c 10 Jun 2026 10:13:43 -0000
@@ -0,0 +1,21 @@
+https://gitlab.freedesktop.org/slirp/libslirp/-/merge_requests/158
+
+Index: src/slirp.c
+--- src/slirp.c.orig
++++ src/slirp.c
+@@ -1581,9 +1581,12 @@ static bool check_guestfwd(Slirp *slirp, struct in_add
+ (htonl(0x0204) & ~slirp->vnetwork_mask.s_addr);
+ }
+ if ((guest_addr->s_addr & slirp->vnetwork_mask.s_addr) !=
+- slirp->vnetwork_addr.s_addr ||
+- guest_addr->s_addr == slirp->vhost_addr.s_addr ||
+- guest_addr->s_addr == slirp->vnameserver_addr.s_addr) {
++ slirp->vnetwork_addr.s_addr) {
++ return false;
++ }
++ if (!slirp->disable_dns &&
++ guest_addr->s_addr == slirp->vnameserver_addr.s_addr &&
++ guest_port == 53) {
+ return false;
+ }
+
Index: patches/patch-src_tcp_input_c
===================================================================
RCS file: patches/patch-src_tcp_input_c
diff -N patches/patch-src_tcp_input_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_tcp_input_c 10 Jun 2026 21:15:48 -0000
@@ -0,0 +1,36 @@
+https://gitlab.freedesktop.org/slirp/libslirp/-/commit/3e6e68e779c9051590250a87214dabf91e70949a
+
+Index: src/tcp_input.c
+--- src/tcp_input.c.orig
++++ src/tcp_input.c
+@@ -600,20 +600,17 @@ findso:
+ if (af == AF_INET &&
+ (so->so_faddr.s_addr & slirp->vnetwork_mask.s_addr) ==
+ slirp->vnetwork_addr.s_addr) {
+- if (so->so_faddr.s_addr != slirp->vhost_addr.s_addr &&
+- so->so_faddr.s_addr != slirp->vnameserver_addr.s_addr) {
+- /* May be an add exec */
+- for (ex_ptr = slirp->guestfwd_list; ex_ptr;
+- ex_ptr = ex_ptr->ex_next) {
+- if (ex_ptr->ex_fport == so->so_fport &&
+- so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr) {
+- so->so_state |= SS_CTL;
+- break;
+- }
++ /* May be an add exec */
++ for (ex_ptr = slirp->guestfwd_list; ex_ptr;
++ ex_ptr = ex_ptr->ex_next) {
++ if (ex_ptr->ex_fport == so->so_fport &&
++ so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr) {
++ so->so_state |= SS_CTL;
++ break;
+ }
+- if (so->so_state & SS_CTL) {
+- goto cont_input;
+- }
++ }
++ if (so->so_state & SS_CTL) {
++ goto cont_input;
+ }
+ /* CTL_ALIAS: Do nothing, tcp_fconnect will be called on it */
+ }
Index: patches/patch-src_tcp_subr_c
===================================================================
RCS file: patches/patch-src_tcp_subr_c
diff -N patches/patch-src_tcp_subr_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_tcp_subr_c 10 Jun 2026 21:15:56 -0000
@@ -0,0 +1,41 @@
+https://gitlab.freedesktop.org/slirp/libslirp/-/commit/3e6e68e779c9051590250a87214dabf91e70949a
+
+Index: src/tcp_subr.c
+--- src/tcp_subr.c.orig
++++ src/tcp_subr.c
+@@ -992,22 +992,20 @@ int tcp_ctl(struct socket *so)
+ DEBUG_ARG("so = %p", so);
+
+ /* TODO: IPv6 */
+- if (so->so_faddr.s_addr != slirp->vhost_addr.s_addr) {
+- /* Check if it's pty_exec */
+- for (ex_ptr = slirp->guestfwd_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
+- if (ex_ptr->ex_fport == so->so_fport &&
+- so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr) {
+- if (ex_ptr->write_cb) {
+- so->s = SLIRP_INVALID_SOCKET;
+- so->guestfwd = ex_ptr;
+- return 1;
+- }
+- DEBUG_MISC(" executing %s", ex_ptr->ex_exec);
+- if (ex_ptr->ex_unix)
+- return open_unix(so, ex_ptr->ex_unix);
+- else
+- return fork_exec(so, ex_ptr->ex_exec);
++ /* Check if it's pty_exec */
++ for (ex_ptr = slirp->guestfwd_list; ex_ptr; ex_ptr = ex_ptr->ex_next) {
++ if (ex_ptr->ex_fport == so->so_fport &&
++ so->so_faddr.s_addr == ex_ptr->ex_addr.s_addr) {
++ if (ex_ptr->write_cb) {
++ so->s = SLIRP_INVALID_SOCKET;
++ so->guestfwd = ex_ptr;
++ return 1;
+ }
++ DEBUG_MISC(" executing %s", ex_ptr->ex_exec);
++ if (ex_ptr->ex_unix)
++ return open_unix(so, ex_ptr->ex_unix);
++ else
++ return fork_exec(so, ex_ptr->ex_exec);
+ }
+ }
+ sb->sb_cc = slirp_fmt(sb->sb_wptr, sb->sb_datalen - (sb->sb_wptr - sb->sb_data),
--
wbr, Kirill
net/libslirp: update to 4.9.3; backport guestfwd fix