qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
To: Anthony Liguori <aliguori@us.ibm.com>
Cc: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>,
	qemu-devel@nongnu.org,
	Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Subject: [Qemu-devel] [PATCH 05/19] hub: Check that hubs are configured correctly
Date: Wed,  1 Aug 2012 13:54:37 +0100	[thread overview]
Message-ID: <1343825691-343-6-git-send-email-stefanha@linux.vnet.ibm.com> (raw)
In-Reply-To: <1343825691-343-1-git-send-email-stefanha@linux.vnet.ibm.com>

Checks can be performed to make sure that hubs have at least one NIC and
one host device, warning the user if this is not the case.
Configurations which do not meet this rule tend to be broken but just
emit a warning.  This patch preserves compatibility with the checks
performed by net core on vlans.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
---
 net.c     |   25 +------------------------
 net/hub.c |   45 +++++++++++++++++++++++++++++++++++++++++++++
 net/hub.h |    1 +
 3 files changed, 47 insertions(+), 24 deletions(-)

diff --git a/net.c b/net.c
index f88d38d..413dac4 100644
--- a/net.c
+++ b/net.c
@@ -1124,7 +1124,6 @@ void net_cleanup(void)
 
 void net_check_clients(void)
 {
-    VLANState *vlan;
     VLANClientState *vc;
     int i;
 
@@ -1140,30 +1139,8 @@ void net_check_clients(void)
         return;
     }
 
-    QTAILQ_FOREACH(vlan, &vlans, next) {
-        int has_nic = 0, has_host_dev = 0;
+    net_hub_check_clients();
 
-        QTAILQ_FOREACH(vc, &vlan->clients, next) {
-            switch (vc->info->type) {
-            case NET_CLIENT_OPTIONS_KIND_NIC:
-                has_nic = 1;
-                break;
-            case NET_CLIENT_OPTIONS_KIND_USER:
-            case NET_CLIENT_OPTIONS_KIND_TAP:
-            case NET_CLIENT_OPTIONS_KIND_SOCKET:
-            case NET_CLIENT_OPTIONS_KIND_VDE:
-                has_host_dev = 1;
-                break;
-            default: ;
-            }
-        }
-        if (has_host_dev && !has_nic)
-            fprintf(stderr, "Warning: vlan %d with no nics\n", vlan->id);
-        if (has_nic && !has_host_dev)
-            fprintf(stderr,
-                    "Warning: vlan %d is not connected to host network\n",
-                    vlan->id);
-    }
     QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
         if (!vc->peer) {
             fprintf(stderr, "Warning: %s %s has no peer\n",
diff --git a/net/hub.c b/net/hub.c
index 9806a59..5cdd8c9 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -244,3 +244,48 @@ int net_init_hubport(const NetClientOptions *opts, const char *name,
     net_hub_add_port(hubport->hubid, name);
     return 0;
 }
+
+/**
+ * Warn if hub configurations are likely wrong
+ */
+void net_hub_check_clients(void)
+{
+    NetHub *hub;
+    NetHubPort *port;
+    VLANClientState *peer;
+
+    QLIST_FOREACH(hub, &hubs, next) {
+        int has_nic = 0, has_host_dev = 0;
+
+        QLIST_FOREACH(port, &hub->ports, next) {
+            peer = port->nc.peer;
+            if (!peer) {
+                fprintf(stderr, "Warning: hub port %s has no peer\n",
+                        port->nc.name);
+                continue;
+            }
+
+            switch (peer->info->type) {
+            case NET_CLIENT_OPTIONS_KIND_NIC:
+                has_nic = 1;
+                break;
+            case NET_CLIENT_OPTIONS_KIND_USER:
+            case NET_CLIENT_OPTIONS_KIND_TAP:
+            case NET_CLIENT_OPTIONS_KIND_SOCKET:
+            case NET_CLIENT_OPTIONS_KIND_VDE:
+                has_host_dev = 1;
+                break;
+            default:
+                break;
+            }
+        }
+        if (has_host_dev && !has_nic) {
+            fprintf(stderr, "Warning: vlan %d with no nics\n", hub->id);
+        }
+        if (has_nic && !has_host_dev) {
+            fprintf(stderr,
+                    "Warning: vlan %d is not connected to host network\n",
+                    hub->id);
+        }
+    }
+}
diff --git a/net/hub.h b/net/hub.h
index 6770850..9973da3 100644
--- a/net/hub.h
+++ b/net/hub.h
@@ -23,5 +23,6 @@ VLANClientState *net_hub_add_port(int hub_id, const char *name);
 VLANClientState *net_hub_find_client_by_name(int hub_id, const char *name);
 void net_hub_info(Monitor *mon);
 int net_hub_id_for_client(VLANClientState *nc, int *id);
+void net_hub_check_clients(void);
 
 #endif /* NET_HUB_H */
-- 
1.7.10.4

  parent reply	other threads:[~2012-08-01 12:55 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-01 12:54 [Qemu-devel] [PULL 00/19] Net patches for QEMU 1.2 Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 01/19] net: Add interface to bridge when SIOCBRADDIF isn't available Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 02/19] net: Add a hub net client Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 03/19] net: Use hubs for the vlan feature Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 04/19] net: Look up 'vlan' net clients using hubs Stefan Hajnoczi
2012-08-01 12:54 ` Stefan Hajnoczi [this message]
2012-08-01 12:54 ` [Qemu-devel] [PATCH 06/19] net: Drop vlan argument to qemu_new_net_client() Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 07/19] net: Convert qdev_prop_vlan to peer with hub Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 08/19] net: Remove vlan code from net.c Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 09/19] net: Remove VLANState Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 10/19] net: Rename non_vlan_clients to net_clients Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 11/19] net: Rename VLANClientState to NetClientState Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 12/19] net: Rename vc local variables to nc Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 13/19] net: Rename qemu_del_vlan_client() to qemu_del_net_client() Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 14/19] net: Make "info network" output more readable info Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 15/19] net: cleanup deliver/deliver_iov func pointers Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 16/19] net: determine if packets can be sent before net queue deliver packets Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 17/19] hub: add the support for hub own flow control Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 18/19] net: fix the coding style Stefan Hajnoczi
2012-08-01 12:54 ` [Qemu-devel] [PATCH 19/19] net: add the support for -netdev socket, listen Stefan Hajnoczi
2012-08-03 20:44 ` [Qemu-devel] [PULL 00/19] Net patches for QEMU 1.2 Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1343825691-343-6-git-send-email-stefanha@linux.vnet.ibm.com \
    --to=stefanha@linux.vnet.ibm.com \
    --cc=aliguori@us.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=wuzhy@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).