http://gimel.esc.cam.ac.uk/james/rpld/src/rpld-1.8-beta-1.tar.gz
authorMichael Brown <mcb30@dolphin.home>
Mon, 10 Mar 2008 23:57:14 +0000 (23:57 +0000)
committerMichael Brown <mcb30@dolphin.home>
Mon, 10 Mar 2008 23:57:14 +0000 (23:57 +0000)
18 files changed:
INSTALL
Makefile
README
bpf-nit.c [new file with mode: 0644]
client.c
config.c
linux-nit.c
linux-old-nit.c
llc-linux.c
llc-nit.c
protocol.c
rpl.c
rpld.c
rpld_conf.lex
rpld_conf.tab.c
rpld_conf.y
rpld_conf.yy.c
util.c

diff --git a/INSTALL b/INSTALL
index fad0eb9..beedd0c 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -14,6 +14,7 @@ Compilation:
        Linux 2.2.x
        Linux 2.3.x
        Linux 2.4.0-prex
+        NetBSD
 
 (*)    You will get a console message saying "can't find module net-pf-17"
        which you can ignore.
@@ -24,6 +25,9 @@ Compilation:
        of a nit (which listens for packets on the network) and llc-nit.c
        which implements an LLC 802.2 layer. If you want to change from the
        default, you need to edit the makefile an recompile.
+
+        For NetBSD rpld ships with a simple bpf driver which passes every 
+        packed up to llc-nit.c so is fairly inefficient.
        
        A native llc support patche for linux 2.2 kernels can be found
        in kernel, for 2.3 and 2.4 use the linux-sna package available
index 7ef6d91..c816cf5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,11 +3,14 @@
 # *     rpld - an IBM style RIPL server            *
 # *************************************************/
 # 
-# /* Copyright (c) 1999,2000, James McKenzie.
+# /* Copyright (c) 1999,2000,2001 James McKenzie.
 #  *                      All rights reserved
-#  * Copyright (c) 1998,2000, Christopher Lightfoot.
+#  * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
 #  *                      All rights reserved
 #  *
+#  * NetBSD and BPF support by Takashi YAMAMOTO
+#  * Copyright (C) 2001 YAMAMOTO Takashi <yamt@netbsd.org>.
+#  *
 #  * By using this file, you agree to the terms and conditions set
 #  * forth in the LICENCE file which can be found at the top level of
 #  * the rpld distribution.
 #  */
 
 #
-# $Id: Makefile,v 1.23 2000/09/26 03:46:20 root Exp $
+# $Id: Makefile,v 1.26 2001/11/01 15:26:30 root Exp $
 #
 # $Log: Makefile,v $
+# Revision 1.26  2001/11/01 15:26:30  root
+# #
+#
+# Revision 1.25  2001/11/01 15:24:28  root
+# #
+#
+# Revision 1.24  2001/11/01 15:24:00  root
+# #
+#
 # Revision 1.23  2000/09/26 03:46:20  root
 # #
 #
 #                    from the host and places a large extra load on
 #                    busy machines.
 #                    
+#  bpf-nit.c:  For NetBSD and possibly other BPF implementations
+#              this version seems to do no filtering, so it receives
+#              every frame - increasing system load.
+#                    
 #  llc-nit.c implements the LLC 802.2 layer ontop of the raw packet (nit)
 #  layer and is needed in all cases
 #
@@ -70,6 +86,8 @@
 NIT=linux-nit.c
 #  Older driver
 #NIT=linux-old-nit.c
+#  BPF driver for NetBSD (may old work on SunOS, havent checked)
+#NIT=bpf-nit.c
 
 DRIVER=llc-nit.c ${NIT}
 
@@ -86,7 +104,7 @@ DEFINES=
 
 # where do you want all this stuff
 
-DESTDIR=/usr
+DESTDIR=/usr/local
 
 # Stuff
 CC      = gcc
@@ -105,7 +123,7 @@ INSTALL=install
 
 ################# NO USER SERVICABLE PARTS BELOW HERE
 
-VERSION=1.7
+VERSION=1.8
 
 COFLAGS = -l
 
@@ -127,7 +145,6 @@ BINDIR= ${DESTDIR}/sbin
 NROFF=  groff -Tascii
 NRCLN = sed 's/.\b//g'
 MANDOC= -mandoc
-INSTALL=install
 BINOWN= root
 BINGRP= kmem
 BINMODE=555
@@ -145,7 +162,7 @@ MAN5EXT=5
 MAN5SRC=man
 
 
