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