Commit | Line | Data |
---|---|---|
7bc570c8 YH |
1 | #ifndef __LINUX_MROUTE6_H |
2 | #define __LINUX_MROUTE6_H | |
3 | ||
7bc570c8 | 4 | |
7c19a3d2 | 5 | #include <linux/pim.h> |
7bc570c8 | 6 | #include <linux/skbuff.h> /* for struct sk_buff_head */ |
bd91b8bf | 7 | #include <net/net_namespace.h> |
607ca46e | 8 | #include <uapi/linux/mroute6.h> |
7bc570c8 | 9 | |
7bc570c8 YH |
10 | #ifdef CONFIG_IPV6_MROUTE |
11 | static inline int ip6_mroute_opt(int opt) | |
12 | { | |
13 | return (opt >= MRT6_BASE) && (opt <= MRT6_BASE + 10); | |
14 | } | |
15 | #else | |
16 | static inline int ip6_mroute_opt(int opt) | |
17 | { | |
18 | return 0; | |
19 | } | |
20 | #endif | |
21 | ||
22 | struct sock; | |
23 | ||
e0835f8f | 24 | #ifdef CONFIG_IPV6_MROUTE |
b7058842 | 25 | extern int ip6_mroute_setsockopt(struct sock *, int, char __user *, unsigned int); |
7bc570c8 YH |
26 | extern int ip6_mroute_getsockopt(struct sock *, int, char __user *, int __user *); |
27 | extern int ip6_mr_input(struct sk_buff *skb); | |
28 | extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg); | |
e2d57766 | 29 | extern int ip6mr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg); |
623d1a1a WC |
30 | extern int ip6_mr_init(void); |
31 | extern void ip6_mr_cleanup(void); | |
e0835f8f YH |
32 | #else |
33 | static inline | |
34 | int ip6_mroute_setsockopt(struct sock *sock, | |
b7058842 | 35 | int optname, char __user *optval, unsigned int optlen) |
e0835f8f YH |
36 | { |
37 | return -ENOPROTOOPT; | |
38 | } | |
39 | ||
40 | static inline | |
41 | int ip6_mroute_getsockopt(struct sock *sock, | |
42 | int optname, char __user *optval, int __user *optlen) | |
43 | { | |
44 | return -ENOPROTOOPT; | |
45 | } | |
46 | ||
47 | static inline | |
48 | int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg) | |
49 | { | |
50 | return -ENOIOCTLCMD; | |
51 | } | |
52 | ||
53 | static inline int ip6_mr_init(void) | |
54 | { | |
55 | return 0; | |
56 | } | |
57 | ||
58 | static inline void ip6_mr_cleanup(void) | |
59 | { | |
60 | return; | |
61 | } | |
62 | #endif | |
7bc570c8 | 63 | |
d94d9fee | 64 | struct mif_device { |
7bc570c8 YH |
65 | struct net_device *dev; /* Device we are using */ |
66 | unsigned long bytes_in,bytes_out; | |
67 | unsigned long pkt_in,pkt_out; /* Statistics */ | |
68 | unsigned long rate_limit; /* Traffic shaping (NI) */ | |
69 | unsigned char threshold; /* TTL threshold */ | |
70 | unsigned short flags; /* Control flags */ | |
71 | int link; /* Physical interface index */ | |
72 | }; | |
73 | ||
74 | #define VIFF_STATIC 0x8000 | |
75 | ||
d94d9fee | 76 | struct mfc6_cache { |
f30a7784 | 77 | struct list_head list; |
7bc570c8 YH |
78 | struct in6_addr mf6c_mcastgrp; /* Group the entry belongs to */ |
79 | struct in6_addr mf6c_origin; /* Source of packet */ | |
80 | mifi_t mf6c_parent; /* Source interface */ | |
81 | int mfc_flags; /* Flags on line */ | |
82 | ||
83 | union { | |
84 | struct { | |
85 | unsigned long expires; | |
86 | struct sk_buff_head unresolved; /* Unresolved buffers */ | |
87 | } unres; | |
88 | struct { | |
89 | unsigned long last_assert; | |
90 | int minvif; | |
91 | int maxvif; | |
92 | unsigned long bytes; | |
93 | unsigned long pkt; | |
94 | unsigned long wrong_if; | |
95 | unsigned char ttls[MAXMIFS]; /* TTL thresholds */ | |
96 | } res; | |
97 | } mfc_un; | |
98 | }; | |
99 | ||
100 | #define MFC_STATIC 1 | |
101 | #define MFC_NOTIFY 2 | |
102 | ||
103 | #define MFC6_LINES 64 | |
104 | ||
105 | #define MFC6_HASH(a, g) (((__force u32)(a)->s6_addr32[0] ^ \ | |
106 | (__force u32)(a)->s6_addr32[1] ^ \ | |
107 | (__force u32)(a)->s6_addr32[2] ^ \ | |
108 | (__force u32)(a)->s6_addr32[3] ^ \ | |
109 | (__force u32)(g)->s6_addr32[0] ^ \ | |
110 | (__force u32)(g)->s6_addr32[1] ^ \ | |
111 | (__force u32)(g)->s6_addr32[2] ^ \ | |
112 | (__force u32)(g)->s6_addr32[3]) % MFC6_LINES) | |
113 | ||
114 | #define MFC_ASSERT_THRESH (3*HZ) /* Maximal freq. of asserts */ | |
115 | ||
7bc570c8 | 116 | struct rtmsg; |
8229efda BT |
117 | extern int ip6mr_get_route(struct net *net, struct sk_buff *skb, |
118 | struct rtmsg *rtm, int nowait); | |
7bc570c8 YH |
119 | |
120 | #ifdef CONFIG_IPV6_MROUTE | |
d1db275d | 121 | extern struct sock *mroute6_socket(struct net *net, struct sk_buff *skb); |
7bc570c8 YH |
122 | extern int ip6mr_sk_done(struct sock *sk); |
123 | #else | |
d1db275d PM |
124 | static inline struct sock *mroute6_socket(struct net *net, struct sk_buff *skb) |
125 | { | |
126 | return NULL; | |
127 | } | |
128 | static inline int ip6mr_sk_done(struct sock *sk) | |
129 | { | |
130 | return 0; | |
131 | } | |
7bc570c8 YH |
132 | #endif |
133 | #endif |