1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __LINUX_MROUTE_H 3 #define __LINUX_MROUTE_H 4 5 #include <linux/in.h> 6 #include <linux/pim.h> 7 #include <net/fib_rules.h> 8 #include <net/fib_notifier.h> 9 #include <uapi/linux/mroute.h> 10 #include <linux/mroute_base.h> 11 #include <linux/sockptr.h> 12 13 #ifdef CONFIG_IP_MROUTE 14 static inline int ip_mroute_opt(int opt) 15 { 16 return opt >= MRT_BASE && opt <= MRT_MAX; 17 } 18 19 static inline int sk_is_ipmr(struct sock *sk) 20 { 21 return sk->sk_family == AF_INET && 22 inet_sk(sk)->inet_num == IPPROTO_IGMP; 23 } 24 25 int ip_mroute_setsockopt(struct sock *, int, sockptr_t, unsigned int); 26 int ip_mroute_getsockopt(struct sock *, int, sockptr_t, sockptr_t); 27 int ipmr_ioctl(struct sock *sk, int cmd, void *arg); 28 int ipmr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg); 29 int ip_mr_init(void); 30 bool ipmr_rule_default(const struct fib_rule *rule); 31 int ipmr_sk_ioctl(struct sock *sk, unsigned int cmd, void __user *arg); 32 #else 33 static inline int ip_mroute_setsockopt(struct sock *sock, int optname, 34 sockptr_t optval, unsigned int optlen) 35 { 36 return -ENOPROTOOPT; 37 } 38 39 static inline int ip_mroute_getsockopt(struct sock *sk, int optname, 40 sockptr_t optval, sockptr_t optlen) 41 { 42 return -ENOPROTOOPT; 43 } 44 45 static inline int ipmr_ioctl(struct sock *sk, int cmd, void *arg) 46 { 47 return -ENOIOCTLCMD; 48 } 49 50 static inline int ip_mr_init(void) 51 { 52 return 0; 53 } 54 55 static inline int ip_mroute_opt(int opt) 56 { 57 return 0; 58 } 59 60 static inline int sk_is_ipmr(struct sock *sk) 61 { 62 return 0; 63 } 64 65 static inline bool ipmr_rule_default(const struct fib_rule *rule) 66 { 67 return true; 68 } 69 70 static inline int ipmr_sk_ioctl(struct sock *sk, unsigned int cmd, 71 void __user *arg) 72 { 73 return 1; 74 } 75 #endif 76 77 #define VIFF_STATIC 0x8000 78 79 struct mfc_cache_cmp_arg { 80 __be32 mfc_mcastgrp; 81 __be32 mfc_origin; 82 }; 83 84 /** 85 * struct mfc_cache - multicast routing entries 86 * @_c: Common multicast routing information; has to be first [for casting] 87 * @mfc_mcastgrp: destination multicast group address 88 * @mfc_origin: source address 89 * @cmparg: used for rhashtable comparisons 90 */ 91 struct mfc_cache { 92 struct mr_mfc _c; 93 union { 94 struct { 95 __be32 mfc_mcastgrp; 96 __be32 mfc_origin; 97 }; 98 struct mfc_cache_cmp_arg cmparg; 99 }; 100 }; 101 102 struct rtmsg; 103 int ipmr_get_route(struct net *net, struct sk_buff *skb, 104 __be32 saddr, __be32 daddr, 105 struct rtmsg *rtm, u32 portid); 106 #endif 107