Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 08 Aug 2004 16:00:05 -0400
From:      Coleman Kane <cokane@cokane.org>
To:        Maksim Yevmenkin <maksim.yevmenkin@savvis.net>
Cc:        hackers@freebsd.org
Subject:   Re: Network interface RUNNING and UP flags
Message-ID:  <1091995205.13151.7.camel@schizophreniac>
In-Reply-To: <41140139.5080803@savvis.net>
References:  <346a8022040806145018a5e18@mail.gmail.com> <41140139.5080803@savvis.net>

next in thread | previous in thread | raw e-mail | index | archive | help
That patch seems to have fixed it. It seemed strange that setting an
inet address to the interface set it running, however setting the inet6
does not do this. It is possible this behavior affacts other interface
types as well?

On Fri, 2004-08-06 at 18:07, Maksim Yevmenkin wrote:
> > 2) Is there a way to set this interface flag without assigning an IPv4
> > address (or any address for that matter) first?
> > 
> > Mainly for number two, I would like to be able to run interfaces
> > bridged together without having to also give all of them addresses.
> 
> please try the attached (untested!) patch. it should set iff_running 
> flag on the interface as soon as the control device is opened.
> 
> max
> 
> ______________________________________________________________________
> --- if_tap.c.orig	Fri Aug  6 15:02:06 2004
> +++ if_tap.c	Fri Aug  6 15:04:14 2004
> @@ -336,15 +336,15 @@
>  tapopen(dev, flag, mode, td)
>  	struct cdev *dev;
>  	int		 flag;
>  	int		 mode;
>  	struct thread	*td;
>  {
>  	struct tap_softc	*tp = NULL;
> -	int			 error;
> +	int			 error, s;
>  
>  	if ((error = suser(td)) != 0)
>  		return (error);
>  
>  	if ((dev2unit(dev) & CLONE_UNITMASK) > TAPMAXUNIT)
>  		return (ENXIO);
>  
> @@ -365,14 +365,19 @@
>  		return (EBUSY);
>  	}
>  
>  	bcopy(tp->arpcom.ac_enaddr, tp->ether_addr, sizeof(tp->ether_addr));
>  	tp->tap_pid = td->td_proc->p_pid;
>  	tp->tap_flags |= TAP_OPEN;
>  	mtx_unlock(&tp->tap_mtx);
> +
> +	s = splimp();
> +	tp->tap_if.if_flags |= IFF_RUNNING;
> +	tp->tap_if.if_flags &= ~IFF_OACTIVE;
> +	splx(s);
>  
>  	TAPDEBUG("%s is open. minor = %#x\n", 
>  		tp->tap_if.if_xname, minor(dev));
>  
>  	return (0);
>  } /* tapopen */
>  



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