net: Remove the deprecated way of dumping network packets
"-net dump" has been marked as deprecated since QEMU v2.10, since it only works with the deprecated 'vlan' parameter (or hubs). Network dumping should be done with "-object filter-dump" nowadays instead. Since nobody complained so far about the deprecation message, let's finally get rid of "-net dump" now. Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
aa09a485c2
commit
857d20873d
102
net/dump.c
102
net/dump.c
@ -109,7 +109,7 @@ static int net_dump_state_init(DumpState *s, const char *filename,
|
|||||||
|
|
||||||
fd = open(filename, O_CREAT | O_TRUNC | O_WRONLY | O_BINARY, 0644);
|
fd = open(filename, O_CREAT | O_TRUNC | O_WRONLY | O_BINARY, 0644);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
error_setg_errno(errp, errno, "-net dump: can't open %s", filename);
|
error_setg_errno(errp, errno, "net dump: can't open %s", filename);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ static int net_dump_state_init(DumpState *s, const char *filename,
|
|||||||
hdr.linktype = 1;
|
hdr.linktype = 1;
|
||||||
|
|
||||||
if (write(fd, &hdr, sizeof(hdr)) < sizeof(hdr)) {
|
if (write(fd, &hdr, sizeof(hdr)) < sizeof(hdr)) {
|
||||||
error_setg_errno(errp, errno, "-net dump write error");
|
error_setg_errno(errp, errno, "net dump write error");
|
||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -136,104 +136,6 @@ static int net_dump_state_init(DumpState *s, const char *filename,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dumping via VLAN netclient */
|
|
||||||
|
|
||||||
struct DumpNetClient {
|
|
||||||
NetClientState nc;
|
|
||||||
DumpState ds;
|
|
||||||
};
|
|
||||||
typedef struct DumpNetClient DumpNetClient;
|
|
||||||
|
|
||||||
static ssize_t dumpclient_receive(NetClientState *nc, const uint8_t *buf,
|
|
||||||
size_t size)
|
|
||||||
{
|
|
||||||
DumpNetClient *dc = DO_UPCAST(DumpNetClient, nc, nc);
|
|
||||||
struct iovec iov = {
|
|
||||||
.iov_base = (void *)buf,
|
|
||||||
.iov_len = size
|
|
||||||
};
|
|
||||||
|
|
||||||
return dump_receive_iov(&dc->ds, &iov, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t dumpclient_receive_iov(NetClientState *nc,
|
|
||||||
const struct iovec *iov, int cnt)
|
|
||||||
{
|
|
||||||
DumpNetClient *dc = DO_UPCAST(DumpNetClient, nc, nc);
|
|
||||||
|
|
||||||
return dump_receive_iov(&dc->ds, iov, cnt);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dumpclient_cleanup(NetClientState *nc)
|
|
||||||
{
|
|
||||||
DumpNetClient *dc = DO_UPCAST(DumpNetClient, nc, nc);
|
|
||||||
|
|
||||||
dump_cleanup(&dc->ds);
|
|
||||||
}
|
|
||||||
|
|
||||||
static NetClientInfo net_dump_info = {
|
|
||||||
.type = NET_CLIENT_DRIVER_DUMP,
|
|
||||||
.size = sizeof(DumpNetClient),
|
|
||||||
.receive = dumpclient_receive,
|
|
||||||
.receive_iov = dumpclient_receive_iov,
|
|
||||||
.cleanup = dumpclient_cleanup,
|
|
||||||
};
|
|
||||||
|
|
||||||
int net_init_dump(const Netdev *netdev, const char *name,
|
|
||||||
NetClientState *peer, Error **errp)
|
|
||||||
{
|
|
||||||
int len, rc;
|
|
||||||
const char *file;
|
|
||||||
char def_file[128];
|
|
||||||
const NetdevDumpOptions *dump;
|
|
||||||
NetClientState *nc;
|
|
||||||
DumpNetClient *dnc;
|
|
||||||
|
|
||||||
assert(netdev->type == NET_CLIENT_DRIVER_DUMP);
|
|
||||||
dump = &netdev->u.dump;
|
|
||||||
|
|
||||||
assert(peer);
|
|
||||||
|
|
||||||
error_report("'-net dump' is deprecated. "
|
|
||||||
"Please use '-object filter-dump' instead.");
|
|
||||||
|
|
||||||
if (dump->has_file) {
|
|
||||||
file = dump->file;
|
|
||||||
} else {
|
|
||||||
int id;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = net_hub_id_for_client(peer, &id);
|
|
||||||
assert(ret == 0); /* peer must be on a hub */
|
|
||||||
|
|
||||||
snprintf(def_file, sizeof(def_file), "qemu-vlan%d.pcap", id);
|
|
||||||
file = def_file;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dump->has_len) {
|
|
||||||
if (dump->len > INT_MAX) {
|
|
||||||
error_setg(errp, "invalid length: %"PRIu64, dump->len);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
len = dump->len;
|
|
||||||
} else {
|
|
||||||
len = 65536;
|
|
||||||
}
|
|
||||||
|
|
||||||
nc = qemu_new_net_client(&net_dump_info, peer, "dump", name);
|
|
||||||
snprintf(nc->info_str, sizeof(nc->info_str),
|
|
||||||
"dump to %s (len=%d)", file, len);
|
|
||||||
|
|
||||||
dnc = DO_UPCAST(DumpNetClient, nc, nc);
|
|
||||||
rc = net_dump_state_init(&dnc->ds, file, len, errp);
|
|
||||||
if (rc) {
|
|
||||||
qemu_del_net_client(nc);
|
|
||||||
}
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Dumping via filter */
|
|
||||||
|
|
||||||
#define TYPE_FILTER_DUMP "filter-dump"
|
#define TYPE_FILTER_DUMP "filter-dump"
|
||||||
|
|
||||||
#define FILTER_DUMP(obj) \
|
#define FILTER_DUMP(obj) \
|
||||||
|
@ -63,7 +63,6 @@ static QTAILQ_HEAD(, NetClientState) net_clients;
|
|||||||
const char *host_net_devices[] = {
|
const char *host_net_devices[] = {
|
||||||
"tap",
|
"tap",
|
||||||
"socket",
|
"socket",
|
||||||
"dump",
|
|
||||||
#ifdef CONFIG_NET_BRIDGE
|
#ifdef CONFIG_NET_BRIDGE
|
||||||
"bridge",
|
"bridge",
|
||||||
#endif
|
#endif
|
||||||
@ -967,7 +966,6 @@ static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])(
|
|||||||
#ifdef CONFIG_NETMAP
|
#ifdef CONFIG_NETMAP
|
||||||
[NET_CLIENT_DRIVER_NETMAP] = net_init_netmap,
|
[NET_CLIENT_DRIVER_NETMAP] = net_init_netmap,
|
||||||
#endif
|
#endif
|
||||||
[NET_CLIENT_DRIVER_DUMP] = net_init_dump,
|
|
||||||
#ifdef CONFIG_NET_BRIDGE
|
#ifdef CONFIG_NET_BRIDGE
|
||||||
[NET_CLIENT_DRIVER_BRIDGE] = net_init_bridge,
|
[NET_CLIENT_DRIVER_BRIDGE] = net_init_bridge,
|
||||||
#endif
|
#endif
|
||||||
@ -993,8 +991,7 @@ static int net_client_init1(const void *object, bool is_netdev, Error **errp)
|
|||||||
netdev = object;
|
netdev = object;
|
||||||
name = netdev->id;
|
name = netdev->id;
|
||||||
|
|
||||||
if (netdev->type == NET_CLIENT_DRIVER_DUMP ||
|
if (netdev->type == NET_CLIENT_DRIVER_NIC ||
|
||||||
netdev->type == NET_CLIENT_DRIVER_NIC ||
|
|
||||||
!net_client_init_fun[netdev->type]) {
|
!net_client_init_fun[netdev->type]) {
|
||||||
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "type",
|
||||||
"a netdev backend type");
|
"a netdev backend type");
|
||||||
@ -1036,10 +1033,6 @@ static int net_client_init1(const void *object, bool is_netdev, Error **errp)
|
|||||||
legacy.type = NET_CLIENT_DRIVER_VDE;
|
legacy.type = NET_CLIENT_DRIVER_VDE;
|
||||||
legacy.u.vde = opts->u.vde;
|
legacy.u.vde = opts->u.vde;
|
||||||
break;
|
break;
|
||||||
case NET_LEGACY_OPTIONS_TYPE_DUMP:
|
|
||||||
legacy.type = NET_CLIENT_DRIVER_DUMP;
|
|
||||||
legacy.u.dump = opts->u.dump;
|
|
||||||
break;
|
|
||||||
case NET_LEGACY_OPTIONS_TYPE_BRIDGE:
|
case NET_LEGACY_OPTIONS_TYPE_BRIDGE:
|
||||||
legacy.type = NET_CLIENT_DRIVER_BRIDGE;
|
legacy.type = NET_CLIENT_DRIVER_BRIDGE;
|
||||||
legacy.u.bridge = opts->u.bridge;
|
legacy.u.bridge = opts->u.bridge;
|
||||||
|
@ -39,8 +39,8 @@
|
|||||||
#
|
#
|
||||||
# Add a network backend.
|
# Add a network backend.
|
||||||
#
|
#
|
||||||
# @type: the type of network backend. Current valid values are 'user', 'tap',
|
# @type: the type of network backend. Possible values are listed in
|
||||||
# 'vde', 'socket', 'dump' and 'bridge'
|
# NetClientDriver (excluding 'none' and 'nic')
|
||||||
#
|
#
|
||||||
# @id: the name of the new network backend
|
# @id: the name of the new network backend
|
||||||
#
|
#
|
||||||
@ -371,23 +371,6 @@
|
|||||||
'*group': 'str',
|
'*group': 'str',
|
||||||
'*mode': 'uint16' } }
|
'*mode': 'uint16' } }
|
||||||
|
|
||||||
##
|
|
||||||
# @NetdevDumpOptions:
|
|
||||||
#
|
|
||||||
# Dump VLAN network traffic to a file.
|
|
||||||
#
|
|
||||||
# @len: per-packet size limit (64k default). Understands [TGMKkb]
|
|
||||||
# suffixes.
|
|
||||||
#
|
|
||||||
# @file: dump file path (default is qemu-vlan0.pcap)
|
|
||||||
#
|
|
||||||
# Since: 1.2
|
|
||||||
##
|
|
||||||
{ 'struct': 'NetdevDumpOptions',
|
|
||||||
'data': {
|
|
||||||
'*len': 'size',
|
|
||||||
'*file': 'str' } }
|
|
||||||
|
|
||||||
##
|
##
|
||||||
# @NetdevBridgeOptions:
|
# @NetdevBridgeOptions:
|
||||||
#
|
#
|
||||||
@ -466,9 +449,11 @@
|
|||||||
# Available netdev drivers.
|
# Available netdev drivers.
|
||||||
#
|
#
|
||||||
# Since: 2.7
|
# Since: 2.7
|
||||||
|
#
|
||||||
|
# 'dump' - removed with 2.12
|
||||||
##
|
##
|
||||||
{ 'enum': 'NetClientDriver',
|
{ 'enum': 'NetClientDriver',
|
||||||
'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde', 'dump',
|
'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde',
|
||||||
'bridge', 'hubport', 'netmap', 'vhost-user' ] }
|
'bridge', 'hubport', 'netmap', 'vhost-user' ] }
|
||||||
|
|
||||||
##
|
##
|
||||||
@ -495,7 +480,6 @@
|
|||||||
'l2tpv3': 'NetdevL2TPv3Options',
|
'l2tpv3': 'NetdevL2TPv3Options',
|
||||||
'socket': 'NetdevSocketOptions',
|
'socket': 'NetdevSocketOptions',
|
||||||
'vde': 'NetdevVdeOptions',
|
'vde': 'NetdevVdeOptions',
|
||||||
'dump': 'NetdevDumpOptions',
|
|
||||||
'bridge': 'NetdevBridgeOptions',
|
'bridge': 'NetdevBridgeOptions',
|
||||||
'hubport': 'NetdevHubPortOptions',
|
'hubport': 'NetdevHubPortOptions',
|
||||||
'netmap': 'NetdevNetmapOptions',
|
'netmap': 'NetdevNetmapOptions',
|
||||||
@ -530,7 +514,7 @@
|
|||||||
##
|
##
|
||||||
{ 'enum': 'NetLegacyOptionsType',
|
{ 'enum': 'NetLegacyOptionsType',
|
||||||
'data': ['none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde',
|
'data': ['none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde',
|
||||||
'dump', 'bridge', 'netmap', 'vhost-user'] }
|
'bridge', 'netmap', 'vhost-user'] }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @NetLegacyOptions:
|
# @NetLegacyOptions:
|
||||||
@ -550,7 +534,6 @@
|
|||||||
'l2tpv3': 'NetdevL2TPv3Options',
|
'l2tpv3': 'NetdevL2TPv3Options',
|
||||||
'socket': 'NetdevSocketOptions',
|
'socket': 'NetdevSocketOptions',
|
||||||
'vde': 'NetdevVdeOptions',
|
'vde': 'NetdevVdeOptions',
|
||||||
'dump': 'NetdevDumpOptions',
|
|
||||||
'bridge': 'NetdevBridgeOptions',
|
'bridge': 'NetdevBridgeOptions',
|
||||||
'netmap': 'NetdevNetmapOptions',
|
'netmap': 'NetdevNetmapOptions',
|
||||||
'vhost-user': 'NetdevVhostUserOptions' } }
|
'vhost-user': 'NetdevVhostUserOptions' } }
|
||||||
|
@ -2707,12 +2707,6 @@ that can be specified with the ``-device'' parameter.
|
|||||||
The drive addr argument is replaced by the the addr argument
|
The drive addr argument is replaced by the the addr argument
|
||||||
that can be specified with the ``-device'' parameter.
|
that can be specified with the ``-device'' parameter.
|
||||||
|
|
||||||
@subsection -net dump (since 2.10.0)
|
|
||||||
|
|
||||||
The ``--net dump'' argument is now replaced with the
|
|
||||||
``-object filter-dump'' argument which works in combination
|
|
||||||
with the modern ``-netdev`` backends instead.
|
|
||||||
|
|
||||||
@subsection -usbdevice (since 2.10.0)
|
@subsection -usbdevice (since 2.10.0)
|
||||||
|
|
||||||
The ``-usbdevice DEV'' argument is now a synonym for setting
|
The ``-usbdevice DEV'' argument is now a synonym for setting
|
||||||
|
@ -2009,8 +2009,6 @@ DEF("net", HAS_ARG, QEMU_OPTION_net,
|
|||||||
" configure or create an on-board (or machine default) NIC and\n"
|
" configure or create an on-board (or machine default) NIC and\n"
|
||||||
" connect it either to VLAN 'n' or the netdev 'nd' (for pluggable\n"
|
" connect it either to VLAN 'n' or the netdev 'nd' (for pluggable\n"
|
||||||
" NICs please use '-device devtype,netdev=nd' instead)\n"
|
" NICs please use '-device devtype,netdev=nd' instead)\n"
|
||||||
"-net dump[,vlan=n][,file=f][,len=n]\n"
|
|
||||||
" dump traffic on vlan 'n' to file 'f' (max n bytes per packet)\n"
|
|
||||||
"-net none use it alone to have zero network devices. If no -net option\n"
|
"-net none use it alone to have zero network devices. If no -net option\n"
|
||||||
" is provided, the default is '-net nic -net user'\n"
|
" is provided, the default is '-net nic -net user'\n"
|
||||||
"-net ["
|
"-net ["
|
||||||
@ -2458,12 +2456,6 @@ qemu -m 512 -object memory-backend-file,id=mem,size=512M,mem-path=/hugetlbfs,sha
|
|||||||
-device virtio-net-pci,netdev=net0
|
-device virtio-net-pci,netdev=net0
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@item -net dump[,vlan=@var{n}][,file=@var{file}][,len=@var{len}]
|
|
||||||
Dump network traffic on VLAN @var{n} to file @var{file} (@file{qemu-vlan0.pcap} by default).
|
|
||||||
At most @var{len} bytes (64k by default) per packet are stored. The file format is
|
|
||||||
libpcap, so it can be analyzed with tools such as tcpdump or Wireshark.
|
|
||||||
Note: For devices created with '-netdev', use '-object filter-dump,...' instead.
|
|
||||||
|
|
||||||
@item -net none
|
@item -net none
|
||||||
Indicate that no network devices should be configured. It is used to
|
Indicate that no network devices should be configured. It is used to
|
||||||
override the default configuration (@option{-net nic -net user}) which
|
override the default configuration (@option{-net nic -net user}) which
|
||||||
|
Loading…
Reference in New Issue
Block a user