Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 2 Mar 1995 18:19:55 -0600
From:      Mark Tinguely <tinguely@plains.nodak.edu>
To:        slr@mitre.org, wollman@halloran-eldar.lcs.mit.edu
Cc:        ajit@udel.edu, atn-group@mitre.org, freebsd-hackers@FreeBSD.org
Subject:   Re:  multicast pruning
Message-ID:  <199503030019.AA29879@plains.NoDak.edu>

next in thread | raw e-mail | index | archive | help
good job on the prune solution.

can you automatically pick up new groups from the tunnel? I don't
know if there is still a bug or if my regional net is having a 
problem.

I think the entries in /usr/src/usr.sbin/mrouted/main.c:
*** main.c.orig	Thu Mar  2 18:16:13 1995
--- main.c	Thu Mar  2 18:16:37 1995
***************
*** 24,33 ****
  
  extern char *configfilename;
  
! static char pidfilename[]  = "/etc/mrouted.pid";
! static char dumpfilename[] = "/usr/tmp/mrouted.dump";
! static char cachefilename[] = "/usr/tmp/mrouted.cache";
! static char genidfilename[] = "/usr/tmp/mrouted.genid";
  
  int cache_lifetime 	= DEFAULT_CACHE_LIFETIME;
  int max_prune_lifetime 	= DEFAULT_CACHE_LIFETIME * 2;
--- 24,33 ----
  
  extern char *configfilename;
  
! static char pidfilename[]  = "/var/run/mrouted.pid";
! static char dumpfilename[] = "/var/tmp/mrouted.dump";
! static char cachefilename[] = "/var/tmp/mrouted.cache";
! static char genidfilename[] = "/var/tmp/mrouted.genid";
  
  int cache_lifetime 	= DEFAULT_CACHE_LIFETIME;
  int max_prune_lifetime 	= DEFAULT_CACHE_LIFETIME * 2;

instead of changing the ip->ip_p in /sys/netinet/ip_mroute.c and in 
/usr/src/usr.sbin/mrouted/igmp.c when adding the groups, I had tucked the
packet down the raw socket stored in ip_mrouter; this has the advantage of
not making all of the utilities (mrinfo, map-mbone, mtrace) that also
have raw sockets open to have to throw out the extra packet:

*** ip_mroute.c.orig	Thu Mar  2 18:01:24 1995
--- ip_mroute.c	Thu Mar  2 18:05:43 1995
***************
*** 1119,1127 ****
  	    
  	    mrtstat.mrts_upcalls++;
  
! 	    raw_input(mm, &k_igmpproto,
! 		      (struct sockaddr *)&k_igmpsrc,
! 		      (struct sockaddr *)&k_igmpdst);
  	    
  	    /* set timer to cleanup entry if upcall is lost */
  	    timeout(cleanup_cache, (caddr_t)mb_rt, 100);
--- 1119,1125 ----
  	    
  	    mrtstat.mrts_upcalls++;
  
! 	    raw_ip_input(mm, ip_mrouter, (struct sockaddr *)&k_igmpsrc);
  	    
  	    /* set timer to cleanup entry if upcall is lost */
  	    timeout(cleanup_cache, (caddr_t)mb_rt, 100);
*** raw_ip.c.orig	Tue Feb 21 16:33:49 1995
--- raw_ip.c	Tue Feb 28 14:36:47 1995
***************
*** 96,105 ****
  		if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != ip->ip_p)
  			continue;
  		if (inp->inp_laddr.s_addr &&
! 		    inp->inp_laddr.s_addr == ip->ip_dst.s_addr)
  			continue;
  		if (inp->inp_faddr.s_addr &&
! 		    inp->inp_faddr.s_addr == ip->ip_src.s_addr)
  			continue;
  		if (last) {
  			struct mbuf *n = m_copy(m, 0, (int)M_COPYALL);
--- 96,105 ----
  		if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != ip->ip_p)
  			continue;
  		if (inp->inp_laddr.s_addr &&
! 		    inp->inp_laddr.s_addr != ip->ip_dst.s_addr)
  			continue;
  		if (inp->inp_faddr.s_addr &&
! 		    inp->inp_faddr.s_addr != ip->ip_src.s_addr)
  			continue;
  		if (last) {
  			struct mbuf *n = m_copy(m, 0, (int)M_COPYALL);
***************
*** 427,430 ****
--- 427,452 ----
  	if (m != NULL)
  		m_freem(m);
  	return (error);
+ }
+ /*
+  * Raw protocol input routine using the know mrouted raw socket
+  */
+ void
+ raw_ip_input(m, socket, src)
+ 	struct mbuf *m;
+ 	register struct socket *socket;
+ 	struct sockaddr *src;
+ {
+ 	if (socket) {
+ 		if (sbappendaddr(&socket->so_rcv, src,
+ 		    m, (struct mbuf *)0) == 0)
+ 			m_freem(m);
+ 		else {
+ 			sorwakeup(socket);
+ 		}
+ 	} else {
+ 		m_freem(m);
+ 		ipstat.ips_noproto++;
+ 		ipstat.ips_delivered--;
+ 	}
  }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199503030019.AA29879>