On Tue, 2009-11-24 at 12:17 +0100, Pierre Riteau wrote: > On 24 nov. 2009, at 11:28, Mark McLoughlin wrote: > > > On Tue, 2009-11-24 at 10:06 +0100, Pierre Riteau wrote: > >> vnet_hdr is initialized at 1 by default. We need to reset it to 0 if > >> the kernel doesn't support IFF_VNET_HDR. > >> > >> Signed-off-by: Pierre Riteau <pierre.rit...@irisa.fr> > > > > Thanks Pierre, I see why this is needed now > > > > Acked-by: Mark McLoughlin <mar...@redhat.com> > > > > Cheers, > > Mark. > > > Thanks for your rapid answer! > > BTW, every time I run qemu I see this error message: > > TUNSETOFFLOAD ioctl() failed: Invalid argument > > It is caused by the piece of code at the end of net/tap-linux.c: > > if (ioctl(fd, TUNSETOFFLOAD, offload) != 0) { > offload &= ~TUN_F_UFO; > if (ioctl(fd, TUNSETOFFLOAD, offload) != 0) { > fprintf(stderr, "TUNSETOFFLOAD ioctl() failed: %s\n", > strerror(errno)); > } > } > > Isn't there a way to detect whether the kernel supports the > TUNSETOFFLOAD ioctl at all?
The kernel will set errno to EINVAL if TUNSETOFFLOAD isn't supported, so we could just ignore that case: if (ioctl(fd, TUNSETOFFLOAD, offload) != 0) { offload &= ~TUN_F_UFO; if (ioctl(fd, TUNSETOFFLOAD, offload) != 0 && errno != EINVAL) { fprintf(stderr, "TUNSETOFFLOAD ioctl() failed: %s\n", strerror(errno)); } } The only concern is that we'll also miss out on an error message if EINVAL is set for another reason. Currently, the only other reason if we pass a offload flag not supported by the kernel, but that should never happen. Feel free to send a patch with that change and I'll ack it Thanks, Mark.