On Sat, Jun 15, 2024 at 10:40:31PM +1000, Peter Jeremy wrote:
> On 2024-Apr-20 16:05:06 +0000, Mark Johnston <ma...@freebsd.org> wrote:
> >URL: 
> >https://cgit.FreeBSD.org/src/commit/?id=bf454ca88bdf4acfa873386e876ff5e772e6a830
> >
> >    wg: Add netmap support
> ...
> >--- a/sys/dev/wg/if_wg.c
> >+++ b/sys/dev/wg/if_wg.c
> ...
> >@@ -2206,6 +2341,11 @@ wg_output(if_t ifp, struct mbuf *m, const struct 
> >sockaddr *dst, struct route *ro
> >             return (EAFNOSUPPORT);
> >     }
> > 
> >+#ifdef DEV_NETMAP
> >+    if ((if_getcapenable(ifp) & IFCAP_NETMAP) != 0)
> >+            return (wg_xmit_netmap(ifp, m, af));
> >+#endif
> >+
> >     defragged = m_defrag(m, M_NOWAIT);
> >     if (defragged)
> >             m = defragged;
> >@@ -2781,7 +2921,10 @@ wg_clone_create(struct if_clone *ifc, char *name, 
> >size_t len,
> >     if_setinitfn(ifp, wg_init);
> >     if_setreassignfn(ifp, wg_reassign);
> >     if_setqflushfn(ifp, wg_qflush);
> >+#ifdef DEV_NETMAP
> >     if_settransmitfn(ifp, wg_transmit);
> >+    if_setinputfn(ifp, wg_if_input);
> >+#endif
> >     if_setoutputfn(ifp, wg_output);
> >     if_setioctlfn(ifp, wg_ioctl);
> >     if_attach(ifp);
> 
> sys/net/if.c:if_attach_internal() (called from if_attach()) requires that
> both transmit and qflush must either be NULL or set but if DEV_NETMAP is
> undefined, this code only sets qflush, guaranteeing a panic() as soon as a
> wg is attached.  Unfortunately, I don't understand the code well enough to
> offer a fix.

I've pushed a commit which fixes this problem.  Thanks for the report.

Reply via email to