net: move UFO support detection to tap-linux.c
authorMark McLoughlin <markmc@redhat.com>
Thu, 22 Oct 2009 16:49:16 +0000 (17:49 +0100)
committerAnthony Liguori <aliguori@us.ibm.com>
Fri, 30 Oct 2009 13:39:29 +0000 (08:39 -0500)
Only supported 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 0de3dd9..4bc9f2f 100644 (file)
@@ -41,6 +41,11 @@ int tap_probe_vnet_hdr(int fd)
     return 0;
 }
 
+int tap_probe_has_ufo(int fd)
+{
+    return 0;
+}
+
 void tap_fd_set_offload(int fd, int csum, int tso4,
                         int tso6, int ecn, int ufo)
 {
index 1e85a3c..3ad14bb 100644 (file)
@@ -71,6 +71,11 @@ int tap_probe_vnet_hdr(int fd)
     return 0;
 }
 
+int tap_probe_has_ufo(int fd)
+{
+    return 0;
+}
+
 void tap_fd_set_offload(int fd, int csum, int tso4,
                         int tso6, int ecn, int ufo)
 {
index b6f1fad..0f621a2 100644 (file)
@@ -112,6 +112,18 @@ int tap_probe_vnet_hdr(int fd)
     return ifr.ifr_flags & IFF_VNET_HDR;
 }
 
+int tap_probe_has_ufo(int fd)
+{
+    unsigned offload;
+
+    offload = TUN_F_CSUM | TUN_F_UFO;
+
+    if (ioctl(fd, TUNSETOFFLOAD, offload) < 0)
+        return 0;
+
+    return 1;
+}
+
 void tap_fd_set_offload(int fd, int csum, int tso4,
                         int tso6, int ecn, int ufo)
 {
index 614df01..ef4e60c 100644 (file)
@@ -194,6 +194,11 @@ int tap_probe_vnet_hdr(int fd)
     return 0;
 }
 
+int tap_probe_has_ufo(int fd)
+{
+    return 0;
+}
+
 void tap_fd_set_offload(int fd, int csum, int tso4,
                         int tso6, int ecn, int ufo)
 {
index 9b11071..60354e4 100644 (file)
--- a/net/tap.c
+++ b/net/tap.c
@@ -271,7 +271,6 @@ static TAPState *net_tap_fd_init(VLANState *vlan,
                                  int vnet_hdr)
 {
     TAPState *s;
-    unsigned int offload;
 
     s = qemu_mallocz(sizeof(TAPState));
     s->fd = fd;
@@ -281,11 +280,7 @@ static TAPState *net_tap_fd_init(VLANState *vlan,
                                  vlan, NULL, model, name, NULL,
                                  tap_receive, tap_receive_raw,
                                  tap_receive_iov, tap_cleanup, s);
-    s->has_ufo = 0;
-    /* Check if tap supports UFO */
-    offload = TUN_F_CSUM | TUN_F_UFO;
-    if (ioctl(s->fd, TUNSETOFFLOAD, offload) == 0)
-       s->has_ufo = 1;
+    s->has_ufo = tap_probe_has_ufo(s->fd);
     tap_set_offload(s->vc, 0, 0, 0, 0, 0);
     tap_read_poll(s, 1);
     return s;
index 16398b5..538a562 100644 (file)
--- a/net/tap.h
+++ b/net/tap.h
@@ -45,6 +45,7 @@ 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);
+int tap_probe_has_ufo(int fd);
 void tap_fd_set_offload(int fd, int csum, int tso4, int tso6, int ecn, int ufo);
 
 #endif /* QEMU_NET_TAP_H */