]> git.proxmox.com Git - mirror_qemu.git/commitdiff
net: move tap_set_offload() code into tap-linux.c
authorMark McLoughlin <markmc@redhat.com>
Thu, 22 Oct 2009 16:49:15 +0000 (17:49 +0100)
committerAnthony Liguori <aliguori@us.ibm.com>
Fri, 30 Oct 2009 13:39:28 +0000 (08:39 -0500)
TUNSETOFFLOAD is only available on Linux

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
net/tap-aix.c
net/tap-bsd.c
net/tap-linux.c
net/tap-solaris.c
net/tap.c
net/tap.h

index 27143ff36b0bbe00b3d249a9885be6d90533e317..0de3dd9de389a786f2e071445cf0f294c8c6723b 100644 (file)
@@ -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)
+{
+}
index 1cdde90009fce278a42b90a7ed51f5a6cf8588b4..1e85a3c22d460c7cba7729d94c5b0e4866bb6022 100644 (file)
@@ -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)
+{
+}
index 0059404069f9ece747e2e8da90f053ce348cb2e3..b6f1fad5e44fd33e02e4be3367754c0c0ff6bb1f 100644 (file)
@@ -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));
+        }
+    }
+}
index 3f48e573289e9cabc024f65169ef8d5556e0ec9e..614df018102c5af822f6c34065cb2b1fca2e8a64 100644 (file)
@@ -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)
+{
+}
index 3f6722ea6cf1cffe9d5298cb9b40f6ebb956cb0b..9b110716e68360bcec886a6104b3c5555785a881 100644 (file)
--- 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)
index de729a79dbc5640c6cdc73a743af0fef1ad27a12..16398b5f4dd35b93c6af4b2161abee7f1e2e9c7b 100644 (file)
--- 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 */