#include <linux/version.h>
#include <net/ipv6.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)
-int rpl_ipv6_skip_exthdr(const struct sk_buff *skb, int start,
- u8 *nexthdrp, __be16 *frag_offp)
-{
- u8 nexthdr = *nexthdrp;
-
- *frag_offp = 0;
-
- while (ipv6_ext_hdr(nexthdr)) {
- struct ipv6_opt_hdr _hdr, *hp;
- int hdrlen;
-
- if (nexthdr == NEXTHDR_NONE)
- return -1;
- hp = skb_header_pointer(skb, start, sizeof(_hdr), &_hdr);
- if (hp == NULL)
- return -1;
- if (nexthdr == NEXTHDR_FRAGMENT) {
- __be16 _frag_off, *fp;
- fp = skb_header_pointer(skb,
- start+offsetof(struct frag_hdr,
- frag_off),
- sizeof(_frag_off),
- &_frag_off);
- if (fp == NULL)
- return -1;
-
- *frag_offp = *fp;
- if (ntohs(*frag_offp) & ~0x7)
- break;
- hdrlen = 8;
- } else if (nexthdr == NEXTHDR_AUTH)
- hdrlen = (hp->hdrlen+2)<<2;
- else
- hdrlen = ipv6_optlen(hp);
-
- nexthdr = hp->nexthdr;
- start += hdrlen;
- }
-
- *nexthdrp = nexthdr;
- return start;
-}
-EXPORT_SYMBOL_GPL(rpl_ipv6_skip_exthdr);
-#endif /* Kernel version < 3.3 */
-
#ifndef HAVE_IP6_FH_F_SKIP_RH
/*
* find the offset to specified header or the protocol number of last header
#define NEXTHDR_SCTP 132 /* Stream Control Transport Protocol */
#endif
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)
-#define ipv6_skip_exthdr rpl_ipv6_skip_exthdr
-extern int rpl_ipv6_skip_exthdr(const struct sk_buff *skb, int start,
- u8 *nexthdrp, __be16 *frag_offp);
-#endif
-
#ifndef HAVE_IP6_FH_F_SKIP_RH
enum {