2 * IP multicast routing support for mrouted 3.6/3.8
4 * (c) 1995 Alan Cox, <alan@lxorguk.ukuu.org.uk>
5 * Linux Consultancy and Custom Driver Development
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
13 * Michael Chastain : Incorrect size of copying.
14 * Alan Cox : Added the cache manager code
15 * Alan Cox : Fixed the clone/copy bug and device race.
16 * Mike McLagan : Routing by source
17 * Malcolm Beattie : Buffer handling fixes.
18 * Alexey Kuznetsov : Double buffer free and other fixes.
19 * SVR Anand : Fixed several multicast bugs and problems.
20 * Alexey Kuznetsov : Status, optimisations and more.
21 * Brad Parker : Better behaviour on mrouted upcall
23 * Carlos Picoto : PIMv1 Support
24 * Pavlin Ivanov Radoslavov: PIMv2 Registers must checksum only PIM header
25 * Relax this requrement to work with older peers.
29 #include <asm/system.h>
30 #include <asm/uaccess.h>
31 #include <linux/types.h>
32 #include <linux/capability.h>
33 #include <linux/errno.h>
34 #include <linux/timer.h>
36 #include <linux/kernel.h>
37 #include <linux/fcntl.h>
38 #include <linux/stat.h>
39 #include <linux/socket.h>
41 #include <linux/inet.h>
42 #include <linux/netdevice.h>
43 #include <linux/inetdevice.h>
44 #include <linux/igmp.h>
45 #include <linux/proc_fs.h>
46 #include <linux/seq_file.h>
47 #include <linux/mroute.h>
48 #include <linux/init.h>
49 #include <linux/if_ether.h>
50 #include <net/net_namespace.h>
52 #include <net/protocol.h>
53 #include <linux/skbuff.h>
54 #include <net/route.h>
59 #include <linux/notifier.h>
60 #include <linux/if_arp.h>
61 #include <linux/netfilter_ipv4.h>
63 #include <net/checksum.h>
64 #include <net/netlink.h>
66 #if defined(CONFIG_IP_PIMSM_V1) || defined(CONFIG_IP_PIMSM_V2)
67 #define CONFIG_IP_PIMSM 1
70 /* Big lock, protecting vif table, mrt cache and mroute socket state.
71 Note that the changes are semaphored via rtnl_lock.
74 static DEFINE_RWLOCK(mrt_lock);
77 * Multicast router control variables
80 #define VIF_EXISTS(_net, _idx) ((_net)->ipv4.vif_table[_idx].dev != NULL)
82 static struct mfc_cache *mfc_unres_queue; /* Queue of unresolved entries */
84 /* Special spinlock for queue of unresolved entries */
85 static DEFINE_SPINLOCK(mfc_unres_lock);
87 /* We return to original Alan's scheme. Hash table of resolved
88 entries is changed only in process context and protected
89 with weak lock mrt_lock. Queue of unresolved entries is protected
90 with strong spinlock mfc_unres_lock.
92 In this case data path is free of exclusive locks at all.
95 static struct kmem_cache *mrt_cachep __read_mostly;
97 static int ip_mr_forward(struct sk_buff *skb, struct mfc_cache *cache, int local);
98 static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert);
99 static int ipmr_fill_mroute(struct sk_buff *skb, struct mfc_cache *c, struct rtmsg *rtm);
101 #ifdef CONFIG_IP_PIMSM_V2
102 static struct net_protocol pim_protocol;
105 static struct timer_list ipmr_expire_timer;
107 /* Service routines creating virtual interfaces: DVMRP tunnels and PIMREG */
109 static void ipmr_del_tunnel(struct net_device *dev, struct vifctl *v)
113 dev = __dev_get_by_name(&init_net, "tunl0");
115 const struct net_device_ops *ops = dev->netdev_ops;
117 struct ip_tunnel_parm p;
119 memset(&p, 0, sizeof(p));
120 p.iph.daddr = v->vifc_rmt_addr.s_addr;
121 p.iph.saddr = v->vifc_lcl_addr.s_addr;
124 p.iph.protocol = IPPROTO_IPIP;
125 sprintf(p.name, "dvmrp%d", v->vifc_vifi);
126 ifr.ifr_ifru.ifru_data = (__force void __user *)&p;
128 if (ops->ndo_do_ioctl) {
129 mm_segment_t oldfs = get_fs();
132 ops->ndo_do_ioctl(dev, &ifr, SIOCDELTUNNEL);
139 struct net_device *ipmr_new_tunnel(struct vifctl *v)
141 struct net_device *dev;
143 dev = __dev_get_by_name(&init_net, "tunl0");
146 const struct net_device_ops *ops = dev->netdev_ops;
149 struct ip_tunnel_parm p;
150 struct in_device *in_dev;
152 memset(&p, 0, sizeof(p));
153 p.iph.daddr = v->vifc_rmt_addr.s_addr;
154 p.iph.saddr = v->vifc_lcl_addr.s_addr;
157 p.iph.protocol = IPPROTO_IPIP;
158 sprintf(p.name, "dvmrp%d", v->vifc_vifi);
159 ifr.ifr_ifru.ifru_data = (__force void __user *)&p;
161 if (ops->ndo_do_ioctl) {
162 mm_segment_t oldfs = get_fs();
165 err = ops->ndo_do_ioctl(dev, &ifr, SIOCADDTUNNEL);
172 if (err == 0 && (dev = __dev_get_by_name(&init_net, p.name)) != NULL) {
173 dev->flags |= IFF_MULTICAST;
175 in_dev = __in_dev_get_rtnl(dev);
179 ipv4_devconf_setall(in_dev);
180 IPV4_DEVCONF(in_dev->cnf, RP_FILTER) = 0;
190 /* allow the register to be completed before unregistering. */
194 unregister_netdevice(dev);
198 #ifdef CONFIG_IP_PIMSM
200 static int reg_vif_xmit(struct sk_buff *skb, struct net_device *dev)
202 read_lock(&mrt_lock);
203 dev->stats.tx_bytes += skb->len;
204 dev->stats.tx_packets++;
205 ipmr_cache_report(skb, init_net.ipv4.mroute_reg_vif_num, IGMPMSG_WHOLEPKT);
206 read_unlock(&mrt_lock);
211 static const struct net_device_ops reg_vif_netdev_ops = {
212 .ndo_start_xmit = reg_vif_xmit,
215 static void reg_vif_setup(struct net_device *dev)
217 dev->type = ARPHRD_PIMREG;
218 dev->mtu = ETH_DATA_LEN - sizeof(struct iphdr) - 8;
219 dev->flags = IFF_NOARP;
220 dev->netdev_ops = ®_vif_netdev_ops,
221 dev->destructor = free_netdev;
224 static struct net_device *ipmr_reg_vif(void)
226 struct net_device *dev;
227 struct in_device *in_dev;
229 dev = alloc_netdev(0, "pimreg", reg_vif_setup);
234 if (register_netdevice(dev)) {
241 if ((in_dev = __in_dev_get_rcu(dev)) == NULL) {
246 ipv4_devconf_setall(in_dev);
247 IPV4_DEVCONF(in_dev->cnf, RP_FILTER) = 0;
258 /* allow the register to be completed before unregistering. */
262 unregister_netdevice(dev);
269 * @notify: Set to 1, if the caller is a notifier_call
272 static int vif_delete(int vifi, int notify)
274 struct vif_device *v;
275 struct net_device *dev;
276 struct in_device *in_dev;
278 if (vifi < 0 || vifi >= init_net.ipv4.maxvif)
279 return -EADDRNOTAVAIL;
281 v = &init_net.ipv4.vif_table[vifi];
283 write_lock_bh(&mrt_lock);
288 write_unlock_bh(&mrt_lock);
289 return -EADDRNOTAVAIL;
292 #ifdef CONFIG_IP_PIMSM
293 if (vifi == init_net.ipv4.mroute_reg_vif_num)
294 init_net.ipv4.mroute_reg_vif_num = -1;
297 if (vifi+1 == init_net.ipv4.maxvif) {
299 for (tmp=vifi-1; tmp>=0; tmp--) {
300 if (VIF_EXISTS(&init_net, tmp))
303 init_net.ipv4.maxvif = tmp+1;
306 write_unlock_bh(&mrt_lock);
308 dev_set_allmulti(dev, -1);
310 if ((in_dev = __in_dev_get_rtnl(dev)) != NULL) {
311 IPV4_DEVCONF(in_dev->cnf, MC_FORWARDING)--;
312 ip_rt_multicast_event(in_dev);
315 if (v->flags&(VIFF_TUNNEL|VIFF_REGISTER) && !notify)
316 unregister_netdevice(dev);
322 static inline void ipmr_cache_free(struct mfc_cache *c)
324 release_net(mfc_net(c));
325 kmem_cache_free(mrt_cachep, c);
328 /* Destroy an unresolved cache entry, killing queued skbs
329 and reporting error to netlink readers.
332 static void ipmr_destroy_unres(struct mfc_cache *c)
337 atomic_dec(&init_net.ipv4.cache_resolve_queue_len);
339 while ((skb = skb_dequeue(&c->mfc_un.unres.unresolved))) {
340 if (ip_hdr(skb)->version == 0) {
341 struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct iphdr));
342 nlh->nlmsg_type = NLMSG_ERROR;
343 nlh->nlmsg_len = NLMSG_LENGTH(sizeof(struct nlmsgerr));
344 skb_trim(skb, nlh->nlmsg_len);
346 e->error = -ETIMEDOUT;
347 memset(&e->msg, 0, sizeof(e->msg));
349 rtnl_unicast(skb, &init_net, NETLINK_CB(skb).pid);
358 /* Single timer process for all the unresolved queue. */
360 static void ipmr_expire_process(unsigned long dummy)
363 unsigned long expires;
364 struct mfc_cache *c, **cp;
366 if (!spin_trylock(&mfc_unres_lock)) {
367 mod_timer(&ipmr_expire_timer, jiffies+HZ/10);
371 if (mfc_unres_queue == NULL)
376 cp = &mfc_unres_queue;
378 while ((c=*cp) != NULL) {
379 if (time_after(c->mfc_un.unres.expires, now)) {
380 unsigned long interval = c->mfc_un.unres.expires - now;
381 if (interval < expires)
389 ipmr_destroy_unres(c);
392 if (mfc_unres_queue != NULL)
393 mod_timer(&ipmr_expire_timer, jiffies + expires);
396 spin_unlock(&mfc_unres_lock);
399 /* Fill oifs list. It is called under write locked mrt_lock. */
401 static void ipmr_update_thresholds(struct mfc_cache *cache, unsigned char *ttls)
405 cache->mfc_un.res.minvif = MAXVIFS;
406 cache->mfc_un.res.maxvif = 0;
407 memset(cache->mfc_un.res.ttls, 255, MAXVIFS);
409 for (vifi = 0; vifi < init_net.ipv4.maxvif; vifi++) {
410 if (VIF_EXISTS(&init_net, vifi) &&
411 ttls[vifi] && ttls[vifi] < 255) {
412 cache->mfc_un.res.ttls[vifi] = ttls[vifi];
413 if (cache->mfc_un.res.minvif > vifi)
414 cache->mfc_un.res.minvif = vifi;
415 if (cache->mfc_un.res.maxvif <= vifi)
416 cache->mfc_un.res.maxvif = vifi + 1;
421 static int vif_add(struct vifctl *vifc, int mrtsock)
423 int vifi = vifc->vifc_vifi;
424 struct vif_device *v = &init_net.ipv4.vif_table[vifi];
425 struct net_device *dev;
426 struct in_device *in_dev;
430 if (VIF_EXISTS(&init_net, vifi))
433 switch (vifc->vifc_flags) {
434 #ifdef CONFIG_IP_PIMSM
437 * Special Purpose VIF in PIM
438 * All the packets will be sent to the daemon
440 if (init_net.ipv4.mroute_reg_vif_num >= 0)
442 dev = ipmr_reg_vif();
445 err = dev_set_allmulti(dev, 1);
447 unregister_netdevice(dev);
454 dev = ipmr_new_tunnel(vifc);
457 err = dev_set_allmulti(dev, 1);
459 ipmr_del_tunnel(dev, vifc);
465 dev = ip_dev_find(&init_net, vifc->vifc_lcl_addr.s_addr);
467 return -EADDRNOTAVAIL;
468 err = dev_set_allmulti(dev, 1);
478 if ((in_dev = __in_dev_get_rtnl(dev)) == NULL)
479 return -EADDRNOTAVAIL;
480 IPV4_DEVCONF(in_dev->cnf, MC_FORWARDING)++;
481 ip_rt_multicast_event(in_dev);
484 * Fill in the VIF structures
486 v->rate_limit = vifc->vifc_rate_limit;
487 v->local = vifc->vifc_lcl_addr.s_addr;
488 v->remote = vifc->vifc_rmt_addr.s_addr;
489 v->flags = vifc->vifc_flags;
491 v->flags |= VIFF_STATIC;
492 v->threshold = vifc->vifc_threshold;
497 v->link = dev->ifindex;
498 if (v->flags&(VIFF_TUNNEL|VIFF_REGISTER))
499 v->link = dev->iflink;
501 /* And finish update writing critical data */
502 write_lock_bh(&mrt_lock);
504 #ifdef CONFIG_IP_PIMSM
505 if (v->flags&VIFF_REGISTER)
506 init_net.ipv4.mroute_reg_vif_num = vifi;
508 if (vifi+1 > init_net.ipv4.maxvif)
509 init_net.ipv4.maxvif = vifi+1;
510 write_unlock_bh(&mrt_lock);
514 static struct mfc_cache *ipmr_cache_find(__be32 origin, __be32 mcastgrp)
516 int line = MFC_HASH(mcastgrp, origin);
519 for (c = init_net.ipv4.mfc_cache_array[line]; c; c = c->next) {
520 if (c->mfc_origin==origin && c->mfc_mcastgrp==mcastgrp)
527 * Allocate a multicast cache entry
529 static struct mfc_cache *ipmr_cache_alloc(struct net *net)
531 struct mfc_cache *c = kmem_cache_zalloc(mrt_cachep, GFP_KERNEL);
534 c->mfc_un.res.minvif = MAXVIFS;
539 static struct mfc_cache *ipmr_cache_alloc_unres(struct net *net)
541 struct mfc_cache *c = kmem_cache_zalloc(mrt_cachep, GFP_ATOMIC);
544 skb_queue_head_init(&c->mfc_un.unres.unresolved);
545 c->mfc_un.unres.expires = jiffies + 10*HZ;
551 * A cache entry has gone into a resolved state from queued
554 static void ipmr_cache_resolve(struct mfc_cache *uc, struct mfc_cache *c)
560 * Play the pending entries through our router
563 while ((skb = __skb_dequeue(&uc->mfc_un.unres.unresolved))) {
564 if (ip_hdr(skb)->version == 0) {
565 struct nlmsghdr *nlh = (struct nlmsghdr *)skb_pull(skb, sizeof(struct iphdr));
567 if (ipmr_fill_mroute(skb, c, NLMSG_DATA(nlh)) > 0) {
568 nlh->nlmsg_len = (skb_tail_pointer(skb) -
571 nlh->nlmsg_type = NLMSG_ERROR;
572 nlh->nlmsg_len = NLMSG_LENGTH(sizeof(struct nlmsgerr));
573 skb_trim(skb, nlh->nlmsg_len);
575 e->error = -EMSGSIZE;
576 memset(&e->msg, 0, sizeof(e->msg));
579 rtnl_unicast(skb, &init_net, NETLINK_CB(skb).pid);
581 ip_mr_forward(skb, c, 0);
586 * Bounce a cache query up to mrouted. We could use netlink for this but mrouted
587 * expects the following bizarre scheme.
589 * Called under mrt_lock.
592 static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert)
595 const int ihl = ip_hdrlen(pkt);
596 struct igmphdr *igmp;
600 #ifdef CONFIG_IP_PIMSM
601 if (assert == IGMPMSG_WHOLEPKT)
602 skb = skb_realloc_headroom(pkt, sizeof(struct iphdr));
605 skb = alloc_skb(128, GFP_ATOMIC);
610 #ifdef CONFIG_IP_PIMSM
611 if (assert == IGMPMSG_WHOLEPKT) {
612 /* Ugly, but we have no choice with this interface.
613 Duplicate old header, fix ihl, length etc.
614 And all this only to mangle msg->im_msgtype and
615 to set msg->im_mbz to "mbz" :-)
617 skb_push(skb, sizeof(struct iphdr));
618 skb_reset_network_header(skb);
619 skb_reset_transport_header(skb);
620 msg = (struct igmpmsg *)skb_network_header(skb);
621 memcpy(msg, skb_network_header(pkt), sizeof(struct iphdr));
622 msg->im_msgtype = IGMPMSG_WHOLEPKT;
624 msg->im_vif = init_net.ipv4.mroute_reg_vif_num;
625 ip_hdr(skb)->ihl = sizeof(struct iphdr) >> 2;
626 ip_hdr(skb)->tot_len = htons(ntohs(ip_hdr(pkt)->tot_len) +
627 sizeof(struct iphdr));
636 skb->network_header = skb->tail;
638 skb_copy_to_linear_data(skb, pkt->data, ihl);
639 ip_hdr(skb)->protocol = 0; /* Flag to the kernel this is a route add */
640 msg = (struct igmpmsg *)skb_network_header(skb);
642 skb->dst = dst_clone(pkt->dst);
648 igmp=(struct igmphdr *)skb_put(skb, sizeof(struct igmphdr));
650 msg->im_msgtype = assert;
652 ip_hdr(skb)->tot_len = htons(skb->len); /* Fix the length */
653 skb->transport_header = skb->network_header;
656 if (init_net.ipv4.mroute_sk == NULL) {
664 ret = sock_queue_rcv_skb(init_net.ipv4.mroute_sk, skb);
667 printk(KERN_WARNING "mroute: pending queue full, dropping entries.\n");
675 * Queue a packet for resolution. It gets locked cache entry!
679 ipmr_cache_unresolved(vifi_t vifi, struct sk_buff *skb)
683 const struct iphdr *iph = ip_hdr(skb);
685 spin_lock_bh(&mfc_unres_lock);
686 for (c=mfc_unres_queue; c; c=c->next) {
687 if (net_eq(mfc_net(c), &init_net) &&
688 c->mfc_mcastgrp == iph->daddr &&
689 c->mfc_origin == iph->saddr)
695 * Create a new entry if allowable
698 if (atomic_read(&init_net.ipv4.cache_resolve_queue_len) >= 10 ||
699 (c = ipmr_cache_alloc_unres(&init_net)) == NULL) {
700 spin_unlock_bh(&mfc_unres_lock);
707 * Fill in the new cache entry
710 c->mfc_origin = iph->saddr;
711 c->mfc_mcastgrp = iph->daddr;
714 * Reflect first query at mrouted.
716 if ((err = ipmr_cache_report(skb, vifi, IGMPMSG_NOCACHE))<0) {
717 /* If the report failed throw the cache entry
720 spin_unlock_bh(&mfc_unres_lock);
727 atomic_inc(&init_net.ipv4.cache_resolve_queue_len);
728 c->next = mfc_unres_queue;
731 mod_timer(&ipmr_expire_timer, c->mfc_un.unres.expires);
735 * See if we can append the packet
737 if (c->mfc_un.unres.unresolved.qlen>3) {
741 skb_queue_tail(&c->mfc_un.unres.unresolved, skb);
745 spin_unlock_bh(&mfc_unres_lock);
750 * MFC cache manipulation by user space mroute daemon
753 static int ipmr_mfc_delete(struct mfcctl *mfc)
756 struct mfc_cache *c, **cp;
758 line = MFC_HASH(mfc->mfcc_mcastgrp.s_addr, mfc->mfcc_origin.s_addr);
760 for (cp = &init_net.ipv4.mfc_cache_array[line];
761 (c = *cp) != NULL; cp = &c->next) {
762 if (c->mfc_origin == mfc->mfcc_origin.s_addr &&
763 c->mfc_mcastgrp == mfc->mfcc_mcastgrp.s_addr) {
764 write_lock_bh(&mrt_lock);
766 write_unlock_bh(&mrt_lock);
775 static int ipmr_mfc_add(struct mfcctl *mfc, int mrtsock)
778 struct mfc_cache *uc, *c, **cp;
780 line = MFC_HASH(mfc->mfcc_mcastgrp.s_addr, mfc->mfcc_origin.s_addr);
782 for (cp = &init_net.ipv4.mfc_cache_array[line];
783 (c = *cp) != NULL; cp = &c->next) {
784 if (c->mfc_origin == mfc->mfcc_origin.s_addr &&
785 c->mfc_mcastgrp == mfc->mfcc_mcastgrp.s_addr)
790 write_lock_bh(&mrt_lock);
791 c->mfc_parent = mfc->mfcc_parent;
792 ipmr_update_thresholds(c, mfc->mfcc_ttls);
794 c->mfc_flags |= MFC_STATIC;
795 write_unlock_bh(&mrt_lock);
799 if (!ipv4_is_multicast(mfc->mfcc_mcastgrp.s_addr))
802 c = ipmr_cache_alloc(&init_net);
806 c->mfc_origin = mfc->mfcc_origin.s_addr;
807 c->mfc_mcastgrp = mfc->mfcc_mcastgrp.s_addr;
808 c->mfc_parent = mfc->mfcc_parent;
809 ipmr_update_thresholds(c, mfc->mfcc_ttls);
811 c->mfc_flags |= MFC_STATIC;
813 write_lock_bh(&mrt_lock);
814 c->next = init_net.ipv4.mfc_cache_array[line];
815 init_net.ipv4.mfc_cache_array[line] = c;
816 write_unlock_bh(&mrt_lock);
819 * Check to see if we resolved a queued list. If so we
820 * need to send on the frames and tidy up.
822 spin_lock_bh(&mfc_unres_lock);
823 for (cp = &mfc_unres_queue; (uc=*cp) != NULL;
825 if (net_eq(mfc_net(uc), &init_net) &&
826 uc->mfc_origin == c->mfc_origin &&
827 uc->mfc_mcastgrp == c->mfc_mcastgrp) {
829 atomic_dec(&init_net.ipv4.cache_resolve_queue_len);
833 if (mfc_unres_queue == NULL)
834 del_timer(&ipmr_expire_timer);
835 spin_unlock_bh(&mfc_unres_lock);
838 ipmr_cache_resolve(uc, c);
845 * Close the multicast socket, and clear the vif tables etc
848 static void mroute_clean_tables(struct sock *sk)
853 * Shut down all active vif entries
855 for (i = 0; i < init_net.ipv4.maxvif; i++) {
856 if (!(init_net.ipv4.vif_table[i].flags&VIFF_STATIC))
863 for (i=0; i<MFC_LINES; i++) {
864 struct mfc_cache *c, **cp;
866 cp = &init_net.ipv4.mfc_cache_array[i];
867 while ((c = *cp) != NULL) {
868 if (c->mfc_flags&MFC_STATIC) {
872 write_lock_bh(&mrt_lock);
874 write_unlock_bh(&mrt_lock);
880 if (atomic_read(&init_net.ipv4.cache_resolve_queue_len) != 0) {
881 struct mfc_cache *c, **cp;
883 spin_lock_bh(&mfc_unres_lock);
884 cp = &mfc_unres_queue;
885 while ((c = *cp) != NULL) {
886 if (!net_eq(mfc_net(c), &init_net)) {
892 ipmr_destroy_unres(c);
894 spin_unlock_bh(&mfc_unres_lock);
898 static void mrtsock_destruct(struct sock *sk)
901 if (sk == init_net.ipv4.mroute_sk) {
902 IPV4_DEVCONF_ALL(sock_net(sk), MC_FORWARDING)--;
904 write_lock_bh(&mrt_lock);
905 init_net.ipv4.mroute_sk = NULL;
906 write_unlock_bh(&mrt_lock);
908 mroute_clean_tables(sk);
914 * Socket options and virtual interface manipulation. The whole
915 * virtual interface system is a complete heap, but unfortunately
916 * that's how BSD mrouted happens to think. Maybe one day with a proper
917 * MOSPF/PIM router set up we can clean this up.
920 int ip_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, int optlen)
926 if (optname != MRT_INIT) {
927 if (sk != init_net.ipv4.mroute_sk && !capable(CAP_NET_ADMIN))
933 if (sk->sk_type != SOCK_RAW ||
934 inet_sk(sk)->num != IPPROTO_IGMP)
936 if (optlen != sizeof(int))
940 if (init_net.ipv4.mroute_sk) {
945 ret = ip_ra_control(sk, 1, mrtsock_destruct);
947 write_lock_bh(&mrt_lock);
948 init_net.ipv4.mroute_sk = sk;
949 write_unlock_bh(&mrt_lock);
951 IPV4_DEVCONF_ALL(sock_net(sk), MC_FORWARDING)++;
956 if (sk != init_net.ipv4.mroute_sk)
958 return ip_ra_control(sk, 0, NULL);
961 if (optlen != sizeof(vif))
963 if (copy_from_user(&vif, optval, sizeof(vif)))
965 if (vif.vifc_vifi >= MAXVIFS)
968 if (optname == MRT_ADD_VIF) {
969 ret = vif_add(&vif, sk == init_net.ipv4.mroute_sk);
971 ret = vif_delete(vif.vifc_vifi, 0);
977 * Manipulate the forwarding caches. These live
978 * in a sort of kernel/user symbiosis.
982 if (optlen != sizeof(mfc))
984 if (copy_from_user(&mfc, optval, sizeof(mfc)))
987 if (optname == MRT_DEL_MFC)
988 ret = ipmr_mfc_delete(&mfc);
990 ret = ipmr_mfc_add(&mfc, sk == init_net.ipv4.mroute_sk);
994 * Control PIM assert.
999 if (get_user(v,(int __user *)optval))
1001 init_net.ipv4.mroute_do_assert = (v) ? 1 : 0;
1004 #ifdef CONFIG_IP_PIMSM
1009 if (get_user(v,(int __user *)optval))
1015 if (v != init_net.ipv4.mroute_do_pim) {
1016 init_net.ipv4.mroute_do_pim = v;
1017 init_net.ipv4.mroute_do_assert = v;
1018 #ifdef CONFIG_IP_PIMSM_V2
1019 if (init_net.ipv4.mroute_do_pim)
1020 ret = inet_add_protocol(&pim_protocol,
1023 ret = inet_del_protocol(&pim_protocol,
1034 * Spurious command, or MRT_VERSION which you cannot
1038 return -ENOPROTOOPT;
1043 * Getsock opt support for the multicast routing system.
1046 int ip_mroute_getsockopt(struct sock *sk, int optname, char __user *optval, int __user *optlen)
1051 if (optname != MRT_VERSION &&
1052 #ifdef CONFIG_IP_PIMSM
1055 optname!=MRT_ASSERT)
1056 return -ENOPROTOOPT;
1058 if (get_user(olr, optlen))
1061 olr = min_t(unsigned int, olr, sizeof(int));
1065 if (put_user(olr, optlen))
1067 if (optname == MRT_VERSION)
1069 #ifdef CONFIG_IP_PIMSM
1070 else if (optname == MRT_PIM)
1071 val = init_net.ipv4.mroute_do_pim;
1074 val = init_net.ipv4.mroute_do_assert;
1075 if (copy_to_user(optval, &val, olr))
1081 * The IP multicast ioctl support routines.
1084 int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg)
1086 struct sioc_sg_req sr;
1087 struct sioc_vif_req vr;
1088 struct vif_device *vif;
1089 struct mfc_cache *c;
1093 if (copy_from_user(&vr, arg, sizeof(vr)))
1095 if (vr.vifi >= init_net.ipv4.maxvif)
1097 read_lock(&mrt_lock);
1098 vif = &init_net.ipv4.vif_table[vr.vifi];
1099 if (VIF_EXISTS(&init_net, vr.vifi)) {
1100 vr.icount = vif->pkt_in;
1101 vr.ocount = vif->pkt_out;
1102 vr.ibytes = vif->bytes_in;
1103 vr.obytes = vif->bytes_out;
1104 read_unlock(&mrt_lock);
1106 if (copy_to_user(arg, &vr, sizeof(vr)))
1110 read_unlock(&mrt_lock);
1111 return -EADDRNOTAVAIL;
1113 if (copy_from_user(&sr, arg, sizeof(sr)))
1116 read_lock(&mrt_lock);
1117 c = ipmr_cache_find(sr.src.s_addr, sr.grp.s_addr);
1119 sr.pktcnt = c->mfc_un.res.pkt;
1120 sr.bytecnt = c->mfc_un.res.bytes;
1121 sr.wrong_if = c->mfc_un.res.wrong_if;
1122 read_unlock(&mrt_lock);
1124 if (copy_to_user(arg, &sr, sizeof(sr)))
1128 read_unlock(&mrt_lock);
1129 return -EADDRNOTAVAIL;
1131 return -ENOIOCTLCMD;
1136 static int ipmr_device_event(struct notifier_block *this, unsigned long event, void *ptr)
1138 struct net_device *dev = ptr;
1139 struct vif_device *v;
1142 if (!net_eq(dev_net(dev), &init_net))
1145 if (event != NETDEV_UNREGISTER)
1147 v = &init_net.ipv4.vif_table[0];
1148 for (ct = 0; ct < init_net.ipv4.maxvif; ct++, v++) {
1156 static struct notifier_block ip_mr_notifier = {
1157 .notifier_call = ipmr_device_event,
1161 * Encapsulate a packet by attaching a valid IPIP header to it.
1162 * This avoids tunnel drivers and other mess and gives us the speed so
1163 * important for multicast video.
1166 static void ip_encap(struct sk_buff *skb, __be32 saddr, __be32 daddr)
1169 struct iphdr *old_iph = ip_hdr(skb);
1171 skb_push(skb, sizeof(struct iphdr));
1172 skb->transport_header = skb->network_header;
1173 skb_reset_network_header(skb);
1177 iph->tos = old_iph->tos;
1178 iph->ttl = old_iph->ttl;
1182 iph->protocol = IPPROTO_IPIP;
1184 iph->tot_len = htons(skb->len);
1185 ip_select_ident(iph, skb->dst, NULL);
1188 memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
1192 static inline int ipmr_forward_finish(struct sk_buff *skb)
1194 struct ip_options * opt = &(IPCB(skb)->opt);
1196 IP_INC_STATS_BH(dev_net(skb->dst->dev), IPSTATS_MIB_OUTFORWDATAGRAMS);
1198 if (unlikely(opt->optlen))
1199 ip_forward_options(skb);
1201 return dst_output(skb);
1205 * Processing handlers for ipmr_forward
1208 static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi)
1210 const struct iphdr *iph = ip_hdr(skb);
1211 struct vif_device *vif = &init_net.ipv4.vif_table[vifi];
1212 struct net_device *dev;
1216 if (vif->dev == NULL)
1219 #ifdef CONFIG_IP_PIMSM
1220 if (vif->flags & VIFF_REGISTER) {
1222 vif->bytes_out += skb->len;
1223 vif->dev->stats.tx_bytes += skb->len;
1224 vif->dev->stats.tx_packets++;
1225 ipmr_cache_report(skb, vifi, IGMPMSG_WHOLEPKT);
1231 if (vif->flags&VIFF_TUNNEL) {
1232 struct flowi fl = { .oif = vif->link,
1234 { .daddr = vif->remote,
1235 .saddr = vif->local,
1236 .tos = RT_TOS(iph->tos) } },
1237 .proto = IPPROTO_IPIP };
1238 if (ip_route_output_key(&init_net, &rt, &fl))
1240 encap = sizeof(struct iphdr);
1242 struct flowi fl = { .oif = vif->link,
1244 { .daddr = iph->daddr,
1245 .tos = RT_TOS(iph->tos) } },
1246 .proto = IPPROTO_IPIP };
1247 if (ip_route_output_key(&init_net, &rt, &fl))
1251 dev = rt->u.dst.dev;
1253 if (skb->len+encap > dst_mtu(&rt->u.dst) && (ntohs(iph->frag_off) & IP_DF)) {
1254 /* Do not fragment multicasts. Alas, IPv4 does not
1255 allow to send ICMP, so that packets will disappear
1259 IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_FRAGFAILS);
1264 encap += LL_RESERVED_SPACE(dev) + rt->u.dst.header_len;
1266 if (skb_cow(skb, encap)) {
1272 vif->bytes_out += skb->len;
1274 dst_release(skb->dst);
1275 skb->dst = &rt->u.dst;
1276 ip_decrease_ttl(ip_hdr(skb));
1278 /* FIXME: forward and output firewalls used to be called here.
1279 * What do we do with netfilter? -- RR */
1280 if (vif->flags & VIFF_TUNNEL) {
1281 ip_encap(skb, vif->local, vif->remote);
1282 /* FIXME: extra output firewall step used to be here. --RR */
1283 vif->dev->stats.tx_packets++;
1284 vif->dev->stats.tx_bytes += skb->len;
1287 IPCB(skb)->flags |= IPSKB_FORWARDED;
1290 * RFC1584 teaches, that DVMRP/PIM router must deliver packets locally
1291 * not only before forwarding, but after forwarding on all output
1292 * interfaces. It is clear, if mrouter runs a multicasting
1293 * program, it should receive packets not depending to what interface
1294 * program is joined.
1295 * If we will not make it, the program will have to join on all
1296 * interfaces. On the other hand, multihoming host (or router, but
1297 * not mrouter) cannot join to more than one interface - it will
1298 * result in receiving multiple packets.
1300 NF_HOOK(PF_INET, NF_INET_FORWARD, skb, skb->dev, dev,
1301 ipmr_forward_finish);
1309 static int ipmr_find_vif(struct net_device *dev)
1312 for (ct = init_net.ipv4.maxvif-1; ct >= 0; ct--) {
1313 if (init_net.ipv4.vif_table[ct].dev == dev)
1319 /* "local" means that we should preserve one skb (for local delivery) */
1321 static int ip_mr_forward(struct sk_buff *skb, struct mfc_cache *cache, int local)
1326 vif = cache->mfc_parent;
1327 cache->mfc_un.res.pkt++;
1328 cache->mfc_un.res.bytes += skb->len;
1331 * Wrong interface: drop packet and (maybe) send PIM assert.
1333 if (init_net.ipv4.vif_table[vif].dev != skb->dev) {
1336 if (skb->rtable->fl.iif == 0) {
1337 /* It is our own packet, looped back.
1338 Very complicated situation...
1340 The best workaround until routing daemons will be
1341 fixed is not to redistribute packet, if it was
1342 send through wrong interface. It means, that
1343 multicast applications WILL NOT work for
1344 (S,G), which have default multicast route pointing
1345 to wrong oif. In any case, it is not a good
1346 idea to use multicasting applications on router.
1351 cache->mfc_un.res.wrong_if++;
1352 true_vifi = ipmr_find_vif(skb->dev);
1354 if (true_vifi >= 0 && init_net.ipv4.mroute_do_assert &&
1355 /* pimsm uses asserts, when switching from RPT to SPT,
1356 so that we cannot check that packet arrived on an oif.
1357 It is bad, but otherwise we would need to move pretty
1358 large chunk of pimd to kernel. Ough... --ANK
1360 (init_net.ipv4.mroute_do_pim ||
1361 cache->mfc_un.res.ttls[true_vifi] < 255) &&
1363 cache->mfc_un.res.last_assert + MFC_ASSERT_THRESH)) {
1364 cache->mfc_un.res.last_assert = jiffies;
1365 ipmr_cache_report(skb, true_vifi, IGMPMSG_WRONGVIF);
1370 init_net.ipv4.vif_table[vif].pkt_in++;
1371 init_net.ipv4.vif_table[vif].bytes_in += skb->len;
1376 for (ct = cache->mfc_un.res.maxvif-1; ct >= cache->mfc_un.res.minvif; ct--) {
1377 if (ip_hdr(skb)->ttl > cache->mfc_un.res.ttls[ct]) {
1379 struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
1381 ipmr_queue_xmit(skb2, cache, psend);
1388 struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
1390 ipmr_queue_xmit(skb2, cache, psend);
1392 ipmr_queue_xmit(skb, cache, psend);
1405 * Multicast packets for forwarding arrive here
1408 int ip_mr_input(struct sk_buff *skb)
1410 struct mfc_cache *cache;
1411 int local = skb->rtable->rt_flags&RTCF_LOCAL;
1413 /* Packet is looped back after forward, it should not be
1414 forwarded second time, but still can be delivered locally.
1416 if (IPCB(skb)->flags&IPSKB_FORWARDED)
1420 if (IPCB(skb)->opt.router_alert) {
1421 if (ip_call_ra_chain(skb))
1423 } else if (ip_hdr(skb)->protocol == IPPROTO_IGMP){
1424 /* IGMPv1 (and broken IGMPv2 implementations sort of
1425 Cisco IOS <= 11.2(8)) do not put router alert
1426 option to IGMP packets destined to routable
1427 groups. It is very bad, because it means
1428 that we can forward NO IGMP messages.
1430 read_lock(&mrt_lock);
1431 if (init_net.ipv4.mroute_sk) {
1433 raw_rcv(init_net.ipv4.mroute_sk, skb);
1434 read_unlock(&mrt_lock);
1437 read_unlock(&mrt_lock);
1441 read_lock(&mrt_lock);
1442 cache = ipmr_cache_find(ip_hdr(skb)->saddr, ip_hdr(skb)->daddr);
1445 * No usable cache entry
1447 if (cache == NULL) {
1451 struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
1452 ip_local_deliver(skb);
1454 read_unlock(&mrt_lock);
1460 vif = ipmr_find_vif(skb->dev);
1462 int err = ipmr_cache_unresolved(vif, skb);
1463 read_unlock(&mrt_lock);
1467 read_unlock(&mrt_lock);
1472 ip_mr_forward(skb, cache, local);
1474 read_unlock(&mrt_lock);
1477 return ip_local_deliver(skb);
1483 return ip_local_deliver(skb);
1488 #ifdef CONFIG_IP_PIMSM
1489 static int __pim_rcv(struct sk_buff *skb, unsigned int pimlen)
1491 struct net_device *reg_dev = NULL;
1492 struct iphdr *encap;
1494 encap = (struct iphdr *)(skb_transport_header(skb) + pimlen);
1497 a. packet is really destinted to a multicast group
1498 b. packet is not a NULL-REGISTER
1499 c. packet is not truncated
1501 if (!ipv4_is_multicast(encap->daddr) ||
1502 encap->tot_len == 0 ||
1503 ntohs(encap->tot_len) + pimlen > skb->len)
1506 read_lock(&mrt_lock);
1507 if (init_net.ipv4.mroute_reg_vif_num >= 0)
1508 reg_dev = init_net.ipv4.vif_table[init_net.ipv4.mroute_reg_vif_num].dev;
1511 read_unlock(&mrt_lock);
1513 if (reg_dev == NULL)
1516 skb->mac_header = skb->network_header;
1517 skb_pull(skb, (u8*)encap - skb->data);
1518 skb_reset_network_header(skb);
1520 skb->protocol = htons(ETH_P_IP);
1522 skb->pkt_type = PACKET_HOST;
1523 dst_release(skb->dst);
1525 reg_dev->stats.rx_bytes += skb->len;
1526 reg_dev->stats.rx_packets++;
1535 #ifdef CONFIG_IP_PIMSM_V1
1537 * Handle IGMP messages of PIMv1
1540 int pim_rcv_v1(struct sk_buff * skb)
1542 struct igmphdr *pim;
1544 if (!pskb_may_pull(skb, sizeof(*pim) + sizeof(struct iphdr)))
1547 pim = igmp_hdr(skb);
1549 if (!init_net.ipv4.mroute_do_pim ||
1550 pim->group != PIM_V1_VERSION || pim->code != PIM_V1_REGISTER)
1553 if (__pim_rcv(skb, sizeof(*pim))) {
1561 #ifdef CONFIG_IP_PIMSM_V2
1562 static int pim_rcv(struct sk_buff * skb)
1564 struct pimreghdr *pim;
1566 if (!pskb_may_pull(skb, sizeof(*pim) + sizeof(struct iphdr)))
1569 pim = (struct pimreghdr *)skb_transport_header(skb);
1570 if (pim->type != ((PIM_VERSION<<4)|(PIM_REGISTER)) ||
1571 (pim->flags&PIM_NULL_REGISTER) ||
1572 (ip_compute_csum((void *)pim, sizeof(*pim)) != 0 &&
1573 csum_fold(skb_checksum(skb, 0, skb->len, 0))))
1576 if (__pim_rcv(skb, sizeof(*pim))) {
1585 ipmr_fill_mroute(struct sk_buff *skb, struct mfc_cache *c, struct rtmsg *rtm)
1588 struct rtnexthop *nhp;
1589 struct net_device *dev = init_net.ipv4.vif_table[c->mfc_parent].dev;
1590 u8 *b = skb_tail_pointer(skb);
1591 struct rtattr *mp_head;
1594 RTA_PUT(skb, RTA_IIF, 4, &dev->ifindex);
1596 mp_head = (struct rtattr *)skb_put(skb, RTA_LENGTH(0));
1598 for (ct = c->mfc_un.res.minvif; ct < c->mfc_un.res.maxvif; ct++) {
1599 if (c->mfc_un.res.ttls[ct] < 255) {
1600 if (skb_tailroom(skb) < RTA_ALIGN(RTA_ALIGN(sizeof(*nhp)) + 4))
1601 goto rtattr_failure;
1602 nhp = (struct rtnexthop *)skb_put(skb, RTA_ALIGN(sizeof(*nhp)));
1603 nhp->rtnh_flags = 0;
1604 nhp->rtnh_hops = c->mfc_un.res.ttls[ct];
1605 nhp->rtnh_ifindex = init_net.ipv4.vif_table[ct].dev->ifindex;
1606 nhp->rtnh_len = sizeof(*nhp);
1609 mp_head->rta_type = RTA_MULTIPATH;
1610 mp_head->rta_len = skb_tail_pointer(skb) - (u8 *)mp_head;
1611 rtm->rtm_type = RTN_MULTICAST;
1619 int ipmr_get_route(struct sk_buff *skb, struct rtmsg *rtm, int nowait)
1622 struct mfc_cache *cache;
1623 struct rtable *rt = skb->rtable;
1625 read_lock(&mrt_lock);
1626 cache = ipmr_cache_find(rt->rt_src, rt->rt_dst);
1628 if (cache == NULL) {
1629 struct sk_buff *skb2;
1631 struct net_device *dev;
1635 read_unlock(&mrt_lock);
1640 if (dev == NULL || (vif = ipmr_find_vif(dev)) < 0) {
1641 read_unlock(&mrt_lock);
1644 skb2 = skb_clone(skb, GFP_ATOMIC);
1646 read_unlock(&mrt_lock);
1650 skb_push(skb2, sizeof(struct iphdr));
1651 skb_reset_network_header(skb2);
1653 iph->ihl = sizeof(struct iphdr) >> 2;
1654 iph->saddr = rt->rt_src;
1655 iph->daddr = rt->rt_dst;
1657 err = ipmr_cache_unresolved(vif, skb2);
1658 read_unlock(&mrt_lock);
1662 if (!nowait && (rtm->rtm_flags&RTM_F_NOTIFY))
1663 cache->mfc_flags |= MFC_NOTIFY;
1664 err = ipmr_fill_mroute(skb, cache, rtm);
1665 read_unlock(&mrt_lock);
1669 #ifdef CONFIG_PROC_FS
1671 * The /proc interfaces to multicast routing /proc/ip_mr_cache /proc/ip_mr_vif
1673 struct ipmr_vif_iter {
1677 static struct vif_device *ipmr_vif_seq_idx(struct ipmr_vif_iter *iter,
1680 for (iter->ct = 0; iter->ct < init_net.ipv4.maxvif; ++iter->ct) {
1681 if (!VIF_EXISTS(&init_net, iter->ct))
1684 return &init_net.ipv4.vif_table[iter->ct];
1689 static void *ipmr_vif_seq_start(struct seq_file *seq, loff_t *pos)
1690 __acquires(mrt_lock)
1692 read_lock(&mrt_lock);
1693 return *pos ? ipmr_vif_seq_idx(seq->private, *pos - 1)
1697 static void *ipmr_vif_seq_next(struct seq_file *seq, void *v, loff_t *pos)
1699 struct ipmr_vif_iter *iter = seq->private;
1702 if (v == SEQ_START_TOKEN)
1703 return ipmr_vif_seq_idx(iter, 0);
1705 while (++iter->ct < init_net.ipv4.maxvif) {
1706 if (!VIF_EXISTS(&init_net, iter->ct))
1708 return &init_net.ipv4.vif_table[iter->ct];
1713 static void ipmr_vif_seq_stop(struct seq_file *seq, void *v)
1714 __releases(mrt_lock)
1716 read_unlock(&mrt_lock);
1719 static int ipmr_vif_seq_show(struct seq_file *seq, void *v)
1721 if (v == SEQ_START_TOKEN) {
1723 "Interface BytesIn PktsIn BytesOut PktsOut Flags Local Remote\n");
1725 const struct vif_device *vif = v;
1726 const char *name = vif->dev ? vif->dev->name : "none";
1729 "%2Zd %-10s %8ld %7ld %8ld %7ld %05X %08X %08X\n",
1730 vif - init_net.ipv4.vif_table,
1731 name, vif->bytes_in, vif->pkt_in,
1732 vif->bytes_out, vif->pkt_out,
1733 vif->flags, vif->local, vif->remote);
1738 static const struct seq_operations ipmr_vif_seq_ops = {
1739 .start = ipmr_vif_seq_start,
1740 .next = ipmr_vif_seq_next,
1741 .stop = ipmr_vif_seq_stop,
1742 .show = ipmr_vif_seq_show,
1745 static int ipmr_vif_open(struct inode *inode, struct file *file)
1747 return seq_open_private(file, &ipmr_vif_seq_ops,
1748 sizeof(struct ipmr_vif_iter));
1751 static const struct file_operations ipmr_vif_fops = {
1752 .owner = THIS_MODULE,
1753 .open = ipmr_vif_open,
1755 .llseek = seq_lseek,
1756 .release = seq_release_private,
1759 struct ipmr_mfc_iter {
1760 struct mfc_cache **cache;
1765 static struct mfc_cache *ipmr_mfc_seq_idx(struct ipmr_mfc_iter *it, loff_t pos)
1767 struct mfc_cache *mfc;
1769 it->cache = init_net.ipv4.mfc_cache_array;
1770 read_lock(&mrt_lock);
1771 for (it->ct = 0; it->ct < MFC_LINES; it->ct++)
1772 for (mfc = init_net.ipv4.mfc_cache_array[it->ct];
1773 mfc; mfc = mfc->next)
1776 read_unlock(&mrt_lock);
1778 it->cache = &mfc_unres_queue;
1779 spin_lock_bh(&mfc_unres_lock);
1780 for (mfc = mfc_unres_queue; mfc; mfc = mfc->next)
1783 spin_unlock_bh(&mfc_unres_lock);
1790 static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos)
1792 struct ipmr_mfc_iter *it = seq->private;
1795 return *pos ? ipmr_mfc_seq_idx(seq->private, *pos - 1)
1799 static void *ipmr_mfc_seq_next(struct seq_file *seq, void *v, loff_t *pos)
1801 struct mfc_cache *mfc = v;
1802 struct ipmr_mfc_iter *it = seq->private;
1806 if (v == SEQ_START_TOKEN)
1807 return ipmr_mfc_seq_idx(seq->private, 0);
1812 if (it->cache == &mfc_unres_queue)
1815 BUG_ON(it->cache != init_net.ipv4.mfc_cache_array);
1817 while (++it->ct < MFC_LINES) {
1818 mfc = init_net.ipv4.mfc_cache_array[it->ct];
1823 /* exhausted cache_array, show unresolved */
1824 read_unlock(&mrt_lock);
1825 it->cache = &mfc_unres_queue;
1828 spin_lock_bh(&mfc_unres_lock);
1829 mfc = mfc_unres_queue;
1834 spin_unlock_bh(&mfc_unres_lock);
1840 static void ipmr_mfc_seq_stop(struct seq_file *seq, void *v)
1842 struct ipmr_mfc_iter *it = seq->private;
1844 if (it->cache == &mfc_unres_queue)
1845 spin_unlock_bh(&mfc_unres_lock);
1846 else if (it->cache == init_net.ipv4.mfc_cache_array)
1847 read_unlock(&mrt_lock);
1850 static int ipmr_mfc_seq_show(struct seq_file *seq, void *v)
1854 if (v == SEQ_START_TOKEN) {
1856 "Group Origin Iif Pkts Bytes Wrong Oifs\n");
1858 const struct mfc_cache *mfc = v;
1859 const struct ipmr_mfc_iter *it = seq->private;
1861 seq_printf(seq, "%08lX %08lX %-3hd",
1862 (unsigned long) mfc->mfc_mcastgrp,
1863 (unsigned long) mfc->mfc_origin,
1866 if (it->cache != &mfc_unres_queue) {
1867 seq_printf(seq, " %8lu %8lu %8lu",
1868 mfc->mfc_un.res.pkt,
1869 mfc->mfc_un.res.bytes,
1870 mfc->mfc_un.res.wrong_if);
1871 for (n = mfc->mfc_un.res.minvif;
1872 n < mfc->mfc_un.res.maxvif; n++ ) {
1873 if (VIF_EXISTS(&init_net, n) &&
1874 mfc->mfc_un.res.ttls[n] < 255)
1877 n, mfc->mfc_un.res.ttls[n]);
1880 /* unresolved mfc_caches don't contain
1881 * pkt, bytes and wrong_if values
1883 seq_printf(seq, " %8lu %8lu %8lu", 0ul, 0ul, 0ul);
1885 seq_putc(seq, '\n');
1890 static const struct seq_operations ipmr_mfc_seq_ops = {
1891 .start = ipmr_mfc_seq_start,
1892 .next = ipmr_mfc_seq_next,
1893 .stop = ipmr_mfc_seq_stop,
1894 .show = ipmr_mfc_seq_show,
1897 static int ipmr_mfc_open(struct inode *inode, struct file *file)
1899 return seq_open_private(file, &ipmr_mfc_seq_ops,
1900 sizeof(struct ipmr_mfc_iter));
1903 static const struct file_operations ipmr_mfc_fops = {
1904 .owner = THIS_MODULE,
1905 .open = ipmr_mfc_open,
1907 .llseek = seq_lseek,
1908 .release = seq_release_private,
1912 #ifdef CONFIG_IP_PIMSM_V2
1913 static struct net_protocol pim_protocol = {
1920 * Setup for IP multicast routing
1922 static int __net_init ipmr_net_init(struct net *net)
1926 net->ipv4.vif_table = kcalloc(MAXVIFS, sizeof(struct vif_device),
1928 if (!net->ipv4.vif_table) {
1933 /* Forwarding cache */
1934 net->ipv4.mfc_cache_array = kcalloc(MFC_LINES,
1935 sizeof(struct mfc_cache *),
1937 if (!net->ipv4.mfc_cache_array) {
1939 goto fail_mfc_cache;
1942 #ifdef CONFIG_IP_PIMSM
1943 net->ipv4.mroute_reg_vif_num = -1;
1948 kfree(net->ipv4.vif_table);
1953 static void __net_exit ipmr_net_exit(struct net *net)
1955 kfree(net->ipv4.mfc_cache_array);
1956 kfree(net->ipv4.vif_table);
1959 static struct pernet_operations ipmr_net_ops = {
1960 .init = ipmr_net_init,
1961 .exit = ipmr_net_exit,
1964 int __init ip_mr_init(void)
1968 mrt_cachep = kmem_cache_create("ip_mrt_cache",
1969 sizeof(struct mfc_cache),
1970 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC,
1975 err = register_pernet_subsys(&ipmr_net_ops);
1977 goto reg_pernet_fail;
1979 setup_timer(&ipmr_expire_timer, ipmr_expire_process, 0);
1980 err = register_netdevice_notifier(&ip_mr_notifier);
1982 goto reg_notif_fail;
1983 #ifdef CONFIG_PROC_FS
1985 if (!proc_net_fops_create(&init_net, "ip_mr_vif", 0, &ipmr_vif_fops))
1987 if (!proc_net_fops_create(&init_net, "ip_mr_cache", 0, &ipmr_mfc_fops))
1988 goto proc_cache_fail;
1991 #ifdef CONFIG_PROC_FS
1993 proc_net_remove(&init_net, "ip_mr_vif");
1995 unregister_netdevice_notifier(&ip_mr_notifier);
1998 del_timer(&ipmr_expire_timer);
1999 unregister_pernet_subsys(&ipmr_net_ops);
2001 kmem_cache_destroy(mrt_cachep);