mirror of https://github.com/xemu-project/xemu.git
net: Provide VLAN client lookup helper
Introduce qemu_find_vlan_client_by_name for VLANClientState lookup based on VLAN ID and client name. This is useful for monitor commands. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
28432466f3
commit
1a60952027
|
@ -301,7 +301,7 @@ static int net_init(struct XenDevice *xendev)
|
||||||
if (netdev->mac == NULL)
|
if (netdev->mac == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
vlan = qemu_find_vlan(netdev->xendev.dev);
|
vlan = qemu_find_vlan(netdev->xendev.dev, 1);
|
||||||
netdev->vs = qemu_new_vlan_client(vlan, "xen", NULL,
|
netdev->vs = qemu_new_vlan_client(vlan, "xen", NULL,
|
||||||
net_rx_ok, net_rx_packet, NULL,
|
net_rx_ok, net_rx_packet, NULL,
|
||||||
NULL, netdev);
|
NULL, netdev);
|
||||||
|
|
44
net.c
44
net.c
|
@ -389,6 +389,32 @@ VLANClientState *qemu_find_vlan_client(VLANState *vlan, void *opaque)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VLANClientState *
|
||||||
|
qemu_find_vlan_client_by_name(Monitor *mon, int vlan_id,
|
||||||
|
const char *client_str)
|
||||||
|
{
|
||||||
|
VLANState *vlan;
|
||||||
|
VLANClientState *vc;
|
||||||
|
|
||||||
|
vlan = qemu_find_vlan(vlan_id, 0);
|
||||||
|
if (!vlan) {
|
||||||
|
monitor_printf(mon, "unknown VLAN %d\n", vlan_id);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (vc = vlan->first_client; vc != NULL; vc = vc->next) {
|
||||||
|
if (!strcmp(vc->name, client_str)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!vc) {
|
||||||
|
monitor_printf(mon, "can't find device %s on VLAN %d\n",
|
||||||
|
client_str, vlan_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return vc;
|
||||||
|
}
|
||||||
|
|
||||||
int qemu_can_send_packet(VLANClientState *sender)
|
int qemu_can_send_packet(VLANClientState *sender)
|
||||||
{
|
{
|
||||||
VLANState *vlan = sender->vlan;
|
VLANState *vlan = sender->vlan;
|
||||||
|
@ -2255,13 +2281,16 @@ static int net_dump_init(Monitor *mon, VLANState *vlan, const char *device,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find or alloc a new VLAN */
|
/* find or alloc a new VLAN */
|
||||||
VLANState *qemu_find_vlan(int id)
|
VLANState *qemu_find_vlan(int id, int allocate)
|
||||||
{
|
{
|
||||||
VLANState **pvlan, *vlan;
|
VLANState **pvlan, *vlan;
|
||||||
for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
|
for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) {
|
||||||
if (vlan->id == id)
|
if (vlan->id == id)
|
||||||
return vlan;
|
return vlan;
|
||||||
}
|
}
|
||||||
|
if (!allocate) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
vlan = qemu_mallocz(sizeof(VLANState));
|
vlan = qemu_mallocz(sizeof(VLANState));
|
||||||
vlan->id = id;
|
vlan->id = id;
|
||||||
vlan->next = NULL;
|
vlan->next = NULL;
|
||||||
|
@ -2327,7 +2356,7 @@ int net_client_init(Monitor *mon, const char *device, const char *p)
|
||||||
if (get_param_value(buf, sizeof(buf), "vlan", p)) {
|
if (get_param_value(buf, sizeof(buf), "vlan", p)) {
|
||||||
vlan_id = strtol(buf, NULL, 0);
|
vlan_id = strtol(buf, NULL, 0);
|
||||||
}
|
}
|
||||||
vlan = qemu_find_vlan(vlan_id);
|
vlan = qemu_find_vlan(vlan_id, 1);
|
||||||
|
|
||||||
if (get_param_value(buf, sizeof(buf), "name", p)) {
|
if (get_param_value(buf, sizeof(buf), "name", p)) {
|
||||||
name = qemu_strdup(buf);
|
name = qemu_strdup(buf);
|
||||||
|
@ -2740,19 +2769,10 @@ void net_host_device_add(Monitor *mon, const char *device, const char *opts)
|
||||||
|
|
||||||
void net_host_device_remove(Monitor *mon, int vlan_id, const char *device)
|
void net_host_device_remove(Monitor *mon, int vlan_id, const char *device)
|
||||||
{
|
{
|
||||||
VLANState *vlan;
|
|
||||||
VLANClientState *vc;
|
VLANClientState *vc;
|
||||||
|
|
||||||
vlan = qemu_find_vlan(vlan_id);
|
vc = qemu_find_vlan_client_by_name(mon, vlan_id, device);
|
||||||
|
|
||||||
for (vc = vlan->first_client; vc != NULL; vc = vc->next) {
|
|
||||||
if (!strcmp(vc->name, device)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!vc) {
|
if (!vc) {
|
||||||
monitor_printf(mon, "can't find device %s\n", device);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!net_host_check_device(vc->model)) {
|
if (!net_host_check_device(vc->model)) {
|
||||||
|
|
2
net.h
2
net.h
|
@ -51,7 +51,7 @@ struct VLANState {
|
||||||
int delivering;
|
int delivering;
|
||||||
};
|
};
|
||||||
|
|
||||||
VLANState *qemu_find_vlan(int id);
|
VLANState *qemu_find_vlan(int id, int allocate);
|
||||||
VLANClientState *qemu_new_vlan_client(VLANState *vlan,
|
VLANClientState *qemu_new_vlan_client(VLANState *vlan,
|
||||||
const char *model,
|
const char *model,
|
||||||
const char *name,
|
const char *name,
|
||||||
|
|
Loading…
Reference in New Issue