*BSD News Article 15746


Return to BSD News archive

Xref: sserve comp.os.386bsd.development:694 comp.os.386bsd.misc:318
Path: sserve!newshost.anu.edu.au!munnari.oz.au!goanna!escargot!otto!davidb
From: davidb@otto.bf.rmit.oz.au (David Burren [Athos])
Newsgroups: comp.os.386bsd.development,comp.os.386bsd.misc
Subject: Multiple loopback interfaces [patch]
Message-ID: <davidb.736697638@otto>
Date: 6 May 93 14:13:58 GMT
Organization: Royal Melbourne Institute of Technology
Lines: 94
NNTP-Posting-Host: otto.bf.rmit.oz.au

In testing some networking protocols, and playing with configurations
where I wanted to have a single network interface (hardware) respond
to more than one IP address, I've found it very useful to have multiple
loopback interfaces defined.

With the following patch to /sys/net/if_loop.c, the loop.h file in
the kernel's compile directory is actually used.
Thus to define two loopbacks (lo0 and lo1) the kernel config file
just needs a line such as:

	psuedo-device	loop	2

I have been using this for a while, initially on 386bsd0.1 and
Ultrix 4.x (which unfortunately required a binary hack) and now on
NetBSD-0.8.
Hopefully others will find this useful also..
__
David Burren
davidb@otto.bf.rmit.oz.au (guest acct)
+61-3-634-3635


*** if_loop.c	Sun May  2 21:18:42 1993
--- if_loop.c.orig	Sun May  2 20:47:56 1993
***************
*** 45,52 ****
  #include "ioctl.h"
  #include "protosw.h"
  
- #include "loop.h"
- 
  #include "../net/if.h"
  #include "../net/if_types.h"
  #include "../net/netisr.h"
--- 45,50 ----
***************
*** 80,110 ****
  
  #define	LOMTU	(1024+512)
  
! struct	ifnet loif[NLOOP];
  int	looutput(), loioctl();
  
  loattach()
  {
! 	register int i;
! 	register struct ifnet *ifp;
  
! 	for (i = 0; i < NLOOP; i++)
! 	{
! 		ifp = &loif[i];
! 		ifp->if_unit = i;
! 		ifp->if_name = "lo";
! 		ifp->if_mtu = LOMTU;
! 		ifp->if_flags = IFF_LOOPBACK;
! 		ifp->if_ioctl = loioctl;
! 		ifp->if_output = looutput;
! 		ifp->if_type = IFT_LOOP;
! 		ifp->if_hdrlen = 0;
! 		ifp->if_addrlen = 0;
! 		if_attach(ifp);
  #if NBPFILTER > 0
! 		bpfattach(&lo_bpf, ifp, DLT_NULL, sizeof(u_int));
  #endif
- 	}
  }
  
  looutput(ifp, m, dst, rt)
--- 78,102 ----
  
  #define	LOMTU	(1024+512)
  
! struct	ifnet loif;
  int	looutput(), loioctl();
  
  loattach()
  {
! 	register struct ifnet *ifp = &loif;
  
! 	ifp->if_name = "lo";
! 	ifp->if_mtu = LOMTU;
! 	ifp->if_flags = IFF_LOOPBACK;
! 	ifp->if_ioctl = loioctl;
! 	ifp->if_output = looutput;
! 	ifp->if_type = IFT_LOOP;
! 	ifp->if_hdrlen = 0;
! 	ifp->if_addrlen = 0;
! 	if_attach(ifp);
  #if NBPFILTER > 0
! 	bpfattach(&lo_bpf, ifp, DLT_NULL, sizeof(u_int));
  #endif
  }
  
  looutput(ifp, m, dst, rt)