1
2
3
4
5
6
7#ifndef __LINUX_IP6_NETFILTER_H
8#define __LINUX_IP6_NETFILTER_H
9
10#include <uapi/linux/netfilter_ipv6.h>
11
12
13
14
15struct ip6_rt_info {
16 struct in6_addr daddr;
17 struct in6_addr saddr;
18 u_int32_t mark;
19};
20
21struct nf_queue_entry;
22
23
24
25
26
27struct nf_ipv6_ops {
28 int (*chk_addr)(struct net *net, const struct in6_addr *addr,
29 const struct net_device *dev, int strict);
30 void (*route_input)(struct sk_buff *skb);
31 int (*fragment)(struct net *net, struct sock *sk, struct sk_buff *skb,
32 int (*output)(struct net *, struct sock *, struct sk_buff *));
33 __sum16 (*checksum)(struct sk_buff *skb, unsigned int hook,
34 unsigned int dataoff, u_int8_t protocol);
35 __sum16 (*checksum_partial)(struct sk_buff *skb, unsigned int hook,
36 unsigned int dataoff, unsigned int len,
37 u_int8_t protocol);
38 int (*route)(struct net *net, struct dst_entry **dst, struct flowi *fl,
39 bool strict);
40 int (*reroute)(struct sk_buff *skb, const struct nf_queue_entry *entry);
41};
42
43#ifdef CONFIG_NETFILTER
44int ip6_route_me_harder(struct net *net, struct sk_buff *skb);
45__sum16 nf_ip6_checksum(struct sk_buff *skb, unsigned int hook,
46 unsigned int dataoff, u_int8_t protocol);
47
48int ipv6_netfilter_init(void);
49void ipv6_netfilter_fini(void);
50
51extern const struct nf_ipv6_ops __rcu *nf_ipv6_ops;
52static inline const struct nf_ipv6_ops *nf_get_ipv6_ops(void)
53{
54 return rcu_dereference(nf_ipv6_ops);
55}
56
57#else
58static inline int ipv6_netfilter_init(void) { return 0; }
59static inline void ipv6_netfilter_fini(void) { return; }
60static inline const struct nf_ipv6_ops *nf_get_ipv6_ops(void) { return NULL; }
61#endif
62
63#endif
64