SOURCES: net-tools-branch.diff - add new file: lib/eui64.c

glen glen at pld-linux.org
Tue Sep 11 21:30:38 CEST 2007


Author: glen                         Date: Tue Sep 11 19:30:38 2007 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- add new file: lib/eui64.c

---- Files affected:
SOURCES:
   net-tools-branch.diff (1.1 -> 1.2) 

---- Diffs:

================================================================
Index: SOURCES/net-tools-branch.diff
diff -u SOURCES/net-tools-branch.diff:1.1 SOURCES/net-tools-branch.diff:1.2
--- SOURCES/net-tools-branch.diff:1.1	Tue Sep 11 21:23:55 2007
+++ SOURCES/net-tools-branch.diff	Tue Sep 11 21:30:33 2007
@@ -8259,3 +8259,161 @@
  	return;
      }
      type = ent->type;
+--- net-tools-1.60/lib/eui64.c	1970-01-01 03:00:00.000000000 +0300
++++ net-tools/lib/eui64.c	2001-11-12 04:12:05.000000000 +0200
+@@ -0,0 +1,155 @@
++/*
++ * lib/eui64.c  This file contains support for generic EUI-64 hw addressing
++ *
++ * Version:     $Id$
++ *
++ * Author:      Daniel Stodden <stodden at in.tum.de>
++ *              Copyright 2001 Daniel Stodden
++ *
++ *              blueprinted from ether.c 
++ *              Copyright 1993 MicroWalt Corporation
++ *
++ *              This program is free software; you can redistribute it
++ *              and/or  modify it under  the terms of  the GNU General
++ *              Public  License as  published  by  the  Free  Software
++ *              Foundation;  either  version 2 of the License, or  (at
++ *              your option) any later version.
++ */
++#include "config.h"
++
++#if HAVE_HWEUI64
++
++#include <sys/types.h>
++#include <sys/ioctl.h>
++#include <sys/socket.h>
++#include <net/if_arp.h>
++#include <stdlib.h>
++#include <stdio.h>
++#include <ctype.h>
++#include <errno.h>
++#include <fcntl.h>
++#include <string.h>
++#include <termios.h>
++#include <unistd.h>
++#include "net-support.h"
++#include "pathnames.h"
++#include "intl.h"
++
++/*
++ * EUI-64 constants
++ */
++
++#define EUI64_ALEN	8
++
++#ifndef ARPHRD_EUI64
++#define ARPHRD_EUI64	27
++#warning "ARPHRD_EUI64 not defined in <net/if_arp.h>. Using private value 27"
++#endif
++
++struct hwtype eui64_hwtype;
++
++/* Display an EUI-64 address in readable format. */
++static char *pr_eui64( unsigned char *ptr )
++{
++	static char buff[64];
++
++	snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X",
++		 (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377), (ptr[3] & 0377), 
++		 (ptr[4] & 0377), (ptr[5] & 0377), (ptr[6] & 0377), (ptr[7] & 0377)
++		);
++	return (buff);
++}
++
++/* Start the PPP encapsulation on the file descriptor. */
++static int in_eui64( char *bufp, struct sockaddr *sap )
++{
++	unsigned char *ptr;
++	char c, *orig;
++	int i;
++	unsigned val;
++
++	sap->sa_family = eui64_hwtype.type;
++	ptr = sap->sa_data;
++
++	i = 0;
++	orig = bufp;
++	
++	while ((*bufp != '\0') && (i < EUI64_ALEN)) {
++		val = 0;
++		c = *bufp++;
++		if (isdigit(c))
++			val = c - '0';
++		else if (c >= 'a' && c <= 'f')
++			val = c - 'a' + 10;
++		else if (c >= 'A' && c <= 'F')
++			val = c - 'A' + 10;
++		else {
++#ifdef DEBUG
++			fprintf( stderr, _("in_eui64(%s): invalid eui64 address!\n"), 
++				 orig );
++#endif
++			errno = EINVAL;
++			return (-1);
++		}
++
++		val <<= 4;
++		c = *bufp;
++		if (isdigit(c))
++			val |= c - '0';
++		else if (c >= 'a' && c <= 'f')
++			val |= c - 'a' + 10;
++		else if (c >= 'A' && c <= 'F')
++			val |= c - 'A' + 10;
++		else if (c == ':' || c == 0)
++			val >>= 4;
++		else {
++#ifdef DEBUG
++			fprintf( stderr, _("in_eui64(%s): invalid eui64 address!\n"), 
++				 orig );
++#endif
++			errno = EINVAL;
++			return (-1);
++		}
++
++		if (c != 0)
++			bufp++;
++
++		*ptr++ = (unsigned char) (val & 0377);
++		i++;
++		
++		/* We might get a semicolon here - not required. */
++		if (*bufp == ':') {
++			if (i == EUI64_ALEN) {
++#ifdef DEBUG
++				fprintf(stderr, _("in_eui64(%s): trailing : ignored!\n"),
++					orig)
++#endif
++					; /* nothing */
++			}
++			bufp++;
++		}
++	}
++
++	/* That's it.  Any trailing junk? */
++	if ((i == EUI64_ALEN) && (*bufp != '\0')) {
++#ifdef DEBUG
++		fprintf(stderr, _("in_eui64(%s): trailing junk!\n"), orig);
++		errno = EINVAL;
++		return (-1);
++#endif
++	}
++#ifdef DEBUG
++	fprintf(stderr, "in_eui64(%s): %s\n", orig, pr_eui64(sap->sa_data));
++#endif
++
++    return (0);
++}
++
++struct hwtype eui64_hwtype =
++{
++	"eui64", NULL, /*"EUI-64 addressing", */ ARPHRD_EUI64, EUI64_ALEN,
++	pr_eui64, in_eui64, NULL, 0
++};
++
++
++#endif				/* HAVE_EUI64 */
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/net-tools-branch.diff?r1=1.1&r2=1.2&f=u



More information about the pld-cvs-commit mailing list