qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info
@ 2012-05-25 14:02 zwu.kernel
  2012-05-25 14:17 ` Jan Kiszka
  0 siblings, 1 reply; 38+ messages in thread
From: zwu.kernel @ 2012-05-25 14:02 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka

From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>

Reviewed-by:   Jan Kiszka  <jan.kiszka@siemens.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 net.c     |   18 ++++++++++++++----
 net.h     |   12 ++++++++++++
 net/hub.c |   23 +++++++++++++++++++++--
 net/hub.h |    1 +
 4 files changed, 48 insertions(+), 6 deletions(-)

diff --git a/net.c b/net.c
index 61dc28d..ae0deec 100644
--- a/net.c
+++ b/net.c
@@ -887,6 +887,12 @@ static const struct {
         },
     },
 #endif /* CONFIG_NET_BRIDGE */
+    [NET_CLIENT_TYPE_HUB] = {
+        .type = "hubport",
+        .desc = {
+            { /* end of list */ }
+        },
+    },
 };
 
 int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
@@ -1068,7 +1074,7 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
     return 0;
 }
 
-static void print_net_client(Monitor *mon, NetClientState *vc)
+void print_net_client(Monitor *mon, NetClientState *vc)
 {
     monitor_printf(mon, "%s: type=%s,%s\n", vc->name,
                    net_client_types[vc->info->type].type, vc->info_str);
@@ -1079,12 +1085,17 @@ void do_info_network(Monitor *mon)
     NetClientState *nc, *peer;
     net_client_type type;
 
-    monitor_printf(mon, "Devices not on any VLAN:\n");
+    net_hub_info(mon);
+
     QTAILQ_FOREACH(nc, &net_clients, next) {
         peer = nc->peer;
         type = nc->info->type;
+
+        if (net_hub_port_peer_nc(nc)) {
+            continue;
+        }
+
         if (!peer || type == NET_CLIENT_TYPE_NIC) {
-            monitor_printf(mon, "  ");
             print_net_client(mon, nc);
         } /* else it's a netdev connected to a NIC, printed with the NIC */
         if (peer && type == NET_CLIENT_TYPE_NIC) {
@@ -1092,7 +1103,6 @@ void do_info_network(Monitor *mon)
             print_net_client(mon, peer);
         }
     }
-    net_hub_info(mon);
 }
 
 void qmp_set_link(const char *name, bool up, Error **errp)
diff --git a/net.h b/net.h
index 250669a..08306a4 100644
--- a/net.h
+++ b/net.h
@@ -112,6 +112,18 @@ void qemu_check_nic_model(NICInfo *nd, const char *model);
 int qemu_find_nic_model(NICInfo *nd, const char * const *models,
                         const char *default_model);
 
+ssize_t qemu_deliver_packet(NetClientState *sender,
+                            unsigned flags,
+                            const uint8_t *data,
+                            size_t size,
+                            void *opaque);
+ssize_t qemu_deliver_packet_iov(NetClientState *sender,
+                            unsigned flags,
+                            const struct iovec *iov,
+                            int iovcnt,
+                            void *opaque);
+
+void print_net_client(Monitor *mon, NetClientState *vc);
 void do_info_network(Monitor *mon);
 
 /* NIC info */
diff --git a/net/hub.c b/net/hub.c
index 122de69..8c77d03 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -184,6 +184,25 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
 }
 
 /**
+ * Determine if one nc peers with one hub port
+ */
+bool net_hub_port_peer_nc(NetClientState *nc)
+{
+    NetHub *hub;
+    NetHubPort *port;
+
+    QLIST_FOREACH(hub, &hubs, next) {
+        QLIST_FOREACH(port, &hub->ports, next) {
+            if (nc == port->nc.peer) {
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+/**
  * Print hub configuration
  */
 void net_hub_info(Monitor *mon)
@@ -194,8 +213,8 @@ void net_hub_info(Monitor *mon)
     QLIST_FOREACH(hub, &hubs, next) {
         monitor_printf(mon, "hub %u\n", hub->id);
         QLIST_FOREACH(port, &hub->ports, next) {
-            monitor_printf(mon, "    port %u peer %s\n", port->id,
-                           port->nc.peer ? port->nc.peer->name : "<none>");
+            monitor_printf(mon, "   \\ ");
+            print_net_client(mon, port->nc.peer);
         }
     }
 }
diff --git a/net/hub.h b/net/hub.h
index ff5024a..550189b 100644
--- a/net/hub.h
+++ b/net/hub.h
@@ -23,5 +23,6 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
 void net_hub_info(Monitor *mon);
 int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
 void net_hub_check_clients(void);
+bool net_hub_port_peer_nc(NetClientState *nc);
 
 #endif /* NET_HUB_H */
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info
@ 2012-05-25 14:11 zwu.kernel
  0 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-05-25 14:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, wuzhy, stefanha, kvm, jan.kiszka

From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>

Reviewed-by:   Jan Kiszka  <jan.kiszka@siemens.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 net.c     |   18 ++++++++++++++----
 net.h     |    1 +
 net/hub.c |   23 +++++++++++++++++++++--
 net/hub.h |    1 +
 4 files changed, 37 insertions(+), 6 deletions(-)

diff --git a/net.c b/net.c
index 61dc28d..ae0deec 100644
--- a/net.c
+++ b/net.c
@@ -887,6 +887,12 @@ static const struct {
         },
     },
 #endif /* CONFIG_NET_BRIDGE */
+    [NET_CLIENT_TYPE_HUB] = {
+        .type = "hubport",
+        .desc = {
+            { /* end of list */ }
+        },
+    },
 };
 
 int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
@@ -1068,7 +1074,7 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
     return 0;
 }
 
-static void print_net_client(Monitor *mon, NetClientState *vc)
+void print_net_client(Monitor *mon, NetClientState *vc)
 {
     monitor_printf(mon, "%s: type=%s,%s\n", vc->name,
                    net_client_types[vc->info->type].type, vc->info_str);
@@ -1079,12 +1085,17 @@ void do_info_network(Monitor *mon)
     NetClientState *nc, *peer;
     net_client_type type;
 
-    monitor_printf(mon, "Devices not on any VLAN:\n");
+    net_hub_info(mon);
+
     QTAILQ_FOREACH(nc, &net_clients, next) {
         peer = nc->peer;
         type = nc->info->type;
+
+        if (net_hub_port_peer_nc(nc)) {
+            continue;
+        }
+
         if (!peer || type == NET_CLIENT_TYPE_NIC) {
-            monitor_printf(mon, "  ");
             print_net_client(mon, nc);
         } /* else it's a netdev connected to a NIC, printed with the NIC */
         if (peer && type == NET_CLIENT_TYPE_NIC) {
@@ -1092,7 +1103,6 @@ void do_info_network(Monitor *mon)
             print_net_client(mon, peer);
         }
     }
-    net_hub_info(mon);
 }
 
 void qmp_set_link(const char *name, bool up, Error **errp)
diff --git a/net.h b/net.h
index 250669a..0692283 100644
--- a/net.h
+++ b/net.h
@@ -112,6 +112,7 @@ void qemu_check_nic_model(NICInfo *nd, const char *model);
 int qemu_find_nic_model(NICInfo *nd, const char * const *models,
                         const char *default_model);
 
+void print_net_client(Monitor *mon, NetClientState *vc);
 void do_info_network(Monitor *mon);
 
 /* NIC info */
diff --git a/net/hub.c b/net/hub.c
index 122de69..8c77d03 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -184,6 +184,25 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
 }
 
 /**
+ * Determine if one nc peers with one hub port
+ */
+bool net_hub_port_peer_nc(NetClientState *nc)
+{
+    NetHub *hub;
+    NetHubPort *port;
+
+    QLIST_FOREACH(hub, &hubs, next) {
+        QLIST_FOREACH(port, &hub->ports, next) {
+            if (nc == port->nc.peer) {
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+/**
  * Print hub configuration
  */
 void net_hub_info(Monitor *mon)
@@ -194,8 +213,8 @@ void net_hub_info(Monitor *mon)
     QLIST_FOREACH(hub, &hubs, next) {
         monitor_printf(mon, "hub %u\n", hub->id);
         QLIST_FOREACH(port, &hub->ports, next) {
-            monitor_printf(mon, "    port %u peer %s\n", port->id,
-                           port->nc.peer ? port->nc.peer->name : "<none>");
+            monitor_printf(mon, "   \\ ");
+            print_net_client(mon, port->nc.peer);
         }
     }
 }
diff --git a/net/hub.h b/net/hub.h
index ff5024a..550189b 100644
--- a/net/hub.h
+++ b/net/hub.h
@@ -23,5 +23,6 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
 void net_hub_info(Monitor *mon);
 int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
 void net_hub_check_clients(void);
+bool net_hub_port_peer_nc(NetClientState *nc);
 
 #endif /* NET_HUB_H */
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info
  2012-05-25 14:02 zwu.kernel
@ 2012-05-25 14:17 ` Jan Kiszka
  2012-05-25 14:25   ` Zhi Yong Wu
  0 siblings, 1 reply; 38+ messages in thread
From: Jan Kiszka @ 2012-05-25 14:17 UTC (permalink / raw)
  To: zwu.kernel@gmail.com
  Cc: pbonzini@redhat.com, wuzhy@linux.vnet.ibm.com,
	qemu-devel@nongnu.org, kvm@vger.kernel.org,
	stefanha@linux.vnet.ibm.com

On 2012-05-25 11:02, zwu.kernel@gmail.com wrote:
> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
> 
> Reviewed-by:   Jan Kiszka  <jan.kiszka@siemens.com>

Please don't put reviewed-by tags here before the reviewer had a chance
to look at the code.

> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
> ---
>  net.c     |   18 ++++++++++++++----
>  net.h     |   12 ++++++++++++
>  net/hub.c |   23 +++++++++++++++++++++--
>  net/hub.h |    1 +
>  4 files changed, 48 insertions(+), 6 deletions(-)
> 
> diff --git a/net.c b/net.c
> index 61dc28d..ae0deec 100644
> --- a/net.c
> +++ b/net.c
> @@ -887,6 +887,12 @@ static const struct {
>          },
>      },
>  #endif /* CONFIG_NET_BRIDGE */
> +    [NET_CLIENT_TYPE_HUB] = {
> +        .type = "hubport",
> +        .desc = {
> +            { /* end of list */ }
> +        },
> +    },

This should be obsolete now.

>  };
>  
>  int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
> @@ -1068,7 +1074,7 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
>      return 0;
>  }
>  
> -static void print_net_client(Monitor *mon, NetClientState *vc)
> +void print_net_client(Monitor *mon, NetClientState *vc)
>  {
>      monitor_printf(mon, "%s: type=%s,%s\n", vc->name,
>                     net_client_types[vc->info->type].type, vc->info_str);
> @@ -1079,12 +1085,17 @@ void do_info_network(Monitor *mon)
>      NetClientState *nc, *peer;
>      net_client_type type;
>  
> -    monitor_printf(mon, "Devices not on any VLAN:\n");
> +    net_hub_info(mon);
> +
>      QTAILQ_FOREACH(nc, &net_clients, next) {
>          peer = nc->peer;
>          type = nc->info->type;
> +
> +        if (net_hub_port_peer_nc(nc)) {
> +            continue;
> +        }
> +
>          if (!peer || type == NET_CLIENT_TYPE_NIC) {
> -            monitor_printf(mon, "  ");
>              print_net_client(mon, nc);
>          } /* else it's a netdev connected to a NIC, printed with the NIC */
>          if (peer && type == NET_CLIENT_TYPE_NIC) {
> @@ -1092,7 +1103,6 @@ void do_info_network(Monitor *mon)
>              print_net_client(mon, peer);
>          }
>      }
> -    net_hub_info(mon);

Why introduce a different hub output format at all? Do it in the final
right from the start.

>  }
>  
>  void qmp_set_link(const char *name, bool up, Error **errp)
> diff --git a/net.h b/net.h
> index 250669a..08306a4 100644
> --- a/net.h
> +++ b/net.h
> @@ -112,6 +112,18 @@ void qemu_check_nic_model(NICInfo *nd, const char *model);
>  int qemu_find_nic_model(NICInfo *nd, const char * const *models,
>                          const char *default_model);
>  
> +ssize_t qemu_deliver_packet(NetClientState *sender,
> +                            unsigned flags,
> +                            const uint8_t *data,
> +                            size_t size,
> +                            void *opaque);
> +ssize_t qemu_deliver_packet_iov(NetClientState *sender,
> +                            unsigned flags,
> +                            const struct iovec *iov,
> +                            int iovcnt,
> +                            void *opaque);
> +

I bet those two prototypes are required by some other patch (or are even
redundant).

> +void print_net_client(Monitor *mon, NetClientState *vc);
>  void do_info_network(Monitor *mon);
>  
>  /* NIC info */
> diff --git a/net/hub.c b/net/hub.c
> index 122de69..8c77d03 100644
> --- a/net/hub.c
> +++ b/net/hub.c
> @@ -184,6 +184,25 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
>  }
>  
>  /**
> + * Determine if one nc peers with one hub port
> + */
> +bool net_hub_port_peer_nc(NetClientState *nc)
> +{
> +    NetHub *hub;
> +    NetHubPort *port;
> +
> +    QLIST_FOREACH(hub, &hubs, next) {
> +        QLIST_FOREACH(port, &hub->ports, next) {
> +            if (nc == port->nc.peer) {
> +                return true;
> +            }
> +        }
> +    }
> +
> +    return false;
> +}
> +
> +/**
>   * Print hub configuration
>   */
>  void net_hub_info(Monitor *mon)
> @@ -194,8 +213,8 @@ void net_hub_info(Monitor *mon)
>      QLIST_FOREACH(hub, &hubs, next) {
>          monitor_printf(mon, "hub %u\n", hub->id);
>          QLIST_FOREACH(port, &hub->ports, next) {
> -            monitor_printf(mon, "    port %u peer %s\n", port->id,
> -                           port->nc.peer ? port->nc.peer->name : "<none>");
> +            monitor_printf(mon, "   \\ ");

Two space too much of indention (you remove them above for the existing
peer \ peer outputs).

> +            print_net_client(mon, port->nc.peer);
>          }
>      }
>  }
> diff --git a/net/hub.h b/net/hub.h
> index ff5024a..550189b 100644
> --- a/net/hub.h
> +++ b/net/hub.h
> @@ -23,5 +23,6 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
>  void net_hub_info(Monitor *mon);
>  int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
>  void net_hub_check_clients(void);
> +bool net_hub_port_peer_nc(NetClientState *nc);
>  
>  #endif /* NET_HUB_H */

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info
  2012-05-25 14:17 ` Jan Kiszka
@ 2012-05-25 14:25   ` Zhi Yong Wu
  2012-05-25 14:40     ` Jan Kiszka
  0 siblings, 1 reply; 38+ messages in thread
From: Zhi Yong Wu @ 2012-05-25 14:25 UTC (permalink / raw)
  To: Jan Kiszka
  Cc: pbonzini@redhat.com, wuzhy@linux.vnet.ibm.com,
	qemu-devel@nongnu.org, kvm@vger.kernel.org,
	stefanha@linux.vnet.ibm.com

On Fri, May 25, 2012 at 10:17 PM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> On 2012-05-25 11:02, zwu.kernel@gmail.com wrote:
>> From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>
>> Reviewed-by:   Jan Kiszka  <jan.kiszka@siemens.com>
>
> Please don't put reviewed-by tags here before the reviewer had a chance
> to look at the code.
>
>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>> ---
>>  net.c     |   18 ++++++++++++++----
>>  net.h     |   12 ++++++++++++
>>  net/hub.c |   23 +++++++++++++++++++++--
>>  net/hub.h |    1 +
>>  4 files changed, 48 insertions(+), 6 deletions(-)
>>
>> diff --git a/net.c b/net.c
>> index 61dc28d..ae0deec 100644
>> --- a/net.c
>> +++ b/net.c
>> @@ -887,6 +887,12 @@ static const struct {
>>          },
>>      },
>>  #endif /* CONFIG_NET_BRIDGE */
>> +    [NET_CLIENT_TYPE_HUB] = {
>> +        .type = "hubport",
>> +        .desc = {
>> +            { /* end of list */ }
>> +        },
>> +    },
>
> This should be obsolete now.
>
>>  };
>>
>>  int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
>> @@ -1068,7 +1074,7 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
>>      return 0;
>>  }
>>
>> -static void print_net_client(Monitor *mon, NetClientState *vc)
>> +void print_net_client(Monitor *mon, NetClientState *vc)
>>  {
>>      monitor_printf(mon, "%s: type=%s,%s\n", vc->name,
>>                     net_client_types[vc->info->type].type, vc->info_str);
>> @@ -1079,12 +1085,17 @@ void do_info_network(Monitor *mon)
>>      NetClientState *nc, *peer;
>>      net_client_type type;
>>
>> -    monitor_printf(mon, "Devices not on any VLAN:\n");
>> +    net_hub_info(mon);
>> +
>>      QTAILQ_FOREACH(nc, &net_clients, next) {
>>          peer = nc->peer;
>>          type = nc->info->type;
>> +
>> +        if (net_hub_port_peer_nc(nc)) {
>> +            continue;
>> +        }
>> +
>>          if (!peer || type == NET_CLIENT_TYPE_NIC) {
>> -            monitor_printf(mon, "  ");
>>              print_net_client(mon, nc);
>>          } /* else it's a netdev connected to a NIC, printed with the NIC */
>>          if (peer && type == NET_CLIENT_TYPE_NIC) {
>> @@ -1092,7 +1103,6 @@ void do_info_network(Monitor *mon)
>>              print_net_client(mon, peer);
>>          }
>>      }
>> -    net_hub_info(mon);
>
> Why introduce a different hub output format at all? Do it in the final
> right from the start.
>
>>  }
>>
>>  void qmp_set_link(const char *name, bool up, Error **errp)
>> diff --git a/net.h b/net.h
>> index 250669a..08306a4 100644
>> --- a/net.h
>> +++ b/net.h
>> @@ -112,6 +112,18 @@ void qemu_check_nic_model(NICInfo *nd, const char *model);
>>  int qemu_find_nic_model(NICInfo *nd, const char * const *models,
>>                          const char *default_model);
>>
>> +ssize_t qemu_deliver_packet(NetClientState *sender,
>> +                            unsigned flags,
>> +                            const uint8_t *data,
>> +                            size_t size,
>> +                            void *opaque);
>> +ssize_t qemu_deliver_packet_iov(NetClientState *sender,
>> +                            unsigned flags,
>> +                            const struct iovec *iov,
>> +                            int iovcnt,
>> +                            void *opaque);
>> +
>
> I bet those two prototypes are required by some other patch (or are even
> redundant).
I have noticed this, and split out them to other patch.
>
>> +void print_net_client(Monitor *mon, NetClientState *vc);
>>  void do_info_network(Monitor *mon);
>>
>>  /* NIC info */
>> diff --git a/net/hub.c b/net/hub.c
>> index 122de69..8c77d03 100644
>> --- a/net/hub.c
>> +++ b/net/hub.c
>> @@ -184,6 +184,25 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
>>  }
>>
>>  /**
>> + * Determine if one nc peers with one hub port
>> + */
>> +bool net_hub_port_peer_nc(NetClientState *nc)
>> +{
>> +    NetHub *hub;
>> +    NetHubPort *port;
>> +
>> +    QLIST_FOREACH(hub, &hubs, next) {
>> +        QLIST_FOREACH(port, &hub->ports, next) {
>> +            if (nc == port->nc.peer) {
>> +                return true;
>> +            }
>> +        }
>> +    }
>> +
>> +    return false;
>> +}
>> +
>> +/**
>>   * Print hub configuration
>>   */
>>  void net_hub_info(Monitor *mon)
>> @@ -194,8 +213,8 @@ void net_hub_info(Monitor *mon)
>>      QLIST_FOREACH(hub, &hubs, next) {
>>          monitor_printf(mon, "hub %u\n", hub->id);
>>          QLIST_FOREACH(port, &hub->ports, next) {
>> -            monitor_printf(mon, "    port %u peer %s\n", port->id,
>> -                           port->nc.peer ? port->nc.peer->name : "<none>");
>> +            monitor_printf(mon, "   \\ ");
This will have the following layout:
(qemu) info network
hub 1
   \ dump.0: type=dump,dump to qemu-vlan1.pcap (len=65536)
   \ user.1: type=user,net=10.0.2.0,restrict=off
   \ virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:58
hub 0
   \ user.0: type=user,net=10.0.2.0,restrict=off
   \ e1000.0: type=nic,model=e1000,macaddr=52:54:00:12:34:57
virtio-net-pci.1: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
   \ ur: type=tap,ifname=tap0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
^^^
>
> Two space too much of indention (you remove them above for the existing
It is three space, not two.
> peer \ peer outputs).
Do you mean that it should be like "monitor_printf(mon, "\\ ");" but
this indention will not match with those peers in hub case.

>
>> +            print_net_client(mon, port->nc.peer);
>>          }
>>      }
>>  }
>> diff --git a/net/hub.h b/net/hub.h
>> index ff5024a..550189b 100644
>> --- a/net/hub.h
>> +++ b/net/hub.h
>> @@ -23,5 +23,6 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
>>  void net_hub_info(Monitor *mon);
>>  int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
>>  void net_hub_check_clients(void);
>> +bool net_hub_port_peer_nc(NetClientState *nc);
>>
>>  #endif /* NET_HUB_H */
>
> Jan
>
> --
> Siemens AG, Corporate Technology, CT T DE IT 1
> Corporate Competence Center Embedded Linux



-- 
Regards,

Zhi Yong Wu

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info
  2012-05-25 14:25   ` Zhi Yong Wu
@ 2012-05-25 14:40     ` Jan Kiszka
  2012-05-25 14:44       ` Zhi Yong Wu
  0 siblings, 1 reply; 38+ messages in thread
From: Jan Kiszka @ 2012-05-25 14:40 UTC (permalink / raw)
  To: Zhi Yong Wu
  Cc: pbonzini@redhat.com, wuzhy@linux.vnet.ibm.com,
	qemu-devel@nongnu.org, kvm@vger.kernel.org,
	stefanha@linux.vnet.ibm.com

On 2012-05-25 11:25, Zhi Yong Wu wrote:
>>> diff --git a/net/hub.c b/net/hub.c
>>> index 122de69..8c77d03 100644
>>> --- a/net/hub.c
>>> +++ b/net/hub.c
>>> @@ -184,6 +184,25 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
>>>  }
>>>
>>>  /**
>>> + * Determine if one nc peers with one hub port
>>> + */
>>> +bool net_hub_port_peer_nc(NetClientState *nc)
>>> +{
>>> +    NetHub *hub;
>>> +    NetHubPort *port;
>>> +
>>> +    QLIST_FOREACH(hub, &hubs, next) {
>>> +        QLIST_FOREACH(port, &hub->ports, next) {
>>> +            if (nc == port->nc.peer) {
>>> +                return true;
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    return false;
>>> +}
>>> +
>>> +/**
>>>   * Print hub configuration
>>>   */
>>>  void net_hub_info(Monitor *mon)
>>> @@ -194,8 +213,8 @@ void net_hub_info(Monitor *mon)
>>>      QLIST_FOREACH(hub, &hubs, next) {
>>>          monitor_printf(mon, "hub %u\n", hub->id);
>>>          QLIST_FOREACH(port, &hub->ports, next) {
>>> -            monitor_printf(mon, "    port %u peer %s\n", port->id,
>>> -                           port->nc.peer ? port->nc.peer->name : "<none>");
>>> +            monitor_printf(mon, "   \\ ");
> This will have the following layout:
> (qemu) info network
> hub 1
>    \ dump.0: type=dump,dump to qemu-vlan1.pcap (len=65536)
>    \ user.1: type=user,net=10.0.2.0,restrict=off
>    \ virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:58
> hub 0
>    \ user.0: type=user,net=10.0.2.0,restrict=off
>    \ e1000.0: type=nic,model=e1000,macaddr=52:54:00:12:34:57
> virtio-net-pci.1: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
>    \ ur: type=tap,ifname=tap0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
> ^^^
>>
>> Two space too much of indention (you remove them above for the existing
> It is three space, not two.
>> peer \ peer outputs).
> Do you mean that it should be like "monitor_printf(mon, "\\ ");" but
> this indention will not match with those peers in hub case.

This line is for printing peers attached to a hub, isn't it? So it
should be exactly one space, like for the non-hub peers. You should see
it better than I when running the code.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info
  2012-05-25 14:40     ` Jan Kiszka
@ 2012-05-25 14:44       ` Zhi Yong Wu
  2012-05-25 14:50         ` Jan Kiszka
  0 siblings, 1 reply; 38+ messages in thread
From: Zhi Yong Wu @ 2012-05-25 14:44 UTC (permalink / raw)
  To: Jan Kiszka
  Cc: pbonzini@redhat.com, wuzhy@linux.vnet.ibm.com,
	qemu-devel@nongnu.org, kvm@vger.kernel.org,
	stefanha@linux.vnet.ibm.com

On Fri, May 25, 2012 at 10:40 PM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> On 2012-05-25 11:25, Zhi Yong Wu wrote:
>>>> diff --git a/net/hub.c b/net/hub.c
>>>> index 122de69..8c77d03 100644
>>>> --- a/net/hub.c
>>>> +++ b/net/hub.c
>>>> @@ -184,6 +184,25 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
>>>>  }
>>>>
>>>>  /**
>>>> + * Determine if one nc peers with one hub port
>>>> + */
>>>> +bool net_hub_port_peer_nc(NetClientState *nc)
>>>> +{
>>>> +    NetHub *hub;
>>>> +    NetHubPort *port;
>>>> +
>>>> +    QLIST_FOREACH(hub, &hubs, next) {
>>>> +        QLIST_FOREACH(port, &hub->ports, next) {
>>>> +            if (nc == port->nc.peer) {
>>>> +                return true;
>>>> +            }
>>>> +        }
>>>> +    }
>>>> +
>>>> +    return false;
>>>> +}
>>>> +
>>>> +/**
>>>>   * Print hub configuration
>>>>   */
>>>>  void net_hub_info(Monitor *mon)
>>>> @@ -194,8 +213,8 @@ void net_hub_info(Monitor *mon)
>>>>      QLIST_FOREACH(hub, &hubs, next) {
>>>>          monitor_printf(mon, "hub %u\n", hub->id);
>>>>          QLIST_FOREACH(port, &hub->ports, next) {
>>>> -            monitor_printf(mon, "    port %u peer %s\n", port->id,
>>>> -                           port->nc.peer ? port->nc.peer->name : "<none>");
>>>> +            monitor_printf(mon, "   \\ ");
>> This will have the following layout:
>> (qemu) info network
>> hub 1
>>    \ dump.0: type=dump,dump to qemu-vlan1.pcap (len=65536)
>>    \ user.1: type=user,net=10.0.2.0,restrict=off
>>    \ virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:58
>> hub 0
>>    \ user.0: type=user,net=10.0.2.0,restrict=off
>>    \ e1000.0: type=nic,model=e1000,macaddr=52:54:00:12:34:57
>> virtio-net-pci.1: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
>>    \ ur: type=tap,ifname=tap0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
>> ^^^
>>>
>>> Two space too much of indention (you remove them above for the existing
>> It is three space, not two.
>>> peer \ peer outputs).
>> Do you mean that it should be like "monitor_printf(mon, "\\ ");" but
>> this indention will not match with those peers in hub case.
>
> This line is for printing peers attached to a hub, isn't it? So it
Yeah, but it is three spaces, not one. You can check the code in
do_info_network. For non-hub peers, it is also three spaces.
> should be exactly one space, like for the non-hub peers. You should see
> it better than I when running the code.
That is the result i got when i was running the code.
>
> Jan
>
> --
> Siemens AG, Corporate Technology, CT T DE IT 1
> Corporate Competence Center Embedded Linux



-- 
Regards,

Zhi Yong Wu

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info
  2012-05-25 14:44       ` Zhi Yong Wu
@ 2012-05-25 14:50         ` Jan Kiszka
  2012-05-25 14:56           ` Zhi Yong Wu
  0 siblings, 1 reply; 38+ messages in thread
From: Jan Kiszka @ 2012-05-25 14:50 UTC (permalink / raw)
  To: Zhi Yong Wu
  Cc: pbonzini@redhat.com, wuzhy@linux.vnet.ibm.com,
	qemu-devel@nongnu.org, kvm@vger.kernel.org,
	stefanha@linux.vnet.ibm.com

On 2012-05-25 11:44, Zhi Yong Wu wrote:
> On Fri, May 25, 2012 at 10:40 PM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>> On 2012-05-25 11:25, Zhi Yong Wu wrote:
>>>>> diff --git a/net/hub.c b/net/hub.c
>>>>> index 122de69..8c77d03 100644
>>>>> --- a/net/hub.c
>>>>> +++ b/net/hub.c
>>>>> @@ -184,6 +184,25 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
>>>>>  }
>>>>>
>>>>>  /**
>>>>> + * Determine if one nc peers with one hub port
>>>>> + */
>>>>> +bool net_hub_port_peer_nc(NetClientState *nc)
>>>>> +{
>>>>> +    NetHub *hub;
>>>>> +    NetHubPort *port;
>>>>> +
>>>>> +    QLIST_FOREACH(hub, &hubs, next) {
>>>>> +        QLIST_FOREACH(port, &hub->ports, next) {
>>>>> +            if (nc == port->nc.peer) {
>>>>> +                return true;
>>>>> +            }
>>>>> +        }
>>>>> +    }
>>>>> +
>>>>> +    return false;
>>>>> +}
>>>>> +
>>>>> +/**
>>>>>   * Print hub configuration
>>>>>   */
>>>>>  void net_hub_info(Monitor *mon)
>>>>> @@ -194,8 +213,8 @@ void net_hub_info(Monitor *mon)
>>>>>      QLIST_FOREACH(hub, &hubs, next) {
>>>>>          monitor_printf(mon, "hub %u\n", hub->id);
>>>>>          QLIST_FOREACH(port, &hub->ports, next) {
>>>>> -            monitor_printf(mon, "    port %u peer %s\n", port->id,
>>>>> -                           port->nc.peer ? port->nc.peer->name : "<none>");
>>>>> +            monitor_printf(mon, "   \\ ");
>>> This will have the following layout:
>>> (qemu) info network
>>> hub 1
>>>    \ dump.0: type=dump,dump to qemu-vlan1.pcap (len=65536)
>>>    \ user.1: type=user,net=10.0.2.0,restrict=off
>>>    \ virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:58
>>> hub 0
>>>    \ user.0: type=user,net=10.0.2.0,restrict=off
>>>    \ e1000.0: type=nic,model=e1000,macaddr=52:54:00:12:34:57
>>> virtio-net-pci.1: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
>>>    \ ur: type=tap,ifname=tap0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
>>> ^^^
>>>>
>>>> Two space too much of indention (you remove them above for the existing
>>> It is three space, not two.
>>>> peer \ peer outputs).
>>> Do you mean that it should be like "monitor_printf(mon, "\\ ");" but
>>> this indention will not match with those peers in hub case.
>>
>> This line is for printing peers attached to a hub, isn't it? So it
> Yeah, but it is three spaces, not one. You can check the code in
> do_info_network. For non-hub peers, it is also three spaces.

Then non-hub needs adjustment to a single space as well. Just remove the
two spaces I added to indent the categories (VLAN vs. non-VLAN listing)
for _both_ peer lines.

(I love nit-picking discussions :) )

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info
  2012-05-25 14:50         ` Jan Kiszka
@ 2012-05-25 14:56           ` Zhi Yong Wu
  0 siblings, 0 replies; 38+ messages in thread
From: Zhi Yong Wu @ 2012-05-25 14:56 UTC (permalink / raw)
  To: Jan Kiszka
  Cc: pbonzini@redhat.com, wuzhy@linux.vnet.ibm.com,
	qemu-devel@nongnu.org, kvm@vger.kernel.org,
	stefanha@linux.vnet.ibm.com

On Fri, May 25, 2012 at 10:50 PM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> On 2012-05-25 11:44, Zhi Yong Wu wrote:
>> On Fri, May 25, 2012 at 10:40 PM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>>> On 2012-05-25 11:25, Zhi Yong Wu wrote:
>>>>>> diff --git a/net/hub.c b/net/hub.c
>>>>>> index 122de69..8c77d03 100644
>>>>>> --- a/net/hub.c
>>>>>> +++ b/net/hub.c
>>>>>> @@ -184,6 +184,25 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
>>>>>>  }
>>>>>>
>>>>>>  /**
>>>>>> + * Determine if one nc peers with one hub port
>>>>>> + */
>>>>>> +bool net_hub_port_peer_nc(NetClientState *nc)
>>>>>> +{
>>>>>> +    NetHub *hub;
>>>>>> +    NetHubPort *port;
>>>>>> +
>>>>>> +    QLIST_FOREACH(hub, &hubs, next) {
>>>>>> +        QLIST_FOREACH(port, &hub->ports, next) {
>>>>>> +            if (nc == port->nc.peer) {
>>>>>> +                return true;
>>>>>> +            }
>>>>>> +        }
>>>>>> +    }
>>>>>> +
>>>>>> +    return false;
>>>>>> +}
>>>>>> +
>>>>>> +/**
>>>>>>   * Print hub configuration
>>>>>>   */
>>>>>>  void net_hub_info(Monitor *mon)
>>>>>> @@ -194,8 +213,8 @@ void net_hub_info(Monitor *mon)
>>>>>>      QLIST_FOREACH(hub, &hubs, next) {
>>>>>>          monitor_printf(mon, "hub %u\n", hub->id);
>>>>>>          QLIST_FOREACH(port, &hub->ports, next) {
>>>>>> -            monitor_printf(mon, "    port %u peer %s\n", port->id,
>>>>>> -                           port->nc.peer ? port->nc.peer->name : "<none>");
>>>>>> +            monitor_printf(mon, "   \\ ");
>>>> This will have the following layout:
>>>> (qemu) info network
>>>> hub 1
>>>>    \ dump.0: type=dump,dump to qemu-vlan1.pcap (len=65536)
>>>>    \ user.1: type=user,net=10.0.2.0,restrict=off
>>>>    \ virtio-net-pci.0: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:58
>>>> hub 0
>>>>    \ user.0: type=user,net=10.0.2.0,restrict=off
>>>>    \ e1000.0: type=nic,model=e1000,macaddr=52:54:00:12:34:57
>>>> virtio-net-pci.1: type=nic,model=virtio-net-pci,macaddr=52:54:00:12:34:56
>>>>    \ ur: type=tap,ifname=tap0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
>>>> ^^^
>>>>>
>>>>> Two space too much of indention (you remove them above for the existing
>>>> It is three space, not two.
>>>>> peer \ peer outputs).
>>>> Do you mean that it should be like "monitor_printf(mon, "\\ ");" but
>>>> this indention will not match with those peers in hub case.
>>>
>>> This line is for printing peers attached to a hub, isn't it? So it
>> Yeah, but it is three spaces, not one. You can check the code in
>> do_info_network. For non-hub peers, it is also three spaces.
>
> Then non-hub needs adjustment to a single space as well. Just remove the
> two spaces I added to indent the categories (VLAN vs. non-VLAN listing)
OK, done
> for _both_ peer lines.
>
> (I love nit-picking discussions :) )
No matter. :)
>
> Jan
>
> --
> Siemens AG, Corporate Technology, CT T DE IT 1
> Corporate Competence Center Embedded Linux



-- 
Regards,

Zhi Yong Wu

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 00/16] hub-based networking patches
@ 2012-06-04  5:29 zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 01/16] net: Add a hub net client zwu.kernel
                   ` (15 more replies)
  0 siblings, 16 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>

All comments from other guys were addressed.

The following changes since commit a854972f8cdec0148087789d62777d8f7176933d:

 Update version to open the 1.2 development branch (Fri Jun 1 16:56:16 2012 +0800)

are available in the git repository at:

 git@github.com:wuzhy/qemu.git for-anthony

Changelog from v3:
 1.) refactor hub own flow control [paolo]
 2.) refactor the output for monitor command "info network" [jan kiszka]

