Commit 857d2087 authored by Thomas Huth's avatar Thomas Huth Committed by Jason Wang
Browse files

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: default avatarThomas Huth <thuth@redhat.com>
Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
parent aa09a485
Loading
Loading
Loading
Loading
+2 −100
Original line number Diff line number Diff line
@@ -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);
    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;
    }

@@ -122,7 +122,7 @@ static int net_dump_state_init(DumpState *s, const char *filename,
    hdr.linktype = 1;

    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);
        return -1;
    }
@@ -136,104 +136,6 @@ static int net_dump_state_init(DumpState *s, const char *filename,
    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 FILTER_DUMP(obj) \
+1 −8
Original line number Diff line number Diff line
@@ -63,7 +63,6 @@ static QTAILQ_HEAD(, NetClientState) net_clients;
const char *host_net_devices[] = {
    "tap",
    "socket",
    "dump",
#ifdef CONFIG_NET_BRIDGE
    "bridge",
#endif
@@ -967,7 +966,6 @@ static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])(
#ifdef CONFIG_NETMAP
        [NET_CLIENT_DRIVER_NETMAP]    = net_init_netmap,
#endif
        [NET_CLIENT_DRIVER_DUMP]      = net_init_dump,
#ifdef CONFIG_NET_BRIDGE
        [NET_CLIENT_DRIVER_BRIDGE]    = net_init_bridge,
#endif
@@ -993,8 +991,7 @@ static int net_client_init1(const void *object, bool is_netdev, Error **errp)
        netdev = object;
        name = netdev->id;

        if (netdev->type == NET_CLIENT_DRIVER_DUMP ||
            netdev->type == NET_CLIENT_DRIVER_NIC ||
        if (netdev->type == NET_CLIENT_DRIVER_NIC ||
            !net_client_init_fun[netdev->type]) {
            error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "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.u.vde = opts->u.vde;
            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:
            legacy.type = NET_CLIENT_DRIVER_BRIDGE;
            legacy.u.bridge = opts->u.bridge;
+6 −23
Original line number Diff line number Diff line
@@ -39,8 +39,8 @@
#
# Add a network backend.
#
# @type: the type of network backend.  Current valid values are 'user', 'tap',
#        'vde', 'socket', 'dump' and 'bridge'
# @type: the type of network backend. Possible values are listed in
#        NetClientDriver (excluding 'none' and 'nic')
#
# @id: the name of the new network backend
#
@@ -371,23 +371,6 @@
    '*group': 'str',
    '*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:
#
@@ -466,9 +449,11 @@
# Available netdev drivers.
#
# Since: 2.7
#
# 'dump' - removed with 2.12
##
{ 'enum': 'NetClientDriver',
  'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde', 'dump',
  'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde',
            'bridge', 'hubport', 'netmap', 'vhost-user' ] }

##
@@ -495,7 +480,6 @@
    'l2tpv3':   'NetdevL2TPv3Options',
    'socket':   'NetdevSocketOptions',
    'vde':      'NetdevVdeOptions',
    'dump':     'NetdevDumpOptions',
    'bridge':   'NetdevBridgeOptions',
    'hubport':  'NetdevHubPortOptions',
    'netmap':   'NetdevNetmapOptions',
@@ -530,7 +514,7 @@
##
{ 'enum': 'NetLegacyOptionsType',
  'data': ['none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde',
           'dump', 'bridge', 'netmap', 'vhost-user'] }
           'bridge', 'netmap', 'vhost-user'] }

##
# @NetLegacyOptions:
@@ -550,7 +534,6 @@
    'l2tpv3':   'NetdevL2TPv3Options',
    'socket':   'NetdevSocketOptions',
    'vde':      'NetdevVdeOptions',
    'dump':     'NetdevDumpOptions',
    'bridge':   'NetdevBridgeOptions',
    'netmap':   'NetdevNetmapOptions',
    'vhost-user': 'NetdevVhostUserOptions' } }
+0 −6
Original line number Diff line number Diff line
@@ -2707,12 +2707,6 @@ that can be specified with the ``-device'' parameter.
The drive addr argument is replaced by the the addr argument
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)

The ``-usbdevice DEV'' argument is now a synonym for setting
+0 −8
Original line number Diff line number Diff line
@@ -2009,8 +2009,6 @@ DEF("net", HAS_ARG, QEMU_OPTION_net,
    "                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"
    "                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"
    "                is provided, the default is '-net nic -net user'\n"
    "-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
@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
Indicate that no network devices should be configured. It is used to
override the default configuration (@option{-net nic -net user}) which