Revision 1faac1f7 net/tap-linux.c

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
}

Also available in: Unified diff