From: Vincenzo Maffione <v.maffione@gmail.com>
To: qemu-devel@nongnu.org
Cc: aliguori@amazon.com, marcel.a@redhat.com, jasowang@redhat.com,
Vincenzo Maffione <v.maffione@gmail.com>,
lcapitulino@redhat.com, stefanha@redhat.com, dmitry@daynix.com,
pbonzini@redhat.com, g.lettieri@iet.unipi.it, rizzo@iet.unipi.it
Subject: [Qemu-devel] [PATCH 1/5] net: extend NetClientInfo for offloading manipulations
Date: Fri, 13 Dec 2013 13:04:59 +0100 [thread overview]
Message-ID: <1386936303-7697-2-git-send-email-v.maffione@gmail.com> (raw)
In-Reply-To: <1386936303-7697-1-git-send-email-v.maffione@gmail.com>
A set of new callbacks has been added to the NetClientInfo struct in
order to abstract the operations done by virtio-net and vmxnet3
frontends to manipulate TAP offloadings.
The net.h API has been extended with functions that access those
abstract operations, providing frontends with a way to manipulate
backend offloadings.
Signed-off-by: Vincenzo Maffione <v.maffione@gmail.com>
---
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..f5b5bae 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 int (HasVnetHdr)(NetClientState *);
+typedef int (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);
+int qemu_peer_has_vnet_hdr(NetClientState *nc);
+int 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 9db88cc..96f05d9 100644
--- a/net/net.c
+++ b/net/net.c
@@ -381,6 +381,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);
+}
+
+int 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);
+}
+
+int 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.1
next prev parent reply other threads:[~2013-12-13 12:09 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-13 12:04 [Qemu-devel] [PATCH 0/5] Add netmap backend offloadings support Vincenzo Maffione
2013-12-13 12:04 ` Vincenzo Maffione [this message]
2014-01-13 6:58 ` [Qemu-devel] [PATCH 1/5] net: extend NetClientInfo for offloading manipulations Stefan Hajnoczi
2014-01-13 14:07 ` Vincenzo Maffione
2013-12-13 12:05 ` [Qemu-devel] [PATCH 2/5] net: TAP uses NetClientInfo offloading callbacks Vincenzo Maffione
2013-12-13 12:05 ` [Qemu-devel] [PATCH 3/5] net: virtio-net and vmxnet3 use offloading API Vincenzo Maffione
2013-12-13 12:05 ` [Qemu-devel] [PATCH 4/5] net: add offloadings support to netmap backend Vincenzo Maffione
2014-01-13 7:28 ` Stefan Hajnoczi
2014-01-13 15:11 ` Vincenzo Maffione
2014-01-14 3:46 ` Stefan Hajnoczi
2013-12-13 12:05 ` [Qemu-devel] [PATCH 5/5] net: virtio-net and vmxnet3 can use netmap offloadings Vincenzo Maffione
2014-01-13 7:33 ` [Qemu-devel] [PATCH 0/5] Add netmap backend offloadings support Stefan Hajnoczi
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=1386936303-7697-2-git-send-email-v.maffione@gmail.com \
--to=v.maffione@gmail.com \
--cc=aliguori@amazon.com \
--cc=dmitry@daynix.com \
--cc=g.lettieri@iet.unipi.it \
--cc=jasowang@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=marcel.a@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rizzo@iet.unipi.it \
--cc=stefanha@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).