Revision 1faac1f7

b/net/tap-aix.c
40 40
{
41 41
    return 0;
42 42
}
43

  
44
void tap_fd_set_offload(int fd, int csum, int tso4,
45
                        int tso6, int ecn, int ufo)
46
{
47
}
b/net/tap-bsd.c
70 70
{
71 71
    return 0;
72 72
}
73

  
74
void tap_fd_set_offload(int fd, int csum, int tso4,
75
                        int tso6, int ecn, int ufo)
76
{
77
}
b/net/tap-linux.c
111 111

  
112 112
    return ifr.ifr_flags & IFF_VNET_HDR;
113 113
}
114

  
115
void tap_fd_set_offload(int fd, int csum, int tso4,
116
                        int tso6, int ecn, int ufo)
117
{
118
    unsigned int offload = 0;
119

  
120
    if (csum) {
121
        offload |= TUN_F_CSUM;
122
        if (tso4)
123
            offload |= TUN_F_TSO4;
124
        if (tso6)
125
            offload |= TUN_F_TSO6;
126
        if ((tso4 || tso6) && ecn)
127
            offload |= TUN_F_TSO_ECN;
128
        if (ufo)
129
            offload |= TUN_F_UFO;
130
    }
131

  
132
    if (ioctl(fd, TUNSETOFFLOAD, offload) != 0) {
133
        offload &= ~TUN_F_UFO;
134
        if (ioctl(fd, TUNSETOFFLOAD, offload) != 0) {
135
            fprintf(stderr, "TUNSETOFFLOAD ioctl() failed: %s\n",
136
                    strerror(errno));
137
        }
138
    }
139
}
b/net/tap-solaris.c
193 193
{
194 194
    return 0;
195 195
}
196

  
197
void tap_fd_set_offload(int fd, int csum, int tso4,
198
                        int tso6, int ecn, int ufo)
199
{
200
}
b/net/tap.c
243 243
                     int tso6, int ecn, int ufo)
244 244
{
245 245
    TAPState *s = vc->opaque;
246
    unsigned int offload = 0;
247

  
248
    if (csum) {
249
        offload |= TUN_F_CSUM;
250
        if (tso4)
251
            offload |= TUN_F_TSO4;
252
        if (tso6)
253
            offload |= TUN_F_TSO6;
254
        if ((tso4 || tso6) && ecn)
255
            offload |= TUN_F_TSO_ECN;
256
        if (ufo)
257
            offload |= TUN_F_UFO;
258
    }
259 246

  
260
    if (ioctl(s->fd, TUNSETOFFLOAD, offload) != 0) {
261
        offload &= ~TUN_F_UFO;
262
        if (ioctl(s->fd, TUNSETOFFLOAD, offload) != 0) {
263
            fprintf(stderr, "TUNSETOFFLOAD ioctl() failed: %s\n",
264
                    strerror(errno));
265
        }
266
    }
247
    return tap_fd_set_offload(s->fd, csum, tso4, tso6, ecn, ufo);
267 248
}
268 249

  
269 250
static void tap_cleanup(VLANClientState *vc)
b/net/tap.h
45 45

  
46 46
int tap_set_sndbuf(int fd, QemuOpts *opts);
47 47
int tap_probe_vnet_hdr(int fd);
48
void tap_fd_set_offload(int fd, int csum, int tso4, int tso6, int ecn, int ufo);
48 49

  
49 50
#endif /* QEMU_NET_TAP_H */

Also available in: Unified diff