From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: qemu-devel@nongnu.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
"Mark McLoughlin" <markmc@redhat.com>,
"Anthony Liguori" <aliguori@us.ibm.com>
Subject: [Qemu-devel] [PATCH] net: add drop_packets parameter to -net nic
Date: Mon, 25 Apr 2011 09:10:35 +0700 [thread overview]
Message-ID: <1303697435-12542-1-git-send-email-pclouds@gmail.com> (raw)
Dropping packets is sometimes perferred behavior. Add drop_packets
parameter to NICConf struct and let nic simulation decide how to use
it.
Only e1000 supports this for now.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Documentation is missing, but I'm not even sure if there's any other
user who finds this useful.
hw/e1000.c | 4 +++-
hw/qdev.c | 1 +
net.c | 5 +++++
net.h | 9 +++++++--
4 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/hw/e1000.c b/hw/e1000.c
index fe3e812..57ffdec 100644
--- a/hw/e1000.c
+++ b/hw/e1000.c
@@ -656,7 +656,9 @@ e1000_can_receive(VLANClientState *nc)
{
E1000State *s = DO_UPCAST(NICState, nc, nc)->opaque;
- return (s->mac_reg[RCTL] & E1000_RCTL_EN) && e1000_has_rxbufs(s, 1);
+ return (s->conf.flags & NIC_CONF_DROP_PACKETS) ||
+ ((s->mac_reg[RCTL] & E1000_RCTL_EN) &&
+ e1000_has_rxbufs(s, 1));
}
static uint64_t rx_desc_base(E1000State *s)
diff --git a/hw/qdev.c b/hw/qdev.c
index 9519f5d..d8605d6 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -468,6 +468,7 @@ void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd)
qdev_prop_exists(dev, "vectors")) {
qdev_prop_set_uint32(dev, "vectors", nd->nvectors);
}
+ qdev_prop_set_bit(dev, "drop_packets", nd->drop_packets);
}
BusState *qdev_get_child_bus(DeviceState *dev, const char *name)
diff --git a/net.c b/net.c
index 6746bc7..566be48 100644
--- a/net.c
+++ b/net.c
@@ -798,6 +798,7 @@ static int net_init_nic(QemuOpts *opts,
return -1;
}
+ nd->drop_packets = qemu_opt_get_bool(opts, "drop_packets", 0);
nd->used = 1;
nb_nics++;
@@ -864,6 +865,10 @@ static const struct {
.name = "vectors",
.type = QEMU_OPT_NUMBER,
.help = "number of MSI-x vectors, 0 to disable MSI-X",
+ }, {
+ .name = "drop_packets",
+ .type = QEMU_OPT_BOOL,
+ .help = "drop packets if driver is not ready to receive"
},
{ /* end of list */ }
},
diff --git a/net.h b/net.h
index 6ceca50..a594313 100644
--- a/net.h
+++ b/net.h
@@ -12,19 +12,23 @@ struct MACAddr {
};
/* qdev nic properties */
+#define NIC_CONF_DROP_PACKETS_BIT 0
+#define NIC_CONF_DROP_PACKETS (1 << NIC_CONF_DROP_PACKETS_BIT)
typedef struct NICConf {
MACAddr macaddr;
VLANState *vlan;
VLANClientState *peer;
int32_t bootindex;
+ uint32_t flags;
} 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)
+ DEFINE_PROP_INT32("bootindex", _state, _conf.bootindex, -1), \
+ DEFINE_PROP_BIT("drop_packets", _state, _conf.flags, NIC_CONF_DROP_PACKETS_BIT, 0)
/* VLANs support */
@@ -133,8 +137,9 @@ struct NICInfo {
char *devaddr;
VLANState *vlan;
VLANClientState *netdev;
- int used;
int nvectors;
+ unsigned int used : 1;
+ unsigned int drop_packets : 1;
};
extern int nb_nics;
--
1.7.3.4
next reply other threads:[~2011-04-25 2:10 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-25 2:10 Nguyễn Thái Ngọc Duy [this message]
2011-04-25 13:40 ` [Qemu-devel] [PATCH] net: add drop_packets parameter to -net nic Stefan Hajnoczi
2011-04-25 13:42 ` Anthony Liguori
2011-04-25 14:06 ` Nguyen Thai Ngoc Duy
2011-04-26 9:14 ` Stefan Hajnoczi
2011-04-26 10:07 ` Nguyen Thai Ngoc Duy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1303697435-12542-1-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=aliguori@us.ibm.com \
--cc=markmc@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.