Hi Paolo,
Thank you for the correction! Greatly appreciated and it worked. I tested all combinations of Linux host using virtual Socket-CAN and pcm3680 and mioe3680 client QEmu Linux environments using Linux Socket-CAN drivers, sending and receiving from each-other (all combinations; host-to-client, client-to-client, etc). All tests passed! Details: Setup virtual Socket-CAN from host Linux system: $ sudo ip link add dev vcan0 type vcan $ sudo ip link set up vcan0 $ sudo ip link add dev vcan1 type vcan $ sudo ip link set up vcan1 $ sudo ip link set vcan0 txqueuelen 15 $ sudo ip link set vcan1 txqueuelen 15 Starting 2 x QEmu sessions from host Linux; one for pcm3680 and other for mioe3680: $ ./qemu-local/bin/qemu-system-i386 -hda sdd2gb-uno1483-16.04-2.0-dev.img -boot d -k en-us -object can-bus,id=canbus0 -object can-bus,id=canbus1 -object can-host-socketcan,id=canhost0,canbus=canbus0,if=vcan0 -object can-host-socketcan,id=canhost1,canbus=canbus1,if=vcan1 -device mioe3680_pci,canbus0=canbus0,canbus1=canbus1 -m size=2048 -netdev user,id=user.0 -device e1000,netdev=user.0 -redir tcp:5022::22 -enable-kvm & $ ./qemu-local/bin/qemu-system-i386 -hda sdd2gb-uno1483-16.04-2.0-dev-copy.img -boot d -k en-us -object can-bus,id=canbus0 -object can-bus,id=canbus1 -object can-host-socketcan,id=canhost0,canbus=canbus0,if=vcan0 -object can-host-socketcan,id=canhost1,canbus=canbus1,if=vcan1 -device pcm3680_pci,canbus0=canbus0,canbus1=canbus1 -m size=2048 -netdev user,id=user.0 -device e1000,netdev=user.0 -redir tcp:6022::22 -enable-kvm & Login to client QEmu instances and setup CAN networks: $ ssh -Yp5022 user@localhost $ sudo ip link set can0 type can bitrate 250000 $ sudo ip link set can1 type can bitrate 250000 $ sudo ip link set up can0 $ sudo ip link set up can1 $ sudo ip link set can0 txqueuelen 15 $ sudo ip link set can1 txqueuelen 15 $ ssh -Yp6022 user@localhost $ ... similarly ... Then tried all combinations of "candump vcan0/1" from host and "candump can0/1" from clients for transmission and reception to and from host to client and client to client. user@:~$ candump can1 can1 123 [8] 11 22 33 44 55 66 77 88 can1 123 [8] 11 22 33 44 55 66 77 88 can1 123 [8] 11 22 33 44 55 66 77 88 host:$ candump vcan0 vcan0 123 [8] 11 22 33 44 55 66 77 88 vcan0 123 [8] 11 22 33 44 55 66 77 88 vcan0 123 [8] 11 22 33 44 55 66 77 88 vcan0 123 [8] 11 22 33 44 55 66 77 88 All successful. Best regards, Deniz On Jan 31, 2018, at 12:10 PM, Paolo Bonzini <pbonz...@redhat.com> wrote: On 30/01/2018 20:08, Paolo Bonzini wrote: On 30/01/2018 19:13, Deniz Eren wrote: Hi Pavel, Paolo, I tried to rerun my environment to test however it seems the interface has changed a little and my standard program options cause complaints. Unfortunately I don’t have too much time to dig through at the moment. My standard startup command is: $ ./qemu-local/bin/qemu-system-i386 -hda sdd2gb-uno1483-16.04-2.0-dev.img -boot d -k en-us -device mioe3680_pci,canbus1=canbus0,host1=vcan0,canbus2=canbus1,host2=vcan1 -m size=2048 -netdev user,id=user.0 -device e1000,netdev=user.0 -redir tcp:5022::22 -enable-kvm & Yep, it's now like this: ./qemu-local/bin/qemu-system-i386 \ -hda sdd2gb-uno1483-16.04-2.0-dev.img -boot d -k en-us \ -object can-bus,id=canbus0 \ -object can-bus,id=canbus1 \ -object can-host-socketcan,id=canhost0,canbus=canbus0,ifname=vcan0 \ -object can-host-socketcan,id=canhost1,canbus=canbus1,ifname=vcan1 \ -device mioe3680_pci,canbus0=canbus0,canbus1=canbus1 \ -m size=2048 -netdev user,id=user.0 -device e1000,netdev=user.0 \ -redir tcp:5022::22 -enable-kvm Sorry, all "ifname" are "if". Paolo Thanks, Paolo Best regards, Deniz Sent from my iPhone Deniz Eren +61 400 307 762 On 31 Jan 2018, at 9:12 am, Pavel Pisa <p...@cmp.felk.cvut.cz> wrote: Hello Paolo, thanks much for conversion to acceptable QOM model. On Tuesday 30 of January 2018 15:15:22 Paolo Bonzini wrote: On 25/01/2018 22:33, Pavel Pisa wrote: Hello Paolo, thanks for suggestions. I understand and fully agree with your request to switch to QOM. I have succeed with that for CAN devices some time ago. It worth to be done for the rest of the objects but I fear that I do not find time to complete QOMification in reasonable future. Contributions/suggestions from other are welcomed. I can look for students for GSoC at our university or under other funding. Please take a look at branch can-pci-qom of github.com/bonzini/qemu.git. Apart from QOMification of the backend include, I simplified the IRQ handling in can_kvaser_pci (fixing bugs too I think), and removed an unnecessary mutex. I also moved the files to net/can and hw/net/can so that in the future Jason (networking maintainer) can take care of pull requests. I might have broken something, and the top commit in particular is completely untested. I have run basic test with Linux kernel on both sides for one kavser_pci card on guest side and vcan (no real interface) on host side. Mesages exchange tests passed and looks OK. I have used next parameters -object can-bus,id=canbus0 \ -device kvaser_pci,canbus=canbus0 \ -object can-host-socketcan,if=can0,canbus=canbus0,id=canbus0-socketcan The id parameter is required for "can-host-socketcan" object. Else next error is printed qemu-system-x86_64: -object can-host-socketcan,if=can0,canbus=canbus0: Parameter 'id' is missing If "-object can-bus,id=canbus0" is missing then next error is reported qemu-system-x86_64: -object can-host-socketcan,if=can0,canbus=canbus0,id=canbus0-socketcan: Device 'canbus0' not found I have inspected through monitor the state of objects (qemu) qom-list /objects canbus0-socketcan (child<can-host-socketcan>) type (string) canbus0 (child<can-bus>) (qemu) info qom-tree /machine (pc-i440fx-2.12-machine) ... /peripheral-anon (container) /device[1] (kvaser_pci) /bus master[0] (qemu:memory-region) /kvaser_pci-xilinx[0] (qemu:memory-region) /kvaser_pci-s5920[0] (qemu:memory-region) /kvaser_pci-sja[0] (qemu:memory-region) /bus master container[0] (qemu:memory-region) ... (qemu) qom-list /objects canbus0-socketcan (child<can-host-socketcan>) type (string) canbus0 (child<can-bus>) (qemu) qom-list /machine/peripheral-anon/device[1] bus master container[0] (child<qemu:memory-region>) canbus (link<can-bus>) rombar (uint32) hotpluggable (bool) x-pcie-lnksta-dllla (bool) kvaser_pci-sja[0] (child<qemu:memory-region>) multifunction (bool) hotplugged (bool) parent_bus (link<bus>) romfile (str) kvaser_pci-s5920[0] (child<qemu:memory-region>) x-pcie-extcap-init (bool) command_serr_enable (bool) addr (int32) type (string) legacy-addr (str) kvaser_pci-xilinx[0] (child<qemu:memory-region>) realized (bool) bus master[0] (child<qemu:memory-region>) From the user point of view, it would be nice if "can-bus" can be populated when required automatically. I am not sure, but may it be that it would worth to push can-bus objects under some category/specific container. The path /objects is quite wide. Into something like /object/can-bus or /net/can. But generally thanks much, the progress you have made in one day is really great. I hope that others check your branch. I have pushed your unmodified version into "can-pci-qom" branch of my repo https://gitlab.fel.cvut.cz/canbus/qemu-canbus/tree/can-pci-qom It would be great if others can check that everything works in their setup. I think that then it can be pushed into mainline and some usability improvements can be done/experiment with later. Thanks much, Pavel Pisa