Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Feb 1997 14:29:44 +0100 (MET)
From:      Jean-Luc.Richier@imag.fr
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   bin/2668: modification suggested for rarpd
Message-ID:  <199702051329.OAA00505@tuna.imag.fr>
Resent-Message-ID: <199702051340.FAA15124@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         2668
>Category:       bin
>Synopsis:       modification suggested for rarpd
>Confidential:   yes
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Feb  5 05:40:02 PST 1997
>Last-Modified:
>Originator:     Jean-Luc Richier
>Organization:
Institut IMAg, Grenoble, France
>Release:        FreeBSD 2.1.6-RELEASE i386
>Environment:


>Description:

While working on the IPv6 extensions for NetBSD and FreeBSD,
I discovered some problems. They are not bugs in the base code, only
simplified behaviours,  but if one tries to make extensions, these behaviours
raise problems.
Therefore I suggest corrections to the base distribution code.

>How-To-Repeat:

rarpd -a dies if the system includes interfaces UP and not point to point
which are not ethernet. This pauses problems if the machine is a boot server
and includes special interfaces.

>Fix:
	
if one run rarpd with -a, silently ignores any interfaces which are not
ethernet instead of doing an error exit.

*** usr.sbin/rarpd/rarpd.c.DIST	Wed Jun  5 04:57:54 1996
--- usr.sbin/rarpd/rarpd.c	Wed Feb  5 11:46:24 1997
***************
*** 114,119 ****
--- 114,122 ----
  void lookup_eaddr();
  void lookup_ipaddr();
  
+ int aflag = 0;		/* listen on "all" interfaces  */
+ int fflag = 0;		/* don't fork */
+ 
  void
  main(argc, argv)
  	int argc;
***************
*** 122,130 ****
  	int op, pid;
  	char *ifname, *hostname, *name;
  
- 	int aflag = 0;		/* listen on "all" interfaces  */
- 	int fflag = 0;		/* don't fork */
- 
  	extern char *optarg;
  	extern int optind, opterr;
  
--- 125,130 ----
***************
*** 186,195 ****
  
  
  	p = (struct if_info *)malloc(sizeof(*p));
  	p->ii_next = iflist;
  	iflist = p;
  
- 	p->ii_fd = rarp_open(ifname);
  	lookup_eaddr(p->ii_fd, p->ii_eaddr);
  	lookup_ipaddr(ifname, &p->ii_ipaddr, &p->ii_netmask);
  }
--- 186,198 ----
  
  
  	p = (struct if_info *)malloc(sizeof(*p));
+ 	p->ii_fd = rarp_open(ifname);
+ 	if (p->ii_fd < 0)
+ 		return;
+ 
  	p->ii_next = iflist;
  	iflist = p;
  
  	lookup_eaddr(p->ii_fd, p->ii_eaddr);
  	lookup_ipaddr(ifname, &p->ii_ipaddr, &p->ii_netmask);
  }
***************
*** 305,310 ****
--- 308,317 ----
  	}
  	(void)strncpy(ifr.ifr_name, device, sizeof ifr.ifr_name);
  	if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) < 0) {
+ 		if (aflag) {	/* for -a skip not ethernet interfaces */
+ 			close(fd);
+ 			return -1;
+ 		}
  		syslog(LOG_ERR, "BIOCSETIF: %m");
  		exit(1);
  	}
***************
*** 317,322 ****
--- 324,333 ----
  		exit(1);
  	}
  	if (link_type != DLT_EN10MB) {
+ 		if (aflag) {	/* for -a skip not ethernet interfaces */
+ 			close(fd);
+ 			return -1;
+ 		}
  		syslog(LOG_ERR, "%s not on ethernet", device);
  		exit(1);
  	}
>Audit-Trail:
>Unformatted:



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