Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */ 2 : : #ifndef __LINUX_MROUTE6_H 3 : : #define __LINUX_MROUTE6_H 4 : : 5 : : 6 : : #include <linux/pim.h> 7 : : #include <linux/skbuff.h> /* for struct sk_buff_head */ 8 : : #include <net/net_namespace.h> 9 : : #include <uapi/linux/mroute6.h> 10 : : #include <linux/mroute_base.h> 11 : : #include <net/fib_rules.h> 12 : : 13 : : #ifdef CONFIG_IPV6_MROUTE 14 : : static inline int ip6_mroute_opt(int opt) 15 : : { 16 : 3519 : return (opt >= MRT6_BASE) && (opt <= MRT6_MAX); 17 : : } 18 : : #else 19 : : static inline int ip6_mroute_opt(int opt) 20 : : { 21 : : return 0; 22 : : } 23 : : #endif 24 : : 25 : : struct sock; 26 : : 27 : : #ifdef CONFIG_IPV6_MROUTE 28 : : extern int ip6_mroute_setsockopt(struct sock *, int, char __user *, unsigned int); 29 : : extern int ip6_mroute_getsockopt(struct sock *, int, char __user *, int __user *); 30 : : extern int ip6_mr_input(struct sk_buff *skb); 31 : : extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg); 32 : : extern int ip6mr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg); 33 : : extern int ip6_mr_init(void); 34 : : extern void ip6_mr_cleanup(void); 35 : : #else 36 : : static inline 37 : : int ip6_mroute_setsockopt(struct sock *sock, 38 : : int optname, char __user *optval, unsigned int optlen) 39 : : { 40 : : return -ENOPROTOOPT; 41 : : } 42 : : 43 : : static inline 44 : : int ip6_mroute_getsockopt(struct sock *sock, 45 : : int optname, char __user *optval, int __user *optlen) 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 66 : : 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 : : 76 : : #define VIFF_STATIC 0x8000 77 : : 78 : : struct mfc6_cache_cmp_arg { 79 : : struct in6_addr mf6c_mcastgrp; 80 : : struct in6_addr mf6c_origin; 81 : : }; 82 : : 83 : : struct mfc6_cache { 84 : : struct mr_mfc _c; 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 : : }; 92 : : }; 93 : : 94 : : #define MFC_ASSERT_THRESH (3*HZ) /* Maximal freq. of asserts */ 95 : : 96 : : struct rtmsg; 97 : : extern int ip6mr_get_route(struct net *net, struct sk_buff *skb, 98 : : struct rtmsg *rtm, u32 portid); 99 : : 100 : : #ifdef CONFIG_IPV6_MROUTE 101 : : bool mroute6_is_socket(struct net *net, struct sk_buff *skb); 102 : : extern int ip6mr_sk_done(struct sock *sk); 103 : : #else 104 : : static inline bool mroute6_is_socket(struct net *net, struct sk_buff *skb) 105 : : { 106 : : return false; 107 : : } 108 : : static inline int ip6mr_sk_done(struct sock *sk) 109 : : { 110 : : return 0; 111 : : } 112 : : #endif 113 : : #endif