-PROTOSRC = protocol.c rpld.c util.c rpl.c client.c config.c 
+PROTOSRC = protocol.c rpld.c util.c rpl.c client.c config.c  
 HSRCS=rpl.h project.h rpl.h llc.h client.h  nit.h
 
 CSRCS=${PROTOSRC} ${DRIVER}
@@ -156,7 +173,7 @@ MANSRCS=rpld.man rpld.conf.man
 
 ALLSRCS=${CSRCS}
 
-RCSCFILES=${CSRCS} ${HSRCS} linux-nit.c linux-old-nit.c llc-linux.c
+RCSCFILES=${CSRCS} ${HSRCS} linux-nit.c linux-old-nit.c llc-linux.c bpf-nit.c
 RCSFILES=${RCSCFILES} ${YSRCS} ${LSRCS} ${MANSRCS} ana.c
 
 
@@ -201,7 +218,8 @@ install-docs: doc
        ${INSTALL} -c -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} rpld.${MAN8EXT} ${MAN8}/rpld.${MAN8EXT}
        ${INSTALL} -c -o ${MANOWN} -g ${MANGRP} -m ${MANMODE} rpld.conf.${MAN5EXT} ${MAN5}/rpld.conf.${MAN5EXT}
 
-ana:ana.c linux-old-nit.c
+ana:ana.c ${NIT}
+#linux-old-nit.c
 
 realtime: ana
        ./ana
diff --git a/README b/README
index 5781f32..edf9c56 100644 (file)
--- a/README
+++ b/README
@@ -32,7 +32,9 @@ Linux doesn't have mainstream LLC-1 sockets support. rpld gets LLC-1 packets
 through a PF_PACKET socket, which may impose an unacceptable load on the
 system.
 
-It only runs on Linux.
+The NetBSD support is also done with BPF and no filtering, again this
+may impose an unacceptable load.
+
 
 Some boot ROMs pretend not to see packets if (blocksize % 4) != 0
 
