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