On Fri, May 17, 2013 at 09:39:31AM +0200, Stefan Hajnoczi wrote: > On Thu, May 16, 2013 at 07:07:25PM +0800, Amos Kong wrote:
Hi Stefan, > > @@ -961,6 +961,44 @@ void print_net_client(Monitor *mon, NetClientState *nc) > > nc->info_str); > > } > > > > +MacTableInfoList *qmp_query_mac_table(bool has_name, const char *name, > > + Error **errp) > > +{ > > + NetClientState *nc; > > + MacTableInfoList *table_list = NULL, *last_entry = NULL; > > + > > + QTAILQ_FOREACH(nc, &net_clients, next) { > > + MacTableInfoList *entry; > > + MacTableInfo *info; > > + > > + if (nc->info->type != NET_CLIENT_OPTIONS_KIND_NIC) { > > + continue; > > + } > > + if (has_name && strcmp(nc->name, name) != 0) { > > + continue; > > + } if (has_name && strcmp(nc->name, name) != 0) { error_setg(errp, "invalid net client name: %s", name); break; } > > + > > + if (nc->info->query_mac_table) { > > + info = nc->info->query_mac_table(nc); > > + entry = g_malloc0(sizeof(*entry)); > > + entry->value = info; > > + > > + if (!table_list) { > > + table_list = entry; > > + } else { > > + last_entry->next = entry; > > + } > > + last_entry = entry; > > + } } else if (has_name) { error_setg(errp, "net client(%s) doesn't support mac-table querying", name); break; } > > + } > > + > > + if (table_list == NULL) { > > + error_setg(errp, "invalid net client name: %s", name); > > + } if (table_list == NULL && !error_is_set(errp)) { error_setg(errp, "no net client supports mac-table querying"); } > > Produces confusing errors: > > 1. If query-mac-table is used without a name argument and the guest has > no NIC or no NICs support ->query_mac_table(). > > 2. If the named NIC does not support ->query_mac_table(). Thanks, will fix it. -- Amos.