Hello! This issue is only present when using the e1000 device emulation instead of virtio-net. Exact error: e82545: packet too small for writable header Host machine danny@freebsd-test:~ $ uname -a FreeBSD freebsd-test 15.1-RELEASE-p3 FreeBSD 15.1-RELEASE-p3 releng/15.1-n283611-88e7371d9dc2 GENERIC amd64 Virtual machine: danny@freebsd0:~ $ uname -a FreeBSD freebsd0 15.1-RELEASE-p3 FreeBSD 15.1-RELEASE-p3 releng/15.1-n283611-88e7371d9dc2 GENERIC amd64 I have a VLAN bridge with several untagged ports (connected to VNET jails) as well as a tagged tap interface which goes to the virtual machine. danny@freebsd-test:~ $ ifconfig bridge1 bridge1: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=10<VLAN_HWTAGGING> ether 58:9c:fc:10:8e:4e id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200 root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0 bridge flags=1<VLANFILTER> member: epair0a flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> port 9 priority 128 path cost 2000 vlan protocol 802.1q untagged 10 member: epair5a flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> port 20 priority 128 path cost 2000 vlan protocol 802.1q untagged 250 member: epair1a flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> port 11 priority 128 path cost 2000 vlan protocol 802.1q untagged 110 member: epair3a flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> port 15 priority 128 path cost 2000 vlan protocol 802.1q untagged 110 member: epair2a flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> port 13 priority 128 path cost 2000 vlan protocol 802.1q untagged 110 member: epair4a flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> port 7 priority 128 path cost 2000 vlan protocol 802.1q untagged 210 member: tap1 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> port 6 priority 128 path cost 2000000 vlan protocol 802.1q tagged 10,110,210,250 groups: bridge nd6 options=9<PERFORMNUD,IFDISABLED> I use the bhyve_config(5) format to manage my virtual machines. Here is the output of a working FreeBSD VM config with two tap interfaces using virtio-net danny@freebsd-test:~ $ cat /etc/bhyve.conf.d/freebsd0.conf rtc.use_localtime=false x86.vmexit_on_hlt=true x86.vmexit_on_pause=true x86.strictmsr=false # name=freebsd0 cpus=2 cores=2 threads=1 sockets=1 memory.size=2G memory.wired=true bootrom=/usr/local/share/uefi-firmware/BHYVE_UEFI.fd # pci.0.0.0.device=hostbridge pci.0.3.0.device=virtio-blk pci.0.3.0.path=/dev/zvol/zroot/vm/freebsd0 pci.0.5.0.device=virtio-net pci.0.5.0.backend=tap0 pci.0.6.0.device=virtio-net pci.0.6.0.backend=tap1 pci.0.31.0.device=lpc lpc.com1.path=/dev/nmdm1A Here is the network setup of the virtual machine using virtio-net danny@freebsd0:~ $ ifconfig vtnet0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=880028<VLAN_MTU,JUMBO_MTU,LINKSTATE,HWSTATS> ether 00:a0:98:3f:19:75 inet 172.19.3.100 netmask 0xffffff00 broadcast 172.19.3.255 media: Ethernet autoselect (10Gbase-T <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> vtnet1: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=880028<VLAN_MTU,JUMBO_MTU,LINKSTATE,HWSTATS> ether 00:a0:98:2d:01:38 media: Ethernet autoselect (10Gbase-T <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384 options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6> inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 groups: lo nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL> vtnet1.10: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=80000<LINKSTATE> ether 00:a0:98:2d:01:38 inet 10.0.10.1 netmask 0xffffff00 broadcast 10.0.10.255 groups: vlan vlan: 10 vlanproto: 802.1q vlanpcp: 0 parent interface: vtnet1 media: Ethernet autoselect (10Gbase-T <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> vtnet1.110: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=80000<LINKSTATE> ether 00:a0:98:2d:01:38 inet 10.0.110.1 netmask 0xffffff00 broadcast 10.0.110.255 groups: vlan vlan: 110 vlanproto: 802.1q vlanpcp: 0 parent interface: vtnet1 media: Ethernet autoselect (10Gbase-T <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> vtnet1.210: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=80000<LINKSTATE> ether 00:a0:98:2d:01:38 inet 10.0.210.1 netmask 0xffffff00 broadcast 10.0.210.255 groups: vlan vlan: 210 vlanproto: 802.1q vlanpcp: 0 parent interface: vtnet1 media: Ethernet autoselect (10Gbase-T <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> vtnet1.250: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=80000<LINKSTATE> ether 00:a0:98:2d:01:38 inet 10.0.250.1 netmask 0xffffff00 broadcast 10.0.250.255 groups: vlan vlan: 250 vlanproto: 802.1q vlanpcp: 0 parent interface: vtnet1 media: Ethernet autoselect (10Gbase-T <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> The above is a fully working setup that allows me to use the FreeBSD VM as a firewall to filter traffic between the VLANs (different VNET jails) using a single bridge setup. However if I were to switch away from virtio-net and change the configuration to e1000 (only on the tap1 interface which is connected to the VLAN bridge) I get an error. danny@freebsd-test:~ $ cat /etc/bhyve.conf.d/freebsd0.conf rtc.use_localtime=false x86.vmexit_on_hlt=true x86.vmexit_on_pause=true x86.strictmsr=false # name=freebsd0 cpus=2 cores=2 threads=1 sockets=1 memory.size=2G memory.wired=true bootrom=/usr/local/share/uefi-firmware/BHYVE_UEFI.fd # pci.0.0.0.device=hostbridge pci.0.3.0.device=virtio-blk pci.0.3.0.path=/dev/zvol/zroot/vm/freebsd0 pci.0.5.0.device=virtio-net pci.0.5.0.backend=tap0 pci.0.6.0.device=e1000 pci.0.6.0.backend=tap1 pci.0.31.0.device=lpc lpc.com1.path=/dev/nmdm1A The error is: e82545: packet too small for writable header Network layout inside the VM (adjusted for the new interface names and rebooted) danny@freebsd0:~ $ ifconfig vtnet0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=880028<VLAN_MTU,JUMBO_MTU,LINKSTATE,HWSTATS> ether 00:a0:98:3f:19:75 inet 172.19.3.100 netmask 0xffffff00 broadcast 172.19.3.255 media: Ethernet autoselect (10Gbase-T <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> em0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=4e504bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,LRO,VLAN_HWFILTER,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6,HWSTATS,MEXTPG> ether 00:a0:98:2d:01:38 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384 options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6> inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 groups: lo nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL> em0.10: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=4600403<RXCSUM,TXCSUM,LRO,RXCSUM_IPV6,TXCSUM_IPV6,MEXTPG> ether 00:a0:98:2d:01:38 inet 10.0.10.1 netmask 0xffffff00 broadcast 10.0.10.255 groups: vlan vlan: 10 vlanproto: 802.1q vlanpcp: 0 parent interface: em0 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> em0.110: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=4600403<RXCSUM,TXCSUM,LRO,RXCSUM_IPV6,TXCSUM_IPV6,MEXTPG> ether 00:a0:98:2d:01:38 inet 10.0.110.1 netmask 0xffffff00 broadcast 10.0.110.255 groups: vlan vlan: 110 vlanproto: 802.1q vlanpcp: 0 parent interface: em0 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> em0.210: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=4600403<RXCSUM,TXCSUM,LRO,RXCSUM_IPV6,TXCSUM_IPV6,MEXTPG> ether 00:a0:98:2d:01:38 inet 10.0.210.1 netmask 0xffffff00 broadcast 10.0.210.255 groups: vlan vlan: 210 vlanproto: 802.1q vlanpcp: 0 parent interface: em0 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> em0.250: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=4600403<RXCSUM,TXCSUM,LRO,RXCSUM_IPV6,TXCSUM_IPV6,MEXTPG> ether 00:a0:98:2d:01:38 inet 10.0.250.1 netmask 0xffffff00 broadcast 10.0.250.255 groups: vlan vlan: 250 vlanproto: 802.1q vlanpcp: 0 parent interface: em0 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> The above does not work. Attempting to send packets through the VM on the VLAN tagged interface does not work and it triggers the "e82545: packet too small for writable header" error on the host machine. Please note that I am using UEFI for the virtual machine and that the VLAN bridge does not have a physical interface connected to it.