xref: /linux/include/linux/mroute.h (revision cdd5b5a9761fd66d17586e4f4ba6588c70e640ea)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds #ifndef __LINUX_MROUTE_H
31da177e4SLinus Torvalds #define __LINUX_MROUTE_H
41da177e4SLinus Torvalds 
51da177e4SLinus Torvalds #include <linux/in.h>
67c19a3d2SDavid S. Miller #include <linux/pim.h>
7478e4c2fSYotam Gigi #include <net/fib_rules.h>
84d65b948SYotam Gigi #include <net/fib_notifier.h>
9607ca46eSDavid Howells #include <uapi/linux/mroute.h>
106853f21fSYuval Mintz #include <linux/mroute_base.h>
1101ccb5b4SChristoph Hellwig #include <linux/sockptr.h>
121da177e4SLinus Torvalds 
136a9fb947SPavel Emelyanov #ifdef CONFIG_IP_MROUTE
ip_mroute_opt(int opt)146a9fb947SPavel Emelyanov static inline int ip_mroute_opt(int opt)
156a9fb947SPavel Emelyanov {
16520191bbSNikolay Aleksandrov 	return opt >= MRT_BASE && opt <= MRT_MAX;
176a9fb947SPavel Emelyanov }
186a9fb947SPavel Emelyanov 
1901ccb5b4SChristoph Hellwig int ip_mroute_setsockopt(struct sock *, int, sockptr_t, unsigned int);
20728f064cSMartin KaFai Lau int ip_mroute_getsockopt(struct sock *, int, sockptr_t, sockptr_t);
21*e1d001faSBreno Leitao int ipmr_ioctl(struct sock *sk, int cmd, void *arg);
22520191bbSNikolay Aleksandrov int ipmr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg);
23520191bbSNikolay Aleksandrov int ip_mr_init(void);
24478e4c2fSYotam Gigi bool ipmr_rule_default(const struct fib_rule *rule);
25*e1d001faSBreno Leitao int ipmr_sk_ioctl(struct sock *sk, unsigned int cmd, void __user *arg);
26e0835f8fSYOSHIFUJI Hideaki #else
ip_mroute_setsockopt(struct sock * sock,int optname,sockptr_t optval,unsigned int optlen)27520191bbSNikolay Aleksandrov static inline int ip_mroute_setsockopt(struct sock *sock, int optname,
2801ccb5b4SChristoph Hellwig 				       sockptr_t optval, unsigned int optlen)
29e0835f8fSYOSHIFUJI Hideaki {
30e0835f8fSYOSHIFUJI Hideaki 	return -ENOPROTOOPT;
31e0835f8fSYOSHIFUJI Hideaki }
32e0835f8fSYOSHIFUJI Hideaki 
ip_mroute_getsockopt(struct sock * sk,int optname,sockptr_t optval,sockptr_t optlen)33728f064cSMartin KaFai Lau static inline int ip_mroute_getsockopt(struct sock *sk, int optname,
34728f064cSMartin KaFai Lau 				       sockptr_t optval, sockptr_t optlen)
35e0835f8fSYOSHIFUJI Hideaki {
36e0835f8fSYOSHIFUJI Hideaki 	return -ENOPROTOOPT;
37e0835f8fSYOSHIFUJI Hideaki }
38e0835f8fSYOSHIFUJI Hideaki 
ipmr_ioctl(struct sock * sk,int cmd,void * arg)39*e1d001faSBreno Leitao static inline int ipmr_ioctl(struct sock *sk, int cmd, void *arg)
40e0835f8fSYOSHIFUJI Hideaki {
41e0835f8fSYOSHIFUJI Hideaki 	return -ENOIOCTLCMD;
42e0835f8fSYOSHIFUJI Hideaki }
43e0835f8fSYOSHIFUJI Hideaki 
ip_mr_init(void)44e0835f8fSYOSHIFUJI Hideaki static inline int ip_mr_init(void)
45e0835f8fSYOSHIFUJI Hideaki {
46e0835f8fSYOSHIFUJI Hideaki 	return 0;
47e0835f8fSYOSHIFUJI Hideaki }
48520191bbSNikolay Aleksandrov 
ip_mroute_opt(int opt)49520191bbSNikolay Aleksandrov static inline int ip_mroute_opt(int opt)
50520191bbSNikolay Aleksandrov {
51520191bbSNikolay Aleksandrov 	return 0;
52520191bbSNikolay Aleksandrov }
53478e4c2fSYotam Gigi 
ipmr_rule_default(const struct fib_rule * rule)54478e4c2fSYotam Gigi static inline bool ipmr_rule_default(const struct fib_rule *rule)
55478e4c2fSYotam Gigi {
56478e4c2fSYotam Gigi 	return true;
57478e4c2fSYotam Gigi }
58*e1d001faSBreno Leitao 
ipmr_sk_ioctl(struct sock * sk,unsigned int cmd,void __user * arg)59*e1d001faSBreno Leitao static inline int ipmr_sk_ioctl(struct sock *sk, unsigned int cmd,
60*e1d001faSBreno Leitao 				void __user *arg)
61*e1d001faSBreno Leitao {
62*e1d001faSBreno Leitao 	return 1;
63*e1d001faSBreno Leitao }
64e0835f8fSYOSHIFUJI Hideaki #endif
651da177e4SLinus Torvalds 
661da177e4SLinus Torvalds #define VIFF_STATIC 0x8000
671da177e4SLinus Torvalds 
688fb472c0SNikolay Aleksandrov struct mfc_cache_cmp_arg {
698fb472c0SNikolay Aleksandrov 	__be32 mfc_mcastgrp;
708fb472c0SNikolay Aleksandrov 	__be32 mfc_origin;
718fb472c0SNikolay Aleksandrov };
728fb472c0SNikolay Aleksandrov 
738fb472c0SNikolay Aleksandrov /**
748fb472c0SNikolay Aleksandrov  * struct mfc_cache - multicast routing entries
75494fff56SYuval Mintz  * @_c: Common multicast routing information; has to be first [for casting]
768fb472c0SNikolay Aleksandrov  * @mfc_mcastgrp: destination multicast group address
778fb472c0SNikolay Aleksandrov  * @mfc_origin: source address
788fb472c0SNikolay Aleksandrov  * @cmparg: used for rhashtable comparisons
798fb472c0SNikolay Aleksandrov  */
80d94d9feeSEric Dumazet struct mfc_cache {
81494fff56SYuval Mintz 	struct mr_mfc _c;
828fb472c0SNikolay Aleksandrov 	union {
838fb472c0SNikolay Aleksandrov 		struct {
848fb472c0SNikolay Aleksandrov 			__be32 mfc_mcastgrp;
858fb472c0SNikolay Aleksandrov 			__be32 mfc_origin;
868fb472c0SNikolay Aleksandrov 		};
878fb472c0SNikolay Aleksandrov 		struct mfc_cache_cmp_arg cmparg;
888fb472c0SNikolay Aleksandrov 	};
891da177e4SLinus Torvalds };
901da177e4SLinus Torvalds 
911da177e4SLinus Torvalds struct rtmsg;
92520191bbSNikolay Aleksandrov int ipmr_get_route(struct net *net, struct sk_buff *skb,
939a1b9496SDavid S. Miller 		   __be32 saddr, __be32 daddr,
949f09eaeaSDavid Ahern 		   struct rtmsg *rtm, u32 portid);
951da177e4SLinus Torvalds #endif
96