[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 03/11] net: extend NetClientInfo for offloading
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 03/11] net: extend NetClientInfo for offloading |
Date: |
Tue, 25 Feb 2014 14:33:41 +0100 |
From: Vincenzo Maffione <address@hidden>
Some new callbacks have been added to generalize the operations done
by virtio-net and vmxnet3 frontends to manipulate TAP offloadings.
Signed-off-by: Vincenzo Maffione <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
include/net/net.h | 19 +++++++++++++++++++
net/net.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 74 insertions(+)
diff --git a/include/net/net.h b/include/net/net.h
index 11e1468..7b25394 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -50,6 +50,12 @@ typedef void (NetCleanup) (NetClientState *);
typedef void (LinkStatusChanged)(NetClientState *);
typedef void (NetClientDestructor)(NetClientState *);
typedef RxFilterInfo *(QueryRxFilter)(NetClientState *);
+typedef bool (HasUfo)(NetClientState *);
+typedef bool (HasVnetHdr)(NetClientState *);
+typedef bool (HasVnetHdrLen)(NetClientState *, int);
+typedef void (UsingVnetHdr)(NetClientState *, bool);
+typedef void (SetOffload)(NetClientState *, int, int, int, int, int);
+typedef void (SetVnetHdrLen)(NetClientState *, int);
typedef struct NetClientInfo {
NetClientOptionsKind type;
@@ -62,6 +68,12 @@ typedef struct NetClientInfo {
LinkStatusChanged *link_status_changed;
QueryRxFilter *query_rx_filter;
NetPoll *poll;
+ HasUfo *has_ufo;
+ HasVnetHdr *has_vnet_hdr;
+ HasVnetHdrLen *has_vnet_hdr_len;
+ UsingVnetHdr *using_vnet_hdr;
+ SetOffload *set_offload;
+ SetVnetHdrLen *set_vnet_hdr_len;
} NetClientInfo;
struct NetClientState {
@@ -120,6 +132,13 @@ ssize_t qemu_send_packet_async(NetClientState *nc, const
uint8_t *buf,
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]);
+bool qemu_peer_has_ufo(NetClientState *nc);
+bool qemu_peer_has_vnet_hdr(NetClientState *nc);
+bool qemu_peer_has_vnet_hdr_len(NetClientState *nc, int len);
+void qemu_peer_using_vnet_hdr(NetClientState *nc, bool enable);
+void qemu_peer_set_offload(NetClientState *nc, int csum, int tso4, int tso6,
+ int ecn, int ufo);
+void qemu_peer_set_vnet_hdr_len(NetClientState *nc, int len);
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/net.c b/net/net.c
index 41b3883..06d690a 100644
--- a/net/net.c
+++ b/net/net.c
@@ -378,6 +378,61 @@ void qemu_foreach_nic(qemu_nic_foreach func, void *opaque)
}
}
+bool qemu_peer_has_ufo(NetClientState *nc)
+{
+ if (!nc->peer || !nc->peer->info->has_ufo) {
+ return false;
+ }
+
+ return nc->peer->info->has_ufo(nc->peer);
+}
+
+bool qemu_peer_has_vnet_hdr(NetClientState *nc)
+{
+ if (!nc->peer || !nc->peer->info->has_vnet_hdr) {
+ return false;
+ }
+
+ return nc->peer->info->has_vnet_hdr(nc->peer);
+}
+
+bool qemu_peer_has_vnet_hdr_len(NetClientState *nc, int len)
+{
+ if (!nc->peer || !nc->peer->info->has_vnet_hdr_len) {
+ return false;
+ }
+
+ return nc->peer->info->has_vnet_hdr_len(nc->peer, len);
+}
+
+void qemu_peer_using_vnet_hdr(NetClientState *nc, bool enable)
+{
+ if (!nc->peer || !nc->peer->info->using_vnet_hdr) {
+ return;
+ }
+
+ nc->peer->info->using_vnet_hdr(nc->peer, enable);
+}
+
+void qemu_peer_set_offload(NetClientState *nc, int csum, int tso4, int tso6,
+ int ecn, int ufo)
+{
+ if (!nc->peer || !nc->peer->info->set_offload) {
+ return;
+ }
+
+ nc->peer->info->set_offload(nc->peer, csum, tso4, tso6, ecn, ufo);
+}
+
+void qemu_peer_set_vnet_hdr_len(NetClientState *nc, int len)
+{
+ if (!nc->peer || !nc->peer->info->set_vnet_hdr_len) {
+ return;
+ }
+
+ nc->peer->info->set_vnet_hdr_len(nc->peer, len);
+}
+
int qemu_can_send_packet(NetClientState *sender)
{
if (!sender->peer) {
--
1.8.5.3
- [Qemu-devel] [PULL 00/11] Net patches, Stefan Hajnoczi, 2014/02/25
- [Qemu-devel] [PULL 01/11] opencores_eth: flush queue whenever can_receive can go from false to true, Stefan Hajnoczi, 2014/02/25
- [Qemu-devel] [PULL 02/11] net: change vnet-hdr TAP prototypes, Stefan Hajnoczi, 2014/02/25
- [Qemu-devel] [PULL 03/11] net: extend NetClientInfo for offloading,
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 04/11] net: TAP uses NetClientInfo offloading callbacks, Stefan Hajnoczi, 2014/02/25
- [Qemu-devel] [PULL 05/11] net: virtio-net and vmxnet3 use offloading API, Stefan Hajnoczi, 2014/02/25
- [Qemu-devel] [PULL 06/11] net: make tap offloading callbacks static, Stefan Hajnoczi, 2014/02/25
- [Qemu-devel] [PULL 07/11] net: add offloading support to netmap backend, Stefan Hajnoczi, 2014/02/25
- [Qemu-devel] [PULL 08/11] net: Disable netmap backend when not supported, Stefan Hajnoczi, 2014/02/25
- [Qemu-devel] [PULL 09/11] net: remove implicit peer from offload API, Stefan Hajnoczi, 2014/02/25
- [Qemu-devel] [PULL 10/11] vhost_net: use offload API instead of bypassing it, Stefan Hajnoczi, 2014/02/25
- [Qemu-devel] [PULL 11/11] virtio-net: use qemu_get_queue() where possible, Stefan Hajnoczi, 2014/02/25
- Re: [Qemu-devel] [PULL 00/11] Net patches, Peter Maydell, 2014/02/26