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

Reply via email to