[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] net: add drop_packets parameter to -net nic
From: |
Nguyễn Thái Ngọc Duy |
Subject: |
[Qemu-devel] [PATCH] net: add drop_packets parameter to -net nic |
Date: |
Mon, 25 Apr 2011 09:10:35 +0700 |
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 <address@hidden>
---
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
- [Qemu-devel] [PATCH] net: add drop_packets parameter to -net nic,
Nguyễn Thái Ngọc Duy <=