summary refs log tree commit diff stats
path: root/net
diff options
context:
space:
mode:
authorMark McLoughlin <markmc@redhat.com>2009-10-22 17:49:15 +0100
committerAnthony Liguori <aliguori@us.ibm.com>2009-10-30 08:39:28 -0500
commit1faac1f7d48d3f7bfa2d168b1ad5680d3288f585 (patch)
tree0b22b4e1f779608f3917bea94a3a09d5a38096ef /net
parentdc69004c7d89afb6ede02ca9379075c062c0c091 (diff)
downloadfocaccia-qemu-1faac1f7d48d3f7bfa2d168b1ad5680d3288f585.tar.gz
focaccia-qemu-1faac1f7d48d3f7bfa2d168b1ad5680d3288f585.zip
net: move tap_set_offload() code into tap-linux.c
TUNSETOFFLOAD is only available on Linux

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'net')
-rw-r--r--net/tap-aix.c5
-rw-r--r--net/tap-bsd.c5
-rw-r--r--net/tap-linux.c26
-rw-r--r--net/tap-solaris.c5
-rw-r--r--net/tap.c21
-rw-r--r--net/tap.h1
6 files changed, 43 insertions, 20 deletions
diff --git a/net/tap-aix.c b/net/tap-aix.c
index 27143ff36b..0de3dd9de3 100644
--- a/net/tap-aix.c
+++ b/net/tap-aix.c
@@ -40,3 +40,8 @@ int tap_probe_vnet_hdr(int fd)
 {
     return 0;
 }
+
+void tap_fd_set_offload(int fd, int csum, int tso4,
+                        int tso6, int ecn, int ufo)
+{
+}
diff --git a/net/tap-bsd.c b/net/tap-bsd.c
index 1cdde90009..1e85a3c22d 100644
--- a/net/tap-bsd.c
+++ b/net/tap-bsd.c
@@ -70,3 +70,8 @@ int tap_probe_vnet_hdr(int fd)
 {
     return 0;
 }
+
+void tap_fd_set_offload(int fd, int csum, int tso4,
+                        int tso6, int ecn, int ufo)
+{
+}
diff --git a/net/tap-linux.c b/net/tap-linux.c
index 0059404069..b6f1fad5e4 100644
--- a/net/tap-linux.c
+++ b/net/tap-linux.c
@@ -111,3 +111,29 @@ int tap_probe_vnet_hdr(int fd)
 
     return ifr.ifr_flags & IFF_VNET_HDR;
 }
+
+void tap_fd_set_offload(int fd, int csum, int tso4,
+                        int tso6, int ecn, int ufo)
+{
+    unsigned int offload = 0;
+
+    if (csum) {
+        offload |= TUN_F_CSUM;
+        if (tso4)
+            offload |= TUN_F_TSO4;
+        if (tso6)
+            offload |= TUN_F_TSO6;
+        if ((tso4 || tso6) && ecn)
+            offload |= TUN_F_TSO_ECN;
+        if (ufo)
+            offload |= TUN_F_UFO;
+    }
+
+    if (ioctl(fd, TUNSETOFFLOAD, offload) != 0) {
+        offload &= ~TUN_F_UFO;
+        if (ioctl(fd, TUNSETOFFLOAD, offload) != 0) {
+            fprintf(stderr, "TUNSETOFFLOAD ioctl() failed: %s\n",
+                    strerror(errno));
+        }
+    }
+}
diff --git a/net/tap-solaris.c b/net/tap-solaris.c
index 3f48e57328..614df01810 100644
--- a/net/tap-solaris.c
+++ b/net/tap-solaris.c
@@ -193,3 +193,8 @@ int tap_probe_vnet_hdr(int fd)
 {
     return 0;
 }
+
+void tap_fd_set_offload(int fd, int csum, int tso4,
+                        int tso6, int ecn, int ufo)
+{
+}
diff --git a/net/tap.c b/net/tap.c
index 3f6722ea6c..9b110716e6 100644
--- a/net/tap.c
+++ b/net/tap.c
@@ -243,27 +243,8 @@ void tap_set_offload(VLANClientState *vc, int csum, int tso4,
                      int tso6, int ecn, int ufo)
 {
     TAPState *s = vc->opaque;
-    unsigned int offload = 0;
-
-    if (csum) {
-        offload |= TUN_F_CSUM;
-        if (tso4)
-            offload |= TUN_F_TSO4;
-        if (tso6)
-            offload |= TUN_F_TSO6;
-        if ((tso4 || tso6) && ecn)
-            offload |= TUN_F_TSO_ECN;
-        if (ufo)
-            offload |= TUN_F_UFO;
-    }
 
-    if (ioctl(s->fd, TUNSETOFFLOAD, offload) != 0) {
-        offload &= ~TUN_F_UFO;
-        if (ioctl(s->fd, TUNSETOFFLOAD, offload) != 0) {
-            fprintf(stderr, "TUNSETOFFLOAD ioctl() failed: %s\n",
-                    strerror(errno));
-        }
-    }
+    return tap_fd_set_offload(s->fd, csum, tso4, tso6, ecn, ufo);
 }
 
 static void tap_cleanup(VLANClientState *vc)
diff --git a/net/tap.h b/net/tap.h
index de729a79db..16398b5f4d 100644
--- a/net/tap.h
+++ b/net/tap.h
@@ -45,5 +45,6 @@ void tap_set_offload(VLANClientState *vc, int csum, int tso4, int tso6, int ecn,
 
 int tap_set_sndbuf(int fd, QemuOpts *opts);
 int tap_probe_vnet_hdr(int fd);
+void tap_fd_set_offload(int fd, int csum, int tso4, int tso6, int ecn, int ufo);
 
 #endif /* QEMU_NET_TAP_H */