diff --git a/bpf-nit.c b/bpf-nit.c
new file mode 100644 (file)
index 0000000..48da9d7
--- /dev/null
+++ b/bpf-nit.c
@@ -0,0 +1,323 @@
+/*************************************************
+*     rpld - an IBM style RIPL server            *
+*************************************************/
+
+/*
+ * bpf support code
+ * Copyright (C) 2001 YAMAMOTO Takashi <yamt@netbsd.org>.
+ *
+ * By using this file, you agree to the terms and conditions set
+ * forth in the LICENCE file which can be found at the top level of
+ * the rpld distribution.
+ */
+
+static char rcsid[] =
+  "$Id: bpf-nit.c,v 1.5 2001/11/01 15:30:35 root Exp root $";
+
+/*
+ * $Log: bpf-nit.c,v $
+ * Revision 1.5  2001/11/01 15:30:35  root
+ * #
+ *
+ * Revision 1.4  2001/11/01 15:28:23  root
+ * #
+ *
+ * Revision 1.3  2001/11/01 15:28:07  root
+ * #
+ *
+ * Revision 1.2  2001/11/01 15:26:29  root
+ * #
+ *
+ * Revision 1.1  2001/11/01 15:24:26  root
+ * #
+ *
+ *
+ */
+
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <sys/time.h>
+
+#include <net/bpf.h>
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_ether.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <ifaddrs.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "project.h"
+#include "nit.h"
+
+#define BPF "/dev/bpf"
+#ifndef min
+#define min(a,b) (((a)<(b))?(a):(b))
+#endif
+
+static int bpf_open (const char *);
+
+struct nit
+{
+  int fd;
+  unsigned char lladdr[ETHER_ADDR_LEN];
+  size_t bufsize;
+  unsigned char *buf;
+};
+
+static void
+get_hwaddr (unsigned char *name, unsigned char *addr)
+{
+  struct ifaddrs *ifa0, *ifa;
+  struct sockaddr_dl *sdl = 0;
+
+  if (getifaddrs (&ifa0) == -1)
+    {
+      syslog (LOG_ERR, "get_hwaddr");
+      return;
+    }
+
+  for (ifa = ifa0; ifa; ifa = ifa->ifa_next)
+    {
+      if (ifa->ifa_addr->sa_family == AF_LINK)
+        {
+          if (!strcmp (ifa->ifa_name, (char *) name))
+            {
+              sdl = (void *) ifa->ifa_addr;
+            }
+        }
+    }
+
+  if (sdl && sdl->sdl_alen == ETHER_ADDR_LEN)
+    memcpy (addr, LLADDR (sdl), ETHER_ADDR_LEN);
+  else
+    syslog (LOG_ERR, "can't get hwaddr of %s", name);
+
+  freeifaddrs (ifa0);
+}
+
+void
+nit_close (struct nit *n)
+{
+
+  if (!n)
+    return;
+
+  close (n->fd);
+  free (n->buf);
+  free (n);
+}
+
+struct nit *
+nit_open (char *name)
+{
+  struct nit *nit = 0;
+
+  if (strlen (name) >= IFNAMSIZ)
+    {
+      syslog (LOG_ERR, "nit_open: too long if name");
+      goto err;
+    }
+
+  nit = malloc (sizeof (*nit));
+  if (!nit)
+    {
+      syslog (LOG_ERR, "nit_open: %s", strerror (errno));
+      goto err;
+    }
+
+  nit->bufsize = BPF_MAXBUFSIZE;
+  nit->buf = malloc (nit->bufsize);
+  if (!nit->buf)
+    {
+      syslog (LOG_ERR, "nit_open: %s", strerror (errno));
+      goto err;
+    }
+
+  nit->fd = bpf_open (name);
+  if (nit->fd == -1)
+    goto err;
+  get_hwaddr (name, nit->lladdr);
+
+  return nit;
+err:
+  if (nit)
+    free (nit);
+
+  return 0;
+}
+
+unsigned char *
+nit_mac (struct nit *n)
+{
+
+  return n->lladdr;
+}
+
+int
+nit_send (struct nit *n, unsigned char *frame, int len, unsigned char *to)
+{
+  struct ether_header eh;
+  struct iovec iov[2];
+  ssize_t size;
+
+  memset (&eh, 0, sizeof (eh));
+  memcpy (eh.ether_dhost, to, ETHER_ADDR_LEN);
+  memcpy (eh.ether_shost, n->lladdr, ETHER_ADDR_LEN);
+
+  iov[0].iov_base = &eh;
+  iov[0].iov_len = sizeof (eh);
+  iov[1].iov_base = frame;
+  iov[1].iov_len = len;
+
+  size = writev (n->fd, iov, 2);
+  if (size != len + sizeof (eh))
+    {
+      syslog (LOG_ERR, "nit_send: %s", strerror (errno));
+      return -1;
+    }
+
+  return len;
+}
+
+ /*ARGSUSED*/ int
+nit_multicast (struct nit *n, unsigned char *mcaddr)
+{
+  u_int flag = 1;
+
+  /* XXX */
+  if (ioctl (n->fd, BIOCPROMISC, &flag) == -1)
+    {
+      syslog (1, "BIOCPROMISC: %s", strerror (errno));
+      return -1;
+    }
+
+  return 0;
+}
+
+int
+nit_recv (struct nit *n, unsigned char *buf, int len,
+          unsigned char *ufrom, struct timeval *tv)
+{
+  fd_set fds;
+  ssize_t size;
+  int r;
+  struct bpf_hdr *bh;
+  struct ether_header *eh;
+  unsigned char *p;
+  u_int16_t etype;
+
+  FD_ZERO (&fds);
+  FD_SET (n->fd, &fds);
+
+  for (;;)
+    {
+      r = select (n->fd + 1, &fds, 0, 0, tv);
+      if (r > 0)
+        break;
+      if (r == 0)
+        return 0;
+      if (r == -1 && errno == EINTR)
+        continue;
+      syslog (LOG_ERR, "nit_recv: select: %s", strerror (errno));
+      return -1;
+    }
+
+  if (FD_ISSET (n->fd, &fds))
+    {
+      size = read (n->fd, n->buf, n->bufsize);
+      if (size == -1)
+        {
+          syslog (LOG_ERR, "read: %s", strerror (errno));
+          return -1;
+        }
+    }
+  else
+    return 0;                   /* XXX */
+
+  bh = (void *) n->buf;
+  size = min (len, bh->bh_datalen - ETHER_HDR_LEN);
+  p = n->buf + bh->bh_hdrlen;
+  eh = (void *) p;
+  p += ETHER_HDR_LEN;
+  if (!memcmp (eh->ether_shost, n->lladdr, ETHER_ADDR_LEN))
+    return 0;                   /* myself */
+  etype = ntohs (eh->ether_type);
+  if (etype > ETHERMTU || etype < ETHERMIN)
+    return 0;
+  size = min (size, etype);
+  memcpy (ufrom, eh->ether_shost, ETHER_ADDR_LEN);
+  memcpy (buf, p, size);
+
+  return size;
+}
+
+int
+bpf_open (const char *ifname)
+{
+  int fd;
+  int i, n;
+  char filename[PATH_MAX + 1];
+  u_int bufsize;
+  u_int flag;
+  struct ifreq ifr;
+
+  for (i = 0; i < 9; i++)
+    {
+      snprintf (filename, sizeof (filename), BPF "%u", i);
+      fd = open (filename, O_RDWR, 0);
+      if (fd == -1)
+        {
+          if (errno == EBUSY)
+            continue;
+          break;
+        }
+      else
+        break;
+    }
+
+  if (fd == -1)
+    {
+      syslog (1, "bpf_open: %s", filename);
+      goto err;
+    }
+
+  bufsize = BPF_MAXBUFSIZE;
+  if (ioctl (fd, BIOCSBLEN, &bufsize) == -1)
+    syslog (LOG_WARNING, "BIOCSBLEN: %s", strerror (errno));
+
+  memset (&ifr, 0, sizeof (ifr));
+  strlcpy (ifr.ifr_name, ifname, sizeof (ifr.ifr_name));
+  if (ioctl (fd, BIOCSETIF, &ifr) == -1)
+    {
+      syslog (LOG_ERR, "BIOCSETIF: %s: %s", ifname, strerror (errno));
+      goto err;
+    }
+
+  flag = 1;
+  if (ioctl (fd, BIOCIMMEDIATE, &flag) == -1)
+    {
+      syslog (LOG_ERR, "BIOCIMMEDIATE: %s", strerror (errno));
+      goto err;
+    }
+
+  flag = 1;
+  if (ioctl (fd, BIOCSHDRCMPLT, &flag) == -1)
+    {
+      syslog (LOG_ERR, "BIOCSHDRCMPLT: %s", strerror (errno));
+      goto err;
+    }
+
+  return fd;
+err:
+  if (fd != -1)
+    close (fd);
+
+  return -1;
+}
index 9b56b4c..6b14b6f 100644 (file)
--- a/client.c
+++ b/client.c
@@ -2,9 +2,9 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998,2000, Christopher Lightfoot.
+ * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
  */
 
 
