[oe] [meta-oe][PATCH v2] rarpd : add new recipe

Martin Jansa martin.jansa at gmail.com
Wed Nov 19 14:40:02 UTC 2014


On Tue, Nov 18, 2014 at 05:55:58PM +0800, Li xin wrote:
> 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>
> ---
>  .../rarpd/files/0001-rarpd.8-add-man-file.patch    |  89 +++++++
>  .../0002-Makefile-modify-compile-parameters.patch  |  26 ++
>  .../rarpd/files/0003-rarpd.c-bug-fix.patch         | 263 +++++++++++++++++++++
>  .../files/0004-rarpd.init-add-new-init-file.patch  | 116 +++++++++
>  .../rarpd/files/0005-ethernet.c-remove-it.patch    | 244 +++++++++++++++++++
>  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   |  48 ++++
>  8 files changed, 801 insertions(+)
>  create mode 100644 meta-oe/recipes-extended/rarpd/files/0001-rarpd.8-add-man-file.patch
>  create mode 100644 meta-oe/recipes-extended/rarpd/files/0002-Makefile-modify-compile-parameters.patch
>  create mode 100644 meta-oe/recipes-extended/rarpd/files/0003-rarpd.c-bug-fix.patch
>  create mode 100644 meta-oe/recipes-extended/rarpd/files/0004-rarpd.init-add-new-init-file.patch
>  create mode 100644 meta-oe/recipes-extended/rarpd/files/0005-ethernet.c-remove-it.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

Use files -> rarpd for slightly faster lookup.

