Revision 1faac1f7 net/tap.c

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)

Also available in: Unified diff