-static char rcsid[] =
-  "$Id: client.c,v 1.29 2000/09/26 04:06:07 root Exp root $";
+static char rcsid[] = "$Id: client.c,v 1.34 2001/11/01 15:30:29 root Exp $";
 
 /*
  * $Log: client.c,v $
+ * Revision 1.34  2001/11/01 15:30:29  root
+ * #
+ *
+ * Revision 1.33  2001/11/01 15:28:23  root
+ * #
+ *
+ * Revision 1.32  2001/11/01 15:26:45  root
+ * #
+ *
+ * Revision 1.31  2001/11/01 15:26:29  root
+ * #
+ *
+ * Revision 1.30  2001/11/01 15:23:59  root
+ * #
+ *
  * Revision 1.29  2000/09/26 04:06:07  root
  * #
  *
index 526bbd4..bb68d9a 100644 (file)
--- a/config.c
+++ b/config.c
@@ -2,9 +2,9 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998,2000, Christopher Lightfoot.
+ * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
  */
 
 
-static char rcsid[] =
-  "$Id: config.c,v 1.22 2000/09/26 04:06:07 root Exp root $";
+static char rcsid[] = "$Id: config.c,v 1.27 2001/11/01 15:30:29 root Exp $";
 
 /*
  * $Log: config.c,v $
+ * Revision 1.27  2001/11/01 15:30:29  root
+ * #
+ *
+ * Revision 1.26  2001/11/01 15:28:23  root
+ * #
+ *
+ * Revision 1.25  2001/11/01 15:26:45  root
+ * #
+ *
+ * Revision 1.24  2001/11/01 15:26:29  root
+ * #
+ *
+ * Revision 1.23  2001/11/01 15:23:59  root
+ * #
+ *
  * Revision 1.22  2000/09/26 04:06:07  root
  * #
  *
index ced261d..bef3c92 100644 (file)
@@ -2,9 +2,9 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998,2000, Christopher Lightfoot.
+ * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
  */
 
 
-static char rcsid[] = "$Id: linux-nit.c,v 1.2 2000/09/26 03:48:23 root Exp $";
+static char rcsid[] = "$Id: linux-nit.c,v 1.5 2001/11/01 15:26:29 root Exp $";
 
 /* 
  * $Log: linux-nit.c,v $
+ * Revision 1.5  2001/11/01 15:26:29  root
+ * #
+ *
+ * Revision 1.4  2001/11/01 15:24:26  root
+ * #
+ *
+ * Revision 1.3  2001/11/01 15:23:59  root
+ * #
+ *
  * Revision 1.2  2000/09/26 03:48:23  root
  * #
  *
@@ -67,13 +76,23 @@ static char rcsid[] = "$Id: linux-nit.c,v 1.2 2000/09/26 03:48:23 root Exp $";
 #include "project.h"
 #include "nit.h"
 
+#include <sys/socket.h>
+#include <linux/if_ether.h>
+#include <linux/if_arp.h>
+#include <linux/if_packet.h>
+#include <sys/ioctl.h>
+#include <sys/uio.h>
+
+#if 0
+/* Dire libc5 hack */
 #undef __GLIBC__
 #include <linux/socket.h>
 #include <linux/if_ether.h>
 #include <linux/if_arp.h>
 #include <linux/if_packet.h>
