diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2015-02-21 11:39:45 +0100 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2015-02-21 11:39:45 +0100 |
commit | 7730553b7eeb33d21e5597f110334ca584ad532d (patch) | |
tree | c80bf6d48fc91bafd7f0aefc859a033d3b472c89 /sysdep/unix/io.c | |
parent | 0da562a7cb25ed2b8724248ad6f841b1831a09c3 (diff) | |
parent | ec2194fa7a20a2768ca0027b5f3c024f0a251866 (diff) |
Merge remote-tracking branch 'origin/soft-int'
Diffstat (limited to 'sysdep/unix/io.c')
-rw-r--r-- | sysdep/unix/io.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c index 164038ec..04f0fe50 100644 --- a/sysdep/unix/io.c +++ b/sysdep/unix/io.c @@ -764,6 +764,29 @@ sk_set_tos6(sock *s, int tos) return 0; } +static inline byte * +sk_skip_ip_header(byte *pkt, int *len) +{ + if ((*len < 20) || ((*pkt & 0xf0) != 0x40)) + return NULL; + + int hlen = (*pkt & 0x0f) * 4; + if ((hlen < 20) || (hlen > *len)) + return NULL; + + *len -= hlen; + return pkt + hlen; +} + +byte * +sk_rx_buffer(sock *s, int *len) +{ + if (sk_is_ipv4(s) && (s->type == SK_IP)) + return sk_skip_ip_header(s->rbuf, len); + else + return s->rbuf; +} + /* * Public socket functions |