Network interface RUNNING and UP flags

Maksim Yevmenkin maksim.yevmenkin at savvis.net
Fri Aug 6 15:07:55 PDT 2004


> 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
-------------- next part --------------
--- 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 */
 


More information about the freebsd-hackers mailing list