mirror of
https://github.com/qemu/qemu.git
synced 2024-12-18 09:43:38 +08:00
fafa4d508b
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 pport 1 vlan 1 LLDP src 00:02:00:00:02:00 dst 01:80:c2:00:00:0e 2 60 pport 1 vlan 1 ARP src 00:02:00:00:02:00 dst 00:02:00:00:03:00 2 60 pport 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 pport 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 pport 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 pport 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 pport 1 vlan 1 IP src 00:02:00:00:02:00 dst 00:02:00:00:03:00 proto 1 2 60 pport 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 pport 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 pport 2 vlan 2 LLDP src <any> dst 01:80:c2:00:00:0e --> write group 0x02000000 1 60 6 pport 2 vlan 2 IPv6 src <any> dst <any> --> write group 0x02000000 1 60 174 pport 1 vlan 1 LLDP src <any> dst 01:80:c2:00:00:0e --> write group 0x01000000 1 60 174 pport 2 vlan 2 IP src <any> dst <any> --> write group 0x02000000 1 60 6 pport 1 vlan 1 IPv6 src <any> dst <any> --> write group 0x01000000 1 60 181 pport 2 vlan 2 ARP src <any> dst <any> --> write group 0x02000000 1 10 715 pport 2 --> apply new vlan 2 goto tbl 20 1 60 177 pport 1 vlan 1 ARP src <any> dst <any> --> write group 0x01000000 1 60 174 pport 1 vlan 1 IP src <any> dst <any> --> write group 0x01000000 1 10 717 pport 1 --> apply new vlan 1 goto tbl 20 1 0 1432 pport 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 pport 1) --> pop vlan out pport 1 0x01000002 (type L2 interface vlan 1 pport 2) --> pop vlan out pport 2 0x02000000 (type L2 interface vlan 2 pport 0) --> pop vlan out pport 0 0x01000000 (type L2 interface vlan 1 pport 0) --> pop vlan out pport 0 0x31000000 (type L2 multicast vlan 1 index 0) --> groups [0x01000002,0x01000000] [Added "query-" prefixes to rocker.json commands as suggested by Eric Blake <eblake@redhat.com>. --Stefan] Signed-off-by: Scott Feldman <sfeldma@gmail.com> Signed-off-by: Jiri Pirko <jiri@resnulli.us> Message-id: 1433985681-56138-5-git-send-email-sfeldma@gmail.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
287 lines
6.3 KiB
JSON
287 lines
6.3 KiB
JSON
##
|
|
# @Rocker:
|
|
#
|
|
# Rocker switch information.
|
|
#
|
|
# @name: switch name
|
|
#
|
|
# @id: switch ID
|
|
#
|
|
# @ports: number of front-panel ports
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'struct': 'RockerSwitch',
|
|
'data': { 'name': 'str', 'id': 'uint64', 'ports': 'uint32' } }
|
|
|
|
##
|
|
# @query-rocker:
|
|
#
|
|
# Return rocker switch information.
|
|
#
|
|
# Returns: @Rocker information
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'command': 'query-rocker',
|
|
'data': { 'name': 'str' },
|
|
'returns': 'RockerSwitch' }
|
|
|
|
##
|
|
# @RockerPortDuplex:
|
|
#
|
|
# An eumeration of port duplex states.
|
|
#
|
|
# @half: half duplex
|
|
#
|
|
# @full: full duplex
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'enum': 'RockerPortDuplex', 'data': [ 'half', 'full' ] }
|
|
|
|
##
|
|
# @RockerPortAutoneg:
|
|
#
|
|
# An eumeration of port autoneg states.
|
|
#
|
|
# @off: autoneg is off
|
|
#
|
|
# @on: autoneg is on
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'enum': 'RockerPortAutoneg', 'data': [ 'off', 'on' ] }
|
|
|
|
##
|
|
# @RockerPort:
|
|
#
|
|
# Rocker switch port information.
|
|
#
|
|
# @name: port name
|
|
#
|
|
# @enabled: port is enabled for I/O
|
|
#
|
|
# @link-up: physical link is UP on port
|
|
#
|
|
# @speed: port link speed in Mbps
|
|
#
|
|
# @duplex: port link duplex
|
|
#
|
|
# @autoneg: port link autoneg
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'struct': 'RockerPort',
|
|
'data': { 'name': 'str', 'enabled': 'bool', 'link-up': 'bool',
|
|
'speed': 'uint32', 'duplex': 'RockerPortDuplex',
|
|
'autoneg': 'RockerPortAutoneg' } }
|
|
|
|
##
|
|
# @query-rocker-ports:
|
|
#
|
|
# Return rocker switch information.
|
|
#
|
|
# Returns: @Rocker information
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'command': 'query-rocker-ports',
|
|
'data': { 'name': 'str' },
|
|
'returns': ['RockerPort'] }
|
|
|
|
##
|
|
# @RockerOfDpaFlowKey:
|
|
#
|
|
# Rocker switch OF-DPA flow key
|
|
#
|
|
# @priority: key priority, 0 being lowest priority
|
|
#
|
|
# @tbl-id: flow table ID
|
|
#
|
|
# @in-pport: #optional physical input port
|
|
#
|
|
# @tunnel-id: #optional tunnel ID
|
|
#
|
|
# @vlan-id: #optional VLAN ID
|
|
#
|
|
# @eth-type: #optional Ethernet header type
|
|
#
|
|
# @eth-src: #optional Ethernet header source MAC address
|
|
#
|
|
# @eth-dst: #optional Ethernet header destination MAC address
|
|
#
|
|
# @ip-proto: #optional IP Header protocol field
|
|
#
|
|
# @ip-tos: #optional IP header TOS field
|
|
#
|
|
# @ip-dst: #optional IP header destination address
|
|
#
|
|
# Note: fields are marked #optional to indicate that they may or may not
|
|
# appear in the flow key depending if they're relevant to the flow key.
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'struct': 'RockerOfDpaFlowKey',
|
|
'data' : { 'priority': 'uint32', 'tbl-id': 'uint32', '*in-pport': 'uint32',
|
|
'*tunnel-id': 'uint32', '*vlan-id': 'uint16',
|
|
'*eth-type': 'uint16', '*eth-src': 'str', '*eth-dst': 'str',
|
|
'*ip-proto': 'uint8', '*ip-tos': 'uint8', '*ip-dst': 'str' } }
|
|
|
|
##
|
|
# @RockerOfDpaFlowMask:
|
|
#
|
|
# Rocker switch OF-DPA flow mask
|
|
#
|
|
# @in-pport: #optional physical input port
|
|
#
|
|
# @tunnel-id: #optional tunnel ID
|
|
#
|
|
# @vlan-id: #optional VLAN ID
|
|
#
|
|
# @eth-src: #optional Ethernet header source MAC address
|
|
#
|
|
# @eth-dst: #optional Ethernet header destination MAC address
|
|
#
|
|
# @ip-proto: #optional IP Header protocol field
|
|
#
|
|
# @ip-tos: #optional IP header TOS field
|
|
#
|
|
# Note: fields are marked #optional to indicate that they may or may not
|
|
# appear in the flow mask depending if they're relevant to the flow mask.
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'struct': 'RockerOfDpaFlowMask',
|
|
'data' : { '*in-pport': 'uint32', '*tunnel-id': 'uint32',
|
|
'*vlan-id': 'uint16', '*eth-src': 'str', '*eth-dst': 'str',
|
|
'*ip-proto': 'uint8', '*ip-tos': 'uint8' } }
|
|
|
|
##
|
|
# @RockerOfDpaFlowAction:
|
|
#
|
|
# Rocker switch OF-DPA flow action
|
|
#
|
|
# @goto-tbl: #optional next table ID
|
|
#
|
|
# @group-id: #optional group ID
|
|
#
|
|
# @tunnel-lport: #optional tunnel logical port ID
|
|
#
|
|
# @vlan-id: #optional VLAN ID
|
|
#
|
|
# @new-vlan-id: #optional new VLAN ID
|
|
#
|
|
# @out-pport: #optional physical output port
|
|
#
|
|
# Note: fields are marked #optional to indicate that they may or may not
|
|
# appear in the flow action depending if they're relevant to the flow action.
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'struct': 'RockerOfDpaFlowAction',
|
|
'data' : { '*goto-tbl': 'uint32', '*group-id': 'uint32',
|
|
'*tunnel-lport': 'uint32', '*vlan-id': 'uint16',
|
|
'*new-vlan-id': 'uint16', '*out-pport': 'uint32' } }
|
|
|
|
##
|
|
# @RockerOfDpaFlow:
|
|
#
|
|
# Rocker switch OF-DPA flow
|
|
#
|
|
# @cookie: flow unique cookie ID
|
|
#
|
|
# @hits: count of matches (hits) on flow
|
|
#
|
|
# @key: flow key
|
|
#
|
|
# @mask: flow mask
|
|
#
|
|
# @action: flow action
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'struct': 'RockerOfDpaFlow',
|
|
'data': { 'cookie': 'uint64', 'hits': 'uint64', 'key': 'RockerOfDpaFlowKey',
|
|
'mask': 'RockerOfDpaFlowMask', 'action': 'RockerOfDpaFlowAction' } }
|
|
|
|
##
|
|
# @query-rocker-of-dpa-flows:
|
|
#
|
|
# Return rocker OF-DPA flow information.
|
|
#
|
|
# @name: switch name
|
|
#
|
|
# @tbl-id: #optional flow table ID. If tbl-id is not specified, returns
|
|
# flow information for all tables.
|
|
#
|
|
# Returns: @Rocker OF-DPA flow information
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'command': 'query-rocker-of-dpa-flows',
|
|
'data': { 'name': 'str', '*tbl-id': 'uint32' },
|
|
'returns': ['RockerOfDpaFlow'] }
|
|
|
|
##
|
|
# @RockerOfDpaGroup:
|
|
#
|
|
# Rocker switch OF-DPA group
|
|
#
|
|
# @id: group unique ID
|
|
#
|
|
# @type: group type
|
|
#
|
|
# @vlan-id: #optional VLAN ID
|
|
#
|
|
# @pport: #optional physical port number
|
|
#
|
|
# @index: #optional group index, unique with group type
|
|
#
|
|
# @out-pport: #optional output physical port number
|
|
#
|
|
# @group-id: #optional next group ID
|
|
#
|
|
# @set-vlan-id: #optional VLAN ID to set
|
|
#
|
|
# @pop-vlan: #optional pop VLAN headr from packet
|
|
#
|
|
# @group-ids: #optional list of next group IDs
|
|
#
|
|
# @set-eth-src: #optional set source MAC address in Ethernet header
|
|
#
|
|
# @set-eth-dst: #optional set destination MAC address in Ethernet header
|
|
#
|
|
# @ttl-check: #optional perform TTL check
|
|
#
|
|
# Note: fields are marked #optional to indicate that they may or may not
|
|
# appear in the group depending if they're relevant to the group type.
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'struct': 'RockerOfDpaGroup',
|
|
'data': { 'id': 'uint32', 'type': 'uint8', '*vlan-id': 'uint16',
|
|
'*pport': 'uint32', '*index': 'uint32', '*out-pport': 'uint32',
|
|
'*group-id': 'uint32', '*set-vlan-id': 'uint16',
|
|
'*pop-vlan': 'uint8', '*group-ids': ['uint32'],
|
|
'*set-eth-src': 'str', '*set-eth-dst': 'str',
|
|
'*ttl-check': 'uint8' } }
|
|
|
|
##
|
|
# @query-rocker-of-dpa-groups:
|
|
#
|
|
# Return rocker OF-DPA group information.
|
|
#
|
|
# @name: switch name
|
|
#
|
|
# @type: #optional group type. If type is not specified, returns
|
|
# group information for all group types.
|
|
#
|
|
# Returns: @Rocker OF-DPA group information
|
|
#
|
|
# Since: 2.4
|
|
##
|
|
{ 'command': 'query-rocker-of-dpa-groups',
|
|
'data': { 'name': 'str', '*type': 'uint8' },
|
|
'returns': ['RockerOfDpaGroup'] }
|