2
  #   ?ˆÇÎƒ\wÆa–Ým_J*j"Tâ€vã.ÜlJbÑ¿Ò w    ?/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __LINUX_MROUTE_H
#define __LINUX_MROUTE_H

#include <linux/in.h>
#include <linux/pim.h>
#include <net/fib_rules.h>
#include <net/fib_notifier.h>
#include <uapi/linux/mroute.h>
#include <linux/mroute_base.h>
#include <linux/sockptr.h>

#ifdef CONFIG_IP_MROUTE
static inline int ip_mroute_opt(int opt)
{
	return opt >= MRT_BASE && opt <= MRT_MAX;
}

int ip_mroute_setsockopt(struct sock *, int, sockptr_t, unsigned int);
int ip_mroute_getsockopt(struct sock *, int, sockptr_t, sockptr_t);
int ipmr_ioctl(struct sock *sk, int cmd, void *arg);
int ipmr_compat_ioctl(struct sock *sk, unsigned int cmd, void __user *arg);
int ip_mr_init(void);
bool ipmr_rule_default(const struct fib_rule *rule);
int ipmr_sk_ioctl(struct sock *sk, unsigned int cmd, void __user *arg);
#else
static inline int ip_mroute_setsockopt(struct sock *sock, int optname,
				       sockptr_t optval, unsigned int optlen)
{
	return -ENOPROTOOPT;
}

static inline int ip_mroute_getsockopt(struct sock *sk, int optname,
				       sockptr_t optval, sockptr_t optlen)
{
	return -ENOPROTOOPT;
}

static inline int ipmr_ioctl(struct sock *sk, int cmd, void *arg)
{
	return -ENOIOCTLCMD;
}

static inline int ip_mr_init(void)
{
	return 0;
}

static inline int ip_mroute_opt(int opt)
{
	return 0;
}

static inline bool ipmr_rule_default(const struct fib_rule *rule)
{
	return true;
}

static inline int ipmr_sk_ioctl(struct sock *sk, unsigned int cmd,
				void __user *arg)
{
	return 1;
}
#endif

#define VIFF_STATIC 0x8000

struct mfc_cache_cmp_arg {
	__be32 mfc_mcastgrp;
	__be32 mfc_origin;
};

/**
 * struct mfc_cache - multicast routing entries
 * @_c: Common multicast routing information; has to be first [for casting]
 * @mfc_mcastgrp: destination multicast group address
 * @mfc_origin: source address
 * @cmparg: used for rhashtable comparisons
 */
struct mfc_cache {
	struct mr_mfc _c;
	union {
		struct {
			__be32 mfc_mcastgrp;
			__be32 mfc_origin;
		};
		struct mfc_cache_cmp_arg cmparg;
	};
};

struct rtmsg;
int ipmr_get_route(struct net *net, struct sk_buff *skb,
		   __be32 saddr, __be32 daddr,
		   struct rtmsg *rtm, u32 portid);
#endif
  #   Aˆl–ß=¿J•4Å6 ¸\d
