xref: /linux/include/linux/mroute.h (revision 01ccb5b48f08f59ca3746d59221f4990aec1b194)
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>
11*01ccb5b4SChristoph Hellwig #include <linux/sockptr.h>
121da177e4SLinus Torvalds 
136a9fb947SPavel Emelyanov #ifdef CONFIG_IP_MROUTE
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 
19*01ccb5b4SChristoph Hellwig int ip_mroute_setsockopt(struct sock *, int, sockptr_t, unsigned int);
20520191bbSNikolay Aleksandrov int ip_mroute_getsockopt(struct sock *, int, char __user *, int __user *);
21520191bbSNikolay Aleksandrov int ipmr_ioctl(struct sock *sk, int cmd, void __user *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);
25e0835f8fSYOSHIFUJI Hideaki #else
26520191bbSNikolay Aleksandrov static inline int ip_mroute_setsockopt(struct sock *sock, int optname,
27*01ccb5b4SChristoph Hellwig 				       sockptr_t optval, unsigned int optlen)
28e0835f8fSYOSHIFUJI Hideaki {
29e0835f8fSYOSHIFUJI Hideaki 	return -ENOPROTOOPT;
30e0835f8fSYOSHIFUJI Hideaki }
31e0835f8fSYOSHIFUJI Hideaki 
32520191bbSNikolay Aleksandrov static inline int ip_mroute_getsockopt(struct sock *sock, int optname,
33520191bbSNikolay Aleksandrov 				       char __user *optval, int __user *optlen)
34e0835f8fSYOSHIFUJI Hideaki {
35e0835f8fSYOSHIFUJI Hideaki 	return -ENOPROTOOPT;
36e0835f8fSYOSHIFUJI Hideaki }
37e0835f8fSYOSHIFUJI Hideaki 
38520191bbSNikolay Aleksandrov static inline int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg)
39e0835f8fSYOSHIFUJI Hideaki {
40e0835f8fSYOSHIFUJI Hideaki 	return -ENOIOCTLCMD;
41e0835f8fSYOSHIFUJI Hideaki }
42e0835f8fSYOSHIFUJI Hideaki 
43e0835f8fSYOSHIFUJI Hideaki static inline int ip_mr_init(void)
44e0835f8fSYOSHIFUJI Hideaki {
45e0835f8fSYOSHIFUJI Hideaki 	return 0;
46e0835f8fSYOSHIFUJI Hideaki }
47520191bbSNikolay Aleksandrov 
48520191bbSNikolay Aleksandrov static inline int ip_mroute_opt(int opt)
49520191bbSNikolay Aleksandrov {
50520191bbSNikolay Aleksandrov 	return 0;
51520191bbSNikolay Aleksandrov }
52478e4c2fSYotam Gigi 
53478e4c2fSYotam Gigi static inline bool ipmr_rule_default(const struct fib_rule *rule)
54478e4c2fSYotam Gigi {
55478e4c2fSYotam Gigi 	return true;
56478e4c2fSYotam Gigi }
57e0835f8fSYOSHIFUJI Hideaki #endif
581da177e4SLinus Torvalds 
591da177e4SLinus Torvalds #define VIFF_STATIC 0x8000
601da177e4SLinus Torvalds 
618fb472c0SNikolay Aleksandrov struct mfc_cache_cmp_arg {
628fb472c0SNikolay Aleksandrov 	__be32 mfc_mcastgrp;
638fb472c0SNikolay Aleksandrov 	__be32 mfc_origin;
648fb472c0SNikolay Aleksandrov };
658fb472c0SNikolay Aleksandrov 
668fb472c0SNikolay Aleksandrov /**
678fb472c0SNikolay Aleksandrov  * struct mfc_cache - multicast routing entries
68494fff56SYuval Mintz  * @_c: Common multicast routing information; has to be first [for casting]
698fb472c0SNikolay Aleksandrov  * @mfc_mcastgrp: destination multicast group address
708fb472c0SNikolay Aleksandrov  * @mfc_origin: source address
718fb472c0SNikolay Aleksandrov  * @cmparg: used for rhashtable comparisons
728fb472c0SNikolay Aleksandrov  */
73d94d9feeSEric Dumazet struct mfc_cache {
74494fff56SYuval Mintz 	struct mr_mfc _c;
758fb472c0SNikolay Aleksandrov 	union {
768fb472c0SNikolay Aleksandrov 		struct {
778fb472c0SNikolay Aleksandrov 			__be32 mfc_mcastgrp;
788fb472c0SNikolay Aleksandrov 			__be32 mfc_origin;
798fb472c0SNikolay Aleksandrov 		};
808fb472c0SNikolay Aleksandrov 		struct mfc_cache_cmp_arg cmparg;
818fb472c0SNikolay Aleksandrov 	};
821da177e4SLinus Torvalds };
831da177e4SLinus Torvalds 
841da177e4SLinus Torvalds struct rtmsg;
85520191bbSNikolay Aleksandrov int ipmr_get_route(struct net *net, struct sk_buff *skb,
869a1b9496SDavid S. Miller 		   __be32 saddr, __be32 daddr,
879f09eaeaSDavid Ahern 		   struct rtmsg *rtm, u32 portid);
881da177e4SLinus Torvalds #endif
89