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>
index | next in thread | raw e-mail
>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:
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199702051329.OAA00505>
