diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/hub.c | 25 | ||||
-rw-r--r-- | net/hub.h | 1 |
2 files changed, 26 insertions, 0 deletions
@@ -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) @@ -24,5 +24,6 @@ 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); +VLANClientState *net_hub_port_find(int hub_id); #endif /* NET_HUB_H */ |