-#include <linux/route.h>
+#include <asm/socket.h>
 #define __GLIBC__
+#endif
 
 struct nit
 {
@@ -168,7 +187,7 @@ nit_open (char *name)
   sll.sll_protocol = htons (ETH_P_802_2);
   sll.sll_ifindex = ifr.ifr_ifindex;
 
-  if (bind (fd, &sll, sizeof (sll)) < 0)
+  if (bind (fd, (struct sockaddr *) &sll, sizeof (sll)) < 0)
     {
       close (fd);
       syslog (LOG_ERR, "bind:%m");
@@ -224,7 +243,8 @@ nit_send (struct nit *n, unsigned char *frame, int len, unsigned char *to)
   sll.sll_halen = ETH_ALEN;
   bcopy (to, &sll.sll_addr[0], ETH_ALEN);
 
-  if (sendto (n->fd, frame, len, 0, &sll, sizeof (sll)) < 0)
+  if (sendto (n->fd, frame, len, 0, (struct sockaddr *) &sll, sizeof (sll)) <
+      0)
     {
       syslog (LOG_ERR, "sendto: %m");
       return -1;
index 25e187c..08dc1c9 100644 (file)
@@ -2,9 +2,9 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998, Christopher Lightfoot.
+ * Copyright (c) 1998,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
  */
 
 static char rcsid[] =
-  "$Id: linux-old-nit.c,v 1.2 2000/09/26 03:48:23 root Exp $";
+  "$Id: linux-old-nit.c,v 1.3 2001/11/01 15:24:26 root Exp $";
 
 /* 
  * $Log: linux-old-nit.c,v $
+ * Revision 1.3  2001/11/01 15:24:26  root
+ * #
+ *
  * Revision 1.2  2000/09/26 03:48:23  root
  * #
  *
index 09bbd3a..489dd3c 100644 (file)
@@ -2,7 +2,7 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 2000, James McKenzie.
+/* Copyright (c) 2000,2001 James McKenzie.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
  */
 
 static char rcsid[] =
-  "$Id: llc-linux.c,v 1.9 2000/09/26 04:06:07 root Exp root $";
+  "$Id: llc-linux.c,v 1.10 2001/11/01 15:24:26 root Exp $";
 
 /*
  * $Log: llc-linux.c,v $
+ * Revision 1.10  2001/11/01 15:24:26  root
+ * #
+ *
  * Revision 1.9  2000/09/26 04:06:07  root
  * #
  *
index 7397ebb..7d4f3b4 100644 (file)
--- a/llc-nit.c
+++ b/llc-nit.c
@@ -2,9 +2,9 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998,2000, Christopher Lightfoot.
+ * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
  */
 
 
-static char rcsid[] =
-  "$Id: llc-nit.c,v 1.3 2000/09/26 04:06:07 root Exp root $";
+static char rcsid[] = "$Id: llc-nit.c,v 1.8 2001/11/01 15:30:29 root Exp $";
 
 /*
  * $Log: llc-nit.c,v $
+ * Revision 1.8  2001/11/01 15:30:29  root
+ * #
+ *
+ * Revision 1.7  2001/11/01 15:28:23  root
+ * #
+ *
+ * Revision 1.6  2001/11/01 15:26:45  root
+ * #
+ *
+ * Revision 1.5  2001/11/01 15:26:29  root
+ * #
+ *
+ * Revision 1.4  2001/11/01 15:23:59  root
+ * #
+ *
  * Revision 1.3  2000/09/26 04:06:07  root
  * #
  *
index d86cbea..0d53d70 100644 (file)
@@ -2,9 +2,9 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998,2000, Christopher Lightfoot.
+ * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
  */
 
 
-static char rcsid[] = "$Id: protocol.c,v 1.26 2000/09/26 03:44:29 root Exp $";
+static char rcsid[] =
+  "$Id: protocol.c,v 1.32 2001/11/01 15:30:35 root Exp root $";
 
 /*
  * $Log: protocol.c,v $
+ * Revision 1.32  2001/11/01 15:30:35  root
+ * #
+ *
+ * Revision 1.31  2001/11/01 15:30:29  root
+ * #
+ *
+ * Revision 1.30  2001/11/01 15:28:07  root
+ * #
+ *
+ * Revision 1.29  2001/11/01 15:26:45  root
+ * #
+ *
+ * Revision 1.28  2001/11/01 15:24:26  root
+ * #
+ *
+ * Revision 1.27  2001/11/01 15:23:59  root
+ * #
+ *
  * Revision 1.26  2000/09/26 03:44:29  root
  * #
  *
diff --git a/rpl.c b/rpl.c
index dfa4b92..ffa9057 100644 (file)
--- a/rpl.c
+++ b/rpl.c
@@ -2,9 +2,9 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998,2000, Christopher Lightfoot.
+ * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
 
 
 
-static char rcsid[] = "$Id: rpl.c,v 1.12 2000/09/26 01:39:17 root Exp $";
+static char rcsid[] = "$Id: rpl.c,v 1.13 2001/11/01 15:23:59 root Exp $";
 
 /*
  * $Log: rpl.c,v $
+ * Revision 1.13  2001/11/01 15:23:59  root
+ * #
+ *
  * Revision 1.12  2000/09/26 01:39:17  root
  * #
  *
diff --git a/rpld.c b/rpld.c
index 374fbca..8d5c507 100644 (file)
--- a/rpld.c
+++ b/rpld.c
@@ -2,9 +2,9 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998,2000, Christopher Lightfoot.
+ * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
  */
 
 
-static char rcsid[] =
-  "$Id: rpld.c,v 1.30 2000/09/26 04:06:07 root Exp root $";
+static char rcsid[] = "$Id: rpld.c,v 1.35 2001/11/01 15:30:29 root Exp $";
 
 /*
  * $Log: rpld.c,v $
+ * Revision 1.35  2001/11/01 15:30:29  root
+ * #
+ *
+ * Revision 1.34  2001/11/01 15:28:23  root
+ * #
+ *
+ * Revision 1.33  2001/11/01 15:26:45  root
+ * #
+ *
+ * Revision 1.32  2001/11/01 15:26:29  root
+ * #
+ *
+ * Revision 1.31  2001/11/01 15:23:59  root
+ * #
+ *
  * Revision 1.30  2000/09/26 04:06:07  root
  * #
  *
index 7e0b70f..a05ebb3 100644 (file)
@@ -2,9 +2,9 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998,2000, Christopher Lightfoot.
+ * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
@@ -19,6 +19,9 @@
  *  Lexer for RPLD conf files
  *
  *  $Log: rpld_conf.lex,v $
+ *  Revision 1.7  2001/11/01 15:23:59  root
+ *  #
+ *
  *  Revision 1.6  2000/07/17 10:43:34  root
  *  #
  *
@@ -73,7 +76,7 @@
 %x     COMMENT
 
 %{
-static char rcsid[]="$Id: rpld_conf.lex,v 1.6 2000/07/17 10:43:34 root Exp $";
+static char rcsid[]="$Id: rpld_conf.lex,v 1.7 2001/11/01 15:23:59 root Exp $";
 
 #include <stdio.h>
 #include <string.h>
index 12a226e..852ddd4 100644 (file)
@@ -8,9 +8,9 @@ static char yysccsid[] = "@(#)yaccpar   1.9 (Berkeley) 02/21/93";
 #define yyerrok (yyerrflag=0)
 #define YYRECOVERING (yyerrflag!=0)
 #define YYPREFIX "yy"
-#line 77 "rpld_conf.y"
+#line 80 "rpld_conf.y"
 
-static char rcsid[]="$Id: rpld_conf.y,v 1.7 2000/07/23 19:14:19 root Exp $";
+static char rcsid[]="$Id: rpld_conf.y,v 1.8 2001/11/01 15:23:59 root Exp $";
 
 #include "project.h"
 
@@ -21,7 +21,7 @@ typedef enum {INIT, GLOBALBLOCK, HOSTBLOCK, FILEBLOCK} STATE ;
 
 /*void process_thing(THING thing, char *name, int type, YYSTYPE *pvalue);*/
 
-#line 93 "rpld_conf.y"
+#line 96 "rpld_conf.y"
 typedef union {
                long number;
                char *name;
@@ -172,7 +172,7 @@ YYSTYPE yylval;
 short yyss[YYSTACKSIZE];
 YYSTYPE yyvs[YYSTACKSIZE];
 #define yystacksize YYSTACKSIZE
-#line 131 "rpld_conf.y"
+#line 134 "rpld_conf.y"
 
 //
 // ERROR REPORTING
@@ -606,39 +606,39 @@ yyreduce:
     switch (yyn)
     {
 case 3:
-#line 112 "rpld_conf.y"
+#line 115 "rpld_conf.y"
 { process_thing(BLOCK_END, "", 0, NULL); }
 break;
 case 4:
-#line 113 "rpld_conf.y"
+#line 116 "rpld_conf.y"
 { process_thing(BLOCK_END, "", 0, NULL); }
 break;
 case 5:
-#line 115 "rpld_conf.y"
+#line 118 "rpld_conf.y"
 { process_thing(BLOCK_START, yyvsp[-1].name, 0, NULL); }
 break;
 case 6:
-#line 116 "rpld_conf.y"
+#line 119 "rpld_conf.y"
 { process_thing(BLOCK_START, "", 0, NULL); }
 break;
 case 10:
-#line 123 "rpld_conf.y"
+#line 126 "rpld_conf.y"
 { process_thing(ASSERTION, yyvsp[0].name, 0, NULL); }
 break;
 case 11:
-#line 124 "rpld_conf.y"
+#line 127 "rpld_conf.y"
 { process_thing(ASSIGNMENT, yyvsp[-2].name, TEXT, &yyvsp[0]); }
 break;
 case 12:
-#line 125 "rpld_conf.y"
+#line 128 "rpld_conf.y"
 { process_thing(ASSIGNMENT, yyvsp[-2].name, NUMBER, &yyvsp[0]); }
 break;
 case 13:
-#line 126 "rpld_conf.y"
+#line 129 "rpld_conf.y"
 { process_thing(ASSIGNMENT, yyvsp[-2].name, MACADDR, &yyvsp[0]); }
 break;
 case 14:
-#line 127 "rpld_conf.y"
+#line 130 "rpld_conf.y"
 { process_thing(ASSIGNMENT, yyvsp[-2].name, MACADDR_PARTIAL, &yyvsp[0]); }
 break;
 #line 645 "rpld_conf.tab.c"
index b8239c2..df6ad50 100644 (file)
@@ -2,9 +2,9 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998,2000, Christopher Lightfoot.
+ * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
@@ -19,6 +19,9 @@
  *     YACC grammar for RPLD conf file parser
  *
  * $Log: rpld_conf.y,v $
+ * Revision 1.8  2001/11/01 15:23:59  root
+ * #
+ *
  * Revision 1.7  2000/07/23 19:14:19  root
  * #
  *
@@ -75,7 +78,7 @@
 
 %{
 
-static char rcsid[]="$Id: rpld_conf.y,v 1.7 2000/07/23 19:14:19 root Exp $";
+static char rcsid[]="$Id: rpld_conf.y,v 1.8 2001/11/01 15:23:59 root Exp $";
 
 #include "project.h"
 
index 3894661..31e34d2 100644 (file)
@@ -406,9 +406,9 @@ char *yytext;
 /*************************************************
 *     rpld - an IBM style RIPL server            *
 *************************************************/
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998,2000, Christopher Lightfoot.
+ * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
@@ -422,6 +422,9 @@ char *yytext;
  *  Lexer for RPLD conf files
  *
  *  $Log: rpld_conf.lex,v $
+ *  Revision 1.7  2001/11/01 15:23:59  root
+ *  #
+ *
  *  Revision 1.6  2000/07/17 10:43:34  root
  *  #
  *
@@ -474,8 +477,8 @@ char *yytext;
  */
 #define COMMENT 1
 
-#line 76 "rpld_conf.lex"
-static char rcsid[]="$Id: rpld_conf.lex,v 1.6 2000/07/17 10:43:34 root Exp $";
+#line 79 "rpld_conf.lex"
+static char rcsid[]="$Id: rpld_conf.lex,v 1.7 2001/11/01 15:23:59 root Exp $";
 
 #include <stdio.h>
 #include <string.h>
@@ -498,7 +501,7 @@ void strtomac(char *s, char *mac)
 }
 
 
-#line 502 "rpld_conf.yy.c"
+#line 505 "rpld_conf.yy.c"
 
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
@@ -649,10 +652,10 @@ YY_DECL
        register char *yy_cp = NULL, *yy_bp = NULL;
        register int yy_act;
 
-#line 104 "rpld_conf.lex"
+#line 107 "rpld_conf.lex"
 
 
-#line 656 "rpld_conf.yy.c"
+#line 659 "rpld_conf.yy.c"
 
        if ( yy_init )
                {
@@ -737,49 +740,49 @@ do_action:        /* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 106 "rpld_conf.lex"
+#line 109 "rpld_conf.lex"
 ;
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 107 "rpld_conf.lex"
+#line 110 "rpld_conf.lex"
 { lineno++; }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 109 "rpld_conf.lex"
+#line 112 "rpld_conf.lex"
 ;
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 111 "rpld_conf.lex"
+#line 114 "rpld_conf.lex"
 BEGIN COMMENT;
        YY_BREAK
 case 5:
-#line 113 "rpld_conf.lex"
+#line 116 "rpld_conf.lex"
 case 6:
 YY_RULE_SETUP
-#line 113 "rpld_conf.lex"
+#line 116 "rpld_conf.lex"
 ;
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 114 "rpld_conf.lex"
+#line 117 "rpld_conf.lex"
 BEGIN INITIAL;
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 116 "rpld_conf.lex"
+#line 119 "rpld_conf.lex"
 { return BLOCK_START; }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 118 "rpld_conf.lex"
+#line 121 "rpld_conf.lex"
 { return BLOCK_END; }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 120 "rpld_conf.lex"
+#line 123 "rpld_conf.lex"
 {
                                strtomac(yytext, (yylval.mac_address));
                                return MACADDR;
@@ -790,7 +793,7 @@ case 11:
 yy_c_buf_p = yy_cp = yy_bp + 17;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 125 "rpld_conf.lex"
+#line 128 "rpld_conf.lex"
 {
                                strtomac(yytext, (yylval.pm.mac_address));
                                yylval.pm.mac_len = yytext[13] - '0';
@@ -799,7 +802,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 131 "rpld_conf.lex"
+#line 134 "rpld_conf.lex"
 {
                                yylval.number = strtol(yytext + 2, NULL, 16);
                                return NUMBER;
@@ -807,7 +810,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 136 "rpld_conf.lex"
+#line 139 "rpld_conf.lex"
 {
                                int i; i = strtol(yytext, NULL, 10);
                                yylval.number = i; return NUMBER;
@@ -815,25 +818,25 @@ YY_RULE_SETUP
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 141 "rpld_conf.lex"
+#line 144 "rpld_conf.lex"
 { yylval.name = strdup(yytext); return NAME; }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 143 "rpld_conf.lex"
+#line 146 "rpld_conf.lex"
 { yylval.text = strdup(yytext + 1); *(yylval.text + strlen(yylval.text) - 1) = 0; return TEXT;}
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 145 "rpld_conf.lex"
+#line 148 "rpld_conf.lex"
 { return yytext[0]; }
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 147 "rpld_conf.lex"
+#line 150 "rpld_conf.lex"
 ECHO;
        YY_BREAK
-#line 837 "rpld_conf.yy.c"
+#line 840 "rpld_conf.yy.c"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(COMMENT):
        yyterminate();
@@ -1720,7 +1723,7 @@ int main()
        return 0;
        }
 #endif
-#line 147 "rpld_conf.lex"
+#line 150 "rpld_conf.lex"
 
 
 
diff --git a/util.c b/util.c
index e2b74ab..9df9edf 100644 (file)
--- a/util.c
+++ b/util.c
@@ -2,11 +2,15 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999,2000, James McKenzie.
+/* Copyright (c) 1999,2000,2001 James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998,2000, Christopher Lightfoot.
+ * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
  *                      All rights reserved
  *
+ * NetBSD and BPF support by Takashi YAMAMOTO
+ * Copyright (C) 2001 YAMAMOTO Takashi <yamt@netbsd.org>.
+ *
+ *
  * By using this file, you agree to the terms and conditions set
  * forth in the LICENCE file which can be found at the top level of
  * the rpld distribution.
  */
 
 
-static char rcsid[] = "$Id: util.c,v 1.7 2000/07/16 14:05:28 root Exp $";
+static char rcsid[] = "$Id: util.c,v 1.9 2001/11/01 15:24:26 root Exp $";
 
 /*
  * $Log: util.c,v $
+ * Revision 1.9  2001/11/01 15:24:26  root
+ * #
+ *
+ * Revision 1.8  2001/11/01 15:23:59  root
+ * #
+ *
  * Revision 1.7  2000/07/16 14:05:28  root
  * #
  *
@@ -60,6 +70,18 @@ ethtoa (void *in)
   return (ethtoaret);
 }
 
+#ifdef __NetBSD__
+void
+daemonize (void)
+{
+  if (daemon (1, 0) == -1)
+    {
+      openlog ("rpld", LOG_PID, LOG_DAEMON);
+      syslog (LOG_ERR, "fork failed: %m");
+      exit (1);
+    }
+}
+#else
 void
 daemonize (void)
 {
@@ -85,3 +107,4 @@ daemonize (void)
   dup2 (fd, 2);
   close (fd);
 }
+#endif