v3:
 1.) add the support for hub own flow control [paolo]
 2.) make the monitor output more reasonable hub info [jan kiszka]

v2:
 1.) cleanup some obsolete vlan info
 2.) cleanup deliver/deliver_iov func pointers [paolo]
 3.) support more flexible flow control [paolo]

Stefan Hajnoczi (12):
  net: Add a hub net client
  net: Use hubs for the vlan feature
  net: Look up 'vlan' net clients using hubs
  hub: Check that hubs are configured correctly
  net: Drop vlan argument to qemu_new_net_client()
  net: Remove vlan qdev property
  net: Remove vlan code from net.c
  net: Remove VLANState
  net: Rename non_vlan_clients to net_clients
  net: Rename VLANClientState to NetClientState
  net: Rename vc local variables to nc
  net: Rename qemu_del_vlan_client() to qemu_del_net_client()

Zhi Yong Wu (4):
  net: Make "info network" output more readable info
  net: cleanup deliver/deliver_iov func pointers
  net: determine if packets can be sent before net queue deliver
    packets
  hub: add the support for hub own flow control

 Makefile.objs           |    2 +-
 hw/cadence_gem.c        |    8 +-
 hw/dp8393x.c            |    6 +-
 hw/e1000.c              |   10 +-
 hw/eepro100.c           |    8 +-
 hw/etraxfs_eth.c        |    8 +-
 hw/lan9118.c            |    8 +-
 hw/lance.c              |    2 +-
 hw/mcf_fec.c            |    6 +-
 hw/milkymist-minimac2.c |    6 +-
 hw/mipsnet.c            |    6 +-
 hw/musicpal.c           |    6 +-
 hw/ne2000-isa.c         |    2 +-
 hw/ne2000.c             |    8 +-
 hw/ne2000.h             |    4 +-
 hw/opencores_eth.c      |    8 +-
 hw/pcnet-pci.c          |    4 +-
 hw/pcnet.c              |    6 +-
 hw/pcnet.h              |    6 +-
 hw/qdev-properties.c    |   78 +------
 hw/qdev.c               |    2 -
 hw/qdev.h               |    8 +-
 hw/rtl8139.c            |   10 +-
 hw/smc91c111.c          |    6 +-
 hw/spapr_llan.c         |    4 +-
 hw/stellaris_enet.c     |    6 +-
 hw/usb/dev-network.c    |    8 +-
 hw/vhost_net.c          |   24 +-
 hw/vhost_net.h          |    2 +-
 hw/virtio-net.c         |   12 +-
 hw/xen_nic.c            |    7 +-
 hw/xgmac.c              |    6 +-
 hw/xilinx_axienet.c     |    6 +-
 hw/xilinx_ethlite.c     |    6 +-
 net.c                   |  605 ++++++++++++++---------------------------------
 net.h                   |   86 ++++----
 net/dump.c              |   28 ++-
 net/dump.h              |    2 +-
 net/hub.c               |  310 ++++++++++++++++++++++++
 net/hub.h               |   28 +++
 net/queue.c             |   37 ++--
 net/queue.h             |   25 +--
 net/slirp.c             |   32 +--
 net/slirp.h             |    2 +-
 net/socket.c            |   66 +++---
 net/socket.h            |    2 +-
 net/tap-win32.c         |   27 +-
 net/tap.c               |   45 ++--
 net/tap.h               |   21 +-
 net/vde.c               |   17 +-
 net/vde.h               |    3 +-
 qemu-common.h           |    3 +-
 slirp/if.c              |    5 -
 slirp/libslirp.h        |    1 -
 54 files changed, 818 insertions(+), 826 deletions(-)
 create mode 100644 net/hub.c
 create mode 100644 net/hub.h

-- 
1.7.6

