Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
7bc570c8 YH |
2 | #ifndef __LINUX_MROUTE6_H |
3 | #define __LINUX_MROUTE6_H | |
4 | ||
7bc570c8 | 5 | |
7c19a3d2 | 6 | #include <linux/pim.h> |
7bc570c8 | 7 | #include <linux/skbuff.h> /* for struct sk_buff_head */ |
bd91b8bf | 8 | #include <net/net_namespace.h> |
607ca46e | 9 | #include <uapi/linux/mroute6.h> |
6853f21f | 10 | #include <linux/mroute_base.h> |
b43c6153 | 11 | #include <linux/sockptr.h> |
d3c07e5b | 12 | #include <net/fib_rules.h> |
7bc570c8 | 13 | |
7bc570c8 YH |
14 | #ifdef CONFIG_IPV6_MROUTE |
15 | static inline int ip6_mroute_opt(int opt) | |
16 | { | |
bbb923a4 | 17 | return (opt >= MRT6_BASE) && (opt <= MRT6_MAX); |
7bc570c8 YH |
18 | } |
19 | #else | |
20 | static inline int ip6_mroute_opt(int opt) | |
21 | { | |
22 | return 0; | |
23 | } | |
24 | #endif | |
25 | ||
26 | struct sock; | |
27 | ||
e0835f8f | 28 | #ifdef CONFIG_IPV6_MROUTE |
b43c6153 | 29 | extern int ip6_mroute_setsockopt(struct sock *, int, sockptr_t, unsigned int); |
6dadbe4b | 30 | extern int ip6_mroute_getsockopt(struct sock *, int, sockptr_t, sockptr_t); |
7bc570c8 YH |
31 | extern int ip6_mr_input(struct sk_buff *skb); |
32 | extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg); | |
e2d57766 | 33 | extern int ip6mr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg); |
623d1a1a WC |
34 | extern int ip6_mr_init(void); |
35 | extern void ip6_mr_cleanup(void); | |
e0835f8f | 36 | #else |
b43c6153 CH |
37 | static inline int ip6_mroute_setsockopt(struct sock *sock, int optname, |
38 | sockptr_t optval, unsigned int optlen) | |
e0835f8f YH |
39 | { |
40 | return -ENOPROTOOPT; | |
41 | } | |
42 | ||
43 | static inline | |
44 | int ip6_mroute_getsockopt(struct sock *sock, | |
6dadbe4b | 45 | int optname, sockptr_t optval, sockptr_t optlen) |
e0835f8f YH |
46 | { |
47 | return -ENOPROTOOPT; | |
48 | } | |
49 | ||
50 | static inline | |
51 | int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg) | |
52 | { | |
53 | return -ENOIOCTLCMD; | |
54 | } | |
55 | ||
56 | static inline int ip6_mr_init(void) | |
57 | { | |
58 | return 0; | |
59 | } | |
60 | ||
61 | static inline void ip6_mr_cleanup(void) | |
62 | { | |
63 | return; | |
64 | } | |
65 | #endif | |
7bc570c8 | 66 | |
d3c07e5b YM |
67 | #ifdef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES |
68 | bool ip6mr_rule_default(const struct fib_rule *rule); | |
69 | #else | |
70 | static inline bool ip6mr_rule_default(const struct fib_rule *rule) | |
71 | { | |
72 | return true; | |
73 | } | |
74 | #endif | |
75 | ||
7bc570c8 YH |
76 | #define VIFF_STATIC 0x8000 |
77 | ||
87c418bf YM |
78 | struct mfc6_cache_cmp_arg { |
79 | struct in6_addr mf6c_mcastgrp; | |
80 | struct in6_addr mf6c_origin; | |
81 | }; | |
82 | ||
d94d9fee | 83 | struct mfc6_cache { |
494fff56 | 84 | struct mr_mfc _c; |
87c418bf YM |
85 | union { |
86 | struct { | |
87 | struct in6_addr mf6c_mcastgrp; | |
88 | struct in6_addr mf6c_origin; | |
89 | }; | |
90 | struct mfc6_cache_cmp_arg cmparg; | |
91 | }; | |
7bc570c8 YH |
92 | }; |
93 | ||
7bc570c8 YH |
94 | #define MFC_ASSERT_THRESH (3*HZ) /* Maximal freq. of asserts */ |
95 | ||
7bc570c8 | 96 | struct rtmsg; |
8229efda | 97 | extern int ip6mr_get_route(struct net *net, struct sk_buff *skb, |
fd61c6ba | 98 | struct rtmsg *rtm, u32 portid); |
7bc570c8 YH |
99 | |
100 | #ifdef CONFIG_IPV6_MROUTE | |
8571ab47 | 101 | bool mroute6_is_socket(struct net *net, struct sk_buff *skb); |
7bc570c8 YH |
102 | extern int ip6mr_sk_done(struct sock *sk); |
103 | #else | |
8571ab47 | 104 | static inline bool mroute6_is_socket(struct net *net, struct sk_buff *skb) |
d1db275d | 105 | { |
8571ab47 | 106 | return false; |
d1db275d PM |
107 | } |
108 | static inline int ip6mr_sk_done(struct sock *sk) | |
109 | { | |
110 | return 0; | |
111 | } | |
7bc570c8 YH |
112 | #endif |
113 | #endif |