On Fri, Feb 09, 2024 at 05:00:44PM -0500, Dave Voutila wrote: > Turns out I had a bug in my packet injection logic. Locked addr forces > use of the copy mode (i.e. not the zero-copy mode) and my logic was > thinking the packet being read was an "injected" packet from the dhcp > intercept. I don't think this is ipv6 specific.
Correct, IPv4 fails equally. > diff /usr/src > commit - e56f03c81d8d8caa46c3a9dd3ebf582fb69cd317 > path + /usr/src > blob - 6f4b741bd1f960913774ee51c4ffd8dc98068d17 > file + usr.sbin/vmd/vionet.c > --- usr.sbin/vmd/vionet.c > +++ usr.sbin/vmd/vionet.c > @@ -514,8 +514,9 @@ vionet_rx_copy(struct vionet_dev *dev, int fd, const s > /* If reading the tap(4), we should get valid ethernet. */ > log_warnx("%s: invalid packet size", __func__); > return (0); > - } else if (sz != sizeof(struct packet)) { > - log_warnx("%s: invalid injected packet object", __func__); > + } else if (fd == pipe_inject[READ] && sz != sizeof(struct packet)) { > + log_warnx("%s: invalid injected packet object (sz=%ld)", > + __func__, sz); > return (0); > } This fixes it, thanks. OK kn