Patchwork [09/44] net: introduce qemu_new_net_client()

login
register
mail settings
Submitter Mark McLoughlin
Date Nov. 25, 2009, 6:49 p.m.
Message ID <1259174977-26212-10-git-send-email-markmc@redhat.com>
Download mbox | patch
Permalink /patch/39420/
State New
Headers show

Comments

Mark McLoughlin - Nov. 25, 2009, 6:49 p.m.
A replacement for qemu_new_vlan_client(), using NetClientInfo to
replace most arguments.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
---
 net.c |   70 +++++++++++++++++++++++++++++++++++++++++++++-------------------
 net.h |    5 ++++
 2 files changed, 54 insertions(+), 21 deletions(-)
Blue Swirl - Nov. 25, 2009, 8:36 p.m.
On Wed, Nov 25, 2009 at 6:49 PM, Mark McLoughlin <markmc@redhat.com> wrote:
> A replacement for qemu_new_vlan_client(), using NetClientInfo to
> replace most arguments.

> +VLANClientState *qemu_new_net_client(NetClientInfo *info,
> +                                     VLANState *vlan,
> +                                     VLANClientState *peer,
> +                                     const char *model,
> +                                     const char *name)
>  {

Could you change this to use const NetClientInfo *info instead? Then
the device structures could be const as well.

Patch

diff --git a/net.c b/net.c
index 599e5b0..355eb87 100644
--- a/net.c
+++ b/net.c
@@ -248,34 +248,31 @@  static ssize_t qemu_deliver_packet_iov(VLANClientState *sender,
                                        int iovcnt,
                                        void *opaque);
 
-VLANClientState *qemu_new_vlan_client(net_client_type type,
-                                      VLANState *vlan,
-                                      VLANClientState *peer,
-                                      const char *model,
-                                      const char *name,
-                                      NetCanReceive *can_receive,
-                                      NetReceive *receive,
-                                      NetReceive *receive_raw,
-                                      NetReceiveIOV *receive_iov,
-                                      NetCleanup *cleanup,
-                                      void *opaque)
+VLANClientState *qemu_new_net_client(NetClientInfo *info,
+                                     VLANState *vlan,
+                                     VLANClientState *peer,
+                                     const char *model,
+                                     const char *name)
 {
     VLANClientState *vc;
 
-    vc = qemu_mallocz(sizeof(VLANClientState));
+    assert(info->size >= sizeof(VLANClientState));
+
+    vc = qemu_mallocz(info->size);
 
-    vc->type = type;
+    vc->type = info->type;
     vc->model = qemu_strdup(model);
-    if (name)
+    if (name) {
         vc->name = qemu_strdup(name);
-    else
+    } else {
         vc->name = assign_name(vc, model);
-    vc->can_receive = can_receive;
-    vc->receive = receive;
-    vc->receive_raw = receive_raw;
-    vc->receive_iov = receive_iov;
-    vc->cleanup = cleanup;
-    vc->opaque = opaque;
+    }
+    vc->can_receive = info->can_receive;
+    vc->receive = info->receive;
+    vc->receive_raw = info->receive_raw;
+    vc->receive_iov = info->receive_iov;
+    vc->cleanup = info->cleanup;
+    vc->link_status_changed = info->link_status_changed;
 
     if (vlan) {
         assert(!peer);
@@ -296,6 +293,37 @@  VLANClientState *qemu_new_vlan_client(net_client_type type,
     return vc;
 }
 
+VLANClientState *qemu_new_vlan_client(net_client_type type,
+                                      VLANState *vlan,
+                                      VLANClientState *peer,
+                                      const char *model,
+                                      const char *name,
+                                      NetCanReceive *can_receive,
+                                      NetReceive *receive,
+                                      NetReceive *receive_raw,
+                                      NetReceiveIOV *receive_iov,
+                                      NetCleanup *cleanup,
+                                      void *opaque)
+{
+    VLANClientState *ret;
+    NetClientInfo info;
+
+    info.type = type;
+    info.size = sizeof(VLANClientState);
+    info.can_receive = can_receive;
+    info.receive = receive;
+    info.receive_raw = receive_raw;
+    info.receive_iov = receive_iov;
+    info.cleanup = cleanup;
+    info.link_status_changed = NULL;
+
+    ret = qemu_new_net_client(&info, vlan, peer, model, name);
+
+    ret->opaque = opaque;
+
+    return ret;
+}
+
 void qemu_del_vlan_client(VLANClientState *vc)
 {
     if (vc->vlan) {
diff --git a/net.h b/net.h
index 56c5849..71a9a44 100644
--- a/net.h
+++ b/net.h
@@ -85,6 +85,11 @@  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);
 VLANClientState *qemu_new_vlan_client(net_client_type type,
                                       VLANState *vlan,
                                       VLANClientState *peer,