From: Brad Smith Subject: Re: net/libslirp: update to 4.9.3; backport guestfwd fix To: ports@openbsd.org Date: Sun, 14 Jun 2026 21:18:11 -0400 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), > >