Patchwork [17/44] net: introduce NICState and qemu_new_nic()

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

Comments

Mark McLoughlin - Nov. 25, 2009, 6:49 p.m.
Common state for all NICs.

The opaque member will replace the opaque member in VLANClientState
since only NICs need it.

The conf member will allow us to iterate over NICs, access the MAC
addr for the NIC and send a packet from each NIC in qemu_announce_self().

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
---
 net.c |   21 +++++++++++++++++++++
 net.h |   11 +++++++++++
 2 files changed, 32 insertions(+), 0 deletions(-)

Patch

diff --git a/net.c b/net.c
index 355eb87..7195827 100644
--- a/net.c
+++ b/net.c
@@ -293,6 +293,27 @@  VLANClientState *qemu_new_net_client(NetClientInfo *info,
     return vc;
 }
 
+NICState *qemu_new_nic(NetClientInfo *info,
+                       NICConf *conf,
+                       const char *model,
+                       const char *name,
+                       void *opaque)
+{
+    VLANClientState *nc;
+    NICState *nic;
+
+    assert(info->type == NET_CLIENT_TYPE_NIC);
+    assert(info->size >= sizeof(NICState));
+
+    nc = qemu_new_net_client(info, conf->vlan, conf->peer, model, name);
+
+    nic = DO_UPCAST(NICState, nc, nc);
+    nic->conf = conf;
+    nic->opaque = opaque;
+
+    return nic;
+}
+
 VLANClientState *qemu_new_vlan_client(net_client_type type,
                                       VLANState *vlan,
                                       VLANClientState *peer,
diff --git a/net.h b/net.h
index 71a9a44..4de20de 100644
--- a/net.h
+++ b/net.h
@@ -75,6 +75,12 @@  struct VLANClientState {
     unsigned receive_disabled : 1;
 };
 
+typedef struct NICState {
+    VLANClientState nc;
+    NICConf *conf;
+    void *opaque;
+} NICState;
+
 struct VLANState {
     int id;
     QTAILQ_HEAD(, VLANClientState) clients;
@@ -90,6 +96,11 @@  VLANClientState *qemu_new_net_client(NetClientInfo *info,
                                      VLANClientState *peer,
                                      const char *model,
                                      const char *name);
+NICState *qemu_new_nic(NetClientInfo *info,
+                       NICConf *conf,
+                       const char *model,
+                       const char *name,
+                       void *opaque);
 VLANClientState *qemu_new_vlan_client(net_client_type type,
                                       VLANState *vlan,
                                       VLANClientState *peer,