^ permalink raw reply	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 01/16] net: Add a hub net client
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 02/16] net: Use hubs for the vlan feature zwu.kernel
                   ` (14 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

The vlan feature can be implemented in terms of hubs.  By introducing a
hub net client it becomes possible to remove the special case vlan code
from net.c and push the vlan feature out of generic networking code.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 Makefile.objs |    2 +-
 net.h         |    1 +
 net/hub.c     |  201 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 net/hub.h     |   24 +++++++
 4 files changed, 227 insertions(+), 1 deletions(-)
 create mode 100644 net/hub.c
 create mode 100644 net/hub.h

diff --git a/Makefile.objs b/Makefile.objs
index 70c5c79..a3a3a8a 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -63,7 +63,7 @@ block-nested-$(CONFIG_RBD) += rbd.o
 block-obj-y +=  $(addprefix block/, $(block-nested-y))
 
 net-obj-y = net.o
-net-nested-y = queue.o checksum.o util.o
+net-nested-y = queue.o checksum.o util.o hub.o
 net-nested-y += socket.o
 net-nested-y += dump.o
 net-nested-$(CONFIG_POSIX) += tap.o
diff --git a/net.h b/net.h
index 64993b4..50c55ad 100644
--- a/net.h
+++ b/net.h
@@ -38,6 +38,7 @@ typedef enum {
     NET_CLIENT_TYPE_VDE,
     NET_CLIENT_TYPE_DUMP,
     NET_CLIENT_TYPE_BRIDGE,
+    NET_CLIENT_TYPE_HUB,
 
     NET_CLIENT_TYPE_MAX
 } net_client_type;
diff --git a/net/hub.c b/net/hub.c
new file mode 100644
index 0000000..28ff45c
--- /dev/null
+++ b/net/hub.c
@@ -0,0 +1,201 @@
+/*
+ * Hub net client
+ *
+ * Copyright IBM, Corp. 2012
+ *
+ * Authors:
+ *  Stefan Hajnoczi   <stefanha@linux.vnet.ibm.com>
+ *  Zhi Yong Wu       <wuzhy@linux.vnet.ibm.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2 or later.
+ * See the COPYING.LIB file in the top-level directory.
+ *
+ */
+
+#include "monitor.h"
+#include "net.h"
+#include "hub.h"
+
+/*
+ * A hub broadcasts incoming packets to all its ports except the source port.
+ * Hubs can be used to provide independent network segments, also confusingly
+ * named the QEMU 'vlan' feature.
+ */
+
+typedef struct NetHub NetHub;
+
+typedef struct NetHubPort {
+    VLANClientState nc;
+    QLIST_ENTRY(NetHubPort) next;
+    NetHub *hub;
+    unsigned int id;
+} NetHubPort;
+
+struct NetHub {
+    unsigned int id;
+    QLIST_ENTRY(NetHub) next;
+    unsigned int num_ports;
+    QLIST_HEAD(, NetHubPort) ports;
+};
+
+static QLIST_HEAD(, NetHub) hubs = QLIST_HEAD_INITIALIZER(&hubs);
+
+static ssize_t net_hub_receive(NetHub *hub, NetHubPort *source_port,
+                               const uint8_t *buf, size_t len)
+{
+    NetHubPort *port;
+
+    QLIST_FOREACH(port, &hub->ports, next) {
+        if (port == source_port) {
+            continue;
+        }
+
+        qemu_send_packet(&port->nc, buf, len);
+    }
+    return len;
+}
+
+static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
+                                   const struct iovec *iov, int iovcnt)
+{
+    NetHubPort *port;
+    ssize_t ret = 0;
+
+    QLIST_FOREACH(port, &hub->ports, next) {
+        if (port == source_port) {
+            continue;
+        }
+
+        ret = qemu_sendv_packet(&port->nc, iov, iovcnt);
+    }
+    return ret;
+}
+
+static NetHub *net_hub_new(unsigned int id)
+{
+    NetHub *hub;
+
+    hub = g_malloc(sizeof(*hub));
+    hub->id = id;
+    hub->num_ports = 0;
+    QLIST_INIT(&hub->ports);
+
+    QLIST_INSERT_HEAD(&hubs, hub, next);
+
+    return hub;
+}
+
+static ssize_t net_hub_port_receive(VLANClientState *nc,
+                                    const uint8_t *buf, size_t len)
+{
+    NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
+
+    return net_hub_receive(port->hub, port, buf, len);
+}
+
+static ssize_t net_hub_port_receive_iov(VLANClientState *nc,
+                                        const struct iovec *iov, int iovcnt)
+{
+    NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
+
+    return net_hub_receive_iov(port->hub, port, iov, iovcnt);
+}
+
+static void net_hub_port_cleanup(VLANClientState *nc)
+{
+    NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
+
+    QLIST_REMOVE(port, next);
+}
+
+static NetClientInfo net_hub_port_info = {
+    .type = NET_CLIENT_TYPE_HUB,
+    .size = sizeof(NetHubPort),
+    .receive = net_hub_port_receive,
+    .receive_iov = net_hub_port_receive_iov,
+    .cleanup = net_hub_port_cleanup,
+};
+
+static NetHubPort *net_hub_port_new(NetHub *hub)
+{
+    VLANClientState *nc;
+    NetHubPort *port;
+    unsigned int id = hub->num_ports++;
+    char name[128];
+
+    snprintf(name, sizeof name, "hub%uport%u", hub->id, id);
+
+    nc = qemu_new_net_client(&net_hub_port_info, NULL, NULL, "hub", name);
+    port = DO_UPCAST(NetHubPort, nc, nc);
+    port->id = id;
+    port->hub = hub;
+
+    QLIST_INSERT_HEAD(&hub->ports, port, next);
+
+    return port;
+}
+
+/**
+ * Create a port on a given hub
+ *
+ * If there is no existing hub with the given id then a new hub is created.
+ */
+VLANClientState *net_hub_add_port(unsigned int hub_id)
+{
+    NetHub *hub;
+    NetHubPort *port;
+
+    QLIST_FOREACH(hub, &hubs, next) {
+        if (hub->id == hub_id) {
+            break;
+        }
+    }
+
+    if (!hub) {
+        hub = net_hub_new(hub_id);
+    }
+
+    port = net_hub_port_new(hub);
+    return &port->nc;
+}
+
+/**
+ * Print hub configuration
+ */
+void net_hub_info(Monitor *mon)
+{
+    NetHub *hub;
+    NetHubPort *port;
+
+    QLIST_FOREACH(hub, &hubs, next) {
+        monitor_printf(mon, "hub %u\n", hub->id);
+        QLIST_FOREACH(port, &hub->ports, next) {
+            monitor_printf(mon, "    port %u peer %s\n", port->id,
+                           port->nc.peer ? port->nc.peer->name : "<none>");
+        }
+    }
+}
+
+/**
+ * Get the hub id that a client is connected to
+ *
+ * @id              Pointer for hub id output, may be NULL
+ */
+int net_hub_id_for_client(VLANClientState *nc, unsigned int *id)
+{
+    NetHub *hub;
+    NetHubPort *port;
+
+    QLIST_FOREACH(hub, &hubs, next) {
+        QLIST_FOREACH(port, &hub->ports, next) {
+            if (&port->nc == nc ||
+                (port->nc.peer && port->nc.peer == nc)) {
+                if (id) {
+                    *id = hub->id;
+                }
+                return 0;
+            }
+        }
+    }
+    return -ENOENT;
+}
diff --git a/net/hub.h b/net/hub.h
new file mode 100644
index 0000000..bf8798b
--- /dev/null
+++ b/net/hub.h
@@ -0,0 +1,24 @@
+/*
+ * Hub net client
+ *
+ * Copyright IBM, Corp. 2012
+ *
+ * Authors:
+ *  Stefan Hajnoczi   <stefanha@linux.vnet.ibm.com>
+ *  Zhi Yong Wu       <wuzhy@linux.vnet.ibm.com>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2 or later.
+ * See the COPYING.LIB file in the top-level directory.
+ *
+ */
+
+#ifndef NET_HUB_H
+#define NET_HUB_H
+
+#include "qemu-common.h"
+
+VLANClientState *net_hub_add_port(unsigned int hub_id);
+void net_hub_info(Monitor *mon);
+int net_hub_id_for_client(VLANClientState *nc, unsigned int *id);
+
+#endif /* NET_HUB_H */
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 02/16] net: Use hubs for the vlan feature
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 01/16] net: Add a hub net client zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 03/16] net: Look up 'vlan' net clients using hubs zwu.kernel
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

Stop using the special-case vlan code in net.c.  Instead use the hub net
client to implement the vlan feature.  The next patch will remove vlan
code from net.c completely.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 net.c           |   46 +++++++++++++++++++++++++---------------------
 net/dump.c      |   20 ++++++++++++++------
 net/dump.h      |    2 +-
 net/slirp.c     |    8 ++++----
 net/slirp.h     |    2 +-
 net/socket.c    |   48 ++++++++++++++++++++++++++----------------------
 net/socket.h    |    2 +-
 net/tap-win32.c |    9 +++++----
 net/tap.c       |    7 ++++---
 net/tap.h       |    3 ++-
 net/vde.c       |    9 +++++----
 net/vde.h       |    3 ++-
 12 files changed, 90 insertions(+), 69 deletions(-)

diff --git a/net.c b/net.c
index 1922d8a..8c02559 100644
--- a/net.c
+++ b/net.c
@@ -25,6 +25,7 @@
 
 #include "config-host.h"
 
+#include "net/hub.h"
 #include "net/tap.h"
 #include "net/socket.h"
 #include "net/dump.h"
@@ -153,23 +154,25 @@ void qemu_macaddr_default_if_unset(MACAddr *macaddr)
     macaddr->a[5] = 0x56 + index++;
 }
 
+/**
+ * Generate a name for net client
+ *
+ * Only net clients created with the legacy -net option need this.  Naming is
+ * mandatory for net clients created with -netdev.
+ */
 static char *assign_name(VLANClientState *vc1, const char *model)
 {
-    VLANState *vlan;
     VLANClientState *vc;
     char buf[256];
     int id = 0;
 
-    QTAILQ_FOREACH(vlan, &vlans, next) {
-        QTAILQ_FOREACH(vc, &vlan->clients, next) {
-            if (vc != vc1 && strcmp(vc->model, model) == 0) {
-                id++;
-            }
-        }
-    }
-
     QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
-        if (vc != vc1 && strcmp(vc->model, model) == 0) {
+        if (vc == vc1) {
+            continue;
+        }
+        /* For compatibility only bump id for net clients on a vlan */
+        if (strcmp(vc->model, model) == 0 &&
+            net_hub_id_for_client(vc, NULL) == 0) {
             id++;
         }
     }
@@ -748,7 +751,7 @@ int net_handle_fd_param(Monitor *mon, const char *param)
 static int net_init_nic(QemuOpts *opts,
                         Monitor *mon,
                         const char *name,
-                        VLANState *vlan)
+                        VLANClientState *peer)
 {
     int idx;
     NICInfo *nd;
@@ -771,8 +774,8 @@ static int net_init_nic(QemuOpts *opts,
             return -1;
         }
     } else {
-        assert(vlan);
-        nd->vlan = vlan;
+        assert(peer);
+        nd->netdev = peer;
     }
     if (name) {
         nd->name = g_strdup(name);
@@ -820,17 +823,17 @@ static int net_init_nic(QemuOpts *opts,
         .help = "identifier for monitor commands", \
      }
 
-typedef int (*net_client_init_func)(QemuOpts *opts,
-                                    Monitor *mon,
-                                    const char *name,
-                                    VLANState *vlan);
+typedef int NetClientInitFunc(QemuOpts *opts,
+                              Monitor *mon,
+                              const char *name,
+                              VLANClientState *peer);
 
 /* magic number, but compiler will warn if too small */
 #define NET_MAX_DESC 20
 
 static const struct {
     const char *type;
-    net_client_init_func init;
+    NetClientInitFunc *init;
     QemuOptDesc desc[NET_MAX_DESC];
 } net_client_types[NET_CLIENT_TYPE_MAX] = {
     [NET_CLIENT_TYPE_NONE] = {
@@ -1136,7 +1139,7 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
     for (i = 0; i < NET_CLIENT_TYPE_MAX; i++) {
         if (net_client_types[i].type != NULL &&
             !strcmp(net_client_types[i].type, type)) {
-            VLANState *vlan = NULL;
+            VLANClientState *peer = NULL;
             int ret;
 
             if (qemu_opts_validate(opts, &net_client_types[i].desc[0]) == -1) {
@@ -1147,12 +1150,12 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
              * netdev= parameter. */
             if (!(is_netdev ||
                   (strcmp(type, "nic") == 0 && qemu_opt_get(opts, "netdev")))) {
-                vlan = qemu_find_vlan(qemu_opt_get_number(opts, "vlan", 0), 1);
+                peer = net_hub_add_port(qemu_opt_get_number(opts, "vlan", 0));
             }
 
             ret = 0;
             if (net_client_types[i].init) {
-                ret = net_client_types[i].init(opts, mon, name, vlan);
+                ret = net_client_types[i].init(opts, mon, name, peer);
                 if (ret < 0) {
                     /* TODO push error reporting into init() methods */
                     qerror_report(QERR_DEVICE_INIT_FAILED, type);
@@ -1297,6 +1300,7 @@ void do_info_network(Monitor *mon)
             print_net_client(mon, peer);
         }
     }
+    net_hub_info(mon);
 }
 
 void qmp_set_link(const char *name, bool up, Error **errp)
diff --git a/net/dump.c b/net/dump.c
index 4b48d48..37cec3c 100644
--- a/net/dump.c
+++ b/net/dump.c
@@ -27,6 +27,7 @@
 #include "qemu-error.h"
 #include "qemu-log.h"
 #include "qemu-timer.h"
+#include "hub.h"
 
 typedef struct DumpState {
     VLANClientState nc;
@@ -99,7 +100,7 @@ static NetClientInfo net_dump_info = {
     .cleanup = dump_cleanup,
 };
 
-static int net_dump_init(VLANState *vlan, const char *device,
+static int net_dump_init(VLANClientState *peer, const char *device,
                          const char *name, const char *filename, int len)
 {
     struct pcap_file_hdr hdr;
@@ -128,7 +129,7 @@ static int net_dump_init(VLANState *vlan, const char *device,
         return -1;
     }
 
-    nc = qemu_new_net_client(&net_dump_info, vlan, NULL, device, name);
+    nc = qemu_new_net_client(&net_dump_info, NULL, peer, device, name);
 
     snprintf(nc->info_str, sizeof(nc->info_str),
              "dump to %s (len=%d)", filename, len);
@@ -144,21 +145,28 @@ static int net_dump_init(VLANState *vlan, const char *device,
     return 0;
 }
 
-int net_init_dump(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan)
+int net_init_dump(QemuOpts *opts, Monitor *mon, const char *name,
+                  VLANClientState *peer)
 {
     int len;
     const char *file;
     char def_file[128];
 
-    assert(vlan);
+    assert(peer);
 
     file = qemu_opt_get(opts, "file");
     if (!file) {
-        snprintf(def_file, sizeof(def_file), "qemu-vlan%d.pcap", vlan->id);
+        unsigned int id;
+        int ret;
+
+        ret = net_hub_id_for_client(peer, &id);
+        assert(ret == 0); /* peer must be on a hub */
+
+        snprintf(def_file, sizeof(def_file), "qemu-vlan%u.pcap", id);
         file = def_file;
     }
 
     len = qemu_opt_get_size(opts, "len", 65536);
 
-    return net_dump_init(vlan, "dump", name, file, len);
+    return net_dump_init(peer, "dump", name, file, len);
 }
diff --git a/net/dump.h b/net/dump.h
index fdc91ad..408c652 100644
--- a/net/dump.h
+++ b/net/dump.h
@@ -28,6 +28,6 @@
 #include "qemu-common.h"
 
 int net_init_dump(QemuOpts *opts, Monitor *mon,
-                  const char *name, VLANState *vlan);
+                  const char *name, VLANClientState *peer);
 
 #endif /* QEMU_NET_DUMP_H */
diff --git a/net/slirp.c b/net/slirp.c
index 96f5032..fa7c7fc 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -134,7 +134,7 @@ static NetClientInfo net_slirp_info = {
     .cleanup = net_slirp_cleanup,
 };
 
-static int net_slirp_init(VLANState *vlan, const char *model,
+static int net_slirp_init(VLANClientState *peer, const char *model,
                           const char *name, int restricted,
                           const char *vnetwork, const char *vhost,
                           const char *vhostname, const char *tftp_export,
@@ -237,7 +237,7 @@ static int net_slirp_init(VLANState *vlan, const char *model,
     }
 #endif
 
-    nc = qemu_new_net_client(&net_slirp_info, vlan, NULL, model, name);
+    nc = qemu_new_net_client(&net_slirp_info, NULL, peer, model, name);
 
     snprintf(nc->info_str, sizeof(nc->info_str),
              "net=%s,restrict=%s", inet_ntoa(net),
@@ -679,7 +679,7 @@ static int net_init_slirp_configs(const char *name, const char *value, void *opa
 int net_init_slirp(QemuOpts *opts,
                    Monitor *mon,
                    const char *name,
-                   VLANState *vlan)
+                   VLANClientState *peer)
 {
     struct slirp_config_str *config;
     const char *vhost;
@@ -736,7 +736,7 @@ int net_init_slirp(QemuOpts *opts,
 
     qemu_opt_foreach(opts, net_init_slirp_configs, NULL, 0);
 
-    ret = net_slirp_init(vlan, "user", name, restricted, vnet, vhost,
+    ret = net_slirp_init(peer, "user", name, restricted, vnet, vhost,
                          vhostname, tftp_export, bootfile, vdhcp_start,
                          vnamesrv, smb_export, vsmbsrv);
 
diff --git a/net/slirp.h b/net/slirp.h
index c17de8e..32041cb 100644
--- a/net/slirp.h
+++ b/net/slirp.h
@@ -33,7 +33,7 @@
 int net_init_slirp(QemuOpts *opts,
                    Monitor *mon,
                    const char *name,
-                   VLANState *vlan);
+                   VLANClientState *peer);
 
 void net_slirp_hostfwd_add(Monitor *mon, const QDict *qdict);
 void net_slirp_hostfwd_remove(Monitor *mon, const QDict *qdict);
diff --git a/net/socket.c b/net/socket.c
index 0bcf229..ed28cbd 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -43,7 +43,7 @@ typedef struct NetSocketState {
 } NetSocketState;
 
 typedef struct NetSocketListenState {
-    VLANState *vlan;
+    VLANClientState *peer;
     char *model;
     char *name;
     int fd;
@@ -244,7 +244,7 @@ static NetClientInfo net_dgram_socket_info = {
     .cleanup = net_socket_cleanup,
 };
 
-static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan,
+static NetSocketState *net_socket_fd_init_dgram(VLANClientState *peer,
                                                 const char *model,
                                                 const char *name,
                                                 int fd, int is_connected)
@@ -286,7 +286,7 @@ static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan,
         }
     }
 
-    nc = qemu_new_net_client(&net_dgram_socket_info, vlan, NULL, model, name);
+    nc = qemu_new_net_client(&net_dgram_socket_info, NULL, peer, model, name);
 
     snprintf(nc->info_str, sizeof(nc->info_str),
             "socket: fd=%d (%s mcast=%s:%d)",
@@ -322,7 +322,7 @@ static NetClientInfo net_socket_info = {
     .cleanup = net_socket_cleanup,
 };
 
-static NetSocketState *net_socket_fd_init_stream(VLANState *vlan,
+static NetSocketState *net_socket_fd_init_stream(VLANClientState *peer,
                                                  const char *model,
                                                  const char *name,
                                                  int fd, int is_connected)
@@ -330,7 +330,7 @@ static NetSocketState *net_socket_fd_init_stream(VLANState *vlan,
     VLANClientState *nc;
     NetSocketState *s;
 
-    nc = qemu_new_net_client(&net_socket_info, vlan, NULL, model, name);
+    nc = qemu_new_net_client(&net_socket_info, NULL, peer, model, name);
 
     snprintf(nc->info_str, sizeof(nc->info_str), "socket: fd=%d", fd);
 
@@ -346,7 +346,7 @@ static NetSocketState *net_socket_fd_init_stream(VLANState *vlan,
     return s;
 }
 
-static NetSocketState *net_socket_fd_init(VLANState *vlan,
+static NetSocketState *net_socket_fd_init(VLANClientState *peer,
                                           const char *model, const char *name,
                                           int fd, int is_connected)
 {
@@ -361,13 +361,13 @@ static NetSocketState *net_socket_fd_init(VLANState *vlan,
     }
     switch(so_type) {
     case SOCK_DGRAM:
-        return net_socket_fd_init_dgram(vlan, model, name, fd, is_connected);
+        return net_socket_fd_init_dgram(peer, model, name, fd, is_connected);
     case SOCK_STREAM:
-        return net_socket_fd_init_stream(vlan, model, name, fd, is_connected);
+        return net_socket_fd_init_stream(peer, model, name, fd, is_connected);
     default:
         /* who knows ... this could be a eg. a pty, do warn and continue as stream */
         fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd);
-        return net_socket_fd_init_stream(vlan, model, name, fd, is_connected);
+        return net_socket_fd_init_stream(peer, model, name, fd, is_connected);
     }
     return NULL;
 }
@@ -389,15 +389,17 @@ static void net_socket_accept(void *opaque)
             break;
         }
     }
-    s1 = net_socket_fd_init(s->vlan, s->model, s->name, fd, 1);
-    if (s1) {
+    s1 = net_socket_fd_init(s->peer, s->model, s->name, fd, 1);
+    if (!s1) {
+        closesocket(fd);
+    } else {
         snprintf(s1->nc.info_str, sizeof(s1->nc.info_str),
                  "socket: connection from %s:%d",
                  inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
     }
 }
 
-static int net_socket_listen_init(VLANState *vlan,
+static int net_socket_listen_init(VLANClientState *peer,
                                   const char *model,
                                   const char *name,
                                   const char *host_str)
@@ -437,7 +439,7 @@ static int net_socket_listen_init(VLANState *vlan,
         closesocket(fd);
         return -1;
     }
-    s->vlan = vlan;
+    s->peer = peer;
     s->model = g_strdup(model);
     s->name = name ? g_strdup(name) : NULL;
     s->fd = fd;
@@ -445,7 +447,7 @@ static int net_socket_listen_init(VLANState *vlan,
     return 0;
 }
 
-static int net_socket_connect_init(VLANState *vlan,
+static int net_socket_connect_init(VLANClientState *peer,
                                    const char *model,
                                    const char *name,
                                    const char *host_str)
@@ -486,7 +488,7 @@ static int net_socket_connect_init(VLANState *vlan,
             break;
         }
     }
-    s = net_socket_fd_init(vlan, model, name, fd, connected);
+    s = net_socket_fd_init(peer, model, name, fd, connected);
     if (!s)
         return -1;
     snprintf(s->nc.info_str, sizeof(s->nc.info_str),
@@ -495,7 +497,7 @@ static int net_socket_connect_init(VLANState *vlan,
     return 0;
 }
 
-static int net_socket_mcast_init(VLANState *vlan,
+static int net_socket_mcast_init(VLANClientState *peer,
                                  const char *model,
                                  const char *name,
                                  const char *host_str,
@@ -521,7 +523,7 @@ static int net_socket_mcast_init(VLANState *vlan,
     if (fd < 0)
         return -1;
 
-    s = net_socket_fd_init(vlan, model, name, fd, 0);
+    s = net_socket_fd_init(peer, model, name, fd, 0);
     if (!s)
         return -1;
 
@@ -588,7 +590,7 @@ static int net_socket_udp_init(VLANState *vlan,
 int net_init_socket(QemuOpts *opts,
                     Monitor *mon,
                     const char *name,
-                    VLANState *vlan)
+                    VLANClientState *peer)
 {
     if (qemu_opt_get(opts, "fd")) {
         int fd;
@@ -606,7 +608,8 @@ int net_init_socket(QemuOpts *opts,
             return -1;
         }
 
-        if (!net_socket_fd_init(vlan, "socket", name, fd, 1)) {
+        if (!net_socket_fd_init(peer, "socket", name, fd, 1)) {
+            close(fd);
             return -1;
         }
     } else if (qemu_opt_get(opts, "listen")) {
@@ -622,7 +625,7 @@ int net_init_socket(QemuOpts *opts,
 
         listen = qemu_opt_get(opts, "listen");
 
-        if (net_socket_listen_init(vlan, "socket", name, listen) == -1) {
+        if (net_socket_listen_init(peer, "socket", name, listen) == -1) {
             return -1;
         }
     } else if (qemu_opt_get(opts, "connect")) {
@@ -638,7 +641,7 @@ int net_init_socket(QemuOpts *opts,
 
         connect = qemu_opt_get(opts, "connect");
 
-        if (net_socket_connect_init(vlan, "socket", name, connect) == -1) {
+        if (net_socket_connect_init(peer, "socket", name, connect) == -1) {
             return -1;
         }
     } else if (qemu_opt_get(opts, "mcast")) {
@@ -654,7 +657,8 @@ int net_init_socket(QemuOpts *opts,
         mcast = qemu_opt_get(opts, "mcast");
         localaddr = qemu_opt_get(opts, "localaddr");
 
-        if (net_socket_mcast_init(vlan, "socket", name, mcast, localaddr) == -1) {
+        if (net_socket_mcast_init(peer, "socket", name,
+                                  mcast, localaddr) == -1) {
             return -1;
         }
     } else if (qemu_opt_get(opts, "udp")) {
diff --git a/net/socket.h b/net/socket.h
index ea46f02..f6172bc 100644
--- a/net/socket.h
+++ b/net/socket.h
@@ -28,6 +28,6 @@
 #include "qemu-common.h"
 
 int net_init_socket(QemuOpts *opts, Monitor *mon,
-                    const char *name, VLANState *vlan);
+                    const char *name, VLANClientState *peer);
 
 #endif /* QEMU_NET_SOCKET_H */
diff --git a/net/tap-win32.c b/net/tap-win32.c
index 596132e..2436c26 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -673,7 +673,7 @@ static NetClientInfo net_tap_win32_info = {
     .cleanup = tap_cleanup,
 };
 
-static int tap_win32_init(VLANState *vlan, const char *model,
+static int tap_win32_init(VLANClientState *peer, const char *model,
                           const char *name, const char *ifname)
 {
     VLANClientState *nc;
@@ -685,7 +685,7 @@ static int tap_win32_init(VLANState *vlan, const char *model,
         return -1;
     }
 
-    nc = qemu_new_net_client(&net_tap_win32_info, vlan, NULL, model, name);
+    nc = qemu_new_net_client(&net_tap_win32_info, NULL, peer, model, name);
 
     s = DO_UPCAST(TAPState, nc, nc);
 
@@ -699,7 +699,8 @@ static int tap_win32_init(VLANState *vlan, const char *model,
     return 0;
 }
 
-int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan)
+int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
+                 VLANClientState *peer)
 {
     const char *ifname;
 
@@ -710,7 +711,7 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan
         return -1;
     }
 
-    if (tap_win32_init(vlan, "tap", name, ifname) == -1) {
+    if (tap_win32_init(peer, "tap", name, ifname) == -1) {
         return -1;
     }
 
diff --git a/net/tap.c b/net/tap.c
index f240028..8855c57 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -321,7 +321,7 @@ static NetClientInfo net_tap_info = {
     .cleanup = tap_cleanup,
 };
 
-static TAPState *net_tap_fd_init(VLANState *vlan,
+static TAPState *net_tap_fd_init(VLANClientState *peer,
                                  const char *model,
                                  const char *name,
                                  int fd,
@@ -330,7 +330,7 @@ static TAPState *net_tap_fd_init(VLANState *vlan,
     VLANClientState *nc;
     TAPState *s;
 
-    nc = qemu_new_net_client(&net_tap_info, vlan, NULL, model, name);
+    nc = qemu_new_net_client(&net_tap_info, NULL, peer, model, name);
 
     s = DO_UPCAST(TAPState, nc, nc);
 
@@ -583,7 +583,8 @@ static int net_tap_init(QemuOpts *opts, int *vnet_hdr)
     return fd;
 }
 
-int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan)
+int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
+                 VLANClientState *peer)
 {
     TAPState *s;
     int fd, vnet_hdr = 0;
diff --git a/net/tap.h b/net/tap.h
index 56c591f..c194684 100644
--- a/net/tap.h
+++ b/net/tap.h
@@ -32,7 +32,8 @@
 #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
 #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
 
-int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan);
+int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
+                 VLANClientState *peer);
 
 int tap_open(char *ifname, int ifname_size, int *vnet_hdr, int vnet_hdr_required);
 
diff --git a/net/vde.c b/net/vde.c
index ac48ab2..d998daf 100644
--- a/net/vde.c
+++ b/net/vde.c
@@ -75,7 +75,7 @@ static NetClientInfo net_vde_info = {
     .cleanup = vde_cleanup,
 };
 
-static int net_vde_init(VLANState *vlan, const char *model,
+static int net_vde_init(VLANClientState *peer, const char *model,
                         const char *name, const char *sock,
                         int port, const char *group, int mode)
 {
@@ -96,7 +96,7 @@ static int net_vde_init(VLANState *vlan, const char *model,
         return -1;
     }
 
-    nc = qemu_new_net_client(&net_vde_info, vlan, NULL, model, name);
+    nc = qemu_new_net_client(&net_vde_info, NULL, peer, model, name);
 
     snprintf(nc->info_str, sizeof(nc->info_str), "sock=%s,fd=%d",
              sock, vde_datafd(vde));
@@ -110,7 +110,8 @@ static int net_vde_init(VLANState *vlan, const char *model,
     return 0;
 }
 
-int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan)
+int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name,
+                 VLANClientState *peer)
 {
     const char *sock;
     const char *group;
@@ -122,7 +123,7 @@ int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan
     port = qemu_opt_get_number(opts, "port", 0);
     mode = qemu_opt_get_number(opts, "mode", 0700);
 
-    if (net_vde_init(vlan, "vde", name, sock, port, group, mode) == -1) {
+    if (net_vde_init(peer, "vde", name, sock, port, group, mode) == -1) {
         return -1;
     }
 
diff --git a/net/vde.h b/net/vde.h
index 3e6ca3e..69c4e92 100644
--- a/net/vde.h
+++ b/net/vde.h
@@ -29,7 +29,8 @@
 
 #ifdef CONFIG_VDE
 
-int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name, VLANState *vlan);
+int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name,
+                 VLANClientState *peer);
 
 #endif /* CONFIG_VDE */
 
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 03/16] net: Look up 'vlan' net clients using hubs
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 01/16] net: Add a hub net client zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 02/16] net: Use hubs for the vlan feature zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 04/16] hub: Check that hubs are configured correctly zwu.kernel
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 net.c       |   28 +---------------------------
 net/hub.c   |   24 ++++++++++++++++++++++++
 net/hub.h   |    2 ++
 net/slirp.c |    5 +++--
 4 files changed, 30 insertions(+), 29 deletions(-)

diff --git a/net.c b/net.c
index 8c02559..d9c7eac 100644
--- a/net.c
+++ b/net.c
@@ -312,32 +312,6 @@ void qemu_del_vlan_client(VLANClientState *vc)
     qemu_free_vlan_client(vc);
 }
 
-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;
-    }
-
-    QTAILQ_FOREACH(vc, &vlan->clients, 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;
-}
-
 void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
 {
     VLANClientState *nc;
@@ -1223,7 +1197,7 @@ void net_host_device_remove(Monitor *mon, const QDict *qdict)
     int vlan_id = qdict_get_int(qdict, "vlan_id");
     const char *device = qdict_get_str(qdict, "device");
 
-    vc = qemu_find_vlan_client_by_name(mon, vlan_id, device);
+    vc = net_hub_find_client_by_name(vlan_id, device);
     if (!vc) {
         return;
     }
diff --git a/net/hub.c b/net/hub.c
index 28ff45c..56efc2c 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -160,6 +160,30 @@ VLANClientState *net_hub_add_port(unsigned int hub_id)
 }
 
 /**
+ * Find a specific client on a hub
+ */
+VLANClientState *net_hub_find_client_by_name(unsigned int hub_id,
+                                             const char *name)
+{
+    NetHub *hub;
+    NetHubPort *port;
+    VLANClientState *peer;
+
+    QLIST_FOREACH(hub, &hubs, next) {
+        if (hub->id == hub_id) {
+            QLIST_FOREACH(port, &hub->ports, next) {
+                peer = port->nc.peer;
+
+                if (peer && strcmp(peer->name, name) == 0) {
+                    return peer;
+                }
+            }
+        }
+    }
+    return NULL;
+}
+
+/**
  * Print hub configuration
  */
 void net_hub_info(Monitor *mon)
diff --git a/net/hub.h b/net/hub.h
index bf8798b..e149e04 100644
--- a/net/hub.h
+++ b/net/hub.h
@@ -18,6 +18,8 @@
 #include "qemu-common.h"
 
 VLANClientState *net_hub_add_port(unsigned int hub_id);
+VLANClientState *net_hub_find_client_by_name(unsigned int hub_id,
+                                             const char *name);
 void net_hub_info(Monitor *mon);
 int net_hub_id_for_client(VLANClientState *nc, unsigned int *id);
 
diff --git a/net/slirp.c b/net/slirp.c
index fa7c7fc..edb4621 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -29,6 +29,7 @@
 #include <sys/wait.h>
 #endif
 #include "net.h"
+#include "net/hub.h"
 #include "monitor.h"
 #include "qemu_socket.h"
 #include "slirp/libslirp.h"
@@ -283,7 +284,7 @@ static SlirpState *slirp_lookup(Monitor *mon, const char *vlan,
 
     if (vlan) {
         VLANClientState *nc;
-        nc = qemu_find_vlan_client_by_name(mon, strtol(vlan, NULL, 0), stack);
+        nc = net_hub_find_client_by_name(strtol(vlan, NULL, 0), stack);
         if (!nc) {
             return NULL;
         }
@@ -648,7 +649,7 @@ void do_info_usernet(Monitor *mon)
 
     QTAILQ_FOREACH(s, &slirp_stacks, entry) {
         monitor_printf(mon, "VLAN %d (%s):\n",
-                       s->nc.vlan ? s->nc.vlan->id : -1,
+                       -1, /* TODO */
                        s->nc.name);
         slirp_connection_info(s->slirp, mon);
     }
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 04/16] hub: Check that hubs are configured correctly
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (2 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 03/16] net: Look up 'vlan' net clients using hubs zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 05/16] net: Drop vlan argument to qemu_new_net_client() zwu.kernel
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <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>
---
 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 d9c7eac..88b9e1f 100644
--- a/net.c
+++ b/net.c
@@ -1337,7 +1337,6 @@ void net_cleanup(void)
 
 void net_check_clients(void)
 {
-    VLANState *vlan;
     VLANClientState *vc;
     int i;
 
@@ -1353,30 +1352,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_TYPE_NIC:
-                has_nic = 1;
-                break;
-            case NET_CLIENT_TYPE_USER:
-            case NET_CLIENT_TYPE_TAP:
-            case NET_CLIENT_TYPE_SOCKET:
-            case NET_CLIENT_TYPE_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 56efc2c..e4a3980 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -223,3 +223,48 @@ int net_hub_id_for_client(VLANClientState *nc, unsigned int *id)
     }
     return -ENOENT;
 }
+
+/**
+ * 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_TYPE_NIC:
+                has_nic = 1;
+                break;
+            case NET_CLIENT_TYPE_USER:
+            case NET_CLIENT_TYPE_TAP:
+            case NET_CLIENT_TYPE_SOCKET:
+            case NET_CLIENT_TYPE_VDE:
+                has_host_dev = 1;
+                break;
+            default:
+                break;
+            }
+        }
+        if (has_host_dev && !has_nic) {
+            fprintf(stderr, "Warning: vlan %u with no nics\n", hub->id);
+        }
+        if (has_nic && !has_host_dev) {
+            fprintf(stderr,
+                    "Warning: vlan %u is not connected to host network\n",
+                    hub->id);
+        }
+    }
+}
diff --git a/net/hub.h b/net/hub.h
index e149e04..10bf036 100644
--- a/net/hub.h
+++ b/net/hub.h
@@ -22,5 +22,6 @@ VLANClientState *net_hub_find_client_by_name(unsigned int hub_id,
                                              const char *name);
 void net_hub_info(Monitor *mon);
 int net_hub_id_for_client(VLANClientState *nc, unsigned int *id);
+void net_hub_check_clients(void);
 
 #endif /* NET_HUB_H */
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 05/16] net: Drop vlan argument to qemu_new_net_client()
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (3 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 04/16] hub: Check that hubs are configured correctly zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property zwu.kernel
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

Since hubs are now used to implement the 'vlan' feature and the vlan
argument is always NULL, remove the argument entirely and update all net
clients that use qemu_new_net_client().

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 net.c           |   27 ++++++++++-----------------
 net.h           |    1 -
 net/dump.c      |    2 +-
 net/hub.c       |    2 +-
 net/slirp.c     |    2 +-
 net/socket.c    |    4 ++--
 net/tap-win32.c |    2 +-
 net/tap.c       |    2 +-
 net/vde.c       |    2 +-
 9 files changed, 18 insertions(+), 26 deletions(-)

diff --git a/net.c b/net.c
index 88b9e1f..96252f9 100644
--- a/net.c
+++ b/net.c
@@ -194,7 +194,6 @@ static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
                                        void *opaque);
 
 VLANClientState *qemu_new_net_client(NetClientInfo *info,
-                                     VLANState *vlan,
                                      VLANClientState *peer,
                                      const char *model,
                                      const char *name)
@@ -213,22 +212,16 @@ VLANClientState *qemu_new_net_client(NetClientInfo *info,
         vc->name = assign_name(vc, model);
     }
 
-    if (vlan) {
-        assert(!peer);
-        vc->vlan = vlan;
-        QTAILQ_INSERT_TAIL(&vc->vlan->clients, vc, next);
-    } else {
-        if (peer) {
-            assert(!peer->peer);
-            vc->peer = peer;
-            peer->peer = vc;
-        }
-        QTAILQ_INSERT_TAIL(&non_vlan_clients, vc, next);
-
-        vc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
-                                            qemu_deliver_packet_iov,
-                                            vc);
+    if (peer) {
+        assert(!peer->peer);
+        vc->peer = peer;
+        peer->peer = vc;
     }
+    QTAILQ_INSERT_TAIL(&non_vlan_clients, vc, next);
+
+    vc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
+                                        qemu_deliver_packet_iov,
+                                        vc);
 
     return vc;
 }
@@ -245,7 +238,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
     assert(info->type == NET_CLIENT_TYPE_NIC);
     assert(info->size >= sizeof(NICState));
 
-    nc = qemu_new_net_client(info, conf->vlan, conf->peer, model, name);
+    nc = qemu_new_net_client(info, conf->peer, model, name);
 
     nic = DO_UPCAST(NICState, nc, nc);
     nic->conf = conf;
diff --git a/net.h b/net.h
index 50c55ad..d3d6e4c 100644
--- a/net.h
+++ b/net.h
@@ -92,7 +92,6 @@ struct VLANState {
 VLANState *qemu_find_vlan(int id, int allocate);
 VLANClientState *qemu_find_netdev(const char *id);
 VLANClientState *qemu_new_net_client(NetClientInfo *info,
-                                     VLANState *vlan,
                                      VLANClientState *peer,
                                      const char *model,
                                      const char *name);
diff --git a/net/dump.c b/net/dump.c
index 37cec3c..621f4e7 100644
--- a/net/dump.c
+++ b/net/dump.c
@@ -129,7 +129,7 @@ static int net_dump_init(VLANClientState *peer, const char *device,
         return -1;
     }
 
-    nc = qemu_new_net_client(&net_dump_info, NULL, peer, device, name);
+    nc = qemu_new_net_client(&net_dump_info, peer, device, name);
 
     snprintf(nc->info_str, sizeof(nc->info_str),
              "dump to %s (len=%d)", filename, len);
diff --git a/net/hub.c b/net/hub.c
index e4a3980..fe78a72 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -125,7 +125,7 @@ static NetHubPort *net_hub_port_new(NetHub *hub)
 
     snprintf(name, sizeof name, "hub%uport%u", hub->id, id);
 
-    nc = qemu_new_net_client(&net_hub_port_info, NULL, NULL, "hub", name);
+    nc = qemu_new_net_client(&net_hub_port_info, NULL, "hub", name);
     port = DO_UPCAST(NetHubPort, nc, nc);
     port->id = id;
     port->hub = hub;
diff --git a/net/slirp.c b/net/slirp.c
index edb4621..5ed7036 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -238,7 +238,7 @@ static int net_slirp_init(VLANClientState *peer, const char *model,
     }
 #endif
 
-    nc = qemu_new_net_client(&net_slirp_info, NULL, peer, model, name);
+    nc = qemu_new_net_client(&net_slirp_info, peer, model, name);
 
     snprintf(nc->info_str, sizeof(nc->info_str),
              "net=%s,restrict=%s", inet_ntoa(net),
diff --git a/net/socket.c b/net/socket.c
index ed28cbd..bf7a793 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -286,7 +286,7 @@ static NetSocketState *net_socket_fd_init_dgram(VLANClientState *peer,
         }
     }
 
-    nc = qemu_new_net_client(&net_dgram_socket_info, NULL, peer, model, name);
+    nc = qemu_new_net_client(&net_dgram_socket_info, peer, model, name);
 
     snprintf(nc->info_str, sizeof(nc->info_str),
             "socket: fd=%d (%s mcast=%s:%d)",
@@ -330,7 +330,7 @@ static NetSocketState *net_socket_fd_init_stream(VLANClientState *peer,
     VLANClientState *nc;
     NetSocketState *s;
 
-    nc = qemu_new_net_client(&net_socket_info, NULL, peer, model, name);
+    nc = qemu_new_net_client(&net_socket_info, peer, model, name);
 
     snprintf(nc->info_str, sizeof(nc->info_str), "socket: fd=%d", fd);
 
diff --git a/net/tap-win32.c b/net/tap-win32.c
index 2436c26..c1f90c7 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -685,7 +685,7 @@ static int tap_win32_init(VLANClientState *peer, const char *model,
         return -1;
     }
 
-    nc = qemu_new_net_client(&net_tap_win32_info, NULL, peer, model, name);
+    nc = qemu_new_net_client(&net_tap_win32_info, peer, model, name);
 
     s = DO_UPCAST(TAPState, nc, nc);
 
diff --git a/net/tap.c b/net/tap.c
index 8855c57..3a68d7e 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -330,7 +330,7 @@ static TAPState *net_tap_fd_init(VLANClientState *peer,
     VLANClientState *nc;
     TAPState *s;
 
-    nc = qemu_new_net_client(&net_tap_info, NULL, peer, model, name);
+    nc = qemu_new_net_client(&net_tap_info, peer, model, name);
 
     s = DO_UPCAST(TAPState, nc, nc);
 
diff --git a/net/vde.c b/net/vde.c
index d998daf..24d12d4 100644
--- a/net/vde.c
+++ b/net/vde.c
@@ -96,7 +96,7 @@ static int net_vde_init(VLANClientState *peer, const char *model,
         return -1;
     }
 
-    nc = qemu_new_net_client(&net_vde_info, NULL, peer, model, name);
+    nc = qemu_new_net_client(&net_vde_info, peer, model, name);
 
     snprintf(nc->info_str, sizeof(nc->info_str), "sock=%s,fd=%d",
              sock, vde_datafd(vde));
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (4 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 05/16] net: Drop vlan argument to qemu_new_net_client() zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-08 13:23   ` Stefan Hajnoczi
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 07/16] net: Remove vlan code from net.c zwu.kernel
                   ` (9 subsequent siblings)
  15 siblings, 1 reply; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

The vlan feature is implemented using hubs and no longer uses
special-purpose VLANState structs that are accessible as qdev
properties.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 hw/qdev-properties.c |   72 --------------------------------------------------
 hw/qdev.c            |    2 -
 hw/qdev.h            |    4 ---
 net.h                |    3 --
 4 files changed, 0 insertions(+), 81 deletions(-)

diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index b7b5597..d2e2afb 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -623,71 +623,6 @@ PropertyInfo qdev_prop_netdev = {
     .set   = set_netdev,
 };
 
-/* --- vlan --- */
-
-static int print_vlan(DeviceState *dev, Property *prop, char *dest, size_t len)
-{
-    VLANState **ptr = qdev_get_prop_ptr(dev, prop);
-
-    if (*ptr) {
-        return snprintf(dest, len, "%d", (*ptr)->id);
-    } else {
-        return snprintf(dest, len, "<null>");
-    }
-}
-
-static void get_vlan(Object *obj, Visitor *v, void *opaque,
-                     const char *name, Error **errp)
-{
-    DeviceState *dev = DEVICE(obj);
-    Property *prop = opaque;
-    VLANState **ptr = qdev_get_prop_ptr(dev, prop);
-    int64_t id;
-
-    id = *ptr ? (*ptr)->id : -1;
-    visit_type_int(v, &id, name, errp);
-}
-
-static void set_vlan(Object *obj, Visitor *v, void *opaque,
-                     const char *name, Error **errp)
-{
-    DeviceState *dev = DEVICE(obj);
-    Property *prop = opaque;
-    VLANState **ptr = qdev_get_prop_ptr(dev, prop);
-    Error *local_err = NULL;
-    int64_t id;
-    VLANState *vlan;
-
-    if (dev->state != DEV_STATE_CREATED) {
-        error_set(errp, QERR_PERMISSION_DENIED);
-        return;
-    }
-
-    visit_type_int(v, &id, name, &local_err);
-    if (local_err) {
-        error_propagate(errp, local_err);
-        return;
-    }
-    if (id == -1) {
-        *ptr = NULL;
-        return;
-    }
-    vlan = qemu_find_vlan(id, 1);
-    if (!vlan) {
-        error_set(errp, QERR_INVALID_PARAMETER_VALUE,
-                  name, prop->info->name);
-        return;
-    }
-    *ptr = vlan;
-}
-
-PropertyInfo qdev_prop_vlan = {
-    .name  = "vlan",
-    .print = print_vlan,
-    .get   = get_vlan,
-    .set   = set_vlan,
-};
-
 /* --- pointer --- */
 
 /* Not a proper property, just for dirty hacks.  TODO Remove it!  */
@@ -1094,13 +1029,6 @@ void qdev_prop_set_netdev(DeviceState *dev, const char *name, VLANClientState *v
     assert_no_error(errp);
 }
 
-void qdev_prop_set_vlan(DeviceState *dev, const char *name, VLANState *value)
-{
-    Error *errp = NULL;
-    object_property_set_int(OBJECT(dev), value ? value->id : -1, name, &errp);
-    assert_no_error(errp);
-}
-
 void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value)
 {
     Error *errp = NULL;
diff --git a/hw/qdev.c b/hw/qdev.c
index 6a8f6bd..49dd303 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -316,8 +316,6 @@ void qdev_connect_gpio_out(DeviceState * dev, int n, qemu_irq pin)
 void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd)
 {
     qdev_prop_set_macaddr(dev, "mac", nd->macaddr.a);
-    if (nd->vlan)
-        qdev_prop_set_vlan(dev, "vlan", nd->vlan);
     if (nd->netdev)
         qdev_prop_set_netdev(dev, "netdev", nd->netdev);
     if (nd->nvectors != DEV_NVECTORS_UNSPECIFIED &&
diff --git a/hw/qdev.h b/hw/qdev.h
index 4e90119..0a50a40 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -222,7 +222,6 @@ extern PropertyInfo qdev_prop_macaddr;
 extern PropertyInfo qdev_prop_losttickpolicy;
 extern PropertyInfo qdev_prop_drive;
 extern PropertyInfo qdev_prop_netdev;
-extern PropertyInfo qdev_prop_vlan;
 extern PropertyInfo qdev_prop_pci_devfn;
 extern PropertyInfo qdev_prop_blocksize;
 
@@ -277,8 +276,6 @@ extern PropertyInfo qdev_prop_blocksize;
     DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
 #define DEFINE_PROP_NETDEV(_n, _s, _f)             \
     DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, VLANClientState*)
-#define DEFINE_PROP_VLAN(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_vlan, VLANState*)
 #define DEFINE_PROP_DRIVE(_n, _s, _f) \
     DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *)
 #define DEFINE_PROP_MACADDR(_n, _s, _f)         \
@@ -305,7 +302,6 @@ void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t value);
 void qdev_prop_set_string(DeviceState *dev, const char *name, char *value);
 void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *value);
 void qdev_prop_set_netdev(DeviceState *dev, const char *name, VLANClientState *value);
-void qdev_prop_set_vlan(DeviceState *dev, const char *name, VLANState *value);
 int qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value) QEMU_WARN_UNUSED_RESULT;
 void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, BlockDriverState *value);
 void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value);
diff --git a/net.h b/net.h
index d3d6e4c..7d18b10 100644
--- a/net.h
+++ b/net.h
@@ -16,14 +16,12 @@ struct MACAddr {
 
 typedef struct NICConf {
     MACAddr macaddr;
-    VLANState *vlan;
     VLANClientState *peer;
     int32_t bootindex;
 } NICConf;
 
 #define DEFINE_NIC_PROPERTIES(_state, _conf)                            \
     DEFINE_PROP_MACADDR("mac",   _state, _conf.macaddr),                \
-    DEFINE_PROP_VLAN("vlan",     _state, _conf.vlan),                   \
     DEFINE_PROP_NETDEV("netdev", _state, _conf.peer),                   \
     DEFINE_PROP_INT32("bootindex", _state, _conf.bootindex, -1)
 
@@ -134,7 +132,6 @@ struct NICInfo {
     char *model;
     char *name;
     char *devaddr;
-    VLANState *vlan;
     VLANClientState *netdev;
     int used;         /* is this slot in nd_table[] being used? */
     int instantiated; /* does this NICInfo correspond to an instantiated NIC? */
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 07/16] net: Remove vlan code from net.c
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (5 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 08/16] net: Remove VLANState zwu.kernel
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

The vlan implementation in net.c has been replaced by hubs so we can
remove the code.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 hw/xen_nic.c |    1 -
 net.c        |  108 ----------------------------------------------------------
 net.h        |    1 -
 3 files changed, 0 insertions(+), 110 deletions(-)

diff --git a/hw/xen_nic.c b/hw/xen_nic.c
index 9a59bda..85526fe 100644
--- a/hw/xen_nic.c
+++ b/hw/xen_nic.c
@@ -328,7 +328,6 @@ static int net_init(struct XenDevice *xendev)
         return -1;
     }
 
-    netdev->conf.vlan = qemu_find_vlan(netdev->xendev.dev, 1);
     netdev->conf.peer = NULL;
 
     netdev->nic = qemu_new_nic(&net_xen_info, &netdev->conf,
diff --git a/net.c b/net.c
index 96252f9..abf5a3d 100644
--- a/net.c
+++ b/net.c
@@ -388,50 +388,6 @@ static ssize_t qemu_deliver_packet(VLANClientState *sender,
     return ret;
 }
 
-static ssize_t qemu_vlan_deliver_packet(VLANClientState *sender,
-                                        unsigned flags,
-                                        const uint8_t *buf,
-                                        size_t size,
-                                        void *opaque)
-{
-    VLANState *vlan = opaque;
-    VLANClientState *vc;
-    ssize_t ret = -1;
-
-    QTAILQ_FOREACH(vc, &vlan->clients, next) {
-        ssize_t len;
-
-        if (vc == sender) {
-            continue;
-        }
-
-        if (vc->link_down) {
-            ret = size;
-            continue;
-        }
-
-        if (vc->receive_disabled) {
-            ret = 0;
-            continue;
-        }
-
-        if (flags & QEMU_NET_PACKET_FLAG_RAW && vc->info->receive_raw) {
-            len = vc->info->receive_raw(vc, buf, size);
-        } else {
-            len = vc->info->receive(vc, buf, size);
-        }
-
-        if (len == 0) {
-            vc->receive_disabled = 1;
-        }
-
-        ret = (ret >= 0) ? ret : len;
-
-    }
-
-    return ret;
-}
-
 void qemu_purge_queued_packets(VLANClientState *vc)
 {
     NetQueue *queue;
@@ -538,42 +494,6 @@ static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
     }
 }
 
-static ssize_t qemu_vlan_deliver_packet_iov(VLANClientState *sender,
-                                            unsigned flags,
-                                            const struct iovec *iov,
-                                            int iovcnt,
-                                            void *opaque)
-{
-    VLANState *vlan = opaque;
-    VLANClientState *vc;
-    ssize_t ret = -1;
-
-    QTAILQ_FOREACH(vc, &vlan->clients, next) {
-        ssize_t len;
-
-        if (vc == sender) {
-            continue;
-        }
-
-        if (vc->link_down) {
-            ret = iov_size(iov, iovcnt);
-            continue;
-        }
-
-        assert(!(flags & QEMU_NET_PACKET_FLAG_RAW));
-
-        if (vc->info->receive_iov) {
-            len = vc->info->receive_iov(vc, iov, iovcnt);
-        } else {
-            len = vc_sendv_compat(vc, iov, iovcnt);
-        }
-
-        ret = (ret >= 0) ? ret : len;
-    }
-
-    return ret;
-}
-
 ssize_t qemu_sendv_packet_async(VLANClientState *sender,
                                 const struct iovec *iov, int iovcnt,
                                 NetPacketSent *sent_cb)
@@ -601,34 +521,6 @@ qemu_sendv_packet(VLANClientState *vc, const struct iovec *iov, int iovcnt)
     return qemu_sendv_packet_async(vc, iov, iovcnt, NULL);
 }
 
-/* find or alloc a new VLAN */
-VLANState *qemu_find_vlan(int id, int allocate)
-{
-    VLANState *vlan;
-
-    QTAILQ_FOREACH(vlan, &vlans, next) {
-        if (vlan->id == id) {
-            return vlan;
-        }
-    }
-
-    if (!allocate) {
-        return NULL;
-    }
-
-    vlan = g_malloc0(sizeof(VLANState));
-    vlan->id = id;
-    QTAILQ_INIT(&vlan->clients);
-
-    vlan->send_queue = qemu_new_net_queue(qemu_vlan_deliver_packet,
-                                          qemu_vlan_deliver_packet_iov,
-                                          vlan);
-
-    QTAILQ_INSERT_TAIL(&vlans, vlan, next);
-
-    return vlan;
-}
-
 VLANClientState *qemu_find_netdev(const char *id)
 {
     VLANClientState *vc;
diff --git a/net.h b/net.h
index 7d18b10..a4ac48d 100644
--- a/net.h
+++ b/net.h
@@ -87,7 +87,6 @@ struct VLANState {
     NetQueue *send_queue;
 };
 
-VLANState *qemu_find_vlan(int id, int allocate);
 VLANClientState *qemu_find_netdev(const char *id);
 VLANClientState *qemu_new_net_client(NetClientInfo *info,
                                      VLANClientState *peer,
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 08/16] net: Remove VLANState
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (6 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 07/16] net: Remove vlan code from net.c zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 09/16] net: Rename non_vlan_clients to net_clients zwu.kernel
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

VLANState is no longer used and can be removed.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 net.c         |  127 ++++++++++-----------------------------------------------
 net.h         |    8 ----
 net/socket.c  |    6 +-
 net/tap.c     |    6 +-
 net/tap.h     |    2 +-
 qemu-common.h |    1 -
 6 files changed, 29 insertions(+), 121 deletions(-)

diff --git a/net.c b/net.c
index abf5a3d..eb2ad06 100644
--- a/net.c
+++ b/net.c
@@ -44,7 +44,6 @@
 # define CONFIG_NET_BRIDGE
 #endif
 
-static QTAILQ_HEAD(, VLANState) vlans;
 static QTAILQ_HEAD(, VLANClientState) non_vlan_clients;
 
 int default_net = 1;
@@ -249,11 +248,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
 
 static void qemu_cleanup_vlan_client(VLANClientState *vc)
 {
-    if (vc->vlan) {
-        QTAILQ_REMOVE(&vc->vlan->clients, vc, next);
-    } else {
-        QTAILQ_REMOVE(&non_vlan_clients, vc, next);
-    }
+    QTAILQ_REMOVE(&non_vlan_clients, vc, next);
 
     if (vc->info->cleanup) {
         vc->info->cleanup(vc);
@@ -262,13 +257,11 @@ static void qemu_cleanup_vlan_client(VLANClientState *vc)
 
 static void qemu_free_vlan_client(VLANClientState *vc)
 {
-    if (!vc->vlan) {
-        if (vc->send_queue) {
-            qemu_del_net_queue(vc->send_queue);
-        }
-        if (vc->peer) {
-            vc->peer->peer = NULL;
-        }
+    if (vc->send_queue) {
+        qemu_del_net_queue(vc->send_queue);
+    }
+    if (vc->peer) {
+        vc->peer->peer = NULL;
     }
     g_free(vc->name);
     g_free(vc->model);
@@ -278,7 +271,7 @@ static void qemu_free_vlan_client(VLANClientState *vc)
 void qemu_del_vlan_client(VLANClientState *vc)
 {
     /* If there is a peer NIC, delete and cleanup client, but do not free. */
-    if (!vc->vlan && vc->peer && vc->peer->info->type == NET_CLIENT_TYPE_NIC) {
+    if (vc->peer && vc->peer->info->type == NET_CLIENT_TYPE_NIC) {
         NICState *nic = DO_UPCAST(NICState, nc, vc->peer);
         if (nic->peer_deleted) {
             return;
@@ -294,7 +287,7 @@ void qemu_del_vlan_client(VLANClientState *vc)
     }
 
     /* If this is a peer NIC and peer has already been deleted, free it now. */
-    if (!vc->vlan && vc->peer && vc->info->type == NET_CLIENT_TYPE_NIC) {
+    if (vc->peer && vc->info->type == NET_CLIENT_TYPE_NIC) {
         NICState *nic = DO_UPCAST(NICState, nc, vc);
         if (nic->peer_deleted) {
             qemu_free_vlan_client(vc->peer);
@@ -308,52 +301,25 @@ void qemu_del_vlan_client(VLANClientState *vc)
 void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
 {
     VLANClientState *nc;
-    VLANState *vlan;
 
     QTAILQ_FOREACH(nc, &non_vlan_clients, next) {
         if (nc->info->type == NET_CLIENT_TYPE_NIC) {
             func(DO_UPCAST(NICState, nc, nc), opaque);
         }
     }
-
-    QTAILQ_FOREACH(vlan, &vlans, next) {
-        QTAILQ_FOREACH(nc, &vlan->clients, next) {
-            if (nc->info->type == NET_CLIENT_TYPE_NIC) {
-                func(DO_UPCAST(NICState, nc, nc), opaque);
-            }
-        }
-    }
 }
 
 int qemu_can_send_packet(VLANClientState *sender)
 {
-    VLANState *vlan = sender->vlan;
-    VLANClientState *vc;
-
-    if (sender->peer) {
-        if (sender->peer->receive_disabled) {
-            return 0;
-        } else if (sender->peer->info->can_receive &&
-                   !sender->peer->info->can_receive(sender->peer)) {
-            return 0;
-        } else {
-            return 1;
-        }
-    }
-
-    if (!sender->vlan) {
+    if (!sender->peer) {
         return 1;
     }
 
-    QTAILQ_FOREACH(vc, &vlan->clients, next) {
-        if (vc == sender) {
-            continue;
-        }
-
-        /* no can_receive() handler, they can always receive */
-        if (vc->info->can_receive && !vc->info->can_receive(vc)) {
-            return 0;
-        }
+    if (sender->peer->receive_disabled) {
+        return 0;
+    } else if (sender->peer->info->can_receive &&
+               !sender->peer->info->can_receive(sender->peer)) {
+        return 0;
     }
     return 1;
 }
@@ -390,34 +356,18 @@ static ssize_t qemu_deliver_packet(VLANClientState *sender,
 
 void qemu_purge_queued_packets(VLANClientState *vc)
 {
-    NetQueue *queue;
-
-    if (!vc->peer && !vc->vlan) {
+    if (!vc->peer) {
         return;
     }
 
-    if (vc->peer) {
-        queue = vc->peer->send_queue;
-    } else {
-        queue = vc->vlan->send_queue;
-    }
-
-    qemu_net_queue_purge(queue, vc);
+    qemu_net_queue_purge(vc->peer->send_queue, vc);
 }
 
 void qemu_flush_queued_packets(VLANClientState *vc)
 {
-    NetQueue *queue;
-
     vc->receive_disabled = 0;
 
-    if (vc->vlan) {
-        queue = vc->vlan->send_queue;
-    } else {
-        queue = vc->send_queue;
-    }
-
-    qemu_net_queue_flush(queue);
+    qemu_net_queue_flush(vc->send_queue);
 }
 
 static ssize_t qemu_send_packet_async_with_flags(VLANClientState *sender,
@@ -432,15 +382,11 @@ static ssize_t qemu_send_packet_async_with_flags(VLANClientState *sender,
     hex_dump(stdout, buf, size);
 #endif
 
-    if (sender->link_down || (!sender->peer && !sender->vlan)) {
+    if (sender->link_down || !sender->peer) {
         return size;
     }
 
-    if (sender->peer) {
-        queue = sender->peer->send_queue;
-    } else {
-        queue = sender->vlan->send_queue;
-    }
+    queue = sender->peer->send_queue;
 
     return qemu_net_queue_send(queue, sender, flags, buf, size, sent_cb);
 }
@@ -500,15 +446,11 @@ ssize_t qemu_sendv_packet_async(VLANClientState *sender,
 {
     NetQueue *queue;
 
-    if (sender->link_down || (!sender->peer && !sender->vlan)) {
+    if (sender->link_down || !sender->peer) {
         return iov_size(iov, iovcnt);
     }
 
-    if (sender->peer) {
-        queue = sender->peer->send_queue;
-    } else {
-        queue = sender->vlan->send_queue;
-    }
+    queue = sender->peer->send_queue;
 
     return qemu_net_queue_send_iov(queue, sender,
                                    QEMU_NET_PACKET_FLAG_NONE,
@@ -1134,18 +1076,9 @@ static void print_net_client(Monitor *mon, VLANClientState *vc)
 
 void do_info_network(Monitor *mon)
 {
-    VLANState *vlan;
     VLANClientState *vc, *peer;
     net_client_type type;
 
-    QTAILQ_FOREACH(vlan, &vlans, next) {
-        monitor_printf(mon, "VLAN %d devices:\n", vlan->id);
-
-        QTAILQ_FOREACH(vc, &vlan->clients, next) {
-            monitor_printf(mon, "  ");
-            print_net_client(mon, vc);
-        }
-    }
     monitor_printf(mon, "Devices not on any VLAN:\n");
     QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
         peer = vc->peer;
@@ -1164,16 +1097,8 @@ void do_info_network(Monitor *mon)
 
 void qmp_set_link(const char *name, bool up, Error **errp)
 {
-    VLANState *vlan;
     VLANClientState *vc = NULL;
 
-    QTAILQ_FOREACH(vlan, &vlans, next) {
-        QTAILQ_FOREACH(vc, &vlan->clients, next) {
-            if (strcmp(vc->name, name) == 0) {
-                goto done;
-            }
-        }
-    }
     QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
         if (!strcmp(vc->name, name)) {
             goto done;
@@ -1182,7 +1107,7 @@ void qmp_set_link(const char *name, bool up, Error **errp)
 done:
 
     if (!vc) {
-        error_set(errp, QERR_DEVICE_NOT_FOUND, name);
+        qerror_report(QERR_DEVICE_NOT_FOUND, name);
         return;
     }
 
@@ -1206,15 +1131,8 @@ done:
 
 void net_cleanup(void)
 {
-    VLANState *vlan;
     VLANClientState *vc, *next_vc;
 
-    QTAILQ_FOREACH(vlan, &vlans, next) {
-        QTAILQ_FOREACH_SAFE(vc, &vlan->clients, next, next_vc) {
-            qemu_del_vlan_client(vc);
-        }
-    }
-
     QTAILQ_FOREACH_SAFE(vc, &non_vlan_clients, next, next_vc) {
         qemu_del_vlan_client(vc);
     }
@@ -1286,7 +1204,6 @@ int net_init_clients(void)
 #endif
     }
 
-    QTAILQ_INIT(&vlans);
     QTAILQ_INIT(&non_vlan_clients);
 
     if (qemu_opts_foreach(qemu_find_opts("netdev"), net_init_netdev, NULL, 1) == -1)
diff --git a/net.h b/net.h
index a4ac48d..2482546 100644
--- a/net.h
+++ b/net.h
@@ -64,7 +64,6 @@ struct VLANClientState {
     NetClientInfo *info;
     int link_down;
     QTAILQ_ENTRY(VLANClientState) next;
-    struct VLANState *vlan;
     VLANClientState *peer;
     NetQueue *send_queue;
     char *model;
@@ -80,13 +79,6 @@ typedef struct NICState {
     bool peer_deleted;
 } NICState;
 
-struct VLANState {
-    int id;
-    QTAILQ_HEAD(, VLANClientState) clients;
-    QTAILQ_ENTRY(VLANState) next;
-    NetQueue *send_queue;
-};
-
 VLANClientState *qemu_find_netdev(const char *id);
 VLANClientState *qemu_new_net_client(NetClientInfo *info,
                                      VLANClientState *peer,
diff --git a/net/socket.c b/net/socket.c
index bf7a793..5676bd5 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -536,7 +536,7 @@ static int net_socket_mcast_init(VLANClientState *peer,
 
 }
 
-static int net_socket_udp_init(VLANState *vlan,
+static int net_socket_udp_init(NetClientState *peer,
                                  const char *model,
                                  const char *name,
                                  const char *rhost,
@@ -574,7 +574,7 @@ static int net_socket_udp_init(VLANState *vlan,
         return -1;
     }
 
-    s = net_socket_fd_init(vlan, model, name, fd, 0);
+    s = net_socket_fd_init(peer, model, name, fd, 0);
     if (!s) {
         return -1;
     }
@@ -680,7 +680,7 @@ int net_init_socket(QemuOpts *opts,
                 return -1;
         }
 
-        if (net_socket_udp_init(vlan, "udp", name, udp, localaddr) == -1) {
+        if (net_socket_udp_init(peer, "udp", name, udp, localaddr) == -1) {
             return -1;
         }
     } else {
diff --git a/net/tap.c b/net/tap.c
index 3a68d7e..7dbf643 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -513,7 +513,7 @@ static int net_bridge_run_helper(const char *helper, const char *bridge)
 }
 
 int net_init_bridge(QemuOpts *opts, Monitor *mon, const char *name,
-                    VLANState *vlan)
+                    NetClientState *peer)
 {
     TAPState *s;
     int fd, vnet_hdr;
@@ -535,7 +535,7 @@ int net_init_bridge(QemuOpts *opts, Monitor *mon, const char *name,
 
     vnet_hdr = tap_probe_vnet_hdr(fd);
 
-    s = net_tap_fd_init(vlan, "bridge", name, fd, vnet_hdr);
+    s = net_tap_fd_init(peer, "bridge", name, fd, vnet_hdr);
     if (!s) {
         close(fd);
         return -1;
@@ -651,7 +651,7 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
         model = "tap";
     }
 
-    s = net_tap_fd_init(vlan, model, name, fd, vnet_hdr);
+    s = net_tap_fd_init(peer, model, name, fd, vnet_hdr);
     if (!s) {
         close(fd);
         return -1;
diff --git a/net/tap.h b/net/tap.h
index c194684..8d949cd 100644
--- a/net/tap.h
+++ b/net/tap.h
@@ -59,6 +59,6 @@ struct vhost_net;
 struct vhost_net *tap_get_vhost_net(VLANClientState *vc);
 
 int net_init_bridge(QemuOpts *opts, Monitor *mon, const char *name,
-                    VLANState *vlan);
+                    NetClientState *peer);
 
 #endif /* QEMU_NET_TAP_H */
diff --git a/qemu-common.h b/qemu-common.h
index cccfb42..9443c7a 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -235,7 +235,6 @@ typedef struct TextConsole TextConsole;
 typedef TextConsole QEMUConsole;
 typedef struct CharDriverState CharDriverState;
 typedef struct MACAddr MACAddr;
-typedef struct VLANState VLANState;
 typedef struct VLANClientState VLANClientState;
 typedef struct i2c_bus i2c_bus;
 typedef struct ISABus ISABus;
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 09/16] net: Rename non_vlan_clients to net_clients
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (7 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 08/16] net: Remove VLANState zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 10/16] net: Rename VLANClientState to NetClientState zwu.kernel
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

There is no longer a distinction between vlan clients and non-vlan
clients in the net core.  The net core only knows about point-to-point
clients which are connected to a peer.  It's time to rename the global
list of net clients since it no longer refers to vlans at all.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 net.c |   20 ++++++++++----------
 1 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/net.c b/net.c
index eb2ad06..2ca4285 100644
--- a/net.c
+++ b/net.c
@@ -44,7 +44,7 @@
 # define CONFIG_NET_BRIDGE
 #endif
 
-static QTAILQ_HEAD(, VLANClientState) non_vlan_clients;
+static QTAILQ_HEAD(, VLANClientState) net_clients;
 
 int default_net = 1;
 
@@ -165,7 +165,7 @@ static char *assign_name(VLANClientState *vc1, const char *model)
     char buf[256];
     int id = 0;
 
-    QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
+    QTAILQ_FOREACH(vc, &net_clients, next) {
         if (vc == vc1) {
             continue;
         }
@@ -216,7 +216,7 @@ VLANClientState *qemu_new_net_client(NetClientInfo *info,
         vc->peer = peer;
         peer->peer = vc;
     }
-    QTAILQ_INSERT_TAIL(&non_vlan_clients, vc, next);
+    QTAILQ_INSERT_TAIL(&net_clients, vc, next);
 
     vc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
                                         qemu_deliver_packet_iov,
@@ -248,7 +248,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
 
 static void qemu_cleanup_vlan_client(VLANClientState *vc)
 {
-    QTAILQ_REMOVE(&non_vlan_clients, vc, next);
+    QTAILQ_REMOVE(&net_clients, vc, next);
 
     if (vc->info->cleanup) {
         vc->info->cleanup(vc);
@@ -302,7 +302,7 @@ void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
 {
     VLANClientState *nc;
 
-    QTAILQ_FOREACH(nc, &non_vlan_clients, next) {
+    QTAILQ_FOREACH(nc, &net_clients, next) {
         if (nc->info->type == NET_CLIENT_TYPE_NIC) {
             func(DO_UPCAST(NICState, nc, nc), opaque);
         }
@@ -467,7 +467,7 @@ VLANClientState *qemu_find_netdev(const char *id)
 {
     VLANClientState *vc;
 
-    QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
+    QTAILQ_FOREACH(vc, &net_clients, next) {
         if (vc->info->type == NET_CLIENT_TYPE_NIC)
             continue;
         if (!strcmp(vc->name, id)) {
@@ -1080,7 +1080,7 @@ void do_info_network(Monitor *mon)
     net_client_type type;
 
     monitor_printf(mon, "Devices not on any VLAN:\n");
-    QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
+    QTAILQ_FOREACH(vc, &net_clients, next) {
         peer = vc->peer;
         type = vc->info->type;
         if (!peer || type == NET_CLIENT_TYPE_NIC) {
@@ -1133,7 +1133,7 @@ void net_cleanup(void)
 {
     VLANClientState *vc, *next_vc;
 
-    QTAILQ_FOREACH_SAFE(vc, &non_vlan_clients, next, next_vc) {
+    QTAILQ_FOREACH_SAFE(vc, &net_clients, next, next_vc) {
         qemu_del_vlan_client(vc);
     }
 }
@@ -1157,7 +1157,7 @@ void net_check_clients(void)
 
     net_hub_check_clients();
 
-    QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
+    QTAILQ_FOREACH(vc, &net_clients, next) {
         if (!vc->peer) {
             fprintf(stderr, "Warning: %s %s has no peer\n",
                     vc->info->type == NET_CLIENT_TYPE_NIC ? "nic" : "netdev",
@@ -1204,7 +1204,7 @@ int net_init_clients(void)
 #endif
     }
 
-    QTAILQ_INIT(&non_vlan_clients);
+    QTAILQ_INIT(&net_clients);
 
     if (qemu_opts_foreach(qemu_find_opts("netdev"), net_init_netdev, NULL, 1) == -1)
         return -1;
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 10/16] net: Rename VLANClientState to NetClientState
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (8 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 09/16] net: Rename non_vlan_clients to net_clients zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 11/16] net: Rename vc local variables to nc zwu.kernel
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

The vlan feature is no longer part of net core.  Rename VLANClientState
to NetClientState because net clients are not explicitly associated with
a vlan at all, instead they have a peer net client to which they are
connected.

This patch is a mechanical search-and-replace except for a few
whitespace fixups where changing VLANClientState to NetClientState
misaligned whitespace.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 hw/cadence_gem.c        |    8 ++--
 hw/dp8393x.c            |    6 ++--
 hw/e1000.c              |    8 ++--
 hw/eepro100.c           |    6 ++--
 hw/etraxfs_eth.c        |    8 ++--
 hw/lan9118.c            |    8 ++--
 hw/lance.c              |    2 +-
 hw/mcf_fec.c            |    6 ++--
 hw/milkymist-minimac2.c |    6 ++--
 hw/mipsnet.c            |    6 ++--
 hw/musicpal.c           |    6 ++--
 hw/ne2000-isa.c         |    2 +-
 hw/ne2000.c             |    6 ++--
 hw/ne2000.h             |    4 +-
 hw/opencores_eth.c      |    8 ++--
 hw/pcnet-pci.c          |    2 +-
 hw/pcnet.c              |    6 ++--
 hw/pcnet.h              |    6 ++--
 hw/qdev-properties.c    |    6 ++--
 hw/qdev.h               |    4 +-
 hw/rtl8139.c            |    8 ++--
 hw/smc91c111.c          |    6 ++--
 hw/spapr_llan.c         |    4 +-
 hw/stellaris_enet.c     |    6 ++--
 hw/usb/dev-network.c    |    6 ++--
 hw/vhost_net.c          |    8 ++--
 hw/vhost_net.h          |    2 +-
 hw/virtio-net.c         |   10 +++---
 hw/xen_nic.c            |    4 +-
 hw/xgmac.c              |    6 ++--
 hw/xilinx_axienet.c     |    6 ++--
 hw/xilinx_ethlite.c     |    6 ++--
 net.c                   |   85 +++++++++++++++++++++++------------------------
 net.h                   |   60 ++++++++++++++++----------------
 net/dump.c              |   12 +++---
 net/dump.h              |    2 +-
 net/hub.c               |   22 ++++++------
 net/hub.h               |    8 ++--
 net/queue.c             |   16 ++++----
 net/queue.h             |   12 +++---
 net/slirp.c             |   14 ++++----
 net/slirp.h             |    2 +-
 net/socket.c            |   28 ++++++++--------
 net/socket.h            |    2 +-
 net/tap-win32.c         |   22 ++++++------
 net/tap.c               |   36 ++++++++++----------
 net/tap.h               |   18 +++++-----
 net/vde.c               |   12 +++---
 net/vde.h               |    2 +-
 qemu-common.h           |    2 +-
 50 files changed, 270 insertions(+), 271 deletions(-)

diff --git a/hw/cadence_gem.c b/hw/cadence_gem.c
index e2140ae..60ee1fd 100644
--- a/hw/cadence_gem.c
+++ b/hw/cadence_gem.c
@@ -405,7 +405,7 @@ static void phy_update_link(GemState *s)
     }
 }
 
-static int gem_can_receive(VLANClientState *nc)
+static int gem_can_receive(NetClientState *nc)
 {
     GemState *s;
 
@@ -602,7 +602,7 @@ static int gem_mac_address_filter(GemState *s, const uint8_t *packet)
  * gem_receive:
  * Fit a packet handed to us by QEMU into the receive descriptor ring.
  */
-static ssize_t gem_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t gem_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     unsigned    desc[2];
     target_phys_addr_t packet_desc_addr, last_desc_addr;
@@ -1146,7 +1146,7 @@ static const MemoryRegionOps gem_ops = {
     .endianness = DEVICE_LITTLE_ENDIAN,
 };
 
-static void gem_cleanup(VLANClientState *nc)
+static void gem_cleanup(NetClientState *nc)
 {
     GemState *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -1154,7 +1154,7 @@ static void gem_cleanup(VLANClientState *nc)
     s->nic = NULL;
 }
 
-static void gem_set_link(VLANClientState *nc)
+static void gem_set_link(NetClientState *nc)
 {
     DB_PRINT("\n");
     phy_update_link(DO_UPCAST(NICState, nc, nc)->opaque);
diff --git a/hw/dp8393x.c b/hw/dp8393x.c
index 017d074..86598b9 100644
--- a/hw/dp8393x.c
+++ b/hw/dp8393x.c
@@ -673,7 +673,7 @@ static const MemoryRegionOps dp8393x_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
-static int nic_can_receive(VLANClientState *nc)
+static int nic_can_receive(NetClientState *nc)
 {
     dp8393xState *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -722,7 +722,7 @@ static int receive_filter(dp8393xState *s, const uint8_t * buf, int size)
     return -1;
 }
 
-static ssize_t nic_receive(VLANClientState *nc, const uint8_t * buf, size_t size)
+static ssize_t nic_receive(NetClientState *nc, const uint8_t * buf, size_t size)
 {
     dp8393xState *s = DO_UPCAST(NICState, nc, nc)->opaque;
     uint16_t data[10];
@@ -858,7 +858,7 @@ static void nic_reset(void *opaque)
     dp8393x_update_irq(s);
 }
 
-static void nic_cleanup(VLANClientState *nc)
+static void nic_cleanup(NetClientState *nc)
 {
     dp8393xState *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/e1000.c b/hw/e1000.c
index 4573f13..8c7fd3b 100644
--- a/hw/e1000.c
+++ b/hw/e1000.c
@@ -720,7 +720,7 @@ receive_filter(E1000State *s, const uint8_t *buf, int size)
 }
 
 static void
-e1000_set_link_status(VLANClientState *nc)
+e1000_set_link_status(NetClientState *nc)
 {
     E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
     uint32_t old_status = s->mac_reg[STATUS];
@@ -754,7 +754,7 @@ static bool e1000_has_rxbufs(E1000State *s, size_t total_size)
 }
 
 static int
-e1000_can_receive(VLANClientState *nc)
+e1000_can_receive(NetClientState *nc)
 {
     E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -770,7 +770,7 @@ static uint64_t rx_desc_base(E1000State *s)
 }
 
 static ssize_t
-e1000_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+e1000_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
     struct e1000_rx_desc desc;
@@ -1185,7 +1185,7 @@ e1000_mmio_setup(E1000State *d)
 }
 
 static void
-e1000_cleanup(VLANClientState *nc)
+e1000_cleanup(NetClientState *nc)
 {
     E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/eepro100.c b/hw/eepro100.c
index 6279ae3..5725ccf 100644
--- a/hw/eepro100.c
+++ b/hw/eepro100.c
@@ -1609,7 +1609,7 @@ static const MemoryRegionOps eepro100_ops = {
     .endianness = DEVICE_LITTLE_ENDIAN,
 };
 
-static int nic_can_receive(VLANClientState *nc)
+static int nic_can_receive(NetClientState *nc)
 {
     EEPRO100State *s = DO_UPCAST(NICState, nc, nc)->opaque;
     TRACE(RXTX, logout("%p\n", s));
@@ -1619,7 +1619,7 @@ static int nic_can_receive(VLANClientState *nc)
 #endif
 }
 
-static ssize_t nic_receive(VLANClientState *nc, const uint8_t * buf, size_t size)
+static ssize_t nic_receive(NetClientState *nc, const uint8_t * buf, size_t size)
 {
     /* TODO:
      * - Magic packets should set bit 30 in power management driver register.
@@ -1824,7 +1824,7 @@ static const VMStateDescription vmstate_eepro100 = {
     }
 };
 
-static void nic_cleanup(VLANClientState *nc)
+static void nic_cleanup(NetClientState *nc)
 {
     EEPRO100State *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/etraxfs_eth.c b/hw/etraxfs_eth.c
index 16a0637..1ca5849 100644
--- a/hw/etraxfs_eth.c
+++ b/hw/etraxfs_eth.c
@@ -507,12 +507,12 @@ static int eth_match_groupaddr(struct fs_eth *eth, const unsigned char *sa)
 	return match;
 }
 
-static int eth_can_receive(VLANClientState *nc)
+static int eth_can_receive(NetClientState *nc)
 {
 	return 1;
 }
 
-static ssize_t eth_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t eth_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
 	unsigned char sa_bcast[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
 	struct fs_eth *eth = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -549,7 +549,7 @@ static int eth_tx_push(void *opaque, unsigned char *buf, int len, bool eop)
 	return len;
 }
 
-static void eth_set_link(VLANClientState *nc)
+static void eth_set_link(NetClientState *nc)
 {
 	struct fs_eth *eth = DO_UPCAST(NICState, nc, nc)->opaque;
 	D(printf("%s %d\n", __func__, nc->link_down));
@@ -566,7 +566,7 @@ static const MemoryRegionOps eth_ops = {
 	}
 };
 
-static void eth_cleanup(VLANClientState *nc)
+static void eth_cleanup(NetClientState *nc)
 {
 	struct fs_eth *eth = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/lan9118.c b/hw/lan9118.c
index 7b4fe87..6a37895 100644
--- a/hw/lan9118.c
+++ b/hw/lan9118.c
@@ -384,7 +384,7 @@ static void phy_update_link(lan9118_state *s)
     phy_update_irq(s);
 }
 
-static void lan9118_set_link(VLANClientState *nc)
+static void lan9118_set_link(NetClientState *nc)
 {
     phy_update_link(DO_UPCAST(NICState, nc, nc)->opaque);
 }
@@ -456,7 +456,7 @@ static void lan9118_reset(DeviceState *d)
     lan9118_reload_eeprom(s);
 }
 
-static int lan9118_can_receive(VLANClientState *nc)
+static int lan9118_can_receive(NetClientState *nc)
 {
     return 1;
 }
@@ -509,7 +509,7 @@ static int lan9118_filter(lan9118_state *s, const uint8_t *addr)
     }
 }
 
-static ssize_t lan9118_receive(VLANClientState *nc, const uint8_t *buf,
+static ssize_t lan9118_receive(NetClientState *nc, const uint8_t *buf,
                                size_t size)
 {
     lan9118_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -1302,7 +1302,7 @@ static const MemoryRegionOps lan9118_16bit_mem_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
-static void lan9118_cleanup(VLANClientState *nc)
+static void lan9118_cleanup(NetClientState *nc)
 {
     lan9118_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/lance.c b/hw/lance.c
index ce3d46c..1aedb19 100644
--- a/hw/lance.c
+++ b/hw/lance.c
@@ -85,7 +85,7 @@ static const MemoryRegionOps lance_mem_ops = {
     },
 };
 
-static void lance_cleanup(VLANClientState *nc)
+static void lance_cleanup(NetClientState *nc)
 {
     PCNetState *d = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/mcf_fec.c b/hw/mcf_fec.c
index ae37bef..3d87c78 100644
--- a/hw/mcf_fec.c
+++ b/hw/mcf_fec.c
@@ -351,13 +351,13 @@ static void mcf_fec_write(void *opaque, target_phys_addr_t addr,
     mcf_fec_update(s);
 }
 
-static int mcf_fec_can_receive(VLANClientState *nc)
+static int mcf_fec_can_receive(NetClientState *nc)
 {
     mcf_fec_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
     return s->rx_enabled;
 }
 
-static ssize_t mcf_fec_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t mcf_fec_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     mcf_fec_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
     mcf_fec_bd bd;
@@ -439,7 +439,7 @@ static const MemoryRegionOps mcf_fec_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
-static void mcf_fec_cleanup(VLANClientState *nc)
+static void mcf_fec_cleanup(NetClientState *nc)
 {
     mcf_fec_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/milkymist-minimac2.c b/hw/milkymist-minimac2.c
index 70bf336..0369894 100644
--- a/hw/milkymist-minimac2.c
+++ b/hw/milkymist-minimac2.c
@@ -278,7 +278,7 @@ static void update_rx_interrupt(MilkymistMinimac2State *s)
     }
 }
 
-static ssize_t minimac2_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t minimac2_rx(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     MilkymistMinimac2State *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -408,7 +408,7 @@ static const MemoryRegionOps minimac2_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
-static int minimac2_can_rx(VLANClientState *nc)
+static int minimac2_can_rx(NetClientState *nc)
 {
     MilkymistMinimac2State *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -422,7 +422,7 @@ static int minimac2_can_rx(VLANClientState *nc)
     return 0;
 }
 
-static void minimac2_cleanup(VLANClientState *nc)
+static void minimac2_cleanup(NetClientState *nc)
 {
     MilkymistMinimac2State *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/mipsnet.c b/hw/mipsnet.c
index 3107246..9cde90a 100644
--- a/hw/mipsnet.c
+++ b/hw/mipsnet.c
@@ -62,7 +62,7 @@ static int mipsnet_buffer_full(MIPSnetState *s)
     return 0;
 }
 
-static int mipsnet_can_receive(VLANClientState *nc)
+static int mipsnet_can_receive(NetClientState *nc)
 {
     MIPSnetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -71,7 +71,7 @@ static int mipsnet_can_receive(VLANClientState *nc)
     return !mipsnet_buffer_full(s);
 }
 
-static ssize_t mipsnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t mipsnet_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     MIPSnetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -209,7 +209,7 @@ static const VMStateDescription vmstate_mipsnet = {
     }
 };
 
-static void mipsnet_cleanup(VLANClientState *nc)
+static void mipsnet_cleanup(NetClientState *nc)
 {
     MIPSnetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/musicpal.c b/hw/musicpal.c
index c9f845a..29882f0 100644
--- a/hw/musicpal.c
+++ b/hw/musicpal.c
@@ -182,12 +182,12 @@ static void eth_rx_desc_get(uint32_t addr, mv88w8618_rx_desc *desc)
     le32_to_cpus(&desc->next);
 }
 
-static int eth_can_receive(VLANClientState *nc)
+static int eth_can_receive(NetClientState *nc)
 {
     return 1;
 }
 
-static ssize_t eth_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t eth_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     mv88w8618_eth_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
     uint32_t desc_addr;
@@ -366,7 +366,7 @@ static const MemoryRegionOps mv88w8618_eth_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
-static void eth_cleanup(VLANClientState *nc)
+static void eth_cleanup(NetClientState *nc)
 {
     mv88w8618_eth_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/ne2000-isa.c b/hw/ne2000-isa.c
index a4a783a..ff4b885 100644
--- a/hw/ne2000-isa.c
+++ b/hw/ne2000-isa.c
@@ -36,7 +36,7 @@ typedef struct ISANE2000State {
     NE2000State ne2000;
 } ISANE2000State;
 
-static void isa_ne2000_cleanup(VLANClientState *nc)
+static void isa_ne2000_cleanup(NetClientState *nc)
 {
     NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/ne2000.c b/hw/ne2000.c
index d02e60c..2339725 100644
--- a/hw/ne2000.c
+++ b/hw/ne2000.c
@@ -165,7 +165,7 @@ static int ne2000_buffer_full(NE2000State *s)
     return 0;
 }
 
-int ne2000_can_receive(VLANClientState *nc)
+int ne2000_can_receive(NetClientState *nc)
 {
     NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -176,7 +176,7 @@ int ne2000_can_receive(VLANClientState *nc)
 
 #define MIN_BUF_SIZE 60
 
-ssize_t ne2000_receive(VLANClientState *nc, const uint8_t *buf, size_t size_)
+ssize_t ne2000_receive(NetClientState *nc, const uint8_t *buf, size_t size_)
 {
     NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
     int size = size_;
@@ -703,7 +703,7 @@ void ne2000_setup_io(NE2000State *s, unsigned size)
     memory_region_init_io(&s->io, &ne2000_ops, s, "ne2000", size);
 }
 
-static void ne2000_cleanup(VLANClientState *nc)
+static void ne2000_cleanup(NetClientState *nc)
 {
     NE2000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/ne2000.h b/hw/ne2000.h
index 5fee052..6c196a2 100644
--- a/hw/ne2000.h
+++ b/hw/ne2000.h
@@ -31,5 +31,5 @@ typedef struct NE2000State {
 void ne2000_setup_io(NE2000State *s, unsigned size);
 extern const VMStateDescription vmstate_ne2000;
 void ne2000_reset(NE2000State *s);
-int ne2000_can_receive(VLANClientState *vc);
-ssize_t ne2000_receive(VLANClientState *vc, const uint8_t *buf, size_t size_);
+int ne2000_can_receive(NetClientState *vc);
+ssize_t ne2000_receive(NetClientState *vc, const uint8_t *buf, size_t size_);
diff --git a/hw/opencores_eth.c b/hw/opencores_eth.c
index 350f731..990ec37 100644
--- a/hw/opencores_eth.c
+++ b/hw/opencores_eth.c
@@ -311,7 +311,7 @@ static void open_eth_int_source_write(OpenEthState *s,
             s->regs[INT_SOURCE] & s->regs[INT_MASK]);
 }
 
-static void open_eth_set_link_status(VLANClientState *nc)
+static void open_eth_set_link_status(NetClientState *nc)
 {
     OpenEthState *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -342,7 +342,7 @@ static void open_eth_reset(void *opaque)
     open_eth_set_link_status(&s->nic->nc);
 }
 
-static int open_eth_can_receive(VLANClientState *nc)
+static int open_eth_can_receive(NetClientState *nc)
 {
     OpenEthState *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -351,7 +351,7 @@ static int open_eth_can_receive(VLANClientState *nc)
         (rx_desc(s)->len_flags & RXD_E);
 }
 
-static ssize_t open_eth_receive(VLANClientState *nc,
+static ssize_t open_eth_receive(NetClientState *nc,
         const uint8_t *buf, size_t size)
 {
     OpenEthState *s = DO_UPCAST(NICState, nc, nc)->opaque;
@@ -462,7 +462,7 @@ static ssize_t open_eth_receive(VLANClientState *nc,
     return size;
 }
 
-static void open_eth_cleanup(VLANClientState *nc)
+static void open_eth_cleanup(NetClientState *nc)
 {
 }
 
diff --git a/hw/pcnet-pci.c b/hw/pcnet-pci.c
index 34d73aa..8c82667 100644
--- a/hw/pcnet-pci.c
+++ b/hw/pcnet-pci.c
@@ -264,7 +264,7 @@ static void pci_physical_memory_read(void *dma_opaque, target_phys_addr_t addr,
     pci_dma_read(dma_opaque, addr, buf, len);
 }
 
-static void pci_pcnet_cleanup(VLANClientState *nc)
+static void pci_pcnet_cleanup(NetClientState *nc)
 {
     PCNetState *d = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/pcnet.c b/hw/pcnet.c
index d769b08..40820b3 100644
--- a/hw/pcnet.c
+++ b/hw/pcnet.c
@@ -1004,7 +1004,7 @@ static int pcnet_tdte_poll(PCNetState *s)
     return !!(CSR_CXST(s) & 0x8000);
 }
 
-int pcnet_can_receive(VLANClientState *nc)
+int pcnet_can_receive(NetClientState *nc)
 {
     PCNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
     if (CSR_STOP(s) || CSR_SPND(s))
@@ -1015,7 +1015,7 @@ int pcnet_can_receive(VLANClientState *nc)
 
 #define MIN_BUF_SIZE 60
 
-ssize_t pcnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size_)
+ssize_t pcnet_receive(NetClientState *nc, const uint8_t *buf, size_t size_)
 {
     PCNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
     int is_padr = 0, is_bcast = 0, is_ladr = 0;
@@ -1197,7 +1197,7 @@ ssize_t pcnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size_)
     return size_;
 }
 
-void pcnet_set_link_status(VLANClientState *nc)
+void pcnet_set_link_status(NetClientState *nc)
 {
     PCNetState *d = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/pcnet.h b/hw/pcnet.h
index 803a2cc..d0af54a 100644
--- a/hw/pcnet.h
+++ b/hw/pcnet.h
@@ -57,9 +57,9 @@ uint32_t pcnet_ioport_readw(void *opaque, uint32_t addr);
 void pcnet_ioport_writel(void *opaque, uint32_t addr, uint32_t val);
 uint32_t pcnet_ioport_readl(void *opaque, uint32_t addr);
 uint32_t pcnet_bcr_readw(PCNetState *s, uint32_t rap);
-int pcnet_can_receive(VLANClientState *nc);
-ssize_t pcnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size_);
-void pcnet_set_link_status(VLANClientState *nc);
+int pcnet_can_receive(NetClientState *nc);
+ssize_t pcnet_receive(NetClientState *nc, const uint8_t *buf, size_t size_);
+void pcnet_set_link_status(NetClientState *nc);
 void pcnet_common_cleanup(PCNetState *d);
 int pcnet_common_init(DeviceState *dev, PCNetState *s, NetClientInfo *info);
 extern const VMStateDescription vmstate_pcnet;
diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index d2e2afb..1c13bda 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -586,7 +586,7 @@ PropertyInfo qdev_prop_chr = {
 
 static int parse_netdev(DeviceState *dev, const char *str, void **ptr)
 {
-    VLANClientState *netdev = qemu_find_netdev(str);
+    NetClientState *netdev = qemu_find_netdev(str);
 
     if (netdev == NULL) {
         return -ENOENT;
@@ -600,7 +600,7 @@ static int parse_netdev(DeviceState *dev, const char *str, void **ptr)
 
 static const char *print_netdev(void *ptr)
 {
-    VLANClientState *netdev = ptr;
+    NetClientState *netdev = ptr;
 
     return netdev->name ? netdev->name : "";
 }
@@ -1020,7 +1020,7 @@ void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *valu
     assert_no_error(errp);
 }
 
-void qdev_prop_set_netdev(DeviceState *dev, const char *name, VLANClientState *value)
+void qdev_prop_set_netdev(DeviceState *dev, const char *name, NetClientState *value)
 {
     Error *errp = NULL;
     assert(!value || value->name);
diff --git a/hw/qdev.h b/hw/qdev.h
index 0a50a40..edbf8fa 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -275,7 +275,7 @@ extern PropertyInfo qdev_prop_blocksize;
 #define DEFINE_PROP_STRING(_n, _s, _f)             \
     DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
 #define DEFINE_PROP_NETDEV(_n, _s, _f)             \
-    DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, VLANClientState*)
+    DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NetClientState*)
 #define DEFINE_PROP_DRIVE(_n, _s, _f) \
     DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockDriverState *)
 #define DEFINE_PROP_MACADDR(_n, _s, _f)         \
@@ -301,7 +301,7 @@ void qdev_prop_set_int32(DeviceState *dev, const char *name, int32_t value);
 void qdev_prop_set_uint64(DeviceState *dev, const char *name, uint64_t value);
 void qdev_prop_set_string(DeviceState *dev, const char *name, char *value);
 void qdev_prop_set_chr(DeviceState *dev, const char *name, CharDriverState *value);
-void qdev_prop_set_netdev(DeviceState *dev, const char *name, VLANClientState *value);
+void qdev_prop_set_netdev(DeviceState *dev, const char *name, NetClientState *value);
 int qdev_prop_set_drive(DeviceState *dev, const char *name, BlockDriverState *value) QEMU_WARN_UNUSED_RESULT;
 void qdev_prop_set_drive_nofail(DeviceState *dev, const char *name, BlockDriverState *value);
 void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value);
diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index eb22d04..1e4f4eb 100644
--- a/hw/rtl8139.c
+++ b/hw/rtl8139.c
@@ -781,7 +781,7 @@ static inline dma_addr_t rtl8139_addr64(uint32_t low, uint32_t high)
 #endif
 }
 
-static int rtl8139_can_receive(VLANClientState *nc)
+static int rtl8139_can_receive(NetClientState *nc)
 {
     RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque;
     int avail;
@@ -806,7 +806,7 @@ static int rtl8139_can_receive(VLANClientState *nc)
     }
 }
 
-static ssize_t rtl8139_do_receive(VLANClientState *nc, const uint8_t *buf, size_t size_, int do_interrupt)
+static ssize_t rtl8139_do_receive(NetClientState *nc, const uint8_t *buf, size_t size_, int do_interrupt)
 {
     RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque;
     /* size is the length of the buffer passed to the driver */
@@ -1185,7 +1185,7 @@ static ssize_t rtl8139_do_receive(VLANClientState *nc, const uint8_t *buf, size_
     return size_;
 }
 
-static ssize_t rtl8139_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t rtl8139_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     return rtl8139_do_receive(nc, buf, size, 1);
 }
@@ -3429,7 +3429,7 @@ static void rtl8139_timer(void *opaque)
     rtl8139_set_next_tctr_time(s, qemu_get_clock_ns(vm_clock));
 }
 
-static void rtl8139_cleanup(VLANClientState *nc)
+static void rtl8139_cleanup(NetClientState *nc)
 {
     RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/smc91c111.c b/hw/smc91c111.c
index 1a5213f..aaa2c60 100644
--- a/hw/smc91c111.c
+++ b/hw/smc91c111.c
@@ -628,7 +628,7 @@ static uint32_t smc91c111_readl(void *opaque, target_phys_addr_t offset)
     return val;
 }
 
-static int smc91c111_can_receive(VLANClientState *nc)
+static int smc91c111_can_receive(NetClientState *nc)
 {
     smc91c111_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -639,7 +639,7 @@ static int smc91c111_can_receive(VLANClientState *nc)
     return 1;
 }
 
-static ssize_t smc91c111_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t smc91c111_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     smc91c111_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
     int status;
@@ -728,7 +728,7 @@ static const MemoryRegionOps smc91c111_mem_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
-static void smc91c111_cleanup(VLANClientState *nc)
+static void smc91c111_cleanup(NetClientState *nc)
 {
     smc91c111_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/spapr_llan.c b/hw/spapr_llan.c
index 8313043..76fa0b5 100644
--- a/hw/spapr_llan.c
+++ b/hw/spapr_llan.c
@@ -83,14 +83,14 @@ typedef struct VIOsPAPRVLANDevice {
     target_ulong rxq_ptr;
 } VIOsPAPRVLANDevice;
 
-static int spapr_vlan_can_receive(VLANClientState *nc)
+static int spapr_vlan_can_receive(NetClientState *nc)
 {
     VIOsPAPRVLANDevice *dev = DO_UPCAST(NICState, nc, nc)->opaque;
 
     return (dev->isopen && dev->rx_bufs > 0);
 }
 
-static ssize_t spapr_vlan_receive(VLANClientState *nc, const uint8_t *buf,
+static ssize_t spapr_vlan_receive(NetClientState *nc, const uint8_t *buf,
                                   size_t size)
 {
     VIOsPAPRDevice *sdev = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/stellaris_enet.c b/hw/stellaris_enet.c
index fbe99cb..fcc6cd0 100644
--- a/hw/stellaris_enet.c
+++ b/hw/stellaris_enet.c
@@ -78,7 +78,7 @@ static void stellaris_enet_update(stellaris_enet_state *s)
 }
 
 /* TODO: Implement MAC address filtering.  */
-static ssize_t stellaris_enet_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t stellaris_enet_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     stellaris_enet_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
     int n;
@@ -120,7 +120,7 @@ static ssize_t stellaris_enet_receive(VLANClientState *nc, const uint8_t *buf, s
     return size;
 }
 
-static int stellaris_enet_can_receive(VLANClientState *nc)
+static int stellaris_enet_can_receive(NetClientState *nc)
 {
     stellaris_enet_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -381,7 +381,7 @@ static int stellaris_enet_load(QEMUFile *f, void *opaque, int version_id)
     return 0;
 }
 
-static void stellaris_enet_cleanup(VLANClientState *nc)
+static void stellaris_enet_cleanup(NetClientState *nc)
 {
     stellaris_enet_state *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c
index b238a09..21e0069 100644
--- a/hw/usb/dev-network.c
+++ b/hw/usb/dev-network.c
@@ -1247,7 +1247,7 @@ static int usb_net_handle_data(USBDevice *dev, USBPacket *p)
     return ret;
 }
 
-static ssize_t usbnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t usbnet_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
     struct rndis_packet_msg_type *msg;
@@ -1285,7 +1285,7 @@ static ssize_t usbnet_receive(VLANClientState *nc, const uint8_t *buf, size_t si
     return size;
 }
 
-static int usbnet_can_receive(VLANClientState *nc)
+static int usbnet_can_receive(NetClientState *nc)
 {
     USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -1296,7 +1296,7 @@ static int usbnet_can_receive(VLANClientState *nc)
     return !s->in_len;
 }
 
-static void usbnet_cleanup(VLANClientState *nc)
+static void usbnet_cleanup(NetClientState *nc)
 {
     USBNetState *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/vhost_net.c b/hw/vhost_net.c
index f672e9d..c3e6546 100644
--- a/hw/vhost_net.c
+++ b/hw/vhost_net.c
@@ -42,7 +42,7 @@ struct vhost_net {
     struct vhost_dev dev;
     struct vhost_virtqueue vqs[2];
     int backend;
-    VLANClientState *vc;
+    NetClientState *vc;
 };
 
 unsigned vhost_net_get_features(struct vhost_net *net, unsigned features)
@@ -80,7 +80,7 @@ void vhost_net_ack_features(struct vhost_net *net, unsigned features)
     }
 }
 
-static int vhost_net_get_fd(VLANClientState *backend)
+static int vhost_net_get_fd(NetClientState *backend)
 {
     switch (backend->info->type) {
     case NET_CLIENT_TYPE_TAP:
@@ -91,7 +91,7 @@ static int vhost_net_get_fd(VLANClientState *backend)
     }
 }
 
-struct vhost_net *vhost_net_init(VLANClientState *backend, int devfd,
+struct vhost_net *vhost_net_init(NetClientState *backend, int devfd,
                                  bool force)
 {
     int r;
@@ -214,7 +214,7 @@ void vhost_net_cleanup(struct vhost_net *net)
     g_free(net);
 }
 #else
-struct vhost_net *vhost_net_init(VLANClientState *backend, int devfd,
+struct vhost_net *vhost_net_init(NetClientState *backend, int devfd,
                                  bool force)
 {
     error_report("vhost-net support is not compiled in");
diff --git a/hw/vhost_net.h b/hw/vhost_net.h
index 91e40b1..a9db234 100644
--- a/hw/vhost_net.h
+++ b/hw/vhost_net.h
@@ -6,7 +6,7 @@
 struct vhost_net;
 typedef struct vhost_net VHostNetState;
 
-VHostNetState *vhost_net_init(VLANClientState *backend, int devfd, bool force);
+VHostNetState *vhost_net_init(NetClientState *backend, int devfd, bool force);
 
 bool vhost_net_query(VHostNetState *net, VirtIODevice *dev);
 int vhost_net_start(VHostNetState *net, VirtIODevice *dev);
diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index 3f190d4..a73c523 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -163,7 +163,7 @@ static void virtio_net_set_status(struct VirtIODevice *vdev, uint8_t status)
     }
 }
 
-static void virtio_net_set_link_status(VLANClientState *nc)
+static void virtio_net_set_link_status(NetClientState *nc)
 {
     VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
     uint16_t old_status = n->status;
@@ -453,7 +453,7 @@ static void virtio_net_handle_rx(VirtIODevice *vdev, VirtQueue *vq)
     qemu_notify_event();
 }
 
-static int virtio_net_can_receive(VLANClientState *nc)
+static int virtio_net_can_receive(NetClientState *nc)
 {
     VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
     if (!n->vdev.vm_running) {
@@ -593,7 +593,7 @@ static int receive_filter(VirtIONet *n, const uint8_t *buf, int size)
     return 0;
 }
 
-static ssize_t virtio_net_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t virtio_net_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
     struct virtio_net_hdr_mrg_rxbuf *mhdr = NULL;
@@ -690,7 +690,7 @@ static ssize_t virtio_net_receive(VLANClientState *nc, const uint8_t *buf, size_
 
 static int32_t virtio_net_flush_tx(VirtIONet *n, VirtQueue *vq);
 
-static void virtio_net_tx_complete(VLANClientState *nc, ssize_t len)
+static void virtio_net_tx_complete(NetClientState *nc, ssize_t len)
 {
     VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -980,7 +980,7 @@ static int virtio_net_load(QEMUFile *f, void *opaque, int version_id)
     return 0;
 }
 
-static void virtio_net_cleanup(VLANClientState *nc)
+static void virtio_net_cleanup(NetClientState *nc)
 {
     VirtIONet *n = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/hw/xen_nic.c b/hw/xen_nic.c
index 85526fe..6391a04 100644
--- a/hw/xen_nic.c
+++ b/hw/xen_nic.c
@@ -236,7 +236,7 @@ static void net_rx_response(struct XenNetDev *netdev,
 
 #define NET_IP_ALIGN 2
 
-static int net_rx_ok(VLANClientState *nc)
+static int net_rx_ok(NetClientState *nc)
 {
     struct XenNetDev *netdev = DO_UPCAST(NICState, nc, nc)->opaque;
     RING_IDX rc, rp;
@@ -257,7 +257,7 @@ static int net_rx_ok(VLANClientState *nc)
     return 1;
 }
 
-static ssize_t net_rx_packet(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t net_rx_packet(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     struct XenNetDev *netdev = DO_UPCAST(NICState, nc, nc)->opaque;
     netif_rx_request_t rxreq;
diff --git a/hw/xgmac.c b/hw/xgmac.c
index dd4bdc4..b2cae49 100644
--- a/hw/xgmac.c
+++ b/hw/xgmac.c
@@ -308,7 +308,7 @@ static const MemoryRegionOps enet_mem_ops = {
     .endianness = DEVICE_LITTLE_ENDIAN,
 };
 
-static int eth_can_rx(VLANClientState *nc)
+static int eth_can_rx(NetClientState *nc)
 {
     struct XgmacState *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -316,7 +316,7 @@ static int eth_can_rx(VLANClientState *nc)
     return s->regs[DMA_CONTROL] & DMA_CONTROL_SR;
 }
 
-static ssize_t eth_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     struct XgmacState *s = DO_UPCAST(NICState, nc, nc)->opaque;
     static const unsigned char sa_bcast[6] = {0xff, 0xff, 0xff,
@@ -364,7 +364,7 @@ out:
     return ret;
 }
 
-static void eth_cleanup(VLANClientState *nc)
+static void eth_cleanup(NetClientState *nc)
 {
     struct XgmacState *s = DO_UPCAST(NICState, nc, nc)->opaque;
     s->nic = NULL;
diff --git a/hw/xilinx_axienet.c b/hw/xilinx_axienet.c
index 7526273..512bf05 100644
--- a/hw/xilinx_axienet.c
+++ b/hw/xilinx_axienet.c
@@ -612,7 +612,7 @@ static const MemoryRegionOps enet_ops = {
     .endianness = DEVICE_LITTLE_ENDIAN,
 };
 
-static int eth_can_rx(VLANClientState *nc)
+static int eth_can_rx(NetClientState *nc)
 {
     struct XilinxAXIEnet *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
@@ -635,7 +635,7 @@ static int enet_match_addr(const uint8_t *buf, uint32_t f0, uint32_t f1)
     return match;
 }
 
-static ssize_t eth_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     struct XilinxAXIEnet *s = DO_UPCAST(NICState, nc, nc)->opaque;
     static const unsigned char sa_bcast[6] = {0xff, 0xff, 0xff,
@@ -780,7 +780,7 @@ static ssize_t eth_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
     return size;
 }
 
-static void eth_cleanup(VLANClientState *nc)
+static void eth_cleanup(NetClientState *nc)
 {
     /* FIXME.  */
     struct XilinxAXIEnet *s = DO_UPCAST(NICState, nc, nc)->opaque;
diff --git a/hw/xilinx_ethlite.c b/hw/xilinx_ethlite.c
index 857b33d..57cf453 100644
--- a/hw/xilinx_ethlite.c
+++ b/hw/xilinx_ethlite.c
@@ -160,7 +160,7 @@ static const MemoryRegionOps eth_ops = {
     }
 };
 
-static int eth_can_rx(VLANClientState *nc)
+static int eth_can_rx(NetClientState *nc)
 {
     struct xlx_ethlite *s = DO_UPCAST(NICState, nc, nc)->opaque;
     int r;
@@ -168,7 +168,7 @@ static int eth_can_rx(VLANClientState *nc)
     return r;
 }
 
-static ssize_t eth_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t eth_rx(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     struct xlx_ethlite *s = DO_UPCAST(NICState, nc, nc)->opaque;
     unsigned int rxbase = s->rxbuf * (0x800 / 4);
@@ -194,7 +194,7 @@ static ssize_t eth_rx(VLANClientState *nc, const uint8_t *buf, size_t size)
     return size;
 }
 
-static void eth_cleanup(VLANClientState *nc)
+static void eth_cleanup(NetClientState *nc)
 {
     struct xlx_ethlite *s = DO_UPCAST(NICState, nc, nc)->opaque;
 
diff --git a/net.c b/net.c
index 2ca4285..de18c76 100644
--- a/net.c
+++ b/net.c
@@ -44,7 +44,7 @@
 # define CONFIG_NET_BRIDGE
 #endif
 
-static QTAILQ_HEAD(, VLANClientState) net_clients;
+static QTAILQ_HEAD(, NetClientState) net_clients;
 
 int default_net = 1;
 
@@ -129,7 +129,7 @@ int parse_host_port(struct sockaddr_in *saddr, const char *str)
     return 0;
 }
 
-void qemu_format_nic_info_str(VLANClientState *vc, uint8_t macaddr[6])
+void qemu_format_nic_info_str(NetClientState *vc, uint8_t macaddr[6])
 {
     snprintf(vc->info_str, sizeof(vc->info_str),
              "model=%s,macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
@@ -159,9 +159,9 @@ void qemu_macaddr_default_if_unset(MACAddr *macaddr)
  * Only net clients created with the legacy -net option need this.  Naming is
  * mandatory for net clients created with -netdev.
  */
-static char *assign_name(VLANClientState *vc1, const char *model)
+static char *assign_name(NetClientState *vc1, const char *model)
 {
-    VLANClientState *vc;
+    NetClientState *vc;
     char buf[256];
     int id = 0;
 
@@ -181,25 +181,25 @@ static char *assign_name(VLANClientState *vc1, const char *model)
     return g_strdup(buf);
 }
 
-static ssize_t qemu_deliver_packet(VLANClientState *sender,
+static ssize_t qemu_deliver_packet(NetClientState *sender,
                                    unsigned flags,
                                    const uint8_t *data,
                                    size_t size,
                                    void *opaque);
-static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
+static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
                                        unsigned flags,
                                        const struct iovec *iov,
                                        int iovcnt,
                                        void *opaque);
 
-VLANClientState *qemu_new_net_client(NetClientInfo *info,
-                                     VLANClientState *peer,
-                                     const char *model,
-                                     const char *name)
+NetClientState *qemu_new_net_client(NetClientInfo *info,
+                                    NetClientState *peer,
+                                    const char *model,
+                                    const char *name)
 {
-    VLANClientState *vc;
+    NetClientState *vc;
 
-    assert(info->size >= sizeof(VLANClientState));
+    assert(info->size >= sizeof(NetClientState));
 
     vc = g_malloc0(info->size);
 
@@ -231,7 +231,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
                        const char *name,
                        void *opaque)
 {
-    VLANClientState *nc;
+    NetClientState *nc;
     NICState *nic;
 
     assert(info->type == NET_CLIENT_TYPE_NIC);
@@ -246,7 +246,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
     return nic;
 }
 
-static void qemu_cleanup_vlan_client(VLANClientState *vc)
+static void qemu_cleanup_vlan_client(NetClientState *vc)
 {
     QTAILQ_REMOVE(&net_clients, vc, next);
 
@@ -255,7 +255,7 @@ static void qemu_cleanup_vlan_client(VLANClientState *vc)
     }
 }
 
-static void qemu_free_vlan_client(VLANClientState *vc)
+static void qemu_free_vlan_client(NetClientState *vc)
 {
     if (vc->send_queue) {
         qemu_del_net_queue(vc->send_queue);
@@ -268,7 +268,7 @@ static void qemu_free_vlan_client(VLANClientState *vc)
     g_free(vc);
 }
 
-void qemu_del_vlan_client(VLANClientState *vc)
+void qemu_del_vlan_client(NetClientState *vc)
 {
     /* If there is a peer NIC, delete and cleanup client, but do not free. */
     if (vc->peer && vc->peer->info->type == NET_CLIENT_TYPE_NIC) {
@@ -300,7 +300,7 @@ void qemu_del_vlan_client(VLANClientState *vc)
 
 void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
 {
-    VLANClientState *nc;
+    NetClientState *nc;
 
     QTAILQ_FOREACH(nc, &net_clients, next) {
         if (nc->info->type == NET_CLIENT_TYPE_NIC) {
@@ -309,7 +309,7 @@ void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
     }
 }
 
-int qemu_can_send_packet(VLANClientState *sender)
+int qemu_can_send_packet(NetClientState *sender)
 {
     if (!sender->peer) {
         return 1;
@@ -324,13 +324,13 @@ int qemu_can_send_packet(VLANClientState *sender)
     return 1;
 }
 
-static ssize_t qemu_deliver_packet(VLANClientState *sender,
+static ssize_t qemu_deliver_packet(NetClientState *sender,
                                    unsigned flags,
                                    const uint8_t *data,
                                    size_t size,
                                    void *opaque)
 {
-    VLANClientState *vc = opaque;
+    NetClientState *vc = opaque;
     ssize_t ret;
 
     if (vc->link_down) {
@@ -354,7 +354,7 @@ static ssize_t qemu_deliver_packet(VLANClientState *sender,
     return ret;
 }
 
-void qemu_purge_queued_packets(VLANClientState *vc)
+void qemu_purge_queued_packets(NetClientState *vc)
 {
     if (!vc->peer) {
         return;
@@ -363,14 +363,14 @@ void qemu_purge_queued_packets(VLANClientState *vc)
     qemu_net_queue_purge(vc->peer->send_queue, vc);
 }
 
-void qemu_flush_queued_packets(VLANClientState *vc)
+void qemu_flush_queued_packets(NetClientState *vc)
 {
     vc->receive_disabled = 0;
 
     qemu_net_queue_flush(vc->send_queue);
 }
 
-static ssize_t qemu_send_packet_async_with_flags(VLANClientState *sender,
+static ssize_t qemu_send_packet_async_with_flags(NetClientState *sender,
                                                  unsigned flags,
                                                  const uint8_t *buf, int size,
                                                  NetPacketSent *sent_cb)
@@ -391,7 +391,7 @@ static ssize_t qemu_send_packet_async_with_flags(VLANClientState *sender,
     return qemu_net_queue_send(queue, sender, flags, buf, size, sent_cb);
 }
 
-ssize_t qemu_send_packet_async(VLANClientState *sender,
+ssize_t qemu_send_packet_async(NetClientState *sender,
                                const uint8_t *buf, int size,
                                NetPacketSent *sent_cb)
 {
@@ -399,18 +399,18 @@ ssize_t qemu_send_packet_async(VLANClientState *sender,
                                              buf, size, sent_cb);
 }
 
-void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size)
+void qemu_send_packet(NetClientState *vc, const uint8_t *buf, int size)
 {
     qemu_send_packet_async(vc, buf, size, NULL);
 }
 
-ssize_t qemu_send_packet_raw(VLANClientState *vc, const uint8_t *buf, int size)
+ssize_t qemu_send_packet_raw(NetClientState *vc, const uint8_t *buf, int size)
 {
     return qemu_send_packet_async_with_flags(vc, QEMU_NET_PACKET_FLAG_RAW,
                                              buf, size, NULL);
 }
 
-static ssize_t vc_sendv_compat(VLANClientState *vc, const struct iovec *iov,
+static ssize_t vc_sendv_compat(NetClientState *vc, const struct iovec *iov,
                                int iovcnt)
 {
     uint8_t buffer[4096];
@@ -421,13 +421,13 @@ static ssize_t vc_sendv_compat(VLANClientState *vc, const struct iovec *iov,
     return vc->info->receive(vc, buffer, offset);
 }
 
-static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
+static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
                                        unsigned flags,
                                        const struct iovec *iov,
                                        int iovcnt,
                                        void *opaque)
 {
-    VLANClientState *vc = opaque;
+    NetClientState *vc = opaque;
 
     if (vc->link_down) {
         return iov_size(iov, iovcnt);
@@ -440,7 +440,7 @@ static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
     }
 }
 
-ssize_t qemu_sendv_packet_async(VLANClientState *sender,
+ssize_t qemu_sendv_packet_async(NetClientState *sender,
                                 const struct iovec *iov, int iovcnt,
                                 NetPacketSent *sent_cb)
 {
@@ -458,14 +458,14 @@ ssize_t qemu_sendv_packet_async(VLANClientState *sender,
 }
 
 ssize_t
-qemu_sendv_packet(VLANClientState *vc, const struct iovec *iov, int iovcnt)
+qemu_sendv_packet(NetClientState *vc, const struct iovec *iov, int iovcnt)
 {
     return qemu_sendv_packet_async(vc, iov, iovcnt, NULL);
 }
 
-VLANClientState *qemu_find_netdev(const char *id)
+NetClientState *qemu_find_netdev(const char *id)
 {
-    VLANClientState *vc;
+    NetClientState *vc;
 
     QTAILQ_FOREACH(vc, &net_clients, next) {
         if (vc->info->type == NET_CLIENT_TYPE_NIC)
@@ -552,7 +552,7 @@ int net_handle_fd_param(Monitor *mon, const char *param)
 static int net_init_nic(QemuOpts *opts,
                         Monitor *mon,
                         const char *name,
-                        VLANClientState *peer)
+                        NetClientState *peer)
 {
     int idx;
     NICInfo *nd;
@@ -627,7 +627,7 @@ static int net_init_nic(QemuOpts *opts,
 typedef int NetClientInitFunc(QemuOpts *opts,
                               Monitor *mon,
                               const char *name,
-                              VLANClientState *peer);
+                              NetClientState *peer);
 
 /* magic number, but compiler will warn if too small */
 #define NET_MAX_DESC 20
@@ -940,7 +940,7 @@ int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
     for (i = 0; i < NET_CLIENT_TYPE_MAX; i++) {
         if (net_client_types[i].type != NULL &&
             !strcmp(net_client_types[i].type, type)) {
-            VLANClientState *peer = NULL;
+            NetClientState *peer = NULL;
             int ret;
 
             if (qemu_opts_validate(opts, &net_client_types[i].desc[0]) == -1) {
@@ -1020,7 +1020,7 @@ void net_host_device_add(Monitor *mon, const QDict *qdict)
 
 void net_host_device_remove(Monitor *mon, const QDict *qdict)
 {
-    VLANClientState *vc;
+    NetClientState *vc;
     int vlan_id = qdict_get_int(qdict, "vlan_id");
     const char *device = qdict_get_str(qdict, "device");
 
@@ -1056,7 +1056,7 @@ int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
 int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
 {
     const char *id = qdict_get_str(qdict, "id");
-    VLANClientState *vc;
+    NetClientState *vc;
 
     vc = qemu_find_netdev(id);
     if (!vc) {
@@ -1068,7 +1068,7 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
     return 0;
 }
 
-static void print_net_client(Monitor *mon, VLANClientState *vc)
+static void print_net_client(Monitor *mon, NetClientState *vc)
 {
     monitor_printf(mon, "%s: type=%s,%s\n", vc->name,
                    net_client_types[vc->info->type].type, vc->info_str);
@@ -1076,7 +1076,7 @@ static void print_net_client(Monitor *mon, VLANClientState *vc)
 
 void do_info_network(Monitor *mon)
 {
-    VLANClientState *vc, *peer;
+    NetClientState *vc, *peer;
     net_client_type type;
 
     monitor_printf(mon, "Devices not on any VLAN:\n");
@@ -1105,7 +1105,6 @@ void qmp_set_link(const char *name, bool up, Error **errp)
         }
     }
 done:
-
     if (!vc) {
         qerror_report(QERR_DEVICE_NOT_FOUND, name);
         return;
@@ -1131,7 +1130,7 @@ done:
 
 void net_cleanup(void)
 {
-    VLANClientState *vc, *next_vc;
+    NetClientState *vc, *next_vc;
 
     QTAILQ_FOREACH_SAFE(vc, &net_clients, next, next_vc) {
         qemu_del_vlan_client(vc);
@@ -1140,7 +1139,7 @@ void net_cleanup(void)
 
 void net_check_clients(void)
 {
-    VLANClientState *vc;
+    NetClientState *vc;
     int i;
 
     /* Don't warn about the default network setup that you get if
diff --git a/net.h b/net.h
index 2482546..4a91f41 100644
--- a/net.h
+++ b/net.h
@@ -16,7 +16,7 @@ struct MACAddr {
 
 typedef struct NICConf {
     MACAddr macaddr;
-    VLANClientState *peer;
+    NetClientState *peer;
     int32_t bootindex;
 } NICConf;
 
@@ -25,7 +25,7 @@ typedef struct NICConf {
     DEFINE_PROP_NETDEV("netdev", _state, _conf.peer),                   \
     DEFINE_PROP_INT32("bootindex", _state, _conf.bootindex, -1)
 
-/* VLANs support */
+/* Net clients */
 
 typedef enum {
     NET_CLIENT_TYPE_NONE,
@@ -41,12 +41,12 @@ typedef enum {
     NET_CLIENT_TYPE_MAX
 } net_client_type;
 
-typedef void (NetPoll)(VLANClientState *, bool enable);
-typedef int (NetCanReceive)(VLANClientState *);
-typedef ssize_t (NetReceive)(VLANClientState *, const uint8_t *, size_t);
-typedef ssize_t (NetReceiveIOV)(VLANClientState *, const struct iovec *, int);
-typedef void (NetCleanup) (VLANClientState *);
-typedef void (LinkStatusChanged)(VLANClientState *);
+typedef void (NetPoll)(NetClientState *, bool enable);
+typedef int (NetCanReceive)(NetClientState *);
+typedef ssize_t (NetReceive)(NetClientState *, const uint8_t *, size_t);
+typedef ssize_t (NetReceiveIOV)(NetClientState *, const struct iovec *, int);
+typedef void (NetCleanup) (NetClientState *);
+typedef void (LinkStatusChanged)(NetClientState *);
 
 typedef struct NetClientInfo {
     net_client_type type;
@@ -60,11 +60,11 @@ typedef struct NetClientInfo {
     NetPoll *poll;
 } NetClientInfo;
 
-struct VLANClientState {
+struct NetClientState {
     NetClientInfo *info;
     int link_down;
-    QTAILQ_ENTRY(VLANClientState) next;
-    VLANClientState *peer;
+    QTAILQ_ENTRY(NetClientState) next;
+    NetClientState *peer;
     NetQueue *send_queue;
     char *model;
     char *name;
@@ -73,39 +73,39 @@ struct VLANClientState {
 };
 
 typedef struct NICState {
-    VLANClientState nc;
+    NetClientState nc;
     NICConf *conf;
     void *opaque;
     bool peer_deleted;
 } NICState;
 
-VLANClientState *qemu_find_netdev(const char *id);
-VLANClientState *qemu_new_net_client(NetClientInfo *info,
-                                     VLANClientState *peer,
-                                     const char *model,
-                                     const char *name);
+NetClientState *qemu_find_netdev(const char *id);
+NetClientState *qemu_new_net_client(NetClientInfo *info,
+                                    NetClientState *peer,
+                                    const char *model,
+                                    const char *name);
 NICState *qemu_new_nic(NetClientInfo *info,
                        NICConf *conf,
                        const char *model,
                        const char *name,
                        void *opaque);
-void qemu_del_vlan_client(VLANClientState *vc);
-VLANClientState *qemu_find_vlan_client_by_name(Monitor *mon, int vlan_id,
-                                               const char *client_str);
+void qemu_del_vlan_client(NetClientState *vc);
+NetClientState *qemu_find_vlan_client_by_name(Monitor *mon, int vlan_id,
+                                              const char *client_str);
 typedef void (*qemu_nic_foreach)(NICState *nic, void *opaque);
 void qemu_foreach_nic(qemu_nic_foreach func, void *opaque);
-int qemu_can_send_packet(VLANClientState *vc);
-ssize_t qemu_sendv_packet(VLANClientState *vc, const struct iovec *iov,
+int qemu_can_send_packet(NetClientState *vc);
+ssize_t qemu_sendv_packet(NetClientState *vc, const struct iovec *iov,
                           int iovcnt);
-ssize_t qemu_sendv_packet_async(VLANClientState *vc, const struct iovec *iov,
+ssize_t qemu_sendv_packet_async(NetClientState *vc, const struct iovec *iov,
                                 int iovcnt, NetPacketSent *sent_cb);
-void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);
-ssize_t qemu_send_packet_raw(VLANClientState *vc, const uint8_t *buf, int size);
-ssize_t qemu_send_packet_async(VLANClientState *vc, const uint8_t *buf,
+void qemu_send_packet(NetClientState *vc, const uint8_t *buf, int size);
+ssize_t qemu_send_packet_raw(NetClientState *vc, const uint8_t *buf, int size);
+ssize_t qemu_send_packet_async(NetClientState *vc, const uint8_t *buf,
                                int size, NetPacketSent *sent_cb);
-void qemu_purge_queued_packets(VLANClientState *vc);
-void qemu_flush_queued_packets(VLANClientState *vc);
-void qemu_format_nic_info_str(VLANClientState *vc, uint8_t macaddr[6]);
+void qemu_purge_queued_packets(NetClientState *vc);
+void qemu_flush_queued_packets(NetClientState *vc);
+void qemu_format_nic_info_str(NetClientState *vc, uint8_t macaddr[6]);
 void qemu_macaddr_default_if_unset(MACAddr *macaddr);
 int qemu_show_nic_models(const char *arg, const char *const *models);
 void qemu_check_nic_model(NICInfo *nd, const char *model);
@@ -123,7 +123,7 @@ struct NICInfo {
     char *model;
     char *name;
     char *devaddr;
-    VLANClientState *netdev;
+    NetClientState *netdev;
     int used;         /* is this slot in nd_table[] being used? */
     int instantiated; /* does this NICInfo correspond to an instantiated NIC? */
     int nvectors;
diff --git a/net/dump.c b/net/dump.c
index 621f4e7..0f191d3 100644
--- a/net/dump.c
+++ b/net/dump.c
@@ -30,7 +30,7 @@
 #include "hub.h"
 
 typedef struct DumpState {
-    VLANClientState nc;
+    NetClientState nc;
     int64_t start_ts;
     int fd;
     int pcap_caplen;
@@ -57,7 +57,7 @@ struct pcap_sf_pkthdr {
     uint32_t len;
 };
 
-static ssize_t dump_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t dump_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     DumpState *s = DO_UPCAST(DumpState, nc, nc);
     struct pcap_sf_pkthdr hdr;
@@ -86,7 +86,7 @@ static ssize_t dump_receive(VLANClientState *nc, const uint8_t *buf, size_t size
     return size;
 }
 
-static void dump_cleanup(VLANClientState *nc)
+static void dump_cleanup(NetClientState *nc)
 {
     DumpState *s = DO_UPCAST(DumpState, nc, nc);
 
@@ -100,11 +100,11 @@ static NetClientInfo net_dump_info = {
     .cleanup = dump_cleanup,
 };
 
-static int net_dump_init(VLANClientState *peer, const char *device,
+static int net_dump_init(NetClientState *peer, const char *device,
                          const char *name, const char *filename, int len)
 {
     struct pcap_file_hdr hdr;
-    VLANClientState *nc;
+    NetClientState *nc;
     DumpState *s;
     struct tm tm;
     int fd;
@@ -146,7 +146,7 @@ static int net_dump_init(VLANClientState *peer, const char *device,
 }
 
 int net_init_dump(QemuOpts *opts, Monitor *mon, const char *name,
-                  VLANClientState *peer)
+                  NetClientState *peer)
 {
     int len;
     const char *file;
diff --git a/net/dump.h b/net/dump.h
index 408c652..df22afe 100644
--- a/net/dump.h
+++ b/net/dump.h
@@ -28,6 +28,6 @@
 #include "qemu-common.h"
 
 int net_init_dump(QemuOpts *opts, Monitor *mon,
-                  const char *name, VLANClientState *peer);
+                  const char *name, NetClientState *peer);
 
 #endif /* QEMU_NET_DUMP_H */
diff --git a/net/hub.c b/net/hub.c
index fe78a72..122de69 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -25,7 +25,7 @@
 typedef struct NetHub NetHub;
 
 typedef struct NetHubPort {
-    VLANClientState nc;
+    NetClientState nc;
     QLIST_ENTRY(NetHubPort) next;
     NetHub *hub;
     unsigned int id;
@@ -85,7 +85,7 @@ static NetHub *net_hub_new(unsigned int id)
     return hub;
 }
 
-static ssize_t net_hub_port_receive(VLANClientState *nc,
+static ssize_t net_hub_port_receive(NetClientState *nc,
                                     const uint8_t *buf, size_t len)
 {
     NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
@@ -93,7 +93,7 @@ static ssize_t net_hub_port_receive(VLANClientState *nc,
     return net_hub_receive(port->hub, port, buf, len);
 }
 
-static ssize_t net_hub_port_receive_iov(VLANClientState *nc,
+static ssize_t net_hub_port_receive_iov(NetClientState *nc,
                                         const struct iovec *iov, int iovcnt)
 {
     NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
@@ -101,7 +101,7 @@ static ssize_t net_hub_port_receive_iov(VLANClientState *nc,
     return net_hub_receive_iov(port->hub, port, iov, iovcnt);
 }
 
-static void net_hub_port_cleanup(VLANClientState *nc)
+static void net_hub_port_cleanup(NetClientState *nc)
 {
     NetHubPort *port = DO_UPCAST(NetHubPort, nc, nc);
 
@@ -118,7 +118,7 @@ static NetClientInfo net_hub_port_info = {
 
 static NetHubPort *net_hub_port_new(NetHub *hub)
 {
-    VLANClientState *nc;
+    NetClientState *nc;
     NetHubPort *port;
     unsigned int id = hub->num_ports++;
     char name[128];
@@ -140,7 +140,7 @@ static NetHubPort *net_hub_port_new(NetHub *hub)
  *
  * If there is no existing hub with the given id then a new hub is created.
  */
-VLANClientState *net_hub_add_port(unsigned int hub_id)
+NetClientState *net_hub_add_port(unsigned int hub_id)
 {
     NetHub *hub;
     NetHubPort *port;
@@ -162,12 +162,12 @@ VLANClientState *net_hub_add_port(unsigned int hub_id)
 /**
  * Find a specific client on a hub
  */
-VLANClientState *net_hub_find_client_by_name(unsigned int hub_id,
-                                             const char *name)
+NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
+                                            const char *name)
 {
     NetHub *hub;
     NetHubPort *port;
-    VLANClientState *peer;
+    NetClientState *peer;
 
     QLIST_FOREACH(hub, &hubs, next) {
         if (hub->id == hub_id) {
@@ -205,7 +205,7 @@ void net_hub_info(Monitor *mon)
  *
  * @id              Pointer for hub id output, may be NULL
  */
-int net_hub_id_for_client(VLANClientState *nc, unsigned int *id)
+int net_hub_id_for_client(NetClientState *nc, unsigned int *id)
 {
     NetHub *hub;
     NetHubPort *port;
@@ -231,7 +231,7 @@ void net_hub_check_clients(void)
 {
     NetHub *hub;
     NetHubPort *port;
-    VLANClientState *peer;
+    NetClientState *peer;
 
     QLIST_FOREACH(hub, &hubs, next) {
         int has_nic = 0, has_host_dev = 0;
diff --git a/net/hub.h b/net/hub.h
index 10bf036..ff5024a 100644
--- a/net/hub.h
+++ b/net/hub.h
@@ -17,11 +17,11 @@
 
 #include "qemu-common.h"
 
-VLANClientState *net_hub_add_port(unsigned int hub_id);
-VLANClientState *net_hub_find_client_by_name(unsigned int hub_id,
-                                             const char *name);
+NetClientState *net_hub_add_port(unsigned int hub_id);
+NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
+                                            const char *name);
 void net_hub_info(Monitor *mon);
-int net_hub_id_for_client(VLANClientState *nc, unsigned int *id);
+int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
 void net_hub_check_clients(void);
 
 #endif /* NET_HUB_H */
diff --git a/net/queue.c b/net/queue.c
index 1ab5247..35c3463 100644
--- a/net/queue.c
+++ b/net/queue.c
@@ -40,7 +40,7 @@
 
 struct NetPacket {
     QTAILQ_ENTRY(NetPacket) entry;
-    VLANClientState *sender;
+    NetClientState *sender;
     unsigned flags;
     int size;
     NetPacketSent *sent_cb;
@@ -89,7 +89,7 @@ void qemu_del_net_queue(NetQueue *queue)
 }
 
 static ssize_t qemu_net_queue_append(NetQueue *queue,
-                                     VLANClientState *sender,
+                                     NetClientState *sender,
                                      unsigned flags,
                                      const uint8_t *buf,
                                      size_t size,
@@ -110,7 +110,7 @@ static ssize_t qemu_net_queue_append(NetQueue *queue,
 }
 
 static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
-                                         VLANClientState *sender,
+                                         NetClientState *sender,
                                          unsigned flags,
                                          const struct iovec *iov,
                                          int iovcnt,
@@ -143,7 +143,7 @@ static ssize_t qemu_net_queue_append_iov(NetQueue *queue,
 }
 
 static ssize_t qemu_net_queue_deliver(NetQueue *queue,
-                                      VLANClientState *sender,
+                                      NetClientState *sender,
                                       unsigned flags,
                                       const uint8_t *data,
                                       size_t size)
@@ -158,7 +158,7 @@ static ssize_t qemu_net_queue_deliver(NetQueue *queue,
 }
 
 static ssize_t qemu_net_queue_deliver_iov(NetQueue *queue,
-                                          VLANClientState *sender,
+                                          NetClientState *sender,
                                           unsigned flags,
                                           const struct iovec *iov,
                                           int iovcnt)
@@ -173,7 +173,7 @@ static ssize_t qemu_net_queue_deliver_iov(NetQueue *queue,
 }
 
 ssize_t qemu_net_queue_send(NetQueue *queue,
-                            VLANClientState *sender,
+                            NetClientState *sender,
                             unsigned flags,
                             const uint8_t *data,
                             size_t size,
@@ -197,7 +197,7 @@ ssize_t qemu_net_queue_send(NetQueue *queue,
 }
 
 ssize_t qemu_net_queue_send_iov(NetQueue *queue,
-                                VLANClientState *sender,
+                                NetClientState *sender,
                                 unsigned flags,
                                 const struct iovec *iov,
                                 int iovcnt,
@@ -220,7 +220,7 @@ ssize_t qemu_net_queue_send_iov(NetQueue *queue,
     return ret;
 }
 
-void qemu_net_queue_purge(NetQueue *queue, VLANClientState *from)
+void qemu_net_queue_purge(NetQueue *queue, NetClientState *from)
 {
     NetPacket *packet, *next;
 
diff --git a/net/queue.h b/net/queue.h
index a31958e..d8eac0b 100644
--- a/net/queue.h
+++ b/net/queue.h
@@ -29,15 +29,15 @@
 typedef struct NetPacket NetPacket;
 typedef struct NetQueue NetQueue;
 
-typedef void (NetPacketSent) (VLANClientState *sender, ssize_t ret);
+typedef void (NetPacketSent) (NetClientState *sender, ssize_t ret);
 
-typedef ssize_t (NetPacketDeliver) (VLANClientState *sender,
+typedef ssize_t (NetPacketDeliver) (NetClientState *sender,
                                     unsigned flags,
                                     const uint8_t *buf,
                                     size_t size,
                                     void *opaque);
 
-typedef ssize_t (NetPacketDeliverIOV) (VLANClientState *sender,
+typedef ssize_t (NetPacketDeliverIOV) (NetClientState *sender,
                                        unsigned flags,
                                        const struct iovec *iov,
                                        int iovcnt,
@@ -52,20 +52,20 @@ NetQueue *qemu_new_net_queue(NetPacketDeliver *deliver,
 void qemu_del_net_queue(NetQueue *queue);
 
 ssize_t qemu_net_queue_send(NetQueue *queue,
-                            VLANClientState *sender,
+                            NetClientState *sender,
                             unsigned flags,
                             const uint8_t *data,
                             size_t size,
                             NetPacketSent *sent_cb);
 
 ssize_t qemu_net_queue_send_iov(NetQueue *queue,
-                                VLANClientState *sender,
+                                NetClientState *sender,
                                 unsigned flags,
                                 const struct iovec *iov,
                                 int iovcnt,
                                 NetPacketSent *sent_cb);
 
-void qemu_net_queue_purge(NetQueue *queue, VLANClientState *from);
+void qemu_net_queue_purge(NetQueue *queue, NetClientState *from);
 void qemu_net_queue_flush(NetQueue *queue);
 
 #endif /* QEMU_NET_QUEUE_H */
diff --git a/net/slirp.c b/net/slirp.c
index 5ed7036..2014774 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -67,7 +67,7 @@ struct slirp_config_str {
 };
 
 typedef struct SlirpState {
-    VLANClientState nc;
+    NetClientState nc;
     QTAILQ_ENTRY(SlirpState) entry;
     Slirp *slirp;
 #ifndef _WIN32
@@ -110,7 +110,7 @@ void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len)
     qemu_send_packet(&s->nc, pkt, pkt_len);
 }
 
-static ssize_t net_slirp_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t net_slirp_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     SlirpState *s = DO_UPCAST(SlirpState, nc, nc);
 
@@ -119,7 +119,7 @@ static ssize_t net_slirp_receive(VLANClientState *nc, const uint8_t *buf, size_t
     return size;
 }
 
-static void net_slirp_cleanup(VLANClientState *nc)
+static void net_slirp_cleanup(NetClientState *nc)
 {
     SlirpState *s = DO_UPCAST(SlirpState, nc, nc);
 
@@ -135,7 +135,7 @@ static NetClientInfo net_slirp_info = {
     .cleanup = net_slirp_cleanup,
 };
 
-static int net_slirp_init(VLANClientState *peer, const char *model,
+static int net_slirp_init(NetClientState *peer, const char *model,
                           const char *name, int restricted,
                           const char *vnetwork, const char *vhost,
                           const char *vhostname, const char *tftp_export,
@@ -152,7 +152,7 @@ static int net_slirp_init(VLANClientState *peer, const char *model,
 #ifndef _WIN32
     struct in_addr smbsrv = { .s_addr = 0 };
 #endif
-    VLANClientState *nc;
+    NetClientState *nc;
     SlirpState *s;
     char buf[20];
     uint32_t addr;
@@ -283,7 +283,7 @@ static SlirpState *slirp_lookup(Monitor *mon, const char *vlan,
 {
 
     if (vlan) {
-        VLANClientState *nc;
+        NetClientState *nc;
         nc = net_hub_find_client_by_name(strtol(vlan, NULL, 0), stack);
         if (!nc) {
             return NULL;
@@ -680,7 +680,7 @@ static int net_init_slirp_configs(const char *name, const char *value, void *opa
 int net_init_slirp(QemuOpts *opts,
                    Monitor *mon,
                    const char *name,
-                   VLANClientState *peer)
+                   NetClientState *peer)
 {
     struct slirp_config_str *config;
     const char *vhost;
diff --git a/net/slirp.h b/net/slirp.h
index 32041cb..e6000af 100644
--- a/net/slirp.h
+++ b/net/slirp.h
@@ -33,7 +33,7 @@
 int net_init_slirp(QemuOpts *opts,
                    Monitor *mon,
                    const char *name,
-                   VLANClientState *peer);
+                   NetClientState *peer);
 
 void net_slirp_hostfwd_add(Monitor *mon, const QDict *qdict);
 void net_slirp_hostfwd_remove(Monitor *mon, const QDict *qdict);
diff --git a/net/socket.c b/net/socket.c
index 5676bd5..55d9820 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -33,7 +33,7 @@
 #include "qemu_socket.h"
 
 typedef struct NetSocketState {
-    VLANClientState nc;
+    NetClientState nc;
     int fd;
     int state; /* 0 = getting length, 1 = getting data */
     unsigned int index;
@@ -43,14 +43,14 @@ typedef struct NetSocketState {
 } NetSocketState;
 
 typedef struct NetSocketListenState {
-    VLANClientState *peer;
+    NetClientState *peer;
     char *model;
     char *name;
     int fd;
 } NetSocketListenState;
 
 /* XXX: we consider we can send the whole packet without blocking */
-static ssize_t net_socket_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t net_socket_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     NetSocketState *s = DO_UPCAST(NetSocketState, nc, nc);
     uint32_t len;
@@ -60,7 +60,7 @@ static ssize_t net_socket_receive(VLANClientState *nc, const uint8_t *buf, size_
     return send_all(s->fd, buf, size);
 }
 
-static ssize_t net_socket_receive_dgram(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t net_socket_receive_dgram(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     NetSocketState *s = DO_UPCAST(NetSocketState, nc, nc);
 
@@ -230,7 +230,7 @@ fail:
     return -1;
 }
 
-static void net_socket_cleanup(VLANClientState *nc)
+static void net_socket_cleanup(NetClientState *nc)
 {
     NetSocketState *s = DO_UPCAST(NetSocketState, nc, nc);
     qemu_set_fd_handler(s->fd, NULL, NULL, NULL);
@@ -244,7 +244,7 @@ static NetClientInfo net_dgram_socket_info = {
     .cleanup = net_socket_cleanup,
 };
 
-static NetSocketState *net_socket_fd_init_dgram(VLANClientState *peer,
+static NetSocketState *net_socket_fd_init_dgram(NetClientState *peer,
                                                 const char *model,
                                                 const char *name,
                                                 int fd, int is_connected)
@@ -252,7 +252,7 @@ static NetSocketState *net_socket_fd_init_dgram(VLANClientState *peer,
     struct sockaddr_in saddr;
     int newfd;
     socklen_t saddr_len;
-    VLANClientState *nc;
+    NetClientState *nc;
     NetSocketState *s;
 
     /* fd passed: multicast: "learn" dgram_dst address from bound address and save it
@@ -322,12 +322,12 @@ static NetClientInfo net_socket_info = {
     .cleanup = net_socket_cleanup,
 };
 
-static NetSocketState *net_socket_fd_init_stream(VLANClientState *peer,
+static NetSocketState *net_socket_fd_init_stream(NetClientState *peer,
                                                  const char *model,
                                                  const char *name,
                                                  int fd, int is_connected)
 {
-    VLANClientState *nc;
+    NetClientState *nc;
     NetSocketState *s;
 
     nc = qemu_new_net_client(&net_socket_info, peer, model, name);
@@ -346,7 +346,7 @@ static NetSocketState *net_socket_fd_init_stream(VLANClientState *peer,
     return s;
 }
 
-static NetSocketState *net_socket_fd_init(VLANClientState *peer,
+static NetSocketState *net_socket_fd_init(NetClientState *peer,
                                           const char *model, const char *name,
                                           int fd, int is_connected)
 {
@@ -399,7 +399,7 @@ static void net_socket_accept(void *opaque)
     }
 }
 
-static int net_socket_listen_init(VLANClientState *peer,
+static int net_socket_listen_init(NetClientState *peer,
                                   const char *model,
                                   const char *name,
                                   const char *host_str)
@@ -447,7 +447,7 @@ static int net_socket_listen_init(VLANClientState *peer,
     return 0;
 }
 
-static int net_socket_connect_init(VLANClientState *peer,
+static int net_socket_connect_init(NetClientState *peer,
                                    const char *model,
                                    const char *name,
                                    const char *host_str)
@@ -497,7 +497,7 @@ static int net_socket_connect_init(VLANClientState *peer,
     return 0;
 }
 
-static int net_socket_mcast_init(VLANClientState *peer,
+static int net_socket_mcast_init(NetClientState *peer,
                                  const char *model,
                                  const char *name,
                                  const char *host_str,
@@ -590,7 +590,7 @@ static int net_socket_udp_init(NetClientState *peer,
 int net_init_socket(QemuOpts *opts,
                     Monitor *mon,
                     const char *name,
-                    VLANClientState *peer)
+                    NetClientState *peer)
 {
     if (qemu_opt_get(opts, "fd")) {
         int fd;
diff --git a/net/socket.h b/net/socket.h
index f6172bc..5edf17c 100644
--- a/net/socket.h
+++ b/net/socket.h
@@ -28,6 +28,6 @@
 #include "qemu-common.h"
 
 int net_init_socket(QemuOpts *opts, Monitor *mon,
-                    const char *name, VLANClientState *peer);
+                    const char *name, NetClientState *peer);
 
 #endif /* QEMU_NET_SOCKET_H */
diff --git a/net/tap-win32.c b/net/tap-win32.c
index c1f90c7..68243bb 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -630,11 +630,11 @@ static int tap_win32_open(tap_win32_overlapped_t **phandle,
 /********************************************/
 
  typedef struct TAPState {
-     VLANClientState nc;
+     NetClientState nc;
      tap_win32_overlapped_t *handle;
  } TAPState;
 
-static void tap_cleanup(VLANClientState *nc)
+static void tap_cleanup(NetClientState *nc)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
 
@@ -645,7 +645,7 @@ static void tap_cleanup(VLANClientState *nc)
     */
 }
 
-static ssize_t tap_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t tap_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
 
@@ -673,10 +673,10 @@ static NetClientInfo net_tap_win32_info = {
     .cleanup = tap_cleanup,
 };
 
-static int tap_win32_init(VLANClientState *peer, const char *model,
+static int tap_win32_init(NetClientState *peer, const char *model,
                           const char *name, const char *ifname)
 {
-    VLANClientState *nc;
+    NetClientState *nc;
     TAPState *s;
     tap_win32_overlapped_t *handle;
 
@@ -700,7 +700,7 @@ static int tap_win32_init(VLANClientState *peer, const char *model,
 }
 
 int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
-                 VLANClientState *peer)
+                 NetClientState *peer)
 {
     const char *ifname;
 
@@ -718,12 +718,12 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
     return 0;
 }
 
-int tap_has_ufo(VLANClientState *vc)
+int tap_has_ufo(NetClientState *vc)
 {
     return 0;
 }
 
-int tap_has_vnet_hdr(VLANClientState *vc)
+int tap_has_vnet_hdr(NetClientState *vc)
 {
     return 0;
 }
@@ -737,16 +737,16 @@ void tap_fd_set_vnet_hdr_len(int fd, int len)
 {
 }
 
-void tap_using_vnet_hdr(VLANClientState *vc, int using_vnet_hdr)
+void tap_using_vnet_hdr(NetClientState *vc, int using_vnet_hdr)
 {
 }
 
-void tap_set_offload(VLANClientState *vc, int csum, int tso4,
+void tap_set_offload(NetClientState *vc, int csum, int tso4,
                      int tso6, int ecn, int ufo)
 {
 }
 
-struct vhost_net *tap_get_vhost_net(VLANClientState *nc)
+struct vhost_net *tap_get_vhost_net(NetClientState *nc)
 {
     return NULL;
 }
diff --git a/net/tap.c b/net/tap.c
index 7dbf643..65f45b8 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -49,7 +49,7 @@
 #define TAP_BUFSIZE (4096 + 65536)
 
 typedef struct TAPState {
-    VLANClientState nc;
+    NetClientState nc;
     int fd;
     char down_script[1024];
     char down_script_arg[128];
@@ -114,7 +114,7 @@ static ssize_t tap_write_packet(TAPState *s, const struct iovec *iov, int iovcnt
     return len;
 }
 
-static ssize_t tap_receive_iov(VLANClientState *nc, const struct iovec *iov,
+static ssize_t tap_receive_iov(NetClientState *nc, const struct iovec *iov,
                                int iovcnt)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -133,7 +133,7 @@ static ssize_t tap_receive_iov(VLANClientState *nc, const struct iovec *iov,
     return tap_write_packet(s, iovp, iovcnt);
 }
 
-static ssize_t tap_receive_raw(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t tap_receive_raw(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
     struct iovec iov[2];
@@ -153,7 +153,7 @@ static ssize_t tap_receive_raw(VLANClientState *nc, const uint8_t *buf, size_t s
     return tap_write_packet(s, iov, iovcnt);
 }
 
-static ssize_t tap_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t tap_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
     struct iovec iov[1];
@@ -182,7 +182,7 @@ ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen)
 }
 #endif
 
-static void tap_send_completed(VLANClientState *nc, ssize_t len)
+static void tap_send_completed(NetClientState *nc, ssize_t len)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
     tap_read_poll(s, 1);
@@ -213,7 +213,7 @@ static void tap_send(void *opaque)
     } while (size > 0 && qemu_can_send_packet(&s->nc));
 }
 
-int tap_has_ufo(VLANClientState *nc)
+int tap_has_ufo(NetClientState *nc)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
 
@@ -222,7 +222,7 @@ int tap_has_ufo(VLANClientState *nc)
     return s->has_ufo;
 }
 
-int tap_has_vnet_hdr(VLANClientState *nc)
+int tap_has_vnet_hdr(NetClientState *nc)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
 
@@ -231,7 +231,7 @@ int tap_has_vnet_hdr(VLANClientState *nc)
     return !!s->host_vnet_hdr_len;
 }
 
-int tap_has_vnet_hdr_len(VLANClientState *nc, int len)
+int tap_has_vnet_hdr_len(NetClientState *nc, int len)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
 
@@ -240,7 +240,7 @@ int tap_has_vnet_hdr_len(VLANClientState *nc, int len)
     return tap_probe_vnet_hdr_len(s->fd, len);
 }
 
-void tap_set_vnet_hdr_len(VLANClientState *nc, int len)
+void tap_set_vnet_hdr_len(NetClientState *nc, int len)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
 
@@ -252,7 +252,7 @@ void tap_set_vnet_hdr_len(VLANClientState *nc, int len)
     s->host_vnet_hdr_len = len;
 }
 
-void tap_using_vnet_hdr(VLANClientState *nc, int using_vnet_hdr)
+void tap_using_vnet_hdr(NetClientState *nc, int using_vnet_hdr)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
 
@@ -264,7 +264,7 @@ void tap_using_vnet_hdr(VLANClientState *nc, int using_vnet_hdr)
     s->using_vnet_hdr = using_vnet_hdr;
 }
 
-void tap_set_offload(VLANClientState *nc, int csum, int tso4,
+void tap_set_offload(NetClientState *nc, int csum, int tso4,
                      int tso6, int ecn, int ufo)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
@@ -275,7 +275,7 @@ void tap_set_offload(VLANClientState *nc, int csum, int tso4,
     tap_fd_set_offload(s->fd, csum, tso4, tso6, ecn, ufo);
 }
 
-static void tap_cleanup(VLANClientState *nc)
+static void tap_cleanup(NetClientState *nc)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
 
@@ -295,14 +295,14 @@ static void tap_cleanup(VLANClientState *nc)
     s->fd = -1;
 }
 
-static void tap_poll(VLANClientState *nc, bool enable)
+static void tap_poll(NetClientState *nc, bool enable)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
     tap_read_poll(s, enable);
     tap_write_poll(s, enable);
 }
 
-int tap_get_fd(VLANClientState *nc)
+int tap_get_fd(NetClientState *nc)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
     assert(nc->info->type == NET_CLIENT_TYPE_TAP);
@@ -321,13 +321,13 @@ static NetClientInfo net_tap_info = {
     .cleanup = tap_cleanup,
 };
 
-static TAPState *net_tap_fd_init(VLANClientState *peer,
+static TAPState *net_tap_fd_init(NetClientState *peer,
                                  const char *model,
                                  const char *name,
                                  int fd,
                                  int vnet_hdr)
 {
-    VLANClientState *nc;
+    NetClientState *nc;
     TAPState *s;
 
     nc = qemu_new_net_client(&net_tap_info, peer, model, name);
@@ -584,7 +584,7 @@ static int net_tap_init(QemuOpts *opts, int *vnet_hdr)
 }
 
 int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
-                 VLANClientState *peer)
+                 NetClientState *peer)
 {
     TAPState *s;
     int fd, vnet_hdr = 0;
@@ -709,7 +709,7 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
     return 0;
 }
 
-VHostNetState *tap_get_vhost_net(VLANClientState *nc)
+VHostNetState *tap_get_vhost_net(NetClientState *nc)
 {
     TAPState *s = DO_UPCAST(TAPState, nc, nc);
     assert(nc->info->type == NET_CLIENT_TYPE_TAP);
diff --git a/net/tap.h b/net/tap.h
index 8d949cd..cf21d68 100644
--- a/net/tap.h
+++ b/net/tap.h
@@ -33,18 +33,18 @@
 #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
 
 int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
-                 VLANClientState *peer);
+                 NetClientState *peer);
 
 int tap_open(char *ifname, int ifname_size, int *vnet_hdr, int vnet_hdr_required);
 
 ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen);
 
-int tap_has_ufo(VLANClientState *vc);
-int tap_has_vnet_hdr(VLANClientState *vc);
-int tap_has_vnet_hdr_len(VLANClientState *vc, int len);
-void tap_using_vnet_hdr(VLANClientState *vc, int using_vnet_hdr);
-void tap_set_offload(VLANClientState *vc, int csum, int tso4, int tso6, int ecn, int ufo);
-void tap_set_vnet_hdr_len(VLANClientState *vc, int len);
+int tap_has_ufo(NetClientState *vc);
+int tap_has_vnet_hdr(NetClientState *vc);
+int tap_has_vnet_hdr_len(NetClientState *vc, int len);
+void tap_using_vnet_hdr(NetClientState *vc, int using_vnet_hdr);
+void tap_set_offload(NetClientState *vc, int csum, int tso4, int tso6, int ecn, int ufo);
+void tap_set_vnet_hdr_len(NetClientState *vc, int len);
 
 int tap_set_sndbuf(int fd, QemuOpts *opts);
 int tap_probe_vnet_hdr(int fd);
@@ -53,10 +53,10 @@ int tap_probe_has_ufo(int fd);
 void tap_fd_set_offload(int fd, int csum, int tso4, int tso6, int ecn, int ufo);
 void tap_fd_set_vnet_hdr_len(int fd, int len);
 
-int tap_get_fd(VLANClientState *vc);
+int tap_get_fd(NetClientState *vc);
 
 struct vhost_net;
-struct vhost_net *tap_get_vhost_net(VLANClientState *vc);
+struct vhost_net *tap_get_vhost_net(NetClientState *vc);
 
 int net_init_bridge(QemuOpts *opts, Monitor *mon, const char *name,
                     NetClientState *peer);
diff --git a/net/vde.c b/net/vde.c
index 24d12d4..8d9e1c6 100644
--- a/net/vde.c
+++ b/net/vde.c
@@ -33,7 +33,7 @@
 #include "qemu-option.h"
 
 typedef struct VDEState {
-    VLANClientState nc;
+    NetClientState nc;
     VDECONN *vde;
 } VDEState;
 
@@ -49,7 +49,7 @@ static void vde_to_qemu(void *opaque)
     }
 }
 
-static ssize_t vde_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
+static ssize_t vde_receive(NetClientState *nc, const uint8_t *buf, size_t size)
 {
     VDEState *s = DO_UPCAST(VDEState, nc, nc);
     ssize_t ret;
@@ -61,7 +61,7 @@ static ssize_t vde_receive(VLANClientState *nc, const uint8_t *buf, size_t size)
     return ret;
 }
 
-static void vde_cleanup(VLANClientState *nc)
+static void vde_cleanup(NetClientState *nc)
 {
     VDEState *s = DO_UPCAST(VDEState, nc, nc);
     qemu_set_fd_handler(vde_datafd(s->vde), NULL, NULL, NULL);
@@ -75,11 +75,11 @@ static NetClientInfo net_vde_info = {
     .cleanup = vde_cleanup,
 };
 
-static int net_vde_init(VLANClientState *peer, const char *model,
+static int net_vde_init(NetClientState *peer, const char *model,
                         const char *name, const char *sock,
                         int port, const char *group, int mode)
 {
-    VLANClientState *nc;
+    NetClientState *nc;
     VDEState *s;
     VDECONN *vde;
     char *init_group = (char *)group;
@@ -111,7 +111,7 @@ static int net_vde_init(VLANClientState *peer, const char *model,
 }
 
 int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name,
-                 VLANClientState *peer)
+                 NetClientState *peer)
 {
     const char *sock;
     const char *group;
diff --git a/net/vde.h b/net/vde.h
index 69c4e92..276e1ff 100644
--- a/net/vde.h
+++ b/net/vde.h
@@ -30,7 +30,7 @@
 #ifdef CONFIG_VDE
 
 int net_init_vde(QemuOpts *opts, Monitor *mon, const char *name,
-                 VLANClientState *peer);
+                 NetClientState *peer);
 
 #endif /* CONFIG_VDE */
 
diff --git a/qemu-common.h b/qemu-common.h
index 9443c7a..cb0286d 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -235,7 +235,7 @@ typedef struct TextConsole TextConsole;
 typedef TextConsole QEMUConsole;
 typedef struct CharDriverState CharDriverState;
 typedef struct MACAddr MACAddr;
-typedef struct VLANClientState VLANClientState;
+typedef struct NetClientState NetClientState;
 typedef struct i2c_bus i2c_bus;
 typedef struct ISABus ISABus;
 typedef struct SMBusDevice SMBusDevice;
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 11/16] net: Rename vc local variables to nc
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (9 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 10/16] net: Rename VLANClientState to NetClientState zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 12/16] net: Rename qemu_del_vlan_client() to qemu_del_net_client() zwu.kernel
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

Now that VLANClientState has been renamed to NetClientState all 'vc'
local variables should be 'nc'.  Much of the code already used 'nc' but
there are places where 'vc' needs to be renamed.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 hw/ne2000.h     |    4 +-
 hw/vhost_net.c  |   18 +++---
 net.c           |  214 +++++++++++++++++++++++++++---------------------------
 net.h           |   20 +++---
 net/tap-win32.c |    8 +-
 net/tap.h       |   16 ++--
 6 files changed, 140 insertions(+), 140 deletions(-)

diff --git a/hw/ne2000.h b/hw/ne2000.h
index 6c196a2..1e7ab07 100644
--- a/hw/ne2000.h
+++ b/hw/ne2000.h
@@ -31,5 +31,5 @@ typedef struct NE2000State {
 void ne2000_setup_io(NE2000State *s, unsigned size);
 extern const VMStateDescription vmstate_ne2000;
 void ne2000_reset(NE2000State *s);
-int ne2000_can_receive(NetClientState *vc);
-ssize_t ne2000_receive(NetClientState *vc, const uint8_t *buf, size_t size_);
+int ne2000_can_receive(NetClientState *nc);
+ssize_t ne2000_receive(NetClientState *nc, const uint8_t *buf, size_t size_);
diff --git a/hw/vhost_net.c b/hw/vhost_net.c
index c3e6546..c2d90df 100644
--- a/hw/vhost_net.c
+++ b/hw/vhost_net.c
@@ -42,7 +42,7 @@ struct vhost_net {
     struct vhost_dev dev;
     struct vhost_virtqueue vqs[2];
     int backend;
-    NetClientState *vc;
+    NetClientState *nc;
 };
 
 unsigned vhost_net_get_features(struct vhost_net *net, unsigned features)
@@ -104,7 +104,7 @@ struct vhost_net *vhost_net_init(NetClientState *backend, int devfd,
     if (r < 0) {
         goto fail;
     }
-    net->vc = backend;
+    net->nc = backend;
     net->dev.backend_features = tap_has_vnet_hdr(backend) ? 0 :
         (1 << VHOST_NET_F_VIRTIO_NET_HDR);
     net->backend = r;
@@ -151,7 +151,7 @@ int vhost_net_start(struct vhost_net *net,
         goto fail_notifiers;
     }
     if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) {
-        tap_set_vnet_hdr_len(net->vc,
+        tap_set_vnet_hdr_len(net->nc,
                              sizeof(struct virtio_net_hdr_mrg_rxbuf));
     }
 
@@ -160,7 +160,7 @@ int vhost_net_start(struct vhost_net *net,
         goto fail_start;
     }
 
-    net->vc->info->poll(net->vc, false);
+    net->nc->info->poll(net->nc, false);
     qemu_set_fd_handler(net->backend, NULL, NULL, NULL);
     file.fd = net->backend;
     for (file.index = 0; file.index < net->dev.nvqs; ++file.index) {
@@ -177,10 +177,10 @@ fail:
         int r = ioctl(net->dev.control, VHOST_NET_SET_BACKEND, &file);
         assert(r >= 0);
     }
-    net->vc->info->poll(net->vc, true);
+    net->nc->info->poll(net->nc, true);
     vhost_dev_stop(&net->dev, dev);
     if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) {
-        tap_set_vnet_hdr_len(net->vc, sizeof(struct virtio_net_hdr));
+        tap_set_vnet_hdr_len(net->nc, sizeof(struct virtio_net_hdr));
     }
 fail_start:
     vhost_dev_disable_notifiers(&net->dev, dev);
@@ -197,10 +197,10 @@ void vhost_net_stop(struct vhost_net *net,
         int r = ioctl(net->dev.control, VHOST_NET_SET_BACKEND, &file);
         assert(r >= 0);
     }
-    net->vc->info->poll(net->vc, true);
+    net->nc->info->poll(net->nc, true);
     vhost_dev_stop(&net->dev, dev);
     if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) {
-        tap_set_vnet_hdr_len(net->vc, sizeof(struct virtio_net_hdr));
+        tap_set_vnet_hdr_len(net->nc, sizeof(struct virtio_net_hdr));
     }
     vhost_dev_disable_notifiers(&net->dev, dev);
 }
@@ -209,7 +209,7 @@ void vhost_net_cleanup(struct vhost_net *net)
 {
     vhost_dev_cleanup(&net->dev);
     if (net->dev.acked_features & (1 << VIRTIO_NET_F_MRG_RXBUF)) {
-        tap_set_vnet_hdr_len(net->vc, sizeof(struct virtio_net_hdr));
+        tap_set_vnet_hdr_len(net->nc, sizeof(struct virtio_net_hdr));
     }
     g_free(net);
 }
diff --git a/net.c b/net.c
index de18c76..10fb601 100644
--- a/net.c
+++ b/net.c
@@ -129,11 +129,11 @@ int parse_host_port(struct sockaddr_in *saddr, const char *str)
     return 0;
 }
 
-void qemu_format_nic_info_str(NetClientState *vc, uint8_t macaddr[6])
+void qemu_format_nic_info_str(NetClientState *nc, uint8_t macaddr[6])
 {
-    snprintf(vc->info_str, sizeof(vc->info_str),
+    snprintf(nc->info_str, sizeof(nc->info_str),
              "model=%s,macaddr=%02x:%02x:%02x:%02x:%02x:%02x",
-             vc->model,
+             nc->model,
              macaddr[0], macaddr[1], macaddr[2],
              macaddr[3], macaddr[4], macaddr[5]);
 }
@@ -159,19 +159,19 @@ void qemu_macaddr_default_if_unset(MACAddr *macaddr)
  * Only net clients created with the legacy -net option need this.  Naming is
  * mandatory for net clients created with -netdev.
  */
-static char *assign_name(NetClientState *vc1, const char *model)
+static char *assign_name(NetClientState *nc1, const char *model)
 {
-    NetClientState *vc;
+    NetClientState *nc;
     char buf[256];
     int id = 0;
 
-    QTAILQ_FOREACH(vc, &net_clients, next) {
-        if (vc == vc1) {
+    QTAILQ_FOREACH(nc, &net_clients, next) {
+        if (nc == nc1) {
             continue;
         }
         /* For compatibility only bump id for net clients on a vlan */
-        if (strcmp(vc->model, model) == 0 &&
-            net_hub_id_for_client(vc, NULL) == 0) {
+        if (strcmp(nc->model, model) == 0 &&
+            net_hub_id_for_client(nc, NULL) == 0) {
             id++;
         }
     }
@@ -197,32 +197,32 @@ NetClientState *qemu_new_net_client(NetClientInfo *info,
                                     const char *model,
                                     const char *name)
 {
-    NetClientState *vc;
+    NetClientState *nc;
 
     assert(info->size >= sizeof(NetClientState));
 
-    vc = g_malloc0(info->size);
+    nc = g_malloc0(info->size);
 
-    vc->info = info;
-    vc->model = g_strdup(model);
+    nc->info = info;
+    nc->model = g_strdup(model);
     if (name) {
-        vc->name = g_strdup(name);
+        nc->name = g_strdup(name);
     } else {
-        vc->name = assign_name(vc, model);
+        nc->name = assign_name(nc, model);
     }
 
     if (peer) {
         assert(!peer->peer);
-        vc->peer = peer;
-        peer->peer = vc;
+        nc->peer = peer;
+        peer->peer = nc;
     }
-    QTAILQ_INSERT_TAIL(&net_clients, vc, next);
+    QTAILQ_INSERT_TAIL(&net_clients, nc, next);
 
-    vc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
+    nc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
                                         qemu_deliver_packet_iov,
-                                        vc);
+                                        nc);
 
-    return vc;
+    return nc;
 }
 
 NICState *qemu_new_nic(NetClientInfo *info,
@@ -246,56 +246,56 @@ NICState *qemu_new_nic(NetClientInfo *info,
     return nic;
 }
 
-static void qemu_cleanup_vlan_client(NetClientState *vc)
+static void qemu_cleanup_vlan_client(NetClientState *nc)
 {
-    QTAILQ_REMOVE(&net_clients, vc, next);
+    QTAILQ_REMOVE(&net_clients, nc, next);
 
-    if (vc->info->cleanup) {
-        vc->info->cleanup(vc);
+    if (nc->info->cleanup) {
+        nc->info->cleanup(nc);
     }
 }
 
-static void qemu_free_vlan_client(NetClientState *vc)
+static void qemu_free_vlan_client(NetClientState *nc)
 {
-    if (vc->send_queue) {
-        qemu_del_net_queue(vc->send_queue);
+    if (nc->send_queue) {
+        qemu_del_net_queue(nc->send_queue);
     }
-    if (vc->peer) {
-        vc->peer->peer = NULL;
+    if (nc->peer) {
+        nc->peer->peer = NULL;
     }
-    g_free(vc->name);
-    g_free(vc->model);
-    g_free(vc);
+    g_free(nc->name);
+    g_free(nc->model);
+    g_free(nc);
 }
 
-void qemu_del_vlan_client(NetClientState *vc)
+void qemu_del_vlan_client(NetClientState *nc)
 {
     /* If there is a peer NIC, delete and cleanup client, but do not free. */
-    if (vc->peer && vc->peer->info->type == NET_CLIENT_TYPE_NIC) {
-        NICState *nic = DO_UPCAST(NICState, nc, vc->peer);
+    if (nc->peer && nc->peer->info->type == NET_CLIENT_TYPE_NIC) {
+        NICState *nic = DO_UPCAST(NICState, nc, nc->peer);
         if (nic->peer_deleted) {
             return;
         }
         nic->peer_deleted = true;
         /* Let NIC know peer is gone. */
-        vc->peer->link_down = true;
-        if (vc->peer->info->link_status_changed) {
-            vc->peer->info->link_status_changed(vc->peer);
+        nc->peer->link_down = true;
+        if (nc->peer->info->link_status_changed) {
+            nc->peer->info->link_status_changed(nc->peer);
         }
-        qemu_cleanup_vlan_client(vc);
+        qemu_cleanup_vlan_client(nc);
         return;
     }
 
     /* If this is a peer NIC and peer has already been deleted, free it now. */
-    if (vc->peer && vc->info->type == NET_CLIENT_TYPE_NIC) {
-        NICState *nic = DO_UPCAST(NICState, nc, vc);
+    if (nc->peer && nc->info->type == NET_CLIENT_TYPE_NIC) {
+        NICState *nic = DO_UPCAST(NICState, nc, nc);
         if (nic->peer_deleted) {
-            qemu_free_vlan_client(vc->peer);
+            qemu_free_vlan_client(nc->peer);
         }
     }
 
-    qemu_cleanup_vlan_client(vc);
-    qemu_free_vlan_client(vc);
+    qemu_cleanup_vlan_client(nc);
+    qemu_free_vlan_client(nc);
 }
 
 void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
@@ -330,44 +330,44 @@ static ssize_t qemu_deliver_packet(NetClientState *sender,
                                    size_t size,
                                    void *opaque)
 {
-    NetClientState *vc = opaque;
+    NetClientState *nc = opaque;
     ssize_t ret;
 
-    if (vc->link_down) {
+    if (nc->link_down) {
         return size;
     }
 
-    if (vc->receive_disabled) {
+    if (nc->receive_disabled) {
         return 0;
     }
 
-    if (flags & QEMU_NET_PACKET_FLAG_RAW && vc->info->receive_raw) {
-        ret = vc->info->receive_raw(vc, data, size);
+    if (flags & QEMU_NET_PACKET_FLAG_RAW && nc->info->receive_raw) {
+        ret = nc->info->receive_raw(nc, data, size);
     } else {
-        ret = vc->info->receive(vc, data, size);
+        ret = nc->info->receive(nc, data, size);
     }
 
     if (ret == 0) {
-        vc->receive_disabled = 1;
+        nc->receive_disabled = 1;
     };
 
     return ret;
 }
 
-void qemu_purge_queued_packets(NetClientState *vc)
+void qemu_purge_queued_packets(NetClientState *nc)
 {
-    if (!vc->peer) {
+    if (!nc->peer) {
         return;
     }
 
-    qemu_net_queue_purge(vc->peer->send_queue, vc);
+    qemu_net_queue_purge(nc->peer->send_queue, nc);
 }
 
-void qemu_flush_queued_packets(NetClientState *vc)
+void qemu_flush_queued_packets(NetClientState *nc)
 {
-    vc->receive_disabled = 0;
+    nc->receive_disabled = 0;
 
-    qemu_net_queue_flush(vc->send_queue);
+    qemu_net_queue_flush(nc->send_queue);
 }
 
 static ssize_t qemu_send_packet_async_with_flags(NetClientState *sender,
@@ -399,18 +399,18 @@ ssize_t qemu_send_packet_async(NetClientState *sender,
                                              buf, size, sent_cb);
 }
 
-void qemu_send_packet(NetClientState *vc, const uint8_t *buf, int size)
+void qemu_send_packet(NetClientState *nc, const uint8_t *buf, int size)
 {
-    qemu_send_packet_async(vc, buf, size, NULL);
+    qemu_send_packet_async(nc, buf, size, NULL);
 }
 
-ssize_t qemu_send_packet_raw(NetClientState *vc, const uint8_t *buf, int size)
+ssize_t qemu_send_packet_raw(NetClientState *nc, const uint8_t *buf, int size)
 {
-    return qemu_send_packet_async_with_flags(vc, QEMU_NET_PACKET_FLAG_RAW,
+    return qemu_send_packet_async_with_flags(nc, QEMU_NET_PACKET_FLAG_RAW,
                                              buf, size, NULL);
 }
 
-static ssize_t vc_sendv_compat(NetClientState *vc, const struct iovec *iov,
+static ssize_t nc_sendv_compat(NetClientState *nc, const struct iovec *iov,
                                int iovcnt)
 {
     uint8_t buffer[4096];
@@ -418,7 +418,7 @@ static ssize_t vc_sendv_compat(NetClientState *vc, const struct iovec *iov,
 
     offset = iov_to_buf(iov, iovcnt, buffer, 0, sizeof(buffer));
 
-    return vc->info->receive(vc, buffer, offset);
+    return nc->info->receive(nc, buffer, offset);
 }
 
 static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
@@ -427,16 +427,16 @@ static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
                                        int iovcnt,
                                        void *opaque)
 {
-    NetClientState *vc = opaque;
+    NetClientState *nc = opaque;
 
-    if (vc->link_down) {
+    if (nc->link_down) {
         return iov_size(iov, iovcnt);
     }
 
-    if (vc->info->receive_iov) {
-        return vc->info->receive_iov(vc, iov, iovcnt);
+    if (nc->info->receive_iov) {
+        return nc->info->receive_iov(nc, iov, iovcnt);
     } else {
-        return vc_sendv_compat(vc, iov, iovcnt);
+        return nc_sendv_compat(nc, iov, iovcnt);
     }
 }
 
@@ -458,20 +458,20 @@ ssize_t qemu_sendv_packet_async(NetClientState *sender,
 }
 
 ssize_t
-qemu_sendv_packet(NetClientState *vc, const struct iovec *iov, int iovcnt)
+qemu_sendv_packet(NetClientState *nc, const struct iovec *iov, int iovcnt)
 {
-    return qemu_sendv_packet_async(vc, iov, iovcnt, NULL);
+    return qemu_sendv_packet_async(nc, iov, iovcnt, NULL);
 }
 
 NetClientState *qemu_find_netdev(const char *id)
 {
-    NetClientState *vc;
+    NetClientState *nc;
 
-    QTAILQ_FOREACH(vc, &net_clients, next) {
-        if (vc->info->type == NET_CLIENT_TYPE_NIC)
+    QTAILQ_FOREACH(nc, &net_clients, next) {
+        if (nc->info->type == NET_CLIENT_TYPE_NIC)
             continue;
-        if (!strcmp(vc->name, id)) {
-            return vc;
+        if (!strcmp(nc->name, id)) {
+            return nc;
         }
     }
 
@@ -1020,19 +1020,19 @@ void net_host_device_add(Monitor *mon, const QDict *qdict)
 
 void net_host_device_remove(Monitor *mon, const QDict *qdict)
 {
-    NetClientState *vc;
+    NetClientState *nc;
     int vlan_id = qdict_get_int(qdict, "vlan_id");
     const char *device = qdict_get_str(qdict, "device");
 
-    vc = net_hub_find_client_by_name(vlan_id, device);
-    if (!vc) {
+    nc = net_hub_find_client_by_name(vlan_id, device);
+    if (!nc) {
         return;
     }
-    if (!net_host_check_device(vc->model)) {
+    if (!net_host_check_device(nc->model)) {
         monitor_printf(mon, "invalid host network device %s\n", device);
         return;
     }
-    qemu_del_vlan_client(vc);
+    qemu_del_vlan_client(nc);
 }
 
 int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
@@ -1056,14 +1056,14 @@ int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
 int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
 {
     const char *id = qdict_get_str(qdict, "id");
-    NetClientState *vc;
+    NetClientState *nc;
 
-    vc = qemu_find_netdev(id);
-    if (!vc) {
+    nc = qemu_find_netdev(id);
+    if (!nc) {
         qerror_report(QERR_DEVICE_NOT_FOUND, id);
         return -1;
     }
-    qemu_del_vlan_client(vc);
+    qemu_del_vlan_client(nc);
     qemu_opts_del(qemu_opts_find(qemu_find_opts("netdev"), id));
     return 0;
 }
@@ -1076,16 +1076,16 @@ static void print_net_client(Monitor *mon, NetClientState *vc)
 
 void do_info_network(Monitor *mon)
 {
-    NetClientState *vc, *peer;
+    NetClientState *nc, *peer;
     net_client_type type;
 
     monitor_printf(mon, "Devices not on any VLAN:\n");
-    QTAILQ_FOREACH(vc, &net_clients, next) {
-        peer = vc->peer;
-        type = vc->info->type;
+    QTAILQ_FOREACH(nc, &net_clients, next) {
+        peer = nc->peer;
+        type = nc->info->type;
         if (!peer || type == NET_CLIENT_TYPE_NIC) {
             monitor_printf(mon, "  ");
-            print_net_client(mon, vc);
+            print_net_client(mon, nc);
         } /* else it's a netdev connected to a NIC, printed with the NIC */
         if (peer && type == NET_CLIENT_TYPE_NIC) {
             monitor_printf(mon, "   \\ ");
@@ -1097,23 +1097,23 @@ void do_info_network(Monitor *mon)
 
 void qmp_set_link(const char *name, bool up, Error **errp)
 {
-    VLANClientState *vc = NULL;
+    NetClientState *nc = NULL;
 
-    QTAILQ_FOREACH(vc, &non_vlan_clients, next) {
-        if (!strcmp(vc->name, name)) {
+    QTAILQ_FOREACH(nc, &net_clients, next) {
+        if (!strcmp(nc->name, name)) {
             goto done;
         }
     }
 done:
-    if (!vc) {
+    if (!nc) {
         qerror_report(QERR_DEVICE_NOT_FOUND, name);
         return;
     }
 
-    vc->link_down = !up;
+    nc->link_down = !up;
 
-    if (vc->info->link_status_changed) {
-        vc->info->link_status_changed(vc);
+    if (nc->info->link_status_changed) {
+        nc->info->link_status_changed(nc);
     }
 
     /* Notify peer. Don't update peer link status: this makes it possible to
@@ -1123,23 +1123,23 @@ done:
      * Current behaviour is compatible with qemu vlans where there could be
      * multiple clients that can still communicate with each other in
      * disconnected mode. For now maintain this compatibility. */
-    if (vc->peer && vc->peer->info->link_status_changed) {
-        vc->peer->info->link_status_changed(vc->peer);
+    if (nc->peer && nc->peer->info->link_status_changed) {
+        nc->peer->info->link_status_changed(nc->peer);
     }
 }
 
 void net_cleanup(void)
 {
-    NetClientState *vc, *next_vc;
+    NetClientState *nc, *next_vc;
 
-    QTAILQ_FOREACH_SAFE(vc, &net_clients, next, next_vc) {
-        qemu_del_vlan_client(vc);
+    QTAILQ_FOREACH_SAFE(nc, &net_clients, next, next_vc) {
+        qemu_del_vlan_client(nc);
     }
 }
 
 void net_check_clients(void)
 {
-    NetClientState *vc;
+    NetClientState *nc;
     int i;
 
     /* Don't warn about the default network setup that you get if
@@ -1156,11 +1156,11 @@ void net_check_clients(void)
 
     net_hub_check_clients();
 
-    QTAILQ_FOREACH(vc, &net_clients, next) {
-        if (!vc->peer) {
+    QTAILQ_FOREACH(nc, &net_clients, next) {
+        if (!nc->peer) {
             fprintf(stderr, "Warning: %s %s has no peer\n",
-                    vc->info->type == NET_CLIENT_TYPE_NIC ? "nic" : "netdev",
-                    vc->name);
+                    nc->info->type == NET_CLIENT_TYPE_NIC ? "nic" : "netdev",
+                    nc->name);
         }
     }
 
diff --git a/net.h b/net.h
index 4a91f41..f2fec6f 100644
--- a/net.h
+++ b/net.h
@@ -89,23 +89,23 @@ NICState *qemu_new_nic(NetClientInfo *info,
                        const char *model,
                        const char *name,
                        void *opaque);
-void qemu_del_vlan_client(NetClientState *vc);
+void qemu_del_vlan_client(NetClientState *nc);
 NetClientState *qemu_find_vlan_client_by_name(Monitor *mon, int vlan_id,
                                               const char *client_str);
 typedef void (*qemu_nic_foreach)(NICState *nic, void *opaque);
 void qemu_foreach_nic(qemu_nic_foreach func, void *opaque);
-int qemu_can_send_packet(NetClientState *vc);
-ssize_t qemu_sendv_packet(NetClientState *vc, const struct iovec *iov,
+int qemu_can_send_packet(NetClientState *nc);
+ssize_t qemu_sendv_packet(NetClientState *nc, const struct iovec *iov,
                           int iovcnt);
-ssize_t qemu_sendv_packet_async(NetClientState *vc, const struct iovec *iov,
+ssize_t qemu_sendv_packet_async(NetClientState *nc, const struct iovec *iov,
                                 int iovcnt, NetPacketSent *sent_cb);
-void qemu_send_packet(NetClientState *vc, const uint8_t *buf, int size);
-ssize_t qemu_send_packet_raw(NetClientState *vc, const uint8_t *buf, int size);
-ssize_t qemu_send_packet_async(NetClientState *vc, const uint8_t *buf,
+void qemu_send_packet(NetClientState *nc, const uint8_t *buf, int size);
+ssize_t qemu_send_packet_raw(NetClientState *nc, const uint8_t *buf, int size);
+ssize_t qemu_send_packet_async(NetClientState *nc, const uint8_t *buf,
                                int size, NetPacketSent *sent_cb);
-void qemu_purge_queued_packets(NetClientState *vc);
-void qemu_flush_queued_packets(NetClientState *vc);
-void qemu_format_nic_info_str(NetClientState *vc, uint8_t macaddr[6]);
+void qemu_purge_queued_packets(NetClientState *nc);
+void qemu_flush_queued_packets(NetClientState *nc);
+void qemu_format_nic_info_str(NetClientState *nc, uint8_t macaddr[6]);
 void qemu_macaddr_default_if_unset(MACAddr *macaddr);
 int qemu_show_nic_models(const char *arg, const char *const *models);
 void qemu_check_nic_model(NICInfo *nd, const char *model);
diff --git a/net/tap-win32.c b/net/tap-win32.c
index 68243bb..3406717 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -718,12 +718,12 @@ int net_init_tap(QemuOpts *opts, Monitor *mon, const char *name,
     return 0;
 }
 
-int tap_has_ufo(NetClientState *vc)
+int tap_has_ufo(NetClientState *nc)
 {
     return 0;
 }
 
-int tap_has_vnet_hdr(NetClientState *vc)
+int tap_has_vnet_hdr(NetClientState *nc)
 {
     return 0;
 }
@@ -737,11 +737,11 @@ void tap_fd_set_vnet_hdr_len(int fd, int len)
 {
 }
 
-void tap_using_vnet_hdr(NetClientState *vc, int using_vnet_hdr)
+void tap_using_vnet_hdr(NetClientState *nc, int using_vnet_hdr)
 {
 }
 
-void tap_set_offload(NetClientState *vc, int csum, int tso4,
+void tap_set_offload(NetClientState *nc, int csum, int tso4,
                      int tso6, int ecn, int ufo)
 {
 }
diff --git a/net/tap.h b/net/tap.h
index cf21d68..0e35e81 100644
--- a/net/tap.h
+++ b/net/tap.h
@@ -39,12 +39,12 @@ int tap_open(char *ifname, int ifname_size, int *vnet_hdr, int vnet_hdr_required
 
 ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen);
 
-int tap_has_ufo(NetClientState *vc);
-int tap_has_vnet_hdr(NetClientState *vc);
-int tap_has_vnet_hdr_len(NetClientState *vc, int len);
-void tap_using_vnet_hdr(NetClientState *vc, int using_vnet_hdr);
-void tap_set_offload(NetClientState *vc, int csum, int tso4, int tso6, int ecn, int ufo);
-void tap_set_vnet_hdr_len(NetClientState *vc, int len);
+int tap_has_ufo(NetClientState *nc);
+int tap_has_vnet_hdr(NetClientState *nc);
+int tap_has_vnet_hdr_len(NetClientState *nc, int len);
+void tap_using_vnet_hdr(NetClientState *nc, int using_vnet_hdr);
+void tap_set_offload(NetClientState *nc, int csum, int tso4, int tso6, int ecn, int ufo);
+void tap_set_vnet_hdr_len(NetClientState *nc, int len);
 
 int tap_set_sndbuf(int fd, QemuOpts *opts);
 int tap_probe_vnet_hdr(int fd);
@@ -53,10 +53,10 @@ int tap_probe_has_ufo(int fd);
 void tap_fd_set_offload(int fd, int csum, int tso4, int tso6, int ecn, int ufo);
 void tap_fd_set_vnet_hdr_len(int fd, int len);
 
-int tap_get_fd(NetClientState *vc);
+int tap_get_fd(NetClientState *nc);
 
 struct vhost_net;
-struct vhost_net *tap_get_vhost_net(NetClientState *vc);
+struct vhost_net *tap_get_vhost_net(NetClientState *nc);
 
 int net_init_bridge(QemuOpts *opts, Monitor *mon, const char *name,
                     NetClientState *peer);
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 12/16] net: Rename qemu_del_vlan_client() to qemu_del_net_client()
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (10 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 11/16] net: Rename vc local variables to nc zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info zwu.kernel
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

Another step in moving the vlan feature out of net core.  Users only
deal with NetClientState and therefore qemu_del_vlan_client() should be
named qemu_del_net_client().

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 hw/e1000.c           |    2 +-
 hw/eepro100.c        |    2 +-
 hw/ne2000.c          |    2 +-
 hw/pcnet-pci.c       |    2 +-
 hw/rtl8139.c         |    2 +-
 hw/usb/dev-network.c |    2 +-
 hw/virtio-net.c      |    2 +-
 hw/xen_nic.c         |    2 +-
 net.c                |   20 ++++++++++----------
 net.h                |    2 +-
 net/slirp.c          |    2 +-
 11 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/hw/e1000.c b/hw/e1000.c
index 8c7fd3b..cf1e124 100644
--- a/hw/e1000.c
+++ b/hw/e1000.c
@@ -1201,7 +1201,7 @@ pci_e1000_uninit(PCIDevice *dev)
     qemu_free_timer(d->autoneg_timer);
     memory_region_destroy(&d->mmio);
     memory_region_destroy(&d->io);
-    qemu_del_vlan_client(&d->nic->nc);
+    qemu_del_net_client(&d->nic->nc);
     return 0;
 }
 
diff --git a/hw/eepro100.c b/hw/eepro100.c
index 5725ccf..0217795 100644
--- a/hw/eepro100.c
+++ b/hw/eepro100.c
@@ -1840,7 +1840,7 @@ static int pci_nic_uninit(PCIDevice *pci_dev)
     memory_region_destroy(&s->flash_bar);
     vmstate_unregister(&pci_dev->qdev, s->vmstate, s);
     eeprom93xx_free(&pci_dev->qdev, s->eeprom);
-    qemu_del_vlan_client(&s->nic->nc);
+    qemu_del_net_client(&s->nic->nc);
     return 0;
 }
 
diff --git a/hw/ne2000.c b/hw/ne2000.c
index 2339725..e8b1d68 100644
--- a/hw/ne2000.c
+++ b/hw/ne2000.c
@@ -750,7 +750,7 @@ static int pci_ne2000_exit(PCIDevice *pci_dev)
     NE2000State *s = &d->ne2000;
 
     memory_region_destroy(&s->io);
-    qemu_del_vlan_client(&s->nic->nc);
+    qemu_del_net_client(&s->nic->nc);
     return 0;
 }
 
diff --git a/hw/pcnet-pci.c b/hw/pcnet-pci.c
index 8c82667..8bbad47 100644
--- a/hw/pcnet-pci.c
+++ b/hw/pcnet-pci.c
@@ -279,7 +279,7 @@ static int pci_pcnet_uninit(PCIDevice *dev)
     memory_region_destroy(&d->io_bar);
     qemu_del_timer(d->state.poll_timer);
     qemu_free_timer(d->state.poll_timer);
-    qemu_del_vlan_client(&d->state.nic->nc);
+    qemu_del_net_client(&d->state.nic->nc);
     return 0;
 }
 
diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index 1e4f4eb..3642fcb 100644
--- a/hw/rtl8139.c
+++ b/hw/rtl8139.c
@@ -3448,7 +3448,7 @@ static int pci_rtl8139_uninit(PCIDevice *dev)
     }
     qemu_del_timer(s->timer);
     qemu_free_timer(s->timer);
-    qemu_del_vlan_client(&s->nic->nc);
+    qemu_del_net_client(&s->nic->nc);
     return 0;
 }
 
diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c
index 21e0069..4bd4243 100644
--- a/hw/usb/dev-network.c
+++ b/hw/usb/dev-network.c
@@ -1309,7 +1309,7 @@ static void usb_net_handle_destroy(USBDevice *dev)
 
     /* TODO: remove the nd_table[] entry */
     rndis_clear_responsequeue(s);
-    qemu_del_vlan_client(&s->nic->nc);
+    qemu_del_net_client(&s->nic->nc);
 }
 
 static NetClientInfo net_usbnet_info = {
diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index a73c523..d5527d4 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -1077,6 +1077,6 @@ void virtio_net_exit(VirtIODevice *vdev)
         qemu_bh_delete(n->tx_bh);
     }
 
-    qemu_del_vlan_client(&n->nic->nc);
+    qemu_del_net_client(&n->nic->nc);
     virtio_cleanup(&n->vdev);
 }
diff --git a/hw/xen_nic.c b/hw/xen_nic.c
index 6391a04..ba4a45c 100644
--- a/hw/xen_nic.c
+++ b/hw/xen_nic.c
@@ -409,7 +409,7 @@ static void net_disconnect(struct XenDevice *xendev)
         netdev->rxs = NULL;
     }
     if (netdev->nic) {
-        qemu_del_vlan_client(&netdev->nic->nc);
+        qemu_del_net_client(&netdev->nic->nc);
         netdev->nic = NULL;
     }
 }
diff --git a/net.c b/net.c
index 10fb601..61dc28d 100644
--- a/net.c
+++ b/net.c
@@ -246,7 +246,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
     return nic;
 }
 
-static void qemu_cleanup_vlan_client(NetClientState *nc)
+static void qemu_cleanup_net_client(NetClientState *nc)
 {
     QTAILQ_REMOVE(&net_clients, nc, next);
 
@@ -255,7 +255,7 @@ static void qemu_cleanup_vlan_client(NetClientState *nc)
     }
 }
 
-static void qemu_free_vlan_client(NetClientState *nc)
+static void qemu_free_net_client(NetClientState *nc)
 {
     if (nc->send_queue) {
         qemu_del_net_queue(nc->send_queue);
@@ -268,7 +268,7 @@ static void qemu_free_vlan_client(NetClientState *nc)
     g_free(nc);
 }
 
-void qemu_del_vlan_client(NetClientState *nc)
+void qemu_del_net_client(NetClientState *nc)
 {
     /* If there is a peer NIC, delete and cleanup client, but do not free. */
     if (nc->peer && nc->peer->info->type == NET_CLIENT_TYPE_NIC) {
@@ -282,7 +282,7 @@ void qemu_del_vlan_client(NetClientState *nc)
         if (nc->peer->info->link_status_changed) {
             nc->peer->info->link_status_changed(nc->peer);
         }
-        qemu_cleanup_vlan_client(nc);
+        qemu_cleanup_net_client(nc);
         return;
     }
 
@@ -290,12 +290,12 @@ void qemu_del_vlan_client(NetClientState *nc)
     if (nc->peer && nc->info->type == NET_CLIENT_TYPE_NIC) {
         NICState *nic = DO_UPCAST(NICState, nc, nc);
         if (nic->peer_deleted) {
-            qemu_free_vlan_client(nc->peer);
+            qemu_free_net_client(nc->peer);
         }
     }
 
-    qemu_cleanup_vlan_client(nc);
-    qemu_free_vlan_client(nc);
+    qemu_cleanup_net_client(nc);
+    qemu_free_net_client(nc);
 }
 
 void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
@@ -1032,7 +1032,7 @@ void net_host_device_remove(Monitor *mon, const QDict *qdict)
         monitor_printf(mon, "invalid host network device %s\n", device);
         return;
     }
-    qemu_del_vlan_client(nc);
+    qemu_del_net_client(nc);
 }
 
 int do_netdev_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
@@ -1063,7 +1063,7 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
         qerror_report(QERR_DEVICE_NOT_FOUND, id);
         return -1;
     }
-    qemu_del_vlan_client(nc);
+    qemu_del_net_client(nc);
     qemu_opts_del(qemu_opts_find(qemu_find_opts("netdev"), id));
     return 0;
 }
@@ -1133,7 +1133,7 @@ void net_cleanup(void)
     NetClientState *nc, *next_vc;
 
     QTAILQ_FOREACH_SAFE(nc, &net_clients, next, next_vc) {
-        qemu_del_vlan_client(nc);
+        qemu_del_net_client(nc);
     }
 }
 
diff --git a/net.h b/net.h
index f2fec6f..250669a 100644
--- a/net.h
+++ b/net.h
@@ -89,7 +89,7 @@ NICState *qemu_new_nic(NetClientInfo *info,
                        const char *model,
                        const char *name,
                        void *opaque);
-void qemu_del_vlan_client(NetClientState *nc);
+void qemu_del_net_client(NetClientState *nc);
 NetClientState *qemu_find_vlan_client_by_name(Monitor *mon, int vlan_id,
                                               const char *client_str);
 typedef void (*qemu_nic_foreach)(NICState *nic, void *opaque);
diff --git a/net/slirp.c b/net/slirp.c
index 2014774..a6ede2b 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -274,7 +274,7 @@ static int net_slirp_init(NetClientState *peer, const char *model,
     return 0;
 
 error:
-    qemu_del_vlan_client(nc);
+    qemu_del_net_client(nc);
     return -1;
 }
 
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (11 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 12/16] net: Rename qemu_del_vlan_client() to qemu_del_net_client() zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 14/16] net: cleanup deliver/deliver_iov func pointers zwu.kernel
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>

Reviewed-by:   Jan Kiszka  <jan.kiszka@siemens.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 net.c     |   14 +++++++++-----
 net.h     |    1 +
 net/hub.c |   23 +++++++++++++++++++++--
 net/hub.h |    1 +
 4 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/net.c b/net.c
index 61dc28d..6cedc7a 100644
--- a/net.c
+++ b/net.c
@@ -1068,7 +1068,7 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
     return 0;
 }
 
-static void print_net_client(Monitor *mon, NetClientState *vc)
+void print_net_client(Monitor *mon, NetClientState *vc)
 {
     monitor_printf(mon, "%s: type=%s,%s\n", vc->name,
                    net_client_types[vc->info->type].type, vc->info_str);
@@ -1079,20 +1079,24 @@ void do_info_network(Monitor *mon)
     NetClientState *nc, *peer;
     net_client_type type;
 
-    monitor_printf(mon, "Devices not on any VLAN:\n");
+    net_hub_info(mon);
+
     QTAILQ_FOREACH(nc, &net_clients, next) {
         peer = nc->peer;
         type = nc->info->type;
+
+        if (net_hub_port_peer_nc(nc)) {
+            continue;
+        }
+
         if (!peer || type == NET_CLIENT_TYPE_NIC) {
-            monitor_printf(mon, "  ");
             print_net_client(mon, nc);
         } /* else it's a netdev connected to a NIC, printed with the NIC */
         if (peer && type == NET_CLIENT_TYPE_NIC) {
-            monitor_printf(mon, "   \\ ");
+            monitor_printf(mon, " \\ ");
             print_net_client(mon, peer);
         }
     }
-    net_hub_info(mon);
 }
 
 void qmp_set_link(const char *name, bool up, Error **errp)
diff --git a/net.h b/net.h
index 250669a..0692283 100644
--- a/net.h
+++ b/net.h
@@ -112,6 +112,7 @@ void qemu_check_nic_model(NICInfo *nd, const char *model);
 int qemu_find_nic_model(NICInfo *nd, const char * const *models,
                         const char *default_model);
 
+void print_net_client(Monitor *mon, NetClientState *vc);
 void do_info_network(Monitor *mon);
 
 /* NIC info */
diff --git a/net/hub.c b/net/hub.c
index 122de69..230d86a 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -184,6 +184,25 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
 }
 
 /**
+ * Determine if one nc peers with one hub port
+ */
+bool net_hub_port_peer_nc(NetClientState *nc)
+{
+    NetHub *hub;
+    NetHubPort *port;
+
+    QLIST_FOREACH(hub, &hubs, next) {
+        QLIST_FOREACH(port, &hub->ports, next) {
+            if (nc == port->nc.peer) {
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+/**
  * Print hub configuration
  */
 void net_hub_info(Monitor *mon)
@@ -194,8 +213,8 @@ void net_hub_info(Monitor *mon)
     QLIST_FOREACH(hub, &hubs, next) {
         monitor_printf(mon, "hub %u\n", hub->id);
         QLIST_FOREACH(port, &hub->ports, next) {
-            monitor_printf(mon, "    port %u peer %s\n", port->id,
-                           port->nc.peer ? port->nc.peer->name : "<none>");
+            monitor_printf(mon, " \\ ");
+            print_net_client(mon, port->nc.peer);
         }
     }
 }
diff --git a/net/hub.h b/net/hub.h
index ff5024a..550189b 100644
--- a/net/hub.h
+++ b/net/hub.h
@@ -23,5 +23,6 @@ NetClientState *net_hub_find_client_by_name(unsigned int hub_id,
 void net_hub_info(Monitor *mon);
 int net_hub_id_for_client(NetClientState *nc, unsigned int *id);
 void net_hub_check_clients(void);
+bool net_hub_port_peer_nc(NetClientState *nc);
 
 #endif /* NET_HUB_H */
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 14/16] net: cleanup deliver/deliver_iov func pointers
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (12 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 15/16] net: determine if packets can be sent before net queue deliver packets zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 16/16] hub: add the support for hub own flow control zwu.kernel
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>

Reviewed-by:   Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 net.c       |   35 +++++++++++------------------------
 net.h       |   11 +++++++++++
 net/queue.c |   13 ++++---------
 net/queue.h |   17 ++---------------
 4 files changed, 28 insertions(+), 48 deletions(-)

diff --git a/net.c b/net.c
index 6cedc7a..3a92d87 100644
--- a/net.c
+++ b/net.c
@@ -181,17 +181,6 @@ static char *assign_name(NetClientState *nc1, const char *model)
     return g_strdup(buf);
 }
 
-static ssize_t qemu_deliver_packet(NetClientState *sender,
-                                   unsigned flags,
-                                   const uint8_t *data,
-                                   size_t size,
-                                   void *opaque);
-static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
-                                       unsigned flags,
-                                       const struct iovec *iov,
-                                       int iovcnt,
-                                       void *opaque);
-
 NetClientState *qemu_new_net_client(NetClientInfo *info,
                                     NetClientState *peer,
                                     const char *model,
@@ -218,9 +207,7 @@ NetClientState *qemu_new_net_client(NetClientInfo *info,
     }
     QTAILQ_INSERT_TAIL(&net_clients, nc, next);
 
-    nc->send_queue = qemu_new_net_queue(qemu_deliver_packet,
-                                        qemu_deliver_packet_iov,
-                                        nc);
+    nc->send_queue = qemu_new_net_queue(nc);
 
     return nc;
 }
@@ -324,11 +311,11 @@ int qemu_can_send_packet(NetClientState *sender)
     return 1;
 }
 
-static ssize_t qemu_deliver_packet(NetClientState *sender,
-                                   unsigned flags,
-                                   const uint8_t *data,
-                                   size_t size,
-                                   void *opaque)
+ssize_t qemu_deliver_packet(NetClientState *sender,
+                            unsigned flags,
+                            const uint8_t *data,
+                            size_t size,
+                            void *opaque)
 {
     NetClientState *nc = opaque;
     ssize_t ret;
@@ -421,11 +408,11 @@ static ssize_t nc_sendv_compat(NetClientState *nc, const struct iovec *iov,
     return nc->info->receive(nc, buffer, offset);
 }
 
-static ssize_t qemu_deliver_packet_iov(NetClientState *sender,
-                                       unsigned flags,
-                                       const struct iovec *iov,
-                                       int iovcnt,
-                                       void *opaque)
+ssize_t qemu_deliver_packet_iov(NetClientState *sender,
+                                unsigned flags,
+                                const struct iovec *iov,
+                                int iovcnt,
+                                void *opaque)
 {
     NetClientState *nc = opaque;
 
diff --git a/net.h b/net.h
index 0692283..08306a4 100644
--- a/net.h
+++ b/net.h
@@ -112,6 +112,17 @@ void qemu_check_nic_model(NICInfo *nd, const char *model);
 int qemu_find_nic_model(NICInfo *nd, const char * const *models,
                         const char *default_model);
 
+ssize_t qemu_deliver_packet(NetClientState *sender,
+                            unsigned flags,
+                            const uint8_t *data,
+                            size_t size,
+                            void *opaque);
+ssize_t qemu_deliver_packet_iov(NetClientState *sender,
+                            unsigned flags,
+                            const struct iovec *iov,
+                            int iovcnt,
+                            void *opaque);
+
 void print_net_client(Monitor *mon, NetClientState *vc);
 void do_info_network(Monitor *mon);
 
diff --git a/net/queue.c b/net/queue.c
index 35c3463..0afd783 100644
--- a/net/queue.c
+++ b/net/queue.c
@@ -23,6 +23,7 @@
 
 #include "net/queue.h"
 #include "qemu-queue.h"
+#include "net.h"
 
 /* The delivery handler may only return zero if it will call
  * qemu_net_queue_flush() when it determines that it is once again able
@@ -48,8 +49,6 @@ struct NetPacket {
 };
 
 struct NetQueue {
-    NetPacketDeliver *deliver;
-    NetPacketDeliverIOV *deliver_iov;
     void *opaque;
 
     QTAILQ_HEAD(packets, NetPacket) packets;
@@ -57,16 +56,12 @@ struct NetQueue {
     unsigned delivering : 1;
 };
 
-NetQueue *qemu_new_net_queue(NetPacketDeliver *deliver,
-                             NetPacketDeliverIOV *deliver_iov,
-                             void *opaque)
+NetQueue *qemu_new_net_queue(void *opaque)
 {
     NetQueue *queue;
 
     queue = g_malloc0(sizeof(NetQueue));
 
-    queue->deliver = deliver;
-    queue->deliver_iov = deliver_iov;
     queue->opaque = opaque;
 
     QTAILQ_INIT(&queue->packets);
@@ -151,7 +146,7 @@ static ssize_t qemu_net_queue_deliver(NetQueue *queue,
     ssize_t ret = -1;
 
     queue->delivering = 1;
-    ret = queue->deliver(sender, flags, data, size, queue->opaque);
+    ret = qemu_deliver_packet(sender, flags, data, size, queue->opaque);
     queue->delivering = 0;
 
     return ret;
@@ -166,7 +161,7 @@ static ssize_t qemu_net_queue_deliver_iov(NetQueue *queue,
     ssize_t ret = -1;
 
     queue->delivering = 1;
-    ret = queue->deliver_iov(sender, flags, iov, iovcnt, queue->opaque);
+    ret = qemu_deliver_packet_iov(sender, flags, iov, iovcnt, queue->opaque);
     queue->delivering = 0;
 
     return ret;
diff --git a/net/queue.h b/net/queue.h
index d8eac0b..9d44a9b 100644
--- a/net/queue.h
+++ b/net/queue.h
@@ -31,24 +31,11 @@ typedef struct NetQueue NetQueue;
 
 typedef void (NetPacketSent) (NetClientState *sender, ssize_t ret);
 
-typedef ssize_t (NetPacketDeliver) (NetClientState *sender,
-                                    unsigned flags,
-                                    const uint8_t *buf,
-                                    size_t size,
-                                    void *opaque);
-
-typedef ssize_t (NetPacketDeliverIOV) (NetClientState *sender,
-                                       unsigned flags,
-                                       const struct iovec *iov,
-                                       int iovcnt,
-                                       void *opaque);
-
 #define QEMU_NET_PACKET_FLAG_NONE  0
 #define QEMU_NET_PACKET_FLAG_RAW  (1<<0)
 
-NetQueue *qemu_new_net_queue(NetPacketDeliver *deliver,
-                             NetPacketDeliverIOV *deliver_iov,
-                             void *opaque);
+NetQueue *qemu_new_net_queue(void *opaque);
+
 void qemu_del_net_queue(NetQueue *queue);
 
 ssize_t qemu_net_queue_send(NetQueue *queue,
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 15/16] net: determine if packets can be sent before net queue deliver packets
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (13 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 14/16] net: cleanup deliver/deliver_iov func pointers zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 16/16] hub: add the support for hub own flow control zwu.kernel
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>

Reviewed-by:   Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 net/queue.c      |    8 ++++----
 net/slirp.c      |    7 -------
 slirp/if.c       |    5 -----
 slirp/libslirp.h |    1 -
 4 files changed, 4 insertions(+), 17 deletions(-)

diff --git a/net/queue.c b/net/queue.c
index 0afd783..7484d2a 100644
--- a/net/queue.c
+++ b/net/queue.c
@@ -176,8 +176,8 @@ ssize_t qemu_net_queue_send(NetQueue *queue,
 {
     ssize_t ret;
 
-    if (queue->delivering) {
-        return qemu_net_queue_append(queue, sender, flags, data, size, NULL);
+    if (queue->delivering || !qemu_can_send_packet(sender)) {
+        return qemu_net_queue_append(queue, sender, flags, data, size, sent_cb);
     }
 
     ret = qemu_net_queue_deliver(queue, sender, flags, data, size);
@@ -200,8 +200,8 @@ ssize_t qemu_net_queue_send_iov(NetQueue *queue,
 {
     ssize_t ret;
 
-    if (queue->delivering) {
-        return qemu_net_queue_append_iov(queue, sender, flags, iov, iovcnt, NULL);
+    if (queue->delivering || !qemu_can_send_packet(sender)) {
+        return qemu_net_queue_append_iov(queue, sender, flags, iov, iovcnt, sent_cb);
     }
 
     ret = qemu_net_queue_deliver_iov(queue, sender, flags, iov, iovcnt);
diff --git a/net/slirp.c b/net/slirp.c
index a6ede2b..248f7ff 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -96,13 +96,6 @@ static void slirp_smb_cleanup(SlirpState *s);
 static inline void slirp_smb_cleanup(SlirpState *s) { }
 #endif
 
-int slirp_can_output(void *opaque)
-{
-    SlirpState *s = opaque;
-
-    return qemu_can_send_packet(&s->nc);
-}
-
 void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len)
 {
     SlirpState *s = opaque;
diff --git a/slirp/if.c b/slirp/if.c
index 096cf6f..533295d 100644
--- a/slirp/if.c
+++ b/slirp/if.c
@@ -177,11 +177,6 @@ void if_start(Slirp *slirp)
     }
 
     while (ifm_next) {
-        /* check if we can really output */
-        if (!slirp_can_output(slirp->opaque)) {
-            break;
-        }
-
         ifm = ifm_next;
         from_batchq = next_from_batchq;
 
diff --git a/slirp/libslirp.h b/slirp/libslirp.h
index 77527ad..9b471b5 100644
--- a/slirp/libslirp.h
+++ b/slirp/libslirp.h
@@ -25,7 +25,6 @@ void slirp_select_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds,
 void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len);
 
 /* you must provide the following functions: */
-int slirp_can_output(void *opaque);
 void slirp_output(void *opaque, const uint8_t *pkt, int pkt_len);
 
 int slirp_add_hostfwd(Slirp *slirp, int is_udp,
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [Qemu-devel] [PATCH v4 16/16] hub: add the support for hub own flow control
  2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
                   ` (14 preceding siblings ...)
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 15/16] net: determine if packets can be sent before net queue deliver packets zwu.kernel
@ 2012-06-04  5:29 ` zwu.kernel
  15 siblings, 0 replies; 38+ messages in thread
From: zwu.kernel @ 2012-06-04  5:29 UTC (permalink / raw)
  To: qemu-devel; +Cc: aliguori, stefanha, jan.kiszka, Zhi Yong Wu, luowenj, pbonzini

From: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>

Only when all other hub port's *peer* .can_receive() all return 1,
the source hub port .can_receive() return 1.

Reviewed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
---
 net/hub.c |   27 ++++++++++++++++++++++++---
 1 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/net/hub.c b/net/hub.c
index 230d86a..efd90b5 100644
--- a/net/hub.c
+++ b/net/hub.c
@@ -15,6 +15,7 @@
 #include "monitor.h"
 #include "net.h"
 #include "hub.h"
+#include "iov.h"
 
 /*
  * A hub broadcasts incoming packets to all its ports except the source port.
@@ -59,16 +60,16 @@ static ssize_t net_hub_receive_iov(NetHub *hub, NetHubPort *source_port,
                                    const struct iovec *iov, int iovcnt)
 {
     NetHubPort *port;
-    ssize_t ret = 0;
+    ssize_t len = iov_size(iov, iovcnt);
 
     QLIST_FOREACH(port, &hub->ports, next) {
         if (port == source_port) {
             continue;
         }
 
-        ret = qemu_sendv_packet(&port->nc, iov, iovcnt);
+        qemu_sendv_packet(&port->nc, iov, iovcnt);
     }
-    return ret;
+    return len;
 }
 
 static NetHub *net_hub_new(unsigned int id)
@@ -85,6 +86,25 @@ static NetHub *net_hub_new(unsigned int id)
     return hub;
 }
 
+static int net_hub_port_can_receive(NetClientState *nc)
+{
+    NetHubPort *port;
+    NetHubPort *src_port = DO_UPCAST(NetHubPort, nc, nc);
+    NetHub *hub = src_port->hub;
+
+    QLIST_FOREACH(port, &hub->ports, next) {
+        if (port == src_port) {
+            continue;
+        }
+
+        if (!qemu_can_send_packet(&port->nc)) {
+            return 0;
+        }
+    }
+
+    return 1;
+}
+
 static ssize_t net_hub_port_receive(NetClientState *nc,
                                     const uint8_t *buf, size_t len)
 {
@@ -111,6 +131,7 @@ static void net_hub_port_cleanup(NetClientState *nc)
 static NetClientInfo net_hub_port_info = {
     .type = NET_CLIENT_TYPE_HUB,
     .size = sizeof(NetHubPort),
+    .can_receive = net_hub_port_can_receive,
     .receive = net_hub_port_receive,
     .receive_iov = net_hub_port_receive_iov,
     .cleanup = net_hub_port_cleanup,
-- 
1.7.6

^ permalink raw reply related	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property zwu.kernel
@ 2012-06-08 13:23   ` Stefan Hajnoczi
  2012-06-08 14:48     ` Zhi Yong Wu
  0 siblings, 1 reply; 38+ messages in thread
From: Stefan Hajnoczi @ 2012-06-08 13:23 UTC (permalink / raw)
  To: zwu.kernel
  Cc: aliguori, stefanha, jan.kiszka, qemu-devel, Zhi Yong Wu, luowenj,
	pbonzini

On Mon, Jun 4, 2012 at 6:29 AM,  <zwu.kernel@gmail.com> wrote:
> From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
>
> The vlan feature is implemented using hubs and no longer uses
> special-purpose VLANState structs that are accessible as qdev
> properties.
>
> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
> ---
>  hw/qdev-properties.c |   72 --------------------------------------------------
>  hw/qdev.c            |    2 -
>  hw/qdev.h            |    4 ---
>  net.h                |    3 --
>  4 files changed, 0 insertions(+), 81 deletions(-)

This commit looks suspicious because it removes a user-visible qdev
property but we're trying to preserve backward compatibility.  This
command-line will break:

x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1

Instead of dropping the qdev_prop_vlan completely the
hw/qdev-properties.c code needs to call net/hub.h external functions
to implement equivalent functionality:

1. Setting the vlan=<id> property looks up the hub port and assigns
the NICConf->peer field.
2. Getting the vlan property looks up the hub id (i.e. vlan id) given
the peer.  If the peer is not a hub port the result is -1.

When I wrote this patch I missed the big picture and forgot about
backwards compatibility :(.

Do you feel comfortable rewriting this commit?

Stefan

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-08 13:23   ` Stefan Hajnoczi
@ 2012-06-08 14:48     ` Zhi Yong Wu
  2012-06-08 16:09       ` Stefan Hajnoczi
  0 siblings, 1 reply; 38+ messages in thread