bÑ¿ÐƒeöŸÎ¿Ó m    A‹      í]YsÛ8~Ÿ_á÷­­/û�K3³“Ìfã™ÙãÅÅ²¹–D…¤’x~ý7�"KŽ#~U&ºÝèþ@MŠÈ{ò°Š7ÕÕè¯ž?ùáž<¤EF®¼«¿]½©ÒxCŽ'ïHßœ‘.à.àêàU.ó›\öû_F£ÀcÄç$ ŒÄÞAóW¬…cò%]Æ+Îß–$®Iéú›PPí™«ÜÈÜås>`$ñê˜ÃúsÁ™xSTuYlîÈ)ÀlÀl�P¨\Ê\Ç£Gµ/°W¯ŠuÓbyWiž§y™nWÎ:ÑÊ¥âîJ"àìéÖÛUBÊ*¿]»åV§­Š>Ðkô½F¯Ñkôú»êµ:wGòÜòN$œp)Iê˜óE±?�6ËmÅ¹¬X.ãrŸïi<À<ƒÁ£rÑXæ¢ˆæ$Éâ{QzPÇãåŸD–Ý�2%ëú4ÕÀLÀLMµÊU™«Æ'	1I›Ž9¬ò/œ‰W�ï*^g'«.à.àê¨W¹l*s¿‰ì/™$’ˆGôBç˜P‘ODüÖ¬–quÇÙ¤ŒS²$‹Ú)î´×�S Ð Ð¾šÊq3™ã¦
'Q"‰	sê‚IòÛ;}—d½‹ížÔ*L?Vã¶½	˜€	˜€ù`ê¹å#™Dg'¿ÂM<õüCÄ+BaéÔ9+Yèu¾6ñš}Ûýšv¿¶·vËÖÎ ÷è=z�Þ£÷èýÅ÷^Ÿü=yòqÂ÷ÁDìŠQû®h,�Ü’RÌ6$·ñR÷™Xû€ôê—áäkþõè/ú‹þ¢¿è/úûmû«OÆtiä_X§œFâ6BÌ»¸P½ùbp¯É’ÔDF<ú7'qU7]¨î¹ôqKª:/¬Y„_œ¢éSðÀ7 |ÑTá>à{B|:Êµ–>Ïý‘x•J"]m×)«´(É¡ª¤É·ü™Ò~¿Ê×r2£ÑœŸäÌFÅ8õª·bîW£Ãè0:Œ£Ãèðóé°>)ÓEÁ»×»äeÓäzÓüdêàÚ®NòVó¾"ð/ðï…àÕÉ˜®òü-N¸ž2{‚¹)Å#DDDDlaôà«{¹ž¸çÂ_YŽ˜ÄúQòGƒ[o—lc?ròONâz—êF.Q9¡€<o ‘§ ™@R �íR'•‰J*�n²'KGŸ;8æ]�¹$Ë´¯|ÀçÀ%eà¾3âÓÉp*“á8â4¤KÆýQœJ"‘ŽE�³ã]’eÚWº‹FF
%ÐÝ ÓÉo¦®}‘¡ù+C¾Ü<Ö`ÊŽEäƒK²LûŠ@wÑè"_¡: {tú#•üB9d	:‰%‘�êŽEä7—d™ö�î¢ÑE¡B	t@÷ètòóTò›	ÈtùšïÍøŒù8R`:8A�ÿ¸$Ë´¯t�.š)”@tO€N'?½BFüB�]$œf‰‚³íàXA~wI–i_ø€Oâ’8³Dá>à;#>�‘½@<£Eþ&â6fJÔüY¯&«ü,‰Ô˜µ³]ôìAU°ñL3ƒ(»´5hŠ Ï&¨´¡zj¹H]ˆ_žY¨rHÑÁ1ï‚üÃ%Y¦}Eà >‰KâÌB…ø€ïŒøt2ŒÔÏ¹‘¸ìíÉ²Ù¦ƒc1yï’,Ó¾"ð Ÿ—”�øÎˆO'C¹bÀó‚’«ŒÄÙM–Ç¤$U^É—àÀ
V�±"ÊV°:¡•Nfj¥Â"—Ÿb…<‘Ëæet}…Ó±R¾ÃŒ%UfSçËLÈÇê]±v�i€½�½�½Ñ{od©Ú+ØØØØôÅ]ô�ÔÛrí&²íªƒÛ	ô„"°;°;°·Š:ÙÓ•P¢txT%ƒ@­Ë9;‚±¨)õe£›¸ƒã´œ¼pI–i_ø€Oâ’8S_á>à;#>�õJ¡@<õ4[(*›U‹!ÈµK²LûŠÀ7 |—�³¡À|gÄ§“¡Z94óàÂpO–Í²ŽÅäµK²LûŠÀ7 |\R>à;#>�•Ç¤ Dt"Õp‹!ÈÜ%Y¦}Eà >‰KâL3…ø€ïŒøt2Ô+²ÄK.ÃÉž,›Ývp,† ?º$Ë´¯|ÀçÀ%eà¾3âÓÉP­È‹OD†Ó=ù¨�¢ˆoJýä’¾òƒ-À7 |\R>à;#>�Õ7\Æò©§žŸ	š^½Í×dAšëÙóÿ?Nþî’v-{IÀuA¸ÂxÅ#ñp=—NfjEÖX¾%Ù“åá}ÇBò‹K²LûŠÀ7 |\R>à;#>�õ·cÄâ™0Ý“e³eÇbòÖ%Y¦}Eà >.)ð�ŸN†ò[2^$^ñ%„þ„¯ò�ÓmMzX0ÿñ¦¨š ›;¢