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