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>
133 lines
6.8 KiB
C
133 lines
6.8 KiB
C
/*
|
|
* Human Monitor Interface
|
|
*
|
|
* Copyright IBM, Corp. 2011
|
|
*
|
|
* Authors:
|
|
* Anthony Liguori <aliguori@us.ibm.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2. See
|
|
* the COPYING file in the top-level directory.
|
|
*
|
|
*/
|
|
|
|
#ifndef HMP_H
|
|
#define HMP_H
|
|
|
|
#include "qemu-common.h"
|
|
#include "qemu/readline.h"
|
|
#include "qapi-types.h"
|
|
#include "qapi/qmp/qdict.h"
|
|
|
|
void hmp_info_name(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_version(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_kvm(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_status(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_uuid(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_chardev(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_mice(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_migrate(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_migrate_capabilities(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_migrate_cache_size(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_cpus(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_block(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_blockstats(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_vnc(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_spice(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_balloon(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_pci(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_block_jobs(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_tpm(Monitor *mon, const QDict *qdict);
|
|
void hmp_quit(Monitor *mon, const QDict *qdict);
|
|
void hmp_stop(Monitor *mon, const QDict *qdict);
|
|
void hmp_system_reset(Monitor *mon, const QDict *qdict);
|
|
void hmp_system_powerdown(Monitor *mon, const QDict *qdict);
|
|
void hmp_cpu(Monitor *mon, const QDict *qdict);
|
|
void hmp_memsave(Monitor *mon, const QDict *qdict);
|
|
void hmp_pmemsave(Monitor *mon, const QDict *qdict);
|
|
void hmp_ringbuf_write(Monitor *mon, const QDict *qdict);
|
|
void hmp_ringbuf_read(Monitor *mon, const QDict *qdict);
|
|
void hmp_cont(Monitor *mon, const QDict *qdict);
|
|
void hmp_system_wakeup(Monitor *mon, const QDict *qdict);
|
|
void hmp_nmi(Monitor *mon, const QDict *qdict);
|
|
void hmp_set_link(Monitor *mon, const QDict *qdict);
|
|
void hmp_block_passwd(Monitor *mon, const QDict *qdict);
|
|
void hmp_balloon(Monitor *mon, const QDict *qdict);
|
|
void hmp_block_resize(Monitor *mon, const QDict *qdict);
|
|
void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict);
|
|
void hmp_snapshot_blkdev_internal(Monitor *mon, const QDict *qdict);
|
|
void hmp_snapshot_delete_blkdev_internal(Monitor *mon, const QDict *qdict);
|
|
void hmp_drive_mirror(Monitor *mon, const QDict *qdict);
|
|
void hmp_drive_backup(Monitor *mon, const QDict *qdict);
|
|
void hmp_migrate_cancel(Monitor *mon, const QDict *qdict);
|
|
void hmp_migrate_incoming(Monitor *mon, const QDict *qdict);
|
|
void hmp_migrate_set_downtime(Monitor *mon, const QDict *qdict);
|
|
void hmp_migrate_set_speed(Monitor *mon, const QDict *qdict);
|
|
void hmp_migrate_set_capability(Monitor *mon, const QDict *qdict);
|
|
void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict);
|
|
void hmp_migrate_set_cache_size(Monitor *mon, const QDict *qdict);
|
|
void hmp_client_migrate_info(Monitor *mon, const QDict *qdict);
|
|
void hmp_set_password(Monitor *mon, const QDict *qdict);
|
|
void hmp_expire_password(Monitor *mon, const QDict *qdict);
|
|
void hmp_eject(Monitor *mon, const QDict *qdict);
|
|
void hmp_change(Monitor *mon, const QDict *qdict);
|
|
void hmp_block_set_io_throttle(Monitor *mon, const QDict *qdict);
|
|
void hmp_block_stream(Monitor *mon, const QDict *qdict);
|
|
void hmp_block_job_set_speed(Monitor *mon, const QDict *qdict);
|
|
void hmp_block_job_cancel(Monitor *mon, const QDict *qdict);
|
|
void hmp_block_job_pause(Monitor *mon, const QDict *qdict);
|
|
void hmp_block_job_resume(Monitor *mon, const QDict *qdict);
|
|
void hmp_block_job_complete(Monitor *mon, const QDict *qdict);
|
|
void hmp_migrate(Monitor *mon, const QDict *qdict);
|
|
void hmp_device_add(Monitor *mon, const QDict *qdict);
|
|
void hmp_device_del(Monitor *mon, const QDict *qdict);
|
|
void hmp_dump_guest_memory(Monitor *mon, const QDict *qdict);
|
|
void hmp_netdev_add(Monitor *mon, const QDict *qdict);
|
|
void hmp_netdev_del(Monitor *mon, const QDict *qdict);
|
|
void hmp_getfd(Monitor *mon, const QDict *qdict);
|
|
void hmp_closefd(Monitor *mon, const QDict *qdict);
|
|
void hmp_sendkey(Monitor *mon, const QDict *qdict);
|
|
void hmp_screendump(Monitor *mon, const QDict *qdict);
|
|
void hmp_nbd_server_start(Monitor *mon, const QDict *qdict);
|
|
void hmp_nbd_server_add(Monitor *mon, const QDict *qdict);
|
|
void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict);
|
|
void hmp_chardev_add(Monitor *mon, const QDict *qdict);
|
|
void hmp_chardev_remove(Monitor *mon, const QDict *qdict);
|
|
void hmp_qemu_io(Monitor *mon, const QDict *qdict);
|
|
void hmp_cpu_add(Monitor *mon, const QDict *qdict);
|
|
void hmp_object_add(Monitor *mon, const QDict *qdict);
|
|
void hmp_object_del(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_memdev(Monitor *mon, const QDict *qdict);
|
|
void hmp_info_memory_devices(Monitor *mon, const QDict *qdict);
|
|
void hmp_qom_list(Monitor *mon, const QDict *qdict);
|
|
void hmp_qom_set(Monitor *mon, const QDict *qdict);
|
|
void object_add_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void object_del_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void device_add_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void device_del_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void sendkey_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void chardev_remove_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void chardev_add_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void set_link_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void netdev_add_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void netdev_del_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void ringbuf_write_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void watchdog_action_completion(ReadLineState *rs, int nb_args,
|
|
const char *str);
|
|
void migrate_set_capability_completion(ReadLineState *rs, int nb_args,
|
|
const char *str);
|
|
void migrate_set_parameter_completion(ReadLineState *rs, int nb_args,
|
|
const char *str);
|
|
void host_net_add_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void host_net_remove_completion(ReadLineState *rs, int nb_args,
|
|
const char *str);
|
|
void delvm_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void loadvm_completion(ReadLineState *rs, int nb_args, const char *str);
|
|
void hmp_rocker(Monitor *mon, const QDict *qdict);
|
|
void hmp_rocker_ports(Monitor *mon, const QDict *qdict);
|
|
void hmp_rocker_of_dpa_flows(Monitor *mon, const QDict *qdict);
|
|
void hmp_rocker_of_dpa_groups(Monitor *mon, const QDict *qdict);
|
|
|
|
#endif
|