From: Zhi Yong Wu @ 2012-06-08 14:48 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: aliguori, stefanha, jan.kiszka, qemu-devel, Zhi Yong Wu, luowenj,
	pbonzini

On Fri, Jun 8, 2012 at 9:23 PM, Stefan Hajnoczi <stefanha@gmail.com> wrote:
> On Mon, Jun 4, 2012 at 6:29 AM,  <zwu.kernel@gmail.com> wrote:
>> From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
>>
>> The vlan feature is implemented using hubs and no longer uses
>> special-purpose VLANState structs that are accessible as qdev
>> properties.
>>
>> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>> ---
>>  hw/qdev-properties.c |   72 --------------------------------------------------
>>  hw/qdev.c            |    2 -
>>  hw/qdev.h            |    4 ---
>>  net.h                |    3 --
>>  4 files changed, 0 insertions(+), 81 deletions(-)
>
> This commit looks suspicious because it removes a user-visible qdev
> property but we're trying to preserve backward compatibility.  This
> command-line will break:
>
> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
Should this type of syntax be supported? i know this at the first time
>
> Instead of dropping the qdev_prop_vlan completely the
> hw/qdev-properties.c code needs to call net/hub.h external functions
> to implement equivalent functionality:
>
> 1. Setting the vlan=<id> property looks up the hub port and assigns
> the NICConf->peer field.
> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
> the peer.  If the peer is not a hub port the result is -1.
>
> When I wrote this patch I missed the big picture and forgot about
> backwards compatibility :(.
>
> Do you feel comfortable rewriting this commit?
Do you mean that you would like to rewrite this by yourself?
>
> Stefan



-- 
Regards,

Zhi Yong Wu

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-08 14:48     ` Zhi Yong Wu
@ 2012-06-08 16:09       ` Stefan Hajnoczi
  2012-06-09  3:04         ` Zhi Yong Wu
  0 siblings, 1 reply; 38+ messages in thread
From: Stefan Hajnoczi @ 2012-06-08 16:09 UTC (permalink / raw)
  To: Zhi Yong Wu
  Cc: aliguori, stefanha, jan.kiszka, qemu-devel, Zhi Yong Wu, luowenj,
	pbonzini

On Fri, Jun 8, 2012 at 3:48 PM, Zhi Yong Wu <zwu.kernel@gmail.com> wrote:
> On Fri, Jun 8, 2012 at 9:23 PM, Stefan Hajnoczi <stefanha@gmail.com> wrote:
>> On Mon, Jun 4, 2012 at 6:29 AM,  <zwu.kernel@gmail.com> wrote:
>>> From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
>>>
>>> The vlan feature is implemented using hubs and no longer uses
>>> special-purpose VLANState structs that are accessible as qdev
>>> properties.
>>>
>>> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
>>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>> ---
>>>  hw/qdev-properties.c |   72 --------------------------------------------------
>>>  hw/qdev.c            |    2 -
>>>  hw/qdev.h            |    4 ---
>>>  net.h                |    3 --
>>>  4 files changed, 0 insertions(+), 81 deletions(-)
>>
>> This commit looks suspicious because it removes a user-visible qdev
>> property but we're trying to preserve backward compatibility.  This
>> command-line will break:
>>
>> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
> Should this type of syntax be supported? i know this at the first time
>>
>> Instead of dropping the qdev_prop_vlan completely the
>> hw/qdev-properties.c code needs to call net/hub.h external functions
>> to implement equivalent functionality:
>>
>> 1. Setting the vlan=<id> property looks up the hub port and assigns
>> the NICConf->peer field.
>> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
>> the peer.  If the peer is not a hub port the result is -1.
>>
>> When I wrote this patch I missed the big picture and forgot about
>> backwards compatibility :(.
>>
>> Do you feel comfortable rewriting this commit?
> Do you mean that you would like to rewrite this by yourself?

No, I meant do you agree with the changes that I suggested?  I wanted
to make sure that you understand the problem that I'm describing and
how it could be solved.

Stefan

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-08 16:09       ` Stefan Hajnoczi
@ 2012-06-09  3:04         ` Zhi Yong Wu
  2012-06-11  6:28           ` Paolo Bonzini
  0 siblings, 1 reply; 38+ messages in thread
From: Zhi Yong Wu @ 2012-06-09  3:04 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: aliguori, stefanha, jan.kiszka, qemu-devel, Zhi Yong Wu, luowenj,
	pbonzini

On Sat, Jun 9, 2012 at 12:09 AM, Stefan Hajnoczi <stefanha@gmail.com> wrote:
> On Fri, Jun 8, 2012 at 3:48 PM, Zhi Yong Wu <zwu.kernel@gmail.com> wrote:
>> On Fri, Jun 8, 2012 at 9:23 PM, Stefan Hajnoczi <stefanha@gmail.com> wrote:
>>> On Mon, Jun 4, 2012 at 6:29 AM,  <zwu.kernel@gmail.com> wrote:
>>>> From: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
>>>>
>>>> The vlan feature is implemented using hubs and no longer uses
>>>> special-purpose VLANState structs that are accessible as qdev
>>>> properties.
>>>>
>>>> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
>>>> Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com>
>>>> ---
>>>>  hw/qdev-properties.c |   72 --------------------------------------------------
>>>>  hw/qdev.c            |    2 -
>>>>  hw/qdev.h            |    4 ---
>>>>  net.h                |    3 --
>>>>  4 files changed, 0 insertions(+), 81 deletions(-)
>>>
>>> This commit looks suspicious because it removes a user-visible qdev
>>> property but we're trying to preserve backward compatibility.  This
>>> command-line will break:
>>>
>>> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
>> Should this type of syntax be supported? i know this at the first time
>>>
>>> Instead of dropping the qdev_prop_vlan completely the
>>> hw/qdev-properties.c code needs to call net/hub.h external functions
>>> to implement equivalent functionality:
>>>
>>> 1. Setting the vlan=<id> property looks up the hub port and assigns
>>> the NICConf->peer field.
>>> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
>>> the peer.  If the peer is not a hub port the result is -1.
>>>
>>> When I wrote this patch I missed the big picture and forgot about
>>> backwards compatibility :(.
>>>
>>> Do you feel comfortable rewriting this commit?
>> Do you mean that you would like to rewrite this by yourself?
>
> No, I meant do you agree with the changes that I suggested?  I wanted
> to make sure that you understand the problem that I'm describing and
> how it could be solved.
To be honest, i am concerned if anyone uses this syntax. Since the
feature will finally be discarded, i suggest that we don't support
this now. If someone complains this later, we can fix it. If nobody
complains, that is what we hope.
>
> Stefan



-- 
Regards,

Zhi Yong Wu

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-09  3:04         ` Zhi Yong Wu
@ 2012-06-11  6:28           ` Paolo Bonzini
  2012-06-11  8:57             ` Stefan Hajnoczi
                               ` (2 more replies)
  0 siblings, 3 replies; 38+ messages in thread
From: Paolo Bonzini @ 2012-06-11  6:28 UTC (permalink / raw)
  To: Zhi Yong Wu
  Cc: aliguori, stefanha, Stefan Hajnoczi, qemu-devel, Zhi Yong Wu,
	luowenj, jan.kiszka

Il 09/06/2012 05:04, Zhi Yong Wu ha scritto:
>>>> This commit looks suspicious because it removes a user-visible qdev
>>>> property but we're trying to preserve backward compatibility.  This
>>>> command-line will break:
>>>>
>>>> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
>>>>
>>>> Instead of dropping the qdev_prop_vlan completely the
>>>> hw/qdev-properties.c code needs to call net/hub.h external functions
>>>> to implement equivalent functionality:
>>>>
>>>> 1. Setting the vlan=<id> property looks up the hub port and assigns
>>>> the NICConf->peer field.
>>>> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
>>>> the peer.  If the peer is not a hub port the result is -1.
>>>>
>>>> When I wrote this patch I missed the big picture and forgot about
>>>> backwards compatibility :(.
>>>>
> To be honest, i am concerned if anyone uses this syntax. Since the
> feature will finally be discarded, i suggest that we don't support
> this now. If someone complains this later, we can fix it. If nobody
> complains, that is what we hope.

I think you're missing the big picture of this series, which is exactly
_not_ to discard the VLAN feature, but just to rewrite it in a better way.

That said, I agree that this is a somewhat fringe usage; most people
will use -net nic,model=virtio,vlan=1 rather than "-device".  We may get
by with dropping it.  I have no strong opinion either way.

Paolo

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-11  6:28           ` Paolo Bonzini
@ 2012-06-11  8:57             ` Stefan Hajnoczi
  2012-06-11 14:24               ` Zhi Yong Wu
  2012-06-11 14:15             ` Zhi Yong Wu
  2012-06-11 20:49             ` Anthony Liguori
  2 siblings, 1 reply; 38+ messages in thread
From: Stefan Hajnoczi @ 2012-06-11  8:57 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: aliguori, Stefan Hajnoczi, qemu-devel, Zhi Yong Wu, Zhi Yong Wu,
	luowenj, jan.kiszka

On Mon, Jun 11, 2012 at 08:28:57AM +0200, Paolo Bonzini wrote:
> Il 09/06/2012 05:04, Zhi Yong Wu ha scritto:
> >>>> This commit looks suspicious because it removes a user-visible qdev
> >>>> property but we're trying to preserve backward compatibility.  This
> >>>> command-line will break:
> >>>>
> >>>> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
> >>>>
> >>>> Instead of dropping the qdev_prop_vlan completely the
> >>>> hw/qdev-properties.c code needs to call net/hub.h external functions
> >>>> to implement equivalent functionality:
> >>>>
> >>>> 1. Setting the vlan=<id> property looks up the hub port and assigns
> >>>> the NICConf->peer field.
> >>>> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
> >>>> the peer.  If the peer is not a hub port the result is -1.
> >>>>
> >>>> When I wrote this patch I missed the big picture and forgot about
> >>>> backwards compatibility :(.
> >>>>
> > To be honest, i am concerned if anyone uses this syntax. Since the
> > feature will finally be discarded, i suggest that we don't support
> > this now. If someone complains this later, we can fix it. If nobody
> > complains, that is what we hope.
> 
> I think you're missing the big picture of this series, which is exactly
> _not_ to discard the VLAN feature, but just to rewrite it in a better way.
> 
> That said, I agree that this is a somewhat fringe usage; most people
> will use -net nic,model=virtio,vlan=1 rather than "-device".  We may get
> by with dropping it.  I have no strong opinion either way.

Either we keep backwards compatibility or we don't.  Taking a middle
path where we preserve only some of the "VLAN" syntax is confusing and
inconsistent.

Like Paolo said, the point here is not to drop "VLAN" support.  We're
simply moving this feature into a regular net client (the hub) so that
the special case "VLAN" code in net.c can be removed.

Stefan

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-11  6:28           ` Paolo Bonzini
  2012-06-11  8:57             ` Stefan Hajnoczi
@ 2012-06-11 14:15             ` Zhi Yong Wu
  2012-06-11 20:05               ` Luiz Capitulino
  2012-06-11 20:49             ` Anthony Liguori
  2 siblings, 1 reply; 38+ messages in thread
From: Zhi Yong Wu @ 2012-06-11 14:15 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: aliguori, stefanha, Stefan Hajnoczi, qemu-devel, Zhi Yong Wu,
	luowenj, jan.kiszka

On Mon, Jun 11, 2012 at 2:28 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 09/06/2012 05:04, Zhi Yong Wu ha scritto:
>>>>> This commit looks suspicious because it removes a user-visible qdev
>>>>> property but we're trying to preserve backward compatibility.  This
>>>>> command-line will break:
>>>>>
>>>>> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
>>>>>
>>>>> Instead of dropping the qdev_prop_vlan completely the
>>>>> hw/qdev-properties.c code needs to call net/hub.h external functions
>>>>> to implement equivalent functionality:
>>>>>
>>>>> 1. Setting the vlan=<id> property looks up the hub port and assigns
>>>>> the NICConf->peer field.
>>>>> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
>>>>> the peer.  If the peer is not a hub port the result is -1.
>>>>>
>>>>> When I wrote this patch I missed the big picture and forgot about
>>>>> backwards compatibility :(.
>>>>>
>> To be honest, i am concerned if anyone uses this syntax. Since the
>> feature will finally be discarded, i suggest that we don't support
>> this now. If someone complains this later, we can fix it. If nobody
>> complains, that is what we hope.
>
> I think you're missing the big picture of this series, which is exactly
> _not_ to discard the VLAN feature, but just to rewrite it in a better way.
Yeah, i know that this series are rewriting VLAN feature in one better way.

What i mean was that luiz and other some guys think that the -net
syntax should be completely removed.

>
> That said, I agree that this is a somewhat fringe usage; most people
> will use -net nic,model=virtio,vlan=1 rather than "-device".  We may get
Yes.
> by with dropping it.  I have no strong opinion either way.
>
> Paolo
>



-- 
Regards,

Zhi Yong Wu

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-11  8:57             ` Stefan Hajnoczi
@ 2012-06-11 14:24               ` Zhi Yong Wu
  2012-06-11 14:42                 ` Stefan Hajnoczi
  0 siblings, 1 reply; 38+ messages in thread
From: Zhi Yong Wu @ 2012-06-11 14:24 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: aliguori, jan.kiszka, qemu-devel, Zhi Yong Wu, luowenj,
	Stefan Hajnoczi, Paolo Bonzini

On Mon, Jun 11, 2012 at 4:57 PM, Stefan Hajnoczi
<stefanha@linux.vnet.ibm.com> wrote:
> On Mon, Jun 11, 2012 at 08:28:57AM +0200, Paolo Bonzini wrote:
>> Il 09/06/2012 05:04, Zhi Yong Wu ha scritto:
>> >>>> This commit looks suspicious because it removes a user-visible qdev
>> >>>> property but we're trying to preserve backward compatibility.  This
>> >>>> command-line will break:
>> >>>>
>> >>>> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
>> >>>>
>> >>>> Instead of dropping the qdev_prop_vlan completely the
>> >>>> hw/qdev-properties.c code needs to call net/hub.h external functions
>> >>>> to implement equivalent functionality:
>> >>>>
>> >>>> 1. Setting the vlan=<id> property looks up the hub port and assigns
>> >>>> the NICConf->peer field.
>> >>>> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
>> >>>> the peer.  If the peer is not a hub port the result is -1.
>> >>>>
>> >>>> When I wrote this patch I missed the big picture and forgot about
>> >>>> backwards compatibility :(.
>> >>>>
>> > To be honest, i am concerned if anyone uses this syntax. Since the
>> > feature will finally be discarded, i suggest that we don't support
>> > this now. If someone complains this later, we can fix it. If nobody
>> > complains, that is what we hope.
>>
>> I think you're missing the big picture of this series, which is exactly
>> _not_ to discard the VLAN feature, but just to rewrite it in a better way.
>>
>> That said, I agree that this is a somewhat fringe usage; most people
>> will use -net nic,model=virtio,vlan=1 rather than "-device".  We may get
>> by with dropping it.  I have no strong opinion either way.
>
> Either we keep backwards compatibility or we don't.  Taking a middle
> path where we preserve only some of the "VLAN" syntax is confusing and
> inconsistent.
in terms of technology, i fully agree with you, but in terms of
usefulness and our business, it will waste our effort, time and is
meaningless if nobody or no customers use this syntax. As i said, if
someone complain this later, we can fix it.

>
> Like Paolo said, the point here is not to drop "VLAN" support.  We're
> simply moving this feature into a regular net client (the hub) so that
> the special case "VLAN" code in net.c can be removed.
>
> Stefan
>



-- 
Regards,

Zhi Yong Wu

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-11 14:24               ` Zhi Yong Wu
@ 2012-06-11 14:42                 ` Stefan Hajnoczi
  2012-06-12  0:54                   ` Zhi Yong Wu
  0 siblings, 1 reply; 38+ messages in thread
From: Stefan Hajnoczi @ 2012-06-11 14:42 UTC (permalink / raw)
  To: Zhi Yong Wu
  Cc: aliguori, Stefan Hajnoczi, jan.kiszka, qemu-devel, Zhi Yong Wu,
	luowenj, Paolo Bonzini

On Mon, Jun 11, 2012 at 3:24 PM, Zhi Yong Wu <zwu.kernel@gmail.com> wrote:
> On Mon, Jun 11, 2012 at 4:57 PM, Stefan Hajnoczi
> <stefanha@linux.vnet.ibm.com> wrote:
>> On Mon, Jun 11, 2012 at 08:28:57AM +0200, Paolo Bonzini wrote:
>>> Il 09/06/2012 05:04, Zhi Yong Wu ha scritto:
>>> >>>> This commit looks suspicious because it removes a user-visible qdev
>>> >>>> property but we're trying to preserve backward compatibility.  This
>>> >>>> command-line will break:
>>> >>>>
>>> >>>> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
>>> >>>>
>>> >>>> Instead of dropping the qdev_prop_vlan completely the
>>> >>>> hw/qdev-properties.c code needs to call net/hub.h external functions
>>> >>>> to implement equivalent functionality:
>>> >>>>
>>> >>>> 1. Setting the vlan=<id> property looks up the hub port and assigns
>>> >>>> the NICConf->peer field.
>>> >>>> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
>>> >>>> the peer.  If the peer is not a hub port the result is -1.
>>> >>>>
>>> >>>> When I wrote this patch I missed the big picture and forgot about
>>> >>>> backwards compatibility :(.
>>> >>>>
>>> > To be honest, i am concerned if anyone uses this syntax. Since the
>>> > feature will finally be discarded, i suggest that we don't support
>>> > this now. If someone complains this later, we can fix it. If nobody
>>> > complains, that is what we hope.
>>>
>>> I think you're missing the big picture of this series, which is exactly
>>> _not_ to discard the VLAN feature, but just to rewrite it in a better way.
>>>
>>> That said, I agree that this is a somewhat fringe usage; most people
>>> will use -net nic,model=virtio,vlan=1 rather than "-device".  We may get
>>> by with dropping it.  I have no strong opinion either way.
>>
>> Either we keep backwards compatibility or we don't.  Taking a middle
>> path where we preserve only some of the "VLAN" syntax is confusing and
>> inconsistent.
> in terms of technology, i fully agree with you, but in terms of
> usefulness and our business, it will waste our effort, time and is
> meaningless if nobody or no customers use this syntax. As i said, if
> someone complain this later, we can fix it.

When users upgrade QEMU versions and find their setup is now broken
QEMU's reputation will be damaged.  You can't build critical systems
on top of software which keeps changing and breaking.  Fixing it after
a user hits the problem is not okay, users won't trust us if we do
that.

We need to be disciplined when it comes to backwards compatibility.
Either we support the "VLAN" feature or we drop it.  We already had
this discussion in another thread, here's what Anthony had to say:

"Dropping features is only something that should be approached lightly and
certainly not something that should be done just because you don't like a
particular bit of code."

http://permalink.gmane.org/gmane.comp.emulators.qemu/153600

Stefan

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-11 14:15             ` Zhi Yong Wu
@ 2012-06-11 20:05               ` Luiz Capitulino
  2012-06-12  0:55                 ` Zhi Yong Wu
  0 siblings, 1 reply; 38+ messages in thread
From: Luiz Capitulino @ 2012-06-11 20:05 UTC (permalink / raw)
  To: Zhi Yong Wu
  Cc: aliguori, stefanha, Stefan Hajnoczi, qemu-devel, Zhi Yong Wu,
	luowenj, jan.kiszka, Paolo Bonzini

On Mon, 11 Jun 2012 22:15:55 +0800
Zhi Yong Wu <zwu.kernel@gmail.com> wrote:

> On Mon, Jun 11, 2012 at 2:28 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> > Il 09/06/2012 05:04, Zhi Yong Wu ha scritto:
> >>>>> This commit looks suspicious because it removes a user-visible qdev
> >>>>> property but we're trying to preserve backward compatibility.  This
> >>>>> command-line will break:
> >>>>>
> >>>>> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
> >>>>>
> >>>>> Instead of dropping the qdev_prop_vlan completely the
> >>>>> hw/qdev-properties.c code needs to call net/hub.h external functions
> >>>>> to implement equivalent functionality:
> >>>>>
> >>>>> 1. Setting the vlan=<id> property looks up the hub port and assigns
> >>>>> the NICConf->peer field.
> >>>>> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
> >>>>> the peer.  If the peer is not a hub port the result is -1.
> >>>>>
> >>>>> When I wrote this patch I missed the big picture and forgot about
> >>>>> backwards compatibility :(.
> >>>>>
> >> To be honest, i am concerned if anyone uses this syntax. Since the
> >> feature will finally be discarded, i suggest that we don't support
> >> this now. If someone complains this later, we can fix it. If nobody
> >> complains, that is what we hope.
> >
> > I think you're missing the big picture of this series, which is exactly
> > _not_ to discard the VLAN feature, but just to rewrite it in a better way.
> Yeah, i know that this series are rewriting VLAN feature in one better way.
> 
> What i mean was that luiz and other some guys think that the -net
> syntax should be completely removed.

One of the motivations for having the hub feature is to preserve the vlan
functionality, in that case we shouldn't break cmd-line backwards compatibility.

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-11  6:28           ` Paolo Bonzini
  2012-06-11  8:57             ` Stefan Hajnoczi
  2012-06-11 14:15             ` Zhi Yong Wu
@ 2012-06-11 20:49             ` Anthony Liguori
  2 siblings, 0 replies; 38+ messages in thread
From: Anthony Liguori @ 2012-06-11 20:49 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: stefanha, Stefan Hajnoczi, qemu-devel, Zhi Yong Wu, Zhi Yong Wu,
	luowenj, jan.kiszka

On 06/11/2012 01:28 AM, Paolo Bonzini wrote:
> Il 09/06/2012 05:04, Zhi Yong Wu ha scritto:
>>>>> This commit looks suspicious because it removes a user-visible qdev
>>>>> property but we're trying to preserve backward compatibility.  This
>>>>> command-line will break:
>>>>>
>>>>> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
>>>>>
>>>>> Instead of dropping the qdev_prop_vlan completely the
>>>>> hw/qdev-properties.c code needs to call net/hub.h external functions
>>>>> to implement equivalent functionality:
>>>>>
>>>>> 1. Setting the vlan=<id>  property looks up the hub port and assigns
>>>>> the NICConf->peer field.
>>>>> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
>>>>> the peer.  If the peer is not a hub port the result is -1.
>>>>>
>>>>> When I wrote this patch I missed the big picture and forgot about
>>>>> backwards compatibility :(.
>>>>>
>> To be honest, i am concerned if anyone uses this syntax. Since the
>> feature will finally be discarded, i suggest that we don't support
>> this now. If someone complains this later, we can fix it. If nobody
>> complains, that is what we hope.
>
> I think you're missing the big picture of this series, which is exactly
> _not_ to discard the VLAN feature, but just to rewrite it in a better way.
>
> That said, I agree that this is a somewhat fringe usage; most people
> will use -net nic,model=virtio,vlan=1 rather than "-device".  We may get
> by with dropping it.  I have no strong opinion either way.

I have a strong opinion :-)

We shipped a version with it, so now we have to support it.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-11 14:42                 ` Stefan Hajnoczi
@ 2012-06-12  0:54                   ` Zhi Yong Wu
  0 siblings, 0 replies; 38+ messages in thread
From: Zhi Yong Wu @ 2012-06-12  0:54 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: aliguori, Stefan Hajnoczi, jan.kiszka, qemu-devel, Zhi Yong Wu,
	luowenj, Paolo Bonzini

On Mon, Jun 11, 2012 at 10:42 PM, Stefan Hajnoczi <stefanha@gmail.com> wrote:
> On Mon, Jun 11, 2012 at 3:24 PM, Zhi Yong Wu <zwu.kernel@gmail.com> wrote:
>> On Mon, Jun 11, 2012 at 4:57 PM, Stefan Hajnoczi
>> <stefanha@linux.vnet.ibm.com> wrote:
>>> On Mon, Jun 11, 2012 at 08:28:57AM +0200, Paolo Bonzini wrote:
>>>> Il 09/06/2012 05:04, Zhi Yong Wu ha scritto:
>>>> >>>> This commit looks suspicious because it removes a user-visible qdev
>>>> >>>> property but we're trying to preserve backward compatibility.  This
>>>> >>>> command-line will break:
>>>> >>>>
>>>> >>>> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
>>>> >>>>
>>>> >>>> Instead of dropping the qdev_prop_vlan completely the
>>>> >>>> hw/qdev-properties.c code needs to call net/hub.h external functions
>>>> >>>> to implement equivalent functionality:
>>>> >>>>
>>>> >>>> 1. Setting the vlan=<id> property looks up the hub port and assigns
>>>> >>>> the NICConf->peer field.
>>>> >>>> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
>>>> >>>> the peer.  If the peer is not a hub port the result is -1.
>>>> >>>>
>>>> >>>> When I wrote this patch I missed the big picture and forgot about
>>>> >>>> backwards compatibility :(.
>>>> >>>>
>>>> > To be honest, i am concerned if anyone uses this syntax. Since the
>>>> > feature will finally be discarded, i suggest that we don't support
>>>> > this now. If someone complains this later, we can fix it. If nobody
>>>> > complains, that is what we hope.
>>>>
>>>> I think you're missing the big picture of this series, which is exactly
>>>> _not_ to discard the VLAN feature, but just to rewrite it in a better way.
>>>>
>>>> That said, I agree that this is a somewhat fringe usage; most people
>>>> will use -net nic,model=virtio,vlan=1 rather than "-device".  We may get
>>>> by with dropping it.  I have no strong opinion either way.
>>>
>>> Either we keep backwards compatibility or we don't.  Taking a middle
>>> path where we preserve only some of the "VLAN" syntax is confusing and
>>> inconsistent.
>> in terms of technology, i fully agree with you, but in terms of
>> usefulness and our business, it will waste our effort, time and is
>> meaningless if nobody or no customers use this syntax. As i said, if
>> someone complain this later, we can fix it.
>
> When users upgrade QEMU versions and find their setup is now broken
> QEMU's reputation will be damaged.  You can't build critical systems
> on top of software which keeps changing and breaking.  Fixing it after
> a user hits the problem is not okay, users won't trust us if we do
> that.
OK, i will try to work on this.
>
> We need to be disciplined when it comes to backwards compatibility.
> Either we support the "VLAN" feature or we drop it.  We already had
> this discussion in another thread, here's what Anthony had to say:
>
> "Dropping features is only something that should be approached lightly and
> certainly not something that should be done just because you don't like a
> particular bit of code."
>
> http://permalink.gmane.org/gmane.comp.emulators.qemu/153600
>
> Stefan



-- 
Regards,

Zhi Yong Wu

^ permalink raw reply	[flat|nested] 38+ messages in thread

* Re: [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property
  2012-06-11 20:05               ` Luiz Capitulino
@ 2012-06-12  0:55                 ` Zhi Yong Wu
  0 siblings, 0 replies; 38+ messages in thread
From: Zhi Yong Wu @ 2012-06-12  0:55 UTC (permalink / raw)
  To: Luiz Capitulino
  Cc: aliguori, stefanha, Stefan Hajnoczi, qemu-devel, Zhi Yong Wu,
	luowenj, jan.kiszka, Paolo Bonzini

On Tue, Jun 12, 2012 at 4:05 AM, Luiz Capitulino <lcapitulino@redhat.com> wrote:
> On Mon, 11 Jun 2012 22:15:55 +0800
> Zhi Yong Wu <zwu.kernel@gmail.com> wrote:
>
>> On Mon, Jun 11, 2012 at 2:28 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
>> > Il 09/06/2012 05:04, Zhi Yong Wu ha scritto:
>> >>>>> This commit looks suspicious because it removes a user-visible qdev
>> >>>>> property but we're trying to preserve backward compatibility.  This
>> >>>>> command-line will break:
>> >>>>>
>> >>>>> x86_64-softmmu/qemu-system-x86_64 -net user,vlan=1 -device virtio-net-pci,vlan=1
>> >>>>>
>> >>>>> Instead of dropping the qdev_prop_vlan completely the
>> >>>>> hw/qdev-properties.c code needs to call net/hub.h external functions
>> >>>>> to implement equivalent functionality:
>> >>>>>
>> >>>>> 1. Setting the vlan=<id> property looks up the hub port and assigns
>> >>>>> the NICConf->peer field.
>> >>>>> 2. Getting the vlan property looks up the hub id (i.e. vlan id) given
>> >>>>> the peer.  If the peer is not a hub port the result is -1.
>> >>>>>
>> >>>>> When I wrote this patch I missed the big picture and forgot about
>> >>>>> backwards compatibility :(.
>> >>>>>
>> >> To be honest, i am concerned if anyone uses this syntax. Since the
>> >> feature will finally be discarded, i suggest that we don't support
>> >> this now. If someone complains this later, we can fix it. If nobody
>> >> complains, that is what we hope.
>> >
>> > I think you're missing the big picture of this series, which is exactly
>> > _not_ to discard the VLAN feature, but just to rewrite it in a better way.
>> Yeah, i know that this series are rewriting VLAN feature in one better way.
>>
>> What i mean was that luiz and other some guys think that the -net
>> syntax should be completely removed.
>
> One of the motivations for having the hub feature is to preserve the vlan
> functionality, in that case we shouldn't break cmd-line backwards compatibility.
 OK, thanks.



-- 
Regards,

Zhi Yong Wu

^ permalink raw reply	[flat|nested] 38+ messages in thread

end of thread, other threads:[~2012-06-12  0:56 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-04  5:29 [Qemu-devel] [PATCH v4 00/16] hub-based networking patches zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 01/16] net: Add a hub net client zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 02/16] net: Use hubs for the vlan feature zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 03/16] net: Look up 'vlan' net clients using hubs zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 04/16] hub: Check that hubs are configured correctly zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 05/16] net: Drop vlan argument to qemu_new_net_client() zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 06/16] net: Remove vlan qdev property zwu.kernel
2012-06-08 13:23   ` Stefan Hajnoczi
2012-06-08 14:48     ` Zhi Yong Wu
2012-06-08 16:09       ` Stefan Hajnoczi
2012-06-09  3:04         ` Zhi Yong Wu
2012-06-11  6:28           ` Paolo Bonzini
2012-06-11  8:57             ` Stefan Hajnoczi
2012-06-11 14:24               ` Zhi Yong Wu
2012-06-11 14:42                 ` Stefan Hajnoczi
2012-06-12  0:54                   ` Zhi Yong Wu
2012-06-11 14:15             ` Zhi Yong Wu
2012-06-11 20:05               ` Luiz Capitulino
2012-06-12  0:55                 ` Zhi Yong Wu
2012-06-11 20:49             ` Anthony Liguori
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 07/16] net: Remove vlan code from net.c zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 08/16] net: Remove VLANState zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 09/16] net: Rename non_vlan_clients to net_clients zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 10/16] net: Rename VLANClientState to NetClientState zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 11/16] net: Rename vc local variables to nc zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 12/16] net: Rename qemu_del_vlan_client() to qemu_del_net_client() zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 14/16] net: cleanup deliver/deliver_iov func pointers zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 15/16] net: determine if packets can be sent before net queue deliver packets zwu.kernel
2012-06-04  5:29 ` [Qemu-devel] [PATCH v4 16/16] hub: add the support for hub own flow control zwu.kernel
  -- strict thread matches above, loose matches on Subject: below --
2012-05-25 14:11 [Qemu-devel] [PATCH v4 13/16] net: Make "info network" output more readable info zwu.kernel
2012-05-25 14:02 zwu.kernel
2012-05-25 14:17 ` Jan Kiszka
2012-05-25 14:25   ` Zhi Yong Wu
2012-05-25 14:40     ` Jan Kiszka
2012-05-25 14:44       ` Zhi Yong Wu
2012-05-25 14:50         ` Jan Kiszka
2012-05-25 14:56           ` Zhi Yong Wu

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).