> 
> diff --git a/meta-oe/recipes-extended/rarpd/files/0001-rarpd.8-add-man-file.patch b/meta-oe/recipes-extended/rarpd/files/0001-rarpd.8-add-man-file.patch
> new file mode 100644
> index 0000000..77c75b4
> --- /dev/null
> +++ b/meta-oe/recipes-extended/rarpd/files/0001-rarpd.8-add-man-file.patch
> @@ -0,0 +1,89 @@
> +From d91161eb163c16408202a91b4325a3381ab33752 Mon Sep 17 00:00:00 2001
> +From: Li xin <lixin.fnst at cn.fujitsu.com>
> +Date: Tue, 18 Nov 2014 17:55:31 +0900
> +Subject: [PATCH 1/5] rarpd.8 : add man file
> +
> +Signed-off-by: Li Xin <lixin.fnst at cn.fujitsu.com>
> +---
> + rarpd.8 | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> + 1 file changed, 69 insertions(+)
> + create mode 100644 rarpd.8
> +
> +diff --git a/rarpd.8 b/rarpd.8
> +new file mode 100644
> +index 0000000..ce7bd70
> +--- /dev/null
> ++++ b/rarpd.8
> +@@ -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>
> +-- 
> +1.8.4.2
> +
> diff --git a/meta-oe/recipes-extended/rarpd/files/0002-Makefile-modify-compile-parameters.patch b/meta-oe/recipes-extended/rarpd/files/0002-Makefile-modify-compile-parameters.patch
> new file mode 100644
> index 0000000..0b3ebc4
> --- /dev/null
> +++ b/meta-oe/recipes-extended/rarpd/files/0002-Makefile-modify-compile-parameters.patch
> @@ -0,0 +1,26 @@
> +From d23b13bd959204824070433d954c5dfbfc421bb7 Mon Sep 17 00:00:00 2001
> +From: Li xin <lixin.fnst at cn.fujitsu.com>
> +Date: Tue, 18 Nov 2014 18:05:27 +0900
> +Subject: [PATCH 2/5] Makefile : modify compile parameters
> +
> +Signed-off-by: Li Xin <lixin.fnst at cn.fujitsu.com>
> +---
> + Makefile | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/Makefile b/Makefile
> +index 19966b4..86a8169 100644
> +--- a/Makefile
> ++++ b/Makefile
> +@@ -1,7 +1,7 @@
> + CC=gcc
> + CFLAGS=-O2 -Wall -g $(DEFINES)
> + 
> +-OBJ=rarpd.o ethernet.o
> ++OBJ=rarpd.o
> + 
> + all: rarpd
> + 
> +-- 
> +1.8.4.2
> +
> diff --git a/meta-oe/recipes-extended/rarpd/files/0003-rarpd.c-bug-fix.patch b/meta-oe/recipes-extended/rarpd/files/0003-rarpd.c-bug-fix.patch
> new file mode 100644
> index 0000000..7ce1279
> --- /dev/null
> +++ b/meta-oe/recipes-extended/rarpd/files/0003-rarpd.c-bug-fix.patch
> @@ -0,0 +1,263 @@
> +From b49c8e6e66801406520d1bff791c66dff7b1cddb Mon Sep 17 00:00:00 2001
> +From: Li xin <lixin.fnst at cn.fujitsu.com>
> +Date: Tue, 18 Nov 2014 18:10:20 +0900
> +Subject: [PATCH 3/5] rarpd.c : bug fix
> +
> +Signed-off-by: Li Xin <lixin.fnst at cn.fujitsu.com>
> +---
> + rarpd.c | 98 +++++++++++++++++++++++++++++++++++++----------------------------
> + 1 file changed, 56 insertions(+), 42 deletions(-)
> +
> +diff --git a/rarpd.c b/rarpd.c
> +index 335d2d2..d45300e 100644
> +--- a/rarpd.c
> ++++ b/rarpd.c
> +@@ -7,9 +7,11 @@
> +  *		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>
> ++#include <stdlib.h>
> + #include <syslog.h>
> + #include <dirent.h>
> + #include <malloc.h>
> +@@ -26,6 +28,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 +43,26 @@ int only_ethers;
> + 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 +90,8 @@ void load_if()
> + {
> + 	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 +147,7 @@ void load_if()
> + 				continue;
> + 			}
> + 
> +-			ifl = (struct iflink*)malloc(sizeof(*ifl));
> ++			ifl = (struct rarpiflink*)malloc(sizeof(*ifl));
> + 			if (ifl == NULL)
> + 				continue;
> + 			memset(ifl, 0, sizeof(*ifl));
> +@@ -154,6 +157,7 @@ void load_if()
> + 			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 +183,7 @@ void load_if()
> + 		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;
> +@@ -207,6 +211,7 @@ void load_if()
> + 			}
> + 		}
> + 	}
> ++	close(fd);
> + }
> + 
> + void configure()
> +@@ -225,20 +230,21 @@ int bootable(__u32 addr)
> + 	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;
> + }
> + 
> +-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 +300,7 @@ struct rarp_map *rarp_lookup(int ifindex, int hatype,
> + 
> + 	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 +310,7 @@ struct rarp_map *rarp_lookup(int ifindex, int hatype,
> + 				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 +351,7 @@ static int load_arp_bpflet(int fd)
> + 
> + 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 +368,8 @@ int put_mylladdr(unsigned char **ptr_p, int ifindex, int alen)
> + 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 +394,7 @@ void arp_advise(int ifindex, unsigned char *lladdr, int lllen, __u32 ipaddr)
> + 	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 +427,10 @@ void serve_it(int fd)
> + 	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,21 +457,23 @@ void serve_it(int fd)
> + 	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;
> ++        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;
> ++	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 */
> + 
> + 	/* 1. IP only -> pln==4 */
> +@@ -526,6 +538,8 @@ void serve_it(int fd)
> + 	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 @@ int main(int argc, char **argv)
> +         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();
> +-- 
> +1.8.4.2
> +
> diff --git a/meta-oe/recipes-extended/rarpd/files/0004-rarpd.init-add-new-init-file.patch b/meta-oe/recipes-extended/rarpd/files/0004-rarpd.init-add-new-init-file.patch
> new file mode 100644
> index 0000000..3ba11ff
> --- /dev/null
> +++ b/meta-oe/recipes-extended/rarpd/files/0004-rarpd.init-add-new-init-file.patch
> @@ -0,0 +1,116 @@
> +From 0ef1a95b220c7e110da950e5cc544c50c25b1bc6 Mon Sep 17 00:00:00 2001
> +From: Li xin <lixin.fnst at cn.fujitsu.com>
> +Date: Tue, 18 Nov 2014 18:11:56 +0900
> +Subject: [PATCH 4/5] rarpd.init : add new init file
> +
> +Signed-off-by: Li Xin <lixin.fnst at cn.fujitsu.com>
> +---
> + rarpd.init | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> + 1 file changed, 96 insertions(+)
> + create mode 100644 rarpd.init
> +
> +diff --git a/rarpd.init b/rarpd.init
> +new file mode 100644
> +index 0000000..efcf825
> +--- /dev/null
> ++++ b/rarpd.init
> +@@ -0,0 +1,96 @@
> ++#!/bin/bash
> ++#
> ++#	/etc/init.d/rarpd
> ++#
> ++# Starts the rarpd daemon
> ++#
> ++# chkconfig: - 82 16
> ++# 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
> ++
> ++# Read the config file if exists
> ++if [ -f /etc/sysconfig/rarpd ]; then
> ++ . /etc/sysconfig/rarpd
> ++fi
> ++
> ++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
> ++    status rarpd;
> ++    if [ $? -ne 0 ]; then
> ++	    echo -n $"Starting $prog: "
> ++	    daemon /usr/sbin/rarpd $OPTIONS $INTERFACE
> ++	    RETVAL=$?
> ++	    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/rarpd
> ++	    echo
> ++	fi
> ++	return $RETVAL
> ++}
> ++
> ++stop() {
> ++	echo -n $"Stopping $prog: "
> ++	killproc /usr/sbin/rarpd
> ++	RETVAL=$?
> ++	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rarpd
> ++	echo
> ++	return $RETVAL
> ++}
> ++reload() {
> ++    RETVAL=3
> ++}
> ++
> ++#
> ++#	See how we were called.
> ++#
> ++case "$1" in
> ++  start)
> ++	start
> ++	;;
> ++  stop)
> ++	stop
> ++	;;
> ++  reload)
> ++    reload
> ++    ;;
> ++  force-reload|restart)
> ++    stop
> ++	start
> ++	;;
> ++  condrestart)
> ++	if [ -f /var/lock/subsys/rarpd ]; then
> ++	    stop
> ++	    start
> ++	fi
> ++	;;
> ++  status)
> ++	status rarpd
> ++	RETVAL=$?
> ++	;;
> ++  *)
> ++	echo $"Usage: $0 {start|stop|restart|condrestart|reload|status|force-reload}"
> ++	RETVAL=2
> ++    
> ++esac
> ++
> ++exit $RETVAL
> +-- 
> +1.8.4.2
> +
> diff --git a/meta-oe/recipes-extended/rarpd/files/0005-ethernet.c-remove-it.patch b/meta-oe/recipes-extended/rarpd/files/0005-ethernet.c-remove-it.patch
> new file mode 100644
> index 0000000..c77c806
> --- /dev/null
> +++ b/meta-oe/recipes-extended/rarpd/files/0005-ethernet.c-remove-it.patch
> @@ -0,0 +1,244 @@
> +From abe15ba10ddc3548c528ccb088097d7abf5be48b Mon Sep 17 00:00:00 2001
> +From: Li xin <lixin.fnst at cn.fujitsu.com>
> +Date: Tue, 18 Nov 2014 18:14:07 +0900
> +Subject: [PATCH 5/5] ethernet.c : remove it
> +
> +Signed-off-by: Li Xin <lixin.fnst at cn.fujitsu.com>
> +---
> + ethernet.c | 224 -------------------------------------------------------------
> + 1 file changed, 224 deletions(-)
> + delete mode 100644 ethernet.c
> +
> +diff --git a/ethernet.c b/ethernet.c
> +deleted file mode 100644
> +index d682b63..0000000
> +--- a/ethernet.c
> ++++ /dev/null
> +@@ -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);
> +-}
> +-- 
> +1.8.4.2
> +
> 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..b9b4bd7
> --- /dev/null
> +++ b/meta-oe/recipes-extended/rarpd/rarpd_ss981107.bb
> @@ -0,0 +1,48 @@
> +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://0001-rarpd.8-add-man-file.patch \
> +            file://0002-Makefile-modify-compile-parameters.patch \
> +            file://0003-rarpd.c-bug-fix.patch \
> +            file://0004-rarpd.init-add-new-init-file.patch \
> +            file://0005-ethernet.c-remove-it.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
> +}

Incorrect indentation again (I've fixed it when cherry-picking)

> +
> +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
> 
> -- 
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-devel

-- 
Martin 'JaMa' Jansa     jabber: Martin.Jansa at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://lists.openembedded.org/pipermail/openembedded-devel/attachments/20141119/776ec13b/attachment-0002.sig>


More information about the Openembedded-devel mailing list