|
Lines 224-234
sys_tun_infilter(struct Channel *c, char *buf, int len)
Link Here
|
| 224 |
iph = (struct ip *)(ptr + sizeof(u_int32_t)); |
224 |
iph = (struct ip *)(ptr + sizeof(u_int32_t)); |
| 225 |
switch (iph->ip_v) { |
225 |
switch (iph->ip_v) { |
| 226 |
case 6: |
226 |
case 6: |
| 227 |
*af = AF_INET6; |
227 |
*af = htonl(AF_INET6); |
| 228 |
break; |
228 |
break; |
| 229 |
case 4: |
229 |
case 4: |
| 230 |
default: |
230 |
default: |
| 231 |
*af = AF_INET; |
231 |
*af = htonl(AF_INET); |
| 232 |
break; |
232 |
break; |
| 233 |
} |
233 |
} |
| 234 |
#endif |
234 |
#endif |
|
Lines 253-259
u_char *
Link Here
|
| 253 |
sys_tun_outfilter(struct Channel *c, u_char **data, u_int *dlen) |
253 |
sys_tun_outfilter(struct Channel *c, u_char **data, u_int *dlen) |
| 254 |
{ |
254 |
{ |
| 255 |
u_char *buf; |
255 |
u_char *buf; |
| 256 |
u_int32_t *af; |
256 |
u_int32_t af; |
| 257 |
int r; |
257 |
int r; |
| 258 |
size_t xxx_dlen; |
258 |
size_t xxx_dlen; |
| 259 |
|
259 |
|
|
Lines 262-282
sys_tun_outfilter(struct Channel *c, u_char **data, u_int *dlen)
Link Here
|
| 262 |
fatal("%s: buffer error: %s", __func__, ssh_err(r)); |
262 |
fatal("%s: buffer error: %s", __func__, ssh_err(r)); |
| 263 |
if (dlen != NULL) |
263 |
if (dlen != NULL) |
| 264 |
*dlen = xxx_dlen; |
264 |
*dlen = xxx_dlen; |
| 265 |
if (*dlen < sizeof(*af)) |
265 |
if (*dlen < sizeof(af)) |
| 266 |
return (NULL); |
266 |
return (NULL); |
| 267 |
buf = *data; |
267 |
buf = *data; |
| 268 |
|
268 |
|
| 269 |
#if defined(SSH_TUN_PREPEND_AF) |
269 |
#if defined(SSH_TUN_PREPEND_AF) |
| 270 |
*dlen -= sizeof(u_int32_t); |
270 |
/* skip address family */ |
| 271 |
buf = *data + sizeof(u_int32_t); |
271 |
*dlen -= sizeof(af); |
|
|
272 |
buf = *data + sizeof(af); |
| 272 |
#elif defined(SSH_TUN_COMPAT_AF) |
273 |
#elif defined(SSH_TUN_COMPAT_AF) |
| 273 |
af = ntohl(*(u_int32_t *)buf); |
274 |
/* translate address family */ |
| 274 |
if (*af == OPENBSD_AF_INET6) |
275 |
af = (ntohl(PEEK_U32(buf)) == OPENBSD_AF_INET6) ? AF_INET6 : AF_INET; |
| 275 |
*af = htonl(AF_INET6); |
276 |
POKE_U32(buf, htonl(af)); |
| 276 |
else |
|
|
| 277 |
*af = htonl(AF_INET); |
| 278 |
#endif |
277 |
#endif |
| 279 |
|
|
|
| 280 |
return (buf); |
278 |
return (buf); |
| 281 |
} |
279 |
} |
| 282 |
#endif /* SSH_TUN_FILTER */ |
280 |
#endif /* SSH_TUN_FILTER */ |