qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3 7/9] qmp: add rocker device support


From: Scott Feldman
Subject: Re: [Qemu-devel] [PATCH v3 7/9] qmp: add rocker device support
Date: Fri, 16 Jan 2015 01:59:09 -0800

On Fri, Jan 16, 2015 at 1:26 AM, Jason Wang <address@hidden> wrote:
>
> On 01/11/2015 11:57 AM, address@hidden wrote:
>> From: Scott Feldman <address@hidden>
>>
>> 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 <address@hidden>
>> Signed-off-by: Jiri Pirko <address@hidden>
>> ---
>>  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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]