diff options
| author | Anthony Liguori <aliguori@us.ibm.com> | 2013-07-18 08:12:47 -0500 |
|---|---|---|
| committer | Anthony Liguori <aliguori@us.ibm.com> | 2013-07-18 08:12:47 -0500 |
| commit | e9acb8cea9b11679cab8cb3c20c4348803bbb58a (patch) | |
| tree | af812486ea8acb10e00e06c70f1eaec31e18c0ef /net/net.c | |
| parent | 6453a3a69488196f26d12654c6b148446abdf3d6 (diff) | |
| parent | d26d9e14c15837eba2b7447e8d15230bab8e0940 (diff) | |
| download | focaccia-qemu-e9acb8cea9b11679cab8cb3c20c4348803bbb58a.tar.gz focaccia-qemu-e9acb8cea9b11679cab8cb3c20c4348803bbb58a.zip | |
Merge remote-tracking branch 'mst/tags/for_anthony' into staging
pci,net,pc enhancements This includes some fixes and enhancements that accumulated in my tree: pci fixes by dkoch, virtio-net enhancements by akong and mst, and a fix for xen pc by mst. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # gpg: Signature made Wed 17 Jul 2013 04:44:45 AM CDT using RSA key ID D28D5469 # gpg: Can't check signature: public key not found # By Don Koch (2) and others # Via Michael S. Tsirkin * mst/tags/for_anthony: pc: don't access fw cfg if NULL virtio-net: add feature bit for any header s/g net: add support of mac-programming over macvtap in QEMU side pci: fix BRDIGE typo pci-bridge: update mappings for migration/restore Message-id: 1374054430-21966-1-git-send-email-mst@redhat.com Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'net/net.c')
| -rw-r--r-- | net/net.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/net/net.c b/net/net.c index 43a74e43ae..c0d61bf78b 100644 --- a/net/net.c +++ b/net/net.c @@ -961,6 +961,54 @@ void print_net_client(Monitor *mon, NetClientState *nc) nc->info_str); } +RxFilterInfoList *qmp_query_rx_filter(bool has_name, const char *name, + Error **errp) +{ + NetClientState *nc; + RxFilterInfoList *filter_list = NULL, *last_entry = NULL; + + QTAILQ_FOREACH(nc, &net_clients, next) { + RxFilterInfoList *entry; + RxFilterInfo *info; + + if (has_name && strcmp(nc->name, name) != 0) { + continue; + } + + /* only query rx-filter information of NIC */ + if (nc->info->type != NET_CLIENT_OPTIONS_KIND_NIC) { + if (has_name) { + error_setg(errp, "net client(%s) isn't a NIC", name); + break; + } + continue; + } + + if (nc->info->query_rx_filter) { + info = nc->info->query_rx_filter(nc); + entry = g_malloc0(sizeof(*entry)); + entry->value = info; + + if (!filter_list) { + filter_list = entry; + } else { + last_entry->next = entry; + } + last_entry = entry; + } else if (has_name) { + error_setg(errp, "net client(%s) doesn't support" + " rx-filter querying", name); + break; + } + } + + if (filter_list == NULL && !error_is_set(errp) && has_name) { + error_setg(errp, "invalid net client name: %s", name); + } + + return filter_list; +} + void do_info_network(Monitor *mon, const QDict *qdict) { NetClientState *nc, *peer; |