Commit 676cff2940f3d34e2ef7735df0f83cce958b0d77
1 parent
bf38c1a0
Assign a name to each VLAN client (Mark McLoughlin)
Automatically assign a name to each vlan client based on its model, e.g. e1000.0, tap.3 or vde.1. This name is intended to be used by the forthcoming 'set_link' monitor command. Signed-off-by: Mark McLoughlin <markmc@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6217 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
22 additions
and
0 deletions
net.c
@@ -296,6 +296,25 @@ static int parse_unix_path(struct sockaddr_un *uaddr, const char *str) | @@ -296,6 +296,25 @@ static int parse_unix_path(struct sockaddr_un *uaddr, const char *str) | ||
296 | } | 296 | } |
297 | #endif | 297 | #endif |
298 | 298 | ||
299 | +static char *assign_name(VLANClientState *vc1, const char *model) | ||
300 | +{ | ||
301 | + VLANState *vlan; | ||
302 | + char buf[256]; | ||
303 | + int id = 0; | ||
304 | + | ||
305 | + for (vlan = first_vlan; vlan; vlan = vlan->next) { | ||
306 | + VLANClientState *vc; | ||
307 | + | ||
308 | + for (vc = vlan->first_client; vc; vc = vc->next) | ||
309 | + if (vc != vc1 && strcmp(vc->model, model) == 0) | ||
310 | + id++; | ||
311 | + } | ||
312 | + | ||
313 | + snprintf(buf, sizeof(buf), "%s.%d", model, id); | ||
314 | + | ||
315 | + return strdup(buf); | ||
316 | +} | ||
317 | + | ||
299 | VLANClientState *qemu_new_vlan_client(VLANState *vlan, | 318 | VLANClientState *qemu_new_vlan_client(VLANState *vlan, |
300 | const char *model, | 319 | const char *model, |
301 | IOReadHandler *fd_read, | 320 | IOReadHandler *fd_read, |
@@ -307,6 +326,7 @@ VLANClientState *qemu_new_vlan_client(VLANState *vlan, | @@ -307,6 +326,7 @@ VLANClientState *qemu_new_vlan_client(VLANState *vlan, | ||
307 | if (!vc) | 326 | if (!vc) |
308 | return NULL; | 327 | return NULL; |
309 | vc->model = strdup(model); | 328 | vc->model = strdup(model); |
329 | + vc->name = assign_name(vc, model); | ||
310 | vc->fd_read = fd_read; | 330 | vc->fd_read = fd_read; |
311 | vc->fd_can_read = fd_can_read; | 331 | vc->fd_can_read = fd_can_read; |
312 | vc->opaque = opaque; | 332 | vc->opaque = opaque; |
@@ -327,6 +347,7 @@ void qemu_del_vlan_client(VLANClientState *vc) | @@ -327,6 +347,7 @@ void qemu_del_vlan_client(VLANClientState *vc) | ||
327 | while (*pvc != NULL) | 347 | while (*pvc != NULL) |
328 | if (*pvc == vc) { | 348 | if (*pvc == vc) { |
329 | *pvc = vc->next; | 349 | *pvc = vc->next; |
350 | + free(vc->name); | ||
330 | free(vc->model); | 351 | free(vc->model); |
331 | free(vc); | 352 | free(vc); |
332 | break; | 353 | break; |
net.h
@@ -19,6 +19,7 @@ struct VLANClientState { | @@ -19,6 +19,7 @@ struct VLANClientState { | ||
19 | struct VLANClientState *next; | 19 | struct VLANClientState *next; |
20 | struct VLANState *vlan; | 20 | struct VLANState *vlan; |
21 | char *model; | 21 | char *model; |
22 | + char *name; | ||
22 | char info_str[256]; | 23 | char info_str[256]; |
23 | }; | 24 | }; |
24 | 25 |