On Fri, Jan 16, 2015 at 1:26 AM, Jason Wang <jasow...@redhat.com> wrote: > > On 01/11/2015 11:57 AM, sfel...@gmail.com wrote: >> From: Scott Feldman <sfel...@gmail.com> >> >> Add QMP/HMP support for rocker devices. This is mostly for debugging >> purposes >> to see inside the device's tables and port configurations. Some examples: >> >> (qemu) info rocker sw1 >> name: sw1 >> id: 0x0000013512005452 >> ports: 4 >> >> (qemu) info rocker-ports sw1 >> ena/ speed/ auto >> port link duplex neg? >> sw1.1 up 10G FD No >> sw1.2 up 10G FD No >> sw1.3 !ena 10G FD No >> sw1.4 !ena 10G FD No >> >> (qemu) info rocker-of-dpa-flows sw1 >> prio tbl hits key(mask) --> actions >> 2 60 lport 1 vlan 1 LLDP src 00:02:00:00:02:00 dst 01:80:c2:00:00:0e >> 2 60 lport 1 vlan 1 ARP src 00:02:00:00:02:00 dst 00:02:00:00:03:00 >> 2 60 lport 2 vlan 2 IPv6 src 00:02:00:00:03:00 dst >> 33:33:ff:00:00:02 proto 58 >> 3 50 vlan 2 dst 33:33:ff:00:00:02 --> write group 0x32000001 goto >> tbl 60 >> 2 60 lport 2 vlan 2 IPv6 src 00:02:00:00:03:00 dst >> 33:33:ff:00:03:00 proto 58 >> 3 50 1 vlan 2 dst 33:33:ff:00:03:00 --> write group 0x32000001 goto >> tbl 60 >> 2 60 lport 2 vlan 2 ARP src 00:02:00:00:03:00 dst 00:02:00:00:02:00 >> 3 50 2 vlan 2 dst 00:02:00:00:02:00 --> write group 0x02000001 goto >> tbl 60 >> 2 60 1 lport 2 vlan 2 IP src 00:02:00:00:03:00 dst 00:02:00:00:02:00 >> proto 1 >> 3 50 2 vlan 1 dst 00:02:00:00:03:00 --> write group 0x01000002 goto >> tbl 60 >> 2 60 1 lport 1 vlan 1 IP src 00:02:00:00:02:00 dst 00:02:00:00:03:00 >> proto 1 >> 2 60 lport 1 vlan 1 IPv6 src 00:02:00:00:02:00 dst >> 33:33:ff:00:00:01 proto 58 >> 3 50 vlan 1 dst 33:33:ff:00:00:01 --> write group 0x31000000 goto >> tbl 60 >> 2 60 lport 1 vlan 1 IPv6 src 00:02:00:00:02:00 dst >> 33:33:ff:00:02:00 proto 58 >> 3 50 1 vlan 1 dst 33:33:ff:00:02:00 --> write group 0x31000000 goto >> tbl 60 >> 1 60 173 lport 2 vlan 2 LLDP src <any> dst 01:80:c2:00:00:0e --> write >> group 0x02000000 >> 1 60 6 lport 2 vlan 2 IPv6 src <any> dst <any> --> write group >> 0x02000000 >> 1 60 174 lport 1 vlan 1 LLDP src <any> dst 01:80:c2:00:00:0e --> write >> group 0x01000000 >> 1 60 174 lport 2 vlan 2 IP src <any> dst <any> --> write group >> 0x02000000 >> 1 60 6 lport 1 vlan 1 IPv6 src <any> dst <any> --> write group >> 0x01000000 >> 1 60 181 lport 2 vlan 2 ARP src <any> dst <any> --> write group >> 0x02000000 >> 1 10 715 lport 2 --> apply new vlan 2 goto tbl 20 >> 1 60 177 lport 1 vlan 1 ARP src <any> dst <any> --> write group >> 0x01000000 >> 1 60 174 lport 1 vlan 1 IP src <any> dst <any> --> write group >> 0x01000000 >> 1 10 717 lport 1 --> apply new vlan 1 goto tbl 20 >> 1 0 1432 lport 0(0xffff) --> goto tbl 10 >> >> (qemu) info rocker-of-dpa-groups sw1 >> id (decode) --> buckets >> 0x32000001 (type L2 multicast vlan 2 index 1) --> groups >> [0x02000001,0x02000000] >> 0x02000001 (type L2 interface vlan 2 lport 1) --> pop vlan out lport 1 >> 0x01000002 (type L2 interface vlan 1 lport 2) --> pop vlan out lport 2 >> 0x02000000 (type L2 interface vlan 2 lport 0) --> pop vlan out lport 0 >> 0x01000000 (type L2 interface vlan 1 lport 0) --> pop vlan out lport 0 >> 0x31000000 (type L2 multicast vlan 1 index 0) --> groups >> [0x01000002,0x01000000] >> >> Signed-off-by: Scott Feldman <sfel...@gmail.com> >> Signed-off-by: Jiri Pirko <j...@resnulli.us> >> --- >> hmp-commands.hx | 24 ++++ >> hmp.c | 303 >> ++++++++++++++++++++++++++++++++++++++++ >> hmp.h | 4 + >> hw/net/rocker/rocker.c | 45 ++++++ >> hw/net/rocker/rocker_fp.c | 10 ++ >> hw/net/rocker/rocker_fp.h | 1 + >> hw/net/rocker/rocker_of_dpa.c | 308 >> +++++++++++++++++++++++++++++++++++++++++ >> monitor.c | 28 ++++ >> qapi-schema.json | 3 + >> qapi/rocker.json | 259 ++++++++++++++++++++++++++++++++++ >> qmp-commands.hx | 97 +++++++++++++ >> 11 files changed, 1082 insertions(+) >> create mode 100644 qapi/rocker.json > > I don't object this method but not sure it was worth (especially > consider it needs nearly a thousand lines of codes).
I wasn't happy about touching core files to add rocker support. Splitting device-specific stuff out into qapi/rocker.json helped. Seems qmp/hmp aren't really setup for devices to "plug-in" their stuff in in a modular way. I couldn't find other examples of devices using qmp/hmp to the extent rocker is, but maybe I didn't look hard enough. However, QMP/HMP support is very handy for debugging rocker device since there is tons of state stored in the switch forwarding tables, and it can be quite dynamic depending on what's going on on the guest OS w.r.t networking. > Could we just do this through remote controller or agent? I'm open to ideas. qmp/hmp work great for getting an instantaneous snapshot of the device state. The JSON format goodness come for free with qmp, so that's nice. -scott