[oe] [PATCH 1/5] rarpd : add recipe

Li xin lixin.fnst at cn.fujitsu.com
Mon Nov 17 11:00:04 UTC 2014


RARP (Reverse Address Resolution Protocol) is a protocol which
allows individual devices on an IP network to get their own IP
addresses from the RARP server. Some machines (e.g. SPARC boxes)
use this protocol instead of e.g. DHCP to query their IP addresses
during network bootup.

Linux kernels up to 2.2 used to provide a kernel daemon for this
service,but since 2.3 kernels it is served by this userland daemon.
You should install rarpd if you want to set up a RARP server on your
network.

Signed-off-by: Li Xin <lixin.fnst at cn.fujitsu.com>
---
 meta-oe/recipes-extended/nicstat/nicstat_1.95.bb   |  31 ++
 .../rarpd/files/1000rarpd-ss981107.patch           | 592 +++++++++++++++++++++
 .../rarpd/files/1001rarpd-norun.patch              |  13 +
 .../rarpd/files/1002rarpd-initscript.patch         |  77 +++
 .../rarpd/files/1003rarpd-fd-leak.patch            |  25 +
 .../rarpd/files/1004rarpd-sprintf.patch            |  31 ++
 .../rarpd/files/1005rarpd-initLSB.patch            |  85 +++
 .../rarpd/files/1006rarpd-configurableInit.patch   |  23 +
 meta-oe/recipes-extended/rarpd/files/ethers.sample |   1 +
 meta-oe/recipes-extended/rarpd/files/rarpd.service |  14 +
 meta-oe/recipes-extended/rarpd/rarpd_ss981107.bb   |  50 ++
 11 files changed, 942 insertions(+)
 create mode 100644 meta-oe/recipes-extended/nicstat/nicstat_1.95.bb
 create mode 100644 meta-oe/recipes-extended/rarpd/files/1000rarpd-ss981107.patch
 create mode 100644 meta-oe/recipes-extended/rarpd/files/1001rarpd-norun.patch
 create mode 100644 meta-oe/recipes-extended/rarpd/files/1002rarpd-initscript.patch
 create mode 100644 meta-oe/recipes-extended/rarpd/files/1003rarpd-fd-leak.patch
 create mode 100644 meta-oe/recipes-extended/rarpd/files/1004rarpd-sprintf.patch
 create mode 100644 meta-oe/recipes-extended/rarpd/files/1005rarpd-initLSB.patch
 create mode 100644 meta-oe/recipes-extended/rarpd/files/1006rarpd-configurableInit.patch
 create mode 100644 meta-oe/recipes-extended/rarpd/files/ethers.sample
 create mode 100644 meta-oe/recipes-extended/rarpd/files/rarpd.service
 create mode 100644 meta-oe/recipes-extended/rarpd/rarpd_ss981107.bb

