kern.version=OpenBSD 7.4-current (GENERIC.MP) #1667: Wed Feb  7 20:09:35 MST 
2024
    dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP

'locked addr' in `switch' block yields
        vm/foo/vionet0: vionet_rx_copy: invalid injected packet object

Minimal reproducer from my vm.conf(5) that used to work fine:

        # ifconfig vport0 inet6 fd00::1 up
        # ifconfig veb0 add vport0
        # cat /tmp/vm.conf
        switch uplink {
                interface veb0
                locked lladdr
        }
        vm foo {
                disable
                boot /bsd.rd
                disk /tmp/disk.img
                interface {
                        switch uplink
                        locked lladdr
                }
        }
        # vmctl create -s1m /tmp/foo.img
        # `which vmd` -f/tmp/vm.conf -dvv

vmd: startup
vmd: /tmp/vm.conf:4: switch "uplink" registered
vmd: vm_register: registering vm 1
vmd: /tmp/vm.conf:13: vm "foo" registered (disabled)
vmd: vm_priv_brconfig: interface veb0 description switch1-uplink
vmd: vmd_configure: setting staggered start configuration to parallelism: 12 
and delay: 30
vmd: vmd_configure: starting vms in staggered fashion
vmd: start_vm_batch: starting batch of 12 vms
vmd: start_vm_batch: not starting vm foo (disabled)
vmd: start_vm_batch: done starting vms
priv: config_getconfig: priv retrieving config
vmm: config_getconfig: vmm retrieving config
agentx: config_getconfig: agentx retrieving config
control: config_getconfig: control retrieving config

        # vmctl start -c foo

vmd: vm_opentty: vm foo tty /dev/ttyp7 uid 0 gid 4 mode 620
vmm: vm_register: registering vm 1
vmd: vm_priv_ifconfig: interface tap0 description vm1-if0-foo
vmd: vm_priv_ifconfig: switch "uplink" interface veb0 add tap0
vmd: started foo (vm 1) successfully, tty /dev/ttyp7
vm/foo: loadfile_elf: loaded ELF kernel
vm/foo: pic_set_elcr: setting level triggered mode for irq 3
vm/foo: pic_set_elcr: setting level triggered mode for irq 5
vm/foo: virtio_init: vm "foo" vio0 lladdr fe:e1:bb:d1:5a:58, locked
vm/foo: pic_set_elcr: setting level triggered mode for irq 6
vm/foo: foo: launching vioblk0
vm/foo: virtio_dev_launch: sending 'd' type device struct
vm/foo: virtio_dev_launch: sending vm message for 'foo'
vm/foo/vioblk: vioblk_main: got viblk dev. num disk fds = 1, sync fd = 16, 
async fd = 18, capacity = 0 seg_max = 126, vmm fd = 5
vm/foo/vioblk0: vioblk_main: initialized vioblk0 with raw image (capacity=2048)
vm/foo/vioblk0: vioblk_main: wiring in async vm event handler (fd=18)
vm/foo/vioblk0: vm_device_pipe: initializing 'd' device pipe (fd=18)
vm/foo/vioblk0: vioblk_main: wiring in sync channel handler (fd=16)
vm/foo/vioblk0: vioblk_main: telling vm foo device is ready
vm/foo/vioblk0: vioblk_main: sending heartbeat
vm/foo: virtio_dev_launch: receiving reply
vm/foo: virtio_dev_launch: device reports ready via sync channel
vm/foo: vm_device_pipe: initializing 'd' device pipe (fd=17)
vm/foo: foo: launching vionet0
vm/foo: virtio_dev_launch: sending 'n' type device struct
vm/foo: virtio_dev_launch: sending vm message for 'foo'
vm/foo/vionet: vionet_main: got vionet dev. tap fd = 8, syncfd = 16, asyncfd = 
19, vmm fd = 5
vm/foo/vionet0: vionet_main: wiring in async vm event handler (fd=19)
vm/foo/vionet0: vm_device_pipe: initializing 'n' device pipe (fd=19)
vm/foo/vionet0: vionet_main: wiring in tap fd handler (fd=8)
vm/foo/vionet0: vionet_main: wiring in packet injection handler (fd=3)
vm/foo/vionet0: vionet_main: wiring in sync channel handler (fd=16)
vm/foo/vionet0: vionet_main: telling vm foo device is ready
vm/foo/vionet0: vionet_main: sending async ready message
vm/foo: virtio_dev_launch: receiving reply
vm/foo: virtio_dev_launch: device reports ready via sync channel
vm/foo: vm_device_pipe: initializing 'n' device pipe (fd=18)
vm/foo: pic_set_elcr: setting level triggered mode for irq 7
vm/foo: run_vm: starting 1 vcpu thread(s) for vm foo
vm/foo: vcpu_reset: resetting vcpu 0 for vm 29
vm/foo: run_vm: waiting on events for VM foo
vm/foo: foo: received tap addr fe:e1:ba:dd:0e:e5 for nic 0
vm/foo: handle_dev_msg: device reports ready
vm/foo: handle_dev_msg: device reports ready
vm/foo/vionet0: dev_dispatch_vm: set hostmac
vm/foo: vcpu_exit_i8253: channel 0 reset, mode=2, start=65535
vm/foo: vcpu_process_com_lcr: set baudrate = 115200
vm/foo: i8259_write_datareg: master pic, reset IRQ vector to 0x20
vm/foo: i8259_write_datareg: slave pic, reset IRQ vector to 0x28
vm/foo: vcpu_exit_i8253: channel 0 reset, mode=2, start=11932
vm/foo: vcpu_process_com_lcr: set baudrate = 115200
vm/foo: vcpu_exit_eptviolation: fault already handled
vm/foo: vcpu_exit_eptviolation: fault already handled
vm/foo: vcpu_process_com_lcr: set baudrate = 115200
vm/foo: vcpu_exit_eptviolation: fault already handled

        Welcome to the OpenBSD/amd64 7.4 installation program.
        (I)nstall, (U)pgrade, (A)utoinstall or (S)hell? s
        # ifconfig vio0 inet6 fd00::2
        # ping6 -c1 fd00::1
        PING fd00::1 (fd00::1): 56 data bytes

        --- fd00::1 ping statistics ---
        1 packets transmitted, 0 packets received, 100.0% packet loss

vm/foo/vionet0: vionet_rx_copy: invalid injected packet object

Removing 'locked addr' from either `switch' or `interface' is not enough,
both lines must be removed for packets to flow again:

        # ping6 -qc1 fd00::1
        PING fd00::1 (fd00::1): 56 data bytes

        --- fd00::1 ping statistics ---
        1 packets transmitted, 1 packets received, 0.0% packet loss
        round-trip min/avg/max/std-dev = 0.838/0.838/0.838/0.000 ms

Reply via email to