Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 07 Nov 2000 09:27:54 -0800
From:      Maksim Yevmenkin <myevmenk@digisle.net>
To:        Harti Brandt <brandt@fokus.gmd.de>
Cc:        current@freebsd.org, hackers@freebsd.org
Subject:   [PATCH] Please review and commit (Re: if_tap and devfs)
Message-ID:  <3A083B9A.4C1DDD82@digisle.com>
References:  <Pine.BSF.4.21.0011071347290.303-100000@beagle.fokus.gmd.de>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------367164509B202DD0CF71424B
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello Harti,

> > > is there somebody working to make if_tap devfs-ready? Or I'm doing
> > > something wrong?
> >
> > [SNIP]
> > it seems to me that it did not get commited. i will look into it again
> > today and re-send patch to the list.
> 
> Great! It works. (Minus a spelling error: the parameter in
> tapclone() should spell 'namelen'). Would nice if it get's committed.

ooops :) sorry about that. unfortunately, i can not commit it. we have
to ask one of the commiters.

To ALL:

anyone wants to review and commit the attached patch?

thanks,
emax
--------------367164509B202DD0CF71424B
Content-Type: text/plain; charset=us-ascii;
 name="if_tap.c.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="if_tap.c.diff"

*** if_tap.c.orig	Mon Nov  6 09:24:08 2000
--- if_tap.c	Mon Nov  6 10:26:35 2000
***************
*** 79,84 ****
--- 79,85 ----
  static int 		tapmodevent	__P((module_t, int, void *));
  
  /* device */
+ static void		tapclone	__P((void *, char *, int, dev_t *));
  static void		tapcreate	__P((dev_t));
  
  /* network interface */
***************
*** 131,157 ****
  	int		 type;
  	void		*data;
  {
! 	static int		 attached = 0;
! 	struct ifnet		*ifp = NULL;
! 	int			 unit, s;
  
  	switch (type) {
  	case MOD_LOAD:
  		if (attached)
  			return (EEXIST);
  
  		cdevsw_add(&tap_cdevsw);
  		attached = 1;
  	break;
  
! 	case MOD_UNLOAD:
  		if (taprefcnt > 0)
  			return (EBUSY);
  
  		cdevsw_remove(&tap_cdevsw);
  
  		unit = 0;
  		while (unit <= taplastunit) {
  			s = splimp();
  			TAILQ_FOREACH(ifp, &ifnet, if_link)
  				if ((strcmp(ifp->if_name, TAP) == 0) ||
--- 132,164 ----
  	int		 type;
  	void		*data;
  {
! 	static int		attached = 0;
! 	static eventhandler_tag	eh_tag = NULL;
  
  	switch (type) {
  	case MOD_LOAD:
  		if (attached)
  			return (EEXIST);
  
+ 		eh_tag = EVENTHANDLER_REGISTER(dev_clone, tapclone, 0, 1000);
  		cdevsw_add(&tap_cdevsw);
  		attached = 1;
  	break;
  
! 	case MOD_UNLOAD: {
! 		int	unit;
! 
  		if (taprefcnt > 0)
  			return (EBUSY);
  
+ 		EVENTHANDLER_DEREGISTER(dev_clone, eh_tag);
  		cdevsw_remove(&tap_cdevsw);
  
  		unit = 0;
  		while (unit <= taplastunit) {
+ 			int		 s;
+ 			struct ifnet	*ifp = NULL;
+ 
  			s = splimp();
  			TAILQ_FOREACH(ifp, &ifnet, if_link)
  				if ((strcmp(ifp->if_name, TAP) == 0) ||
***************
*** 179,185 ****
  		}
  
  		attached = 0;
! 	break;
  
  	default:
  		return (EOPNOTSUPP);
--- 186,192 ----
  		}
  
  		attached = 0;
! 	} break;
  
  	default:
  		return (EOPNOTSUPP);
***************
*** 187,192 ****
--- 194,234 ----
  
  	return (0);
  } /* tapmodevent */
+ 
+ 
+ /*
+  * DEVFS handler
+  *
+  * We need to support two kind of devices - tap and vmnet
+  */
+ static void
+ tapclone(arg, name, namelen, dev)
+ 	void	*arg;
+ 	char	*name;
+ 	int	 namelen;
+ 	dev_t	*dev;
+ {
+ 	int	 unit, minor;
+ 	char	*device_name = NULL;
+ 
+ 	if (*dev != NODEV)
+ 		return;
+ 
+ 	device_name = TAP;
+ 	if (dev_stdclone(name, NULL, device_name, &unit) != 1) {
+ 		device_name = VMNET;
+ 
+ 		if (dev_stdclone(name, NULL, device_name, &unit) != 1)
+ 			return;
+ 
+ 		minor = (unit |  VMNET_DEV_MASK);
+ 	}
+ 	else
+ 		minor = unit;
+ 
+ 	*dev = make_dev(&tap_cdevsw, minor, UID_ROOT, GID_WHEEL, 0600, "%s%d",
+ 			device_name, unit);
+ } /* tapclone */
  
  
  /*

--------------367164509B202DD0CF71424B--



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3A083B9A.4C1DDD82>