diff --git a/meta-oe/recipes-extended/nicstat/nicstat_1.95.bb b/meta-oe/recipes-extended/nicstat/nicstat_1.95.bb
new file mode 100644
index 0000000..31a015a
--- /dev/null
+++ b/meta-oe/recipes-extended/nicstat/nicstat_1.95.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "nicstat is a Solaris and Linux command-line that prints out network \
+statistics for all network interface cards (NICs), including packets, kilobytes \
+per second, average packet sizes and more."
+HOMEPAGE = "http://nicstat.sourceforge.net"
+
+LICENSE = "Artistic-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b4a94da2a1f918b217ef5156634fc9e0"
+
+SRC_URI = "http://softlayer-sng.dl.sourceforge.net/project/nicstat/${PN}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "9a0b87bbc670c1e738e5b40c7afd184d"
+SRC_URI[sha256sum] = "c4cc33f8838f4523f27c3d7584eedbe59f4c587f0821612f5ac2201adc18b367"
+
+
+do_compile() {
+	${CC} ${CFLAGS} ${LDFLAGS} -o nicstat nicstat.c
+}
+
+do_install() {
+        install -d ${D}/${bindir}/
+        install -d ${D}/${mandir}/
+     	install -m 0755 ${S}/nicstat ${D}${bindir}/
+	install -m 0644 ${S}/nicstat.1 ${D}/${mandir}/
+}
+
+
+
+
+
+
+
diff --git a/meta-oe/recipes-extended/rarpd/files/1000rarpd-ss981107.patch b/meta-oe/recipes-extended/rarpd/files/1000rarpd-ss981107.patch
new file mode 100644
index 0000000..181ff42
--- /dev/null
+++ b/meta-oe/recipes-extended/rarpd/files/1000rarpd-ss981107.patch
@@ -0,0 +1,592 @@
+--- rarpd/Makefile.jj	Sat Nov  7 15:29:54 1998
++++ rarpd/Makefile	Fri Apr  7 10:40:29 2000
+@@ -1,7 +1,7 @@
+ CC=gcc
+ CFLAGS=-O2 -Wall -g $(DEFINES)
+ 
+-OBJ=rarpd.o ethernet.o
++OBJ=rarpd.o
+ 
+ all: rarpd
+ 
+--- rarpd/ethernet.c.jj	Fri Nov  6 16:17:42 1998
++++ rarpd/ethernet.c	Thu Jan  1 01:00:00 1970
+@@ -1,224 +0,0 @@
+-/*
+- * Copyright (c) 1990, 1993 The Regents of the University of California.
+- * All rights reserved.
+- *
+- * Redistribution and use in source and binary forms, with or without
+- * modification, are permitted provided that: (1) source code distributions
+- * retain the above copyright notice and this paragraph in its entirety, (2)
+- * distributions including binary code include the above copyright notice and
+- * this paragraph in its entirety in the documentation or other materials
+- * provided with the distribution, and (3) all advertising materials mentioning
+- * features or use of this software display the following acknowledgement:
+- * ``This product includes software developed by the University of California,
+- * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+- * the University nor the names of its contributors may be used to endorse
+- * or promote products derived from this software without specific prior
+- * written permission.
+- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+- */
+-#ifndef lint
+-static char rcsid[] =
+-    "@(#) $Header: etherent.c,v 1.4 96/06/14 20:34:25 leres Exp $ (LBL)";
+-#endif
+-
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <sys/time.h>
+-
+-#include <ctype.h>
+-#include <stdio.h>
+-#include <string.h>
+-
+-#ifndef ETHERS_FILE
+-#define ETHERS_FILE "/etc/ethers"
+-#endif
+-
+-struct etherent {
+-        u_char addr[6];
+-        char name[122];
+-};
+-
+-static FILE *ether_fp = NULL;
+-
+-
+-/* Hex digit to integer. */
+-static inline int
+-xdtoi(c)
+-	int c;
+-{
+-
+-	if (isdigit(c))
+-		return c - '0';
+-	else if (islower(c))
+-		return c - 'a' + 10;
+-	else
+-		return c - 'A' + 10;
+-}
+-
+-static inline int
+-skip_space(f)
+-	FILE *f;
+-{
+-	int c;
+-
+-	do {
+-		c = getc(f);
+-	} while (isspace(c) && c != '\n');
+-
+-	return c;
+-}
+-
+-static inline int
+-skip_line(f)
+-	FILE *f;
+-{
+-	int c;
+-
+-	do
+-		c = getc(f);
+-	while (c != '\n' && c != EOF);
+-
+-	return c;
+-}
+-
+-static struct etherent *
+-next_etherent(fp)
+-	FILE *fp;
+-{
+-	register int c, d, i;
+-	char *bp;
+-	static struct etherent e;
+-	static int nline = 1;
+- top:
+-	while (nline) {
+-		/* Find addr */
+-		c = skip_space(fp);
+-		if (c == '\n')
+-			continue;
+-		/* If this is a comment, or first thing on line
+-		   cannot be etehrnet address, skip the line. */
+-		else if (!isxdigit(c))
+-			c = skip_line(fp);
+-		else {
+-			/* must be the start of an address */
+-			for (i = 0; i < 6; i += 1) {
+-				d = xdtoi(c);
+-				c = getc(fp);
+-				if (c != ':') {
+-					d <<= 4;
+-					d |= xdtoi(c);
+-					c = getc(fp);
+-				}
+-				e.addr[i] = d;
+-				if (c != ':')
+-					break;
+-				c = getc(fp);
+-			}
+-			nline = 0;
+-		}
+-		if (c == EOF)
+-			return NULL;
+-	}
+-	
+-	/* If we started a new line, 'c' holds the char past the ether addr,
+-	   which we assume is white space.  If we are continuing a line,
+-	   'c' is garbage.  In either case, we can throw it away. */
+-	   
+-	c = skip_space(fp);
+-	if (c == '\n') {
+-		nline = 1;
+-		goto top;
+-	}
+-	else if (c == '#') {
+-		(void)skip_line(fp);
+-		nline = 1;
+-		goto top;
+-	}
+-	else if (c == EOF)
+-		return NULL;
+-	
+-	/* Must be a name. */
+-	bp = e.name;
+-	/* Use 'd' to prevent buffer overflow. */
+-	d = sizeof(e.name) - 1;
+-	do {
+-		*bp++ = c;
+-		c = getc(fp);
+-	} while (!isspace(c) && c != EOF && --d > 0);
+-	*bp = '\0';
+-	if (c == '\n')
+-		nline = 1;
+-
+-	return &e;
+-}
+-
+-/* Open/rewind the ethers files; returns 1 if file was reopened */
+-int
+-ether_rewind()
+-{
+-	struct stat st;
+-	static long mtime = 0, ctime = 0;
+-
+-	if (ether_fp != NULL) {
+-		if (fstat(fileno(ether_fp), &st) < 0 ||
+-		    mtime != st.st_mtime || ctime != st.st_ctime ||
+-		    fseek(ether_fp, 0L, SEEK_SET) < 0) {
+-			fclose(ether_fp);
+-			ether_fp = NULL;
+-		}
+-	}
+-	if (ether_fp == NULL) {
+-		ether_fp = fopen(ETHERS_FILE, "r");
+-		if (ether_fp == NULL)
+-			return (-1);
+-		if (fstat(fileno(ether_fp), &st) < 0) {
+-			fclose(ether_fp);
+-			ether_fp = NULL;
+-			return (-1);
+-		}
+-		mtime = st.st_mtime;
+-		ctime = st.st_ctime;
+-		return (1);
+-	}
+-	return (0);
+-}
+-
+-/* Map an ethernet address to a name; returns 0 on success, else 1. */
+-int
+-ether_ntohost(name, ea)
+-	register char *name;
+-	register u_char *ea;
+-{
+-	register struct etherent *ep;
+-
+-	if (ether_rewind() < 0)
+-		return (1);
+-
+-	while ((ep = next_etherent(ether_fp)) != NULL)
+-		if (bcmp(ep->addr, ea, 6) == 0) {
+-			strcpy(name, ep->name);
+-			return (0);
+-		}
+-	return (1);
+-}
+-
+-/* Map an ethernet name to an address; returns 0 on success, else 1. */
+-int
+-ether_hostton(name, ea)
+-	register char *name;
+-	register u_char *ea;
+-{
+-	register struct etherent *ep;
+-
+-	if (ether_rewind() < 0)
+-		return (1);
+-
+-	while ((ep = next_etherent(ether_fp)) != NULL)
+-		if (strcmp(ep->name, name) == 0) {
+-			bcopy(ep->addr, ea, 6);
+-			return (0);
+-		}
+-	return (1);
+-}
+--- rarpd/rarpd.8.jj	Thu Jan  1 01:00:00 1970
++++ rarpd/rarpd.8	Fri Apr  7 10:47:16 2000
+@@ -0,0 +1,69 @@
++.TH RARP 8 "7 April 2000" "rarpd" "Linux Programmer's Manual"
++.SH NAME
++rarpd \- Reverse Address Resolution Protocol (RARP) daemon
++.SH SYNOPSIS
++.B "rarpd [-aAvde] [-b bootdir ] [ interface ]"
++.SH DESCRIPTION
++.B Rarpd
++is a daemon which responds to RARP requests.
++RARP is used by some machines at boot time to discover their IP address.
++They provide their Ethernet address and
++.B rarpd
++responds with their IP address if it finds it in the ethers database
++(either
++.I /etc/ethers
++file or NIS+ lookup) and using DNS lookup if ethers database
++contains a hostname and not an IP address.
++By default
++.B rarpd
++also checks if a bootable image with a name starting with the IP address
++in hexadecimal uppercase letters is present in the TFTP boot directory
++(usually
++.I /tftpboot
++) before it decides to respond to the RARP request.
++.SH OPTIONS
++.TP
++.B \-a
++Do not bind to the interface.
++.TP
++.B \-A
++Respond to ARP as well as RARP requests.
++.TP
++.B \-v
++Tell the user what is going on by being verbose.
++.TP
++.B \-d
++Debugging mode. Do not detach from the tty.
++.TP
++.B \-e
++Skip the check for bootable image in the TFTP boot directory. If not
++present, then even if the Ethernet address is present in
++the ethers database but the bootable image for the resolved IP does not exist,
++.B rarpd
++will not respond to the request.
++.TP
++.B "\-b bootdir"
++Use
++.I bootdir
++instead of the default
++.I /tftpboot
++as the TFTP boot directory for bootable image checks.
++.SH OBSOLETES
++This
++.B rarpd
++obsoletes kernel
++.B rarp
++daemon present in Linux kernels up to 2.2 which was controlled by the
++rarp(8) command.
++.SH FILES
++.I /etc/ethers,
++.br
++.I /etc/nsswitch.conf,
++.br
++.I /tftpboot
++.SH SEE ALSO
++ethers(5)
++.SH AUTHORS
++Alexey Kuznetsov, <kuznet at ms2.inr.ac.ru>
++.br
++Jakub Jelinek, <jakub at redhat.com>
+--- rarpd/rarpd.c.jj	Sat Nov  7 15:48:40 1998
++++ rarpd/rarpd.c	Fri Apr  7 15:35:44 2000
+@@ -7,6 +7,7 @@
+  *		2 of the License, or (at your option) any later version.
+  *
+  * Authors:	Alexey Kuznetsov, <kuznet at ms2.inr.ac.ru>
++ *		Jakub Jelinek, <jakub at redhat.com>
+  */
+ 
+ #include <stdio.h>
+@@ -26,6 +27,8 @@
+ #include <net/if.h>
+ #include <net/if_arp.h>
+ #include <netinet/in.h>
++#include <netinet/ether.h>
++#include <asm/types.h>
+ #include <linux/if_packet.h>
+ #include <linux/filter.h>
+ 
+@@ -39,27 +42,26 @@
+ int all_ifaces;
+ int listen_arp;
+ char *ifname;
+-char *tftp_dir = "/etc/tftpboot";
++char *tftp_dir = "/tftpboot";
+ 
+-extern int ether_ntohost(char *name, unsigned char *ea);
+ void usage(void) __attribute__((noreturn));
+ 
+-struct iflink
++struct rarpiflink
+ {
+-	struct iflink	*next;
+-	int	       	index;
+-	int		hatype;
+-	unsigned char	lladdr[16];
+-	unsigned char	name[IFNAMSIZ];
+-	struct ifaddr 	*ifa_list;
++	struct rarpiflink	*next;
++	int	       		index;
++	int			hatype;
++	unsigned char		lladdr[16];
++	unsigned char		name[IFNAMSIZ];
++	struct rarpifaddr 	*ifa_list;
+ } *ifl_list;
+ 
+-struct ifaddr
++struct rarpifaddr
+ {
+-	struct ifaddr 	*next;
+-	__u32		prefix;
+-	__u32		mask;
+-	__u32		local;
++	struct rarpifaddr 	*next;
++	__u32			prefix;
++	__u32			mask;
++	__u32			local;
+ };
+ 
+ struct rarp_map
+@@ -87,8 +89,8 @@
+ {
+ 	int fd;
+ 	struct ifreq *ifrp, *ifend;
+-	struct iflink *ifl;
+-	struct ifaddr *ifa;
++	struct rarpiflink *ifl;
++	struct rarpifaddr *ifa;
+ 	struct ifconf ifc;
+ 	struct ifreq ibuf[256];
+ 
+@@ -144,7 +146,7 @@
+ 				continue;
+ 			}
+ 
+-			ifl = (struct iflink*)malloc(sizeof(*ifl));
++			ifl = (struct rarpiflink*)malloc(sizeof(*ifl));
+ 			if (ifl == NULL)
+ 				continue;
+ 			memset(ifl, 0, sizeof(*ifl));
+@@ -154,6 +156,7 @@
+ 			ifl->hatype = ifrp->ifr_hwaddr.sa_family;
+ 			memcpy(ifl->lladdr, ifrp->ifr_hwaddr.sa_data, 14);
+ 			strncpy(ifl->name, ifrp->ifr_name, IFNAMSIZ);
++			ifl->name[IFNAMSIZ-1] = 0;
+ 			p = strchr(ifl->name, ':');
+ 			if (p)
+ 				*p = 0;
+@@ -179,7 +182,7 @@
+ 		if (ifa == NULL) {
+ 			if (mask == 0 || prefix == 0)
+ 				continue;
+-			ifa = (struct ifaddr*)malloc(sizeof(*ifa));
++			ifa = (struct rarpifaddr*)malloc(sizeof(*ifa));
+ 			memset(ifa, 0, sizeof(*ifa));
+ 			ifa->local = addr;
+ 			ifa->prefix = prefix;
+@@ -235,10 +238,10 @@
+ 	return dent != NULL;
+ }
+ 
+-struct ifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
++struct rarpifaddr *select_ipaddr(int ifindex, __u32 *sel_addr, __u32 **alist)
+ {
+-	struct iflink *ifl;
+-	struct ifaddr *ifa;
++	struct rarpiflink *ifl;
++	struct rarpifaddr *ifa;
+ 	int retry = 0;
+ 	int i;
+ 
+@@ -294,7 +297,7 @@
+ 
+ 	if (r == NULL) {
+ 		if (hatype == ARPHRD_ETHER && halen == 6) {
+-			struct ifaddr *ifa;
++			struct rarpifaddr *ifa;
+ 			struct hostent *hp;
+ 			char ename[256];
+ 			static struct rarp_map emap = {
+@@ -304,7 +307,7 @@
+ 				6,
+ 			};
+ 
+-			if (ether_ntohost(ename, lladdr) != 0 ||
++			if (ether_ntohost(ename, (struct ether_addr *)lladdr) != 0 ||
+ 			    (hp = gethostbyname(ename)) == NULL) {
+ 				if (verbose)
+ 					syslog(LOG_INFO, "not found in /etc/ethers");
+@@ -345,7 +348,7 @@
+ 
+ int put_mylladdr(unsigned char **ptr_p, int ifindex, int alen)
+ {
+-	struct iflink *ifl;
++	struct rarpiflink *ifl;
+ 
+ 	for (ifl=ifl_list; ifl; ifl = ifl->next)
+ 		if (ifl->index == ifindex)
+@@ -362,8 +365,8 @@
+ int put_myipaddr(unsigned char **ptr_p, int ifindex, __u32 hisipaddr)
+ {
+ 	__u32 laddr = 0;
+-	struct iflink *ifl;
+-	struct ifaddr *ifa;
++	struct rarpiflink *ifl;
++	struct rarpifaddr *ifa;
+ 
+ 	for (ifl=ifl_list; ifl; ifl = ifl->next)
+ 		if (ifl->index == ifindex)
+@@ -388,7 +391,7 @@
+ 	int fd;
+ 	struct arpreq req;
+ 	struct sockaddr_in *sin;
+-	struct iflink *ifl;
++	struct rarpiflink *ifl;
+ 
+ 	for (ifl=ifl_list; ifl; ifl = ifl->next)
+ 		if (ifl->index == ifindex)
+@@ -421,6 +424,10 @@
+ 	struct rarp_map *rmap;
+ 	unsigned char *ptr;
+ 	int n;
++	int i;
++	char tmpbuf[16*3];
++	char tmpname[IFNAMSIZ];
++	struct rarpiflink *ifl;
+ 
+ 	n = recvfrom(fd, buf, sizeof(buf), MSG_DONTWAIT, (struct sockaddr*)&sll, &sll_len);
+ 	if (n<0) {
+@@ -447,20 +454,25 @@
+ 	if (a->ar_op != htons(ARPOP_RREQUEST))
+ 		return;
+ 
+-	if (verbose) {
+-		int i;
+-		char tmpbuf[16*3];
+-		char *ptr = tmpbuf;
+-		for (i=0; i<sll.sll_halen; i++) {
+-			if (i) {
+-				sprintf(ptr, ":%02x", sll.sll_addr[i]);
+-				ptr++;
+-			} else
+-				sprintf(ptr, "%02x", sll.sll_addr[i]);
+-			ptr += 2;
+-		}
+-		syslog(LOG_INFO, "RARP request from %s on if%d", tmpbuf, sll.sll_ifindex);
++	ptr = tmpbuf;
++	for (i=0; i<sll.sll_halen; i++) {
++		if (i) {
++			sprintf(ptr, ":%02x", sll.sll_addr[i]);
++			ptr++;
++		} else
++			sprintf(ptr, "%02x", sll.sll_addr[i]);
++		ptr += 2;
+ 	}
++	
++	for (ifl=ifl_list; ifl; ifl = ifl->next)
++		if (ifl->index == sll.sll_ifindex)
++			break;
++	if (ifl) {
++		strncpy(tmpname, ifl->name, IFNAMSIZ);
++		tmpname[IFNAMSIZ-1] = 0;
++	} else
++		sprintf(tmpname, "if%d", sll.sll_ifindex);
++	syslog(LOG_INFO, "RARP request from %s on %s", tmpbuf, tmpname);
+ 
+ 	/* Sanity checks */
+ 
+@@ -526,6 +538,8 @@
+ 	ptr += rmap->lladdr_len;
+ 	memcpy(ptr, &rmap->ipaddr, 4);
+ 	ptr += 4;
++	syslog(LOG_INFO, "RARP response to %s %s on %s", tmpbuf,
++	       inet_ntoa(*(struct in_addr *)&rmap->ipaddr), tmpname);
+ 
+ 	/* Update our ARP cache. Probably, this guy
+ 	   will not able to make ARP (if it is broken)
+@@ -613,7 +627,7 @@
+         if (ifname) {
+ 		struct ifreq ifr;
+ 		memset(&ifr, 0, sizeof(ifr));
+-		strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
++		strncpy(ifr.ifr_name, ifname, IFNAMSIZ-1);
+ 		if (ioctl(pset[0].fd, SIOCGIFINDEX, &ifr)) {
+ 			perror("ioctl(SIOCGIFINDEX)");
+ 			usage();
+--- rarpd/rarpd.init.jj	Thu Jan  1 01:00:00 1970
++++ rarpd/rarpd.init	Fri Apr  7 15:42:38 2000
+@@ -0,0 +1,53 @@
++#!/bin/bash
++#
++#	/etc/init.d/rarpd
++#
++# Starts the rarpd daemon
++#
++# chkconfig: 345 82 16
++# description: Servers Reverse Address Resolution Protocol requests.
++# processname: rarpd
++
++# Source function library.
++. /etc/init.d/functions
++
++test -x /usr/sbin/rarpd -a -f /etc/ethers || exit 0
++
++RETVAL=0
++
++#
++#	See how we were called.
++#
++case "$1" in
++  start)
++	# Check if rarpd is already running
++	if [ ! -f /var/lock/subsys/rarpd ]; then
++	    echo -n 'Starting at daemon: '
++	    daemon /usr/sbin/rarpd
++	    RETVAL=$?
++	    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/rarpd
++	    echo
++	fi
++	;;
++  stop)
++	echo -n 'Stopping at daemon: '
++	killproc /usr/sbin/rarpd
++	RETVAL=$?
++	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rarpd
++	echo
++	;;
++  reload|restart)
++	$0 stop
++	$0 start
++	RETVAL=$?
++	;;
++  status)
++	status /usr/sbin/rarpd
++	RETVAL=$?
++	;;
++  *)
++	echo "Usage: /etc/init.d/rarpd {start|stop|restart|reload|status}"
++	exit 1
++esac
++
++exit $RETVAL
diff --git a/meta-oe/recipes-extended/rarpd/files/1001rarpd-norun.patch b/meta-oe/recipes-extended/rarpd/files/1001rarpd-norun.patch
new file mode 100644
index 0000000..55e6dfd
--- /dev/null
+++ b/meta-oe/recipes-extended/rarpd/files/1001rarpd-norun.patch
@@ -0,0 +1,13 @@
+--- rarpd/rarpd.init.foo	Fri Jun 16 16:29:01 2000
++++ rarpd/rarpd.init	Fri Jun 16 16:29:13 2000
+@@ -4,8 +4,8 @@
+ #
+ # Starts the rarpd daemon
+ #
+-# chkconfig: 345 82 16
+-# description: Servers Reverse Address Resolution Protocol requests.
++# chkconfig: - 82 16
++# description: Server Reverse Address Resolution Protocol requests.
+ # processname: rarpd
+ 
+ # Source function library.
diff --git a/meta-oe/recipes-extended/rarpd/files/1002rarpd-initscript.patch b/meta-oe/recipes-extended/rarpd/files/1002rarpd-initscript.patch
new file mode 100644
index 0000000..b08eaac
--- /dev/null
+++ b/meta-oe/recipes-extended/rarpd/files/1002rarpd-initscript.patch
@@ -0,0 +1,77 @@
+--- rarpd/rarpd.init.initscript	Thu Mar 15 16:44:18 2001
++++ rarpd/rarpd.init	Thu Mar 15 16:46:16 2001
+@@ -9,44 +9,60 @@
+ # processname: rarpd
+ 
+ # Source function library.
+-. /etc/init.d/functions
++. /etc/init.d/functions
+ 
+ test -x /usr/sbin/rarpd -a -f /etc/ethers || exit 0
+ 
+ RETVAL=0
++prog="rarpd"
+ 
+-#
+-#	See how we were called.
+-#
+-case "$1" in
+-  start)
++start() {
+ 	# Check if rarpd is already running
+ 	if [ ! -f /var/lock/subsys/rarpd ]; then
+-	    echo -n 'Starting at daemon: '
++	    echo -n $"Starting $prog: "
+ 	    daemon /usr/sbin/rarpd
+ 	    RETVAL=$?
+ 	    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/rarpd
+ 	    echo
+ 	fi
+-	;;
+-  stop)
+-	echo -n 'Stopping at daemon: '
++	return $RETVAL
++}
++
++stop() {
++	echo -n $"Stopping $prog: "
+ 	killproc /usr/sbin/rarpd
+ 	RETVAL=$?
+ 	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rarpd
+ 	echo
++	return $RETVAL
++}
++
++#
++#	See how we were called.
++#
++case "$1" in
++  start)
++	start
++	;;
++  stop)
++	stop
+ 	;;
+   reload|restart)
+-	$0 stop
+-	$0 start
+-	RETVAL=$?
++        stop
++	start
++	;;
++  condrestart)
++	if [ -f /var/lock/subsys/rarpd ]; then
++	    stop
++	    start
++	fi
+ 	;;
+   status)
+ 	status /usr/sbin/rarpd
+ 	RETVAL=$?
+ 	;;
+   *)
+-	echo "Usage: /etc/init.d/rarpd {start|stop|restart|reload|status}"
++	echo $"Usage: $0 {start|stop|restart|condrestart|reload|status}"
+ 	exit 1
+ esac
+ 
diff --git a/meta-oe/recipes-extended/rarpd/files/1003rarpd-fd-leak.patch b/meta-oe/recipes-extended/rarpd/files/1003rarpd-fd-leak.patch
new file mode 100644
index 0000000..7ca7ee5
--- /dev/null
+++ b/meta-oe/recipes-extended/rarpd/files/1003rarpd-fd-leak.patch
@@ -0,0 +1,25 @@
+--- rarpd/rarpd.c.leak	2005-04-25 08:13:26.000000000 -0400
++++ rarpd/rarpd.c	2005-04-27 13:28:22.000000000 -0400
+@@ -210,6 +210,7 @@
+ 			}
+ 		}
+ 	}
++	close(fd);
+ }
+ 
+ void configure()
+@@ -228,12 +229,13 @@
+ 	d = opendir(tftp_dir);
+ 	if (d == NULL) {
+ 		syslog(LOG_ERR, "opendir: %m");
+-		return 0;
++		goto done_bootable;
+ 	}
+ 	while ((dent = readdir(d)) != NULL) {
+ 		if (strncmp(dent->d_name, name, 8) == 0)
+ 			break;
+ 	}
++done_bootable:
+ 	closedir(d);
+ 	return dent != NULL;
+ }
diff --git a/meta-oe/recipes-extended/rarpd/files/1004rarpd-sprintf.patch b/meta-oe/recipes-extended/rarpd/files/1004rarpd-sprintf.patch
new file mode 100644
index 0000000..382e16f
--- /dev/null
+++ b/meta-oe/recipes-extended/rarpd/files/1004rarpd-sprintf.patch
@@ -0,0 +1,31 @@
+--- rarpd/rarpd.c.sprintf	2005-07-26 18:14:47.000000000 +0200
++++ rarpd/rarpd.c	2005-07-26 18:18:42.000000000 +0200
+@@ -11,6 +11,7 @@
+  */
+ 
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <syslog.h>
+ #include <dirent.h>
+ #include <malloc.h>
+@@ -457,15 +458,12 @@
+ 		return;
+ 
+ 	ptr = tmpbuf;
+-	for (i=0; i<sll.sll_halen; i++) {
+-		if (i) {
+-			sprintf(ptr, ":%02x", sll.sll_addr[i]);
+-			ptr++;
+-		} else
+-			sprintf(ptr, "%02x", sll.sll_addr[i]);
+-		ptr += 2;
++        snprintf(tmpbuf, 2, "%02x", sll.sll_addr[0]);
++	for (ptr=tmpbuf+2, i=1; i<sll.sll_halen; i++) {
++		snprintf(ptr, 3, ":%02x", sll.sll_addr[i]);
++		ptr += 3;
+ 	}
+-	
++
+ 	for (ifl=ifl_list; ifl; ifl = ifl->next)
+ 		if (ifl->index == sll.sll_ifindex)
+ 			break;
diff --git a/meta-oe/recipes-extended/rarpd/files/1005rarpd-initLSB.patch b/meta-oe/recipes-extended/rarpd/files/1005rarpd-initLSB.patch
new file mode 100644
index 0000000..396a4a7
--- /dev/null
+++ b/meta-oe/recipes-extended/rarpd/files/1005rarpd-initLSB.patch
@@ -0,0 +1,85 @@
+Only in rarpd_patchedinit/: debugfiles.list
+Only in rarpd_patchedinit/: debugsources.list
+Only in rarpd_patchedinit/: rarpd
+diff -urp rarpd/rarpd.init rarpd_patchedinit/rarpd.init
+--- rarpd/rarpd.init	2007-07-23 14:26:36.000000000 +0200
++++ rarpd_patchedinit/rarpd.init	2007-07-23 14:22:09.000000000 +0200
+@@ -8,17 +8,32 @@
+ # description: Server Reverse Address Resolution Protocol requests.
+ # processname: rarpd
+ 
++### BEGIN INIT INFO
++# Provides: rarpd
++# Required-Start: $syslog $network
++# Required-Stop:  $syslog $network
++# Default-Start:
++# Default-Stop: 0 1 2 3 4 5 6
++# Short-Description: start and stop rarpd
++# Description: RARP (Reverse Address Resolution Protocol) is a protocol \
++#              which allows individual devices on an IP network to get \
++#              their own IP addresses from the RARP server. \
++### END INIT INFO
++
+ # Source function library.
+ . /etc/init.d/functions
+ 
+-test -x /usr/sbin/rarpd -a -f /etc/ethers || exit 0
+-
+ RETVAL=0
+ prog="rarpd"
+ 
++
+ start() {
++    #if these files don't exist rarpd can't work
++    test -x /usr/sbin/rarpd -a -f /etc/ethers || exit 6
+ 	# Check if rarpd is already running
+-	if [ ! -f /var/lock/subsys/rarpd ]; then
++	#if [ ! -f /var/lock/subsys/rarpd ]; then
++    status rarpd;
++    if [ $? -ne 0 ]; then
+ 	    echo -n $"Starting $prog: "
+ 	    daemon /usr/sbin/rarpd
+ 	    RETVAL=$?
+@@ -36,6 +51,9 @@ stop() {
+ 	echo
+ 	return $RETVAL
+ }
++reload() {
++    RETVAL=3
++}
+ 
+ #
+ #	See how we were called.
+@@ -47,8 +65,11 @@ case "$1" in
+   stop)
+ 	stop
+ 	;;
+-  reload|restart)
+-        stop
++  reload)
++    reload
++    ;;
++  force-reload|restart)
++    stop
+ 	start
+ 	;;
+   condrestart)
+@@ -58,12 +79,13 @@ case "$1" in
+ 	fi
+ 	;;
+   status)
+-	status /usr/sbin/rarpd
++	status rarpd
+ 	RETVAL=$?
+ 	;;
+   *)
+-	echo $"Usage: $0 {start|stop|restart|condrestart|reload|status}"
+-	exit 1
++	echo $"Usage: $0 {start|stop|restart|condrestart|reload|status|force-reload}"
++	RETVAL=2
++    
+ esac
+ 
+ exit $RETVAL
+Only in rarpd_patchedinit/: rarpd.init~
+Only in rarpd_patchedinit/: rarpd.o
diff --git a/meta-oe/recipes-extended/rarpd/files/1006rarpd-configurableInit.patch b/meta-oe/recipes-extended/rarpd/files/1006rarpd-configurableInit.patch
new file mode 100644
index 0000000..9950dd1
--- /dev/null
+++ b/meta-oe/recipes-extended/rarpd/files/1006rarpd-configurableInit.patch
@@ -0,0 +1,23 @@
+--- rarpd/rarpd.init	2007-07-30 11:53:35.000000000 +0200
++++ rarpd_configurable/rarpd.init	2007-07-30 11:45:20.000000000 +0200
+@@ -23,6 +23,11 @@
+ # Source function library.
+ . /etc/init.d/functions
+ 
++# Read the config file if exists
++if [ -f /etc/sysconfig/rarpd ]; then
++ . /etc/sysconfig/rarpd
++fi
++
+ RETVAL=0
+ prog="rarpd"
+ 
+@@ -35,7 +40,7 @@ start() {
+     status rarpd;
+     if [ $? -ne 0 ]; then
+ 	    echo -n $"Starting $prog: "
+-	    daemon /usr/sbin/rarpd
++	    daemon /usr/sbin/rarpd $OPTIONS $INTERFACE
+ 	    RETVAL=$?
+ 	    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/rarpd
+ 	    echo
diff --git a/meta-oe/recipes-extended/rarpd/files/ethers.sample b/meta-oe/recipes-extended/rarpd/files/ethers.sample
new file mode 100644
index 0000000..249ca6b
--- /dev/null
+++ b/meta-oe/recipes-extended/rarpd/files/ethers.sample
@@ -0,0 +1 @@
+# see man ethers for syntax
diff --git a/meta-oe/recipes-extended/rarpd/files/rarpd.service b/meta-oe/recipes-extended/rarpd/files/rarpd.service
new file mode 100644
index 0000000..137710e
--- /dev/null
+++ b/meta-oe/recipes-extended/rarpd/files/rarpd.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Reverse Address Resolution Protocol Requests Server
+Requires=network.target
+After=syslog.target network.target
+
+[Service]
+Type=forking
+EnvironmentFile=-/etc/sysconfig/rarpd
+ExecStart=/usr/sbin/rarpd $OPTIONS $INTERFACE
+StandardError=syslog
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-oe/recipes-extended/rarpd/rarpd_ss981107.bb b/meta-oe/recipes-extended/rarpd/rarpd_ss981107.bb
new file mode 100644
index 0000000..df705e0
--- /dev/null
+++ b/meta-oe/recipes-extended/rarpd/rarpd_ss981107.bb
@@ -0,0 +1,50 @@
+SUMMARY = "The RARP daemon."
+DESCRIPTION = "RARP (Reverse Address Resolution Protocol) is a protocol which \
+allows individual devices on an IP network to get their own IP addresses from \
+the RARP server. Some machines (e.g. SPARC boxes) use this protocol instead \
+of e.g. DHCP to query their IP addresses during network bootup. \
+Linux kernels up to 2.2 used to provide a kernel daemon for this service, \
+but since 2.3 kernels it is served by this userland daemon. \
+You should install rarpd if you want to set up a RARP server on your \
+network."
+SECTION = "System Environment/Daemons"
+
+SRC_URI = "http://pkgs.fedoraproject.org/repo/pkgs/${PN}/${PN}-${PV}.tar.gz/be2a88f8ccddf2a40ac484cb3294fedc/${PN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "be2a88f8ccddf2a40ac484cb3294fedc"
+SRC_URI[sha256sum] = "4d6145d435a5d8b567b9798620f57f9b0a464078a1deba267958f168fbe776e6"
+
+SRC_URI += "file://1000rarpd-ss981107.patch \
+            file://1001rarpd-norun.patch \
+            file://1002rarpd-initscript.patch \
+            file://1003rarpd-fd-leak.patch \
+            file://1004rarpd-sprintf.patch \
+            file://1005rarpd-initLSB.patch \
+            file://1006rarpd-configurableInit.patch \
+            file://ethers.sample \
+            file://rarpd.service \
+           "
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://rarpd.c;md5=199b20b172ea93121bc613a9c77b6931"
+
+S = "${WORKDIR}/${PN}"
+
+do_install() {
+        install -d ${D}${sysconfdir}/init.d
+        install -d ${D}${sbindir}
+        install -d ${D}${mandir}/man8
+        install -m 755 rarpd.init ${D}${sysconfdir}/init.d/rarpd
+        install -m 755 rarpd ${D}${sbindir}/rarpd
+        install -m 644 rarpd.8 ${D}${mandir}/man8/rarpd.8
+        install -m 644 ${WORKDIR}/ethers.sample ${D}${sysconfdir}/ethers
+
+        if ${@base_contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+	    install -d ${D}${systemd_unitdir}/system
+	    install -m 0644 ${WORKDIR}/rarpd.service ${D}${systemd_unitdir}/system/
+        fi
+}
+
+inherit ${@base_contains('VIRTUAL-RUNTIME_init_manager','systemd','systemd','',d)}
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "rarpd.service"
+SYSTEMD_AUTO_ENABLE = "disable"
-- 
1.8.4.2




More information about the Openembedded-devel mailing list