Download raw body.
net/libslirp: update to 4.9.3; backport guestfwd fix
On 2026-06-14 9:20 a.m., Kirill A. Korinsky wrote:
> 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?
OK. Comment below.
>
> 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
Use the commit URL like as is done below.
> +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
Use the same patches as was commited.
> +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),
>
>
net/libslirp: update to 4.9.3; backport guestfwd fix