summary refs log tree commit diff stats
path: root/net/hub.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/hub.c')
-rw-r--r--net/hub.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/net/hub.c b/net/hub.c
index 97198a2d1f..e80d1312d4 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -188,6 +188,31 @@ VLANClientState *net_hub_find_client_by_name(int hub_id, const char *name)
 }
 
 /**
+ * Find a available port on a hub; otherwise create one new port
+ */
+VLANClientState *net_hub_port_find(int hub_id)
+{
+    NetHub *hub;
+    NetHubPort *port;
+    VLANClientState *nc;
+
+    QLIST_FOREACH(hub, &hubs, next) {
+        if (hub->id == hub_id) {
+            QLIST_FOREACH(port, &hub->ports, next) {
+                nc = port->nc.peer;
+                if (!nc) {
+                    return &(port->nc);
+                }
+            }
+            break;
+        }
+    }
+
+    nc = net_hub_add_port(hub_id, NULL);
+    return nc;
+}
+
+/**
  * Print hub configuration
  */
 void net_hub_info(Monitor *mon)