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