summaryrefslogtreecommitdiffstats
path: root/lib/libc/net/eui64.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/net/eui64.c')
-rw-r--r--lib/libc/net/eui64.c311
1 files changed, 0 insertions, 311 deletions
diff --git a/lib/libc/net/eui64.c b/lib/libc/net/eui64.c
deleted file mode 100644
index 5085167..0000000
--- a/lib/libc/net/eui64.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Copyright 2004 The Aerospace Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions, and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions, and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of The Aerospace Corporation may not be used to endorse or
- * promote products derived from this software.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AEROSPACE CORPORATION "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AEROSPACE CORPORATION BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * Copyright (c) 1995
- * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Bill Paul.
- * 4. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * EUI-64 conversion and lookup routines
- *
- *
- * Converted from ether_addr.c rev
- * FreeBSD: src/lib/libc/net/eui64.c,v 1.15 2002/04/08 07:51:10 ru Exp
- * by Brooks Davis
- *
- * Written by Bill Paul <wpaul@ctr.columbia.edu>
- * Center for Telecommunications Research
- * Columbia University, New York City
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stdio.h>
-#include <paths.h>
-#include <sys/types.h>
-#include <sys/eui64.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/param.h>
-#ifdef YP
-#include <rpc/rpc.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-#endif
-
-#ifndef _PATH_EUI64
-#define _PATH_EUI64 "/etc/eui64"
-#endif
-
-static int eui64_line(const char *l, struct eui64 *e, char *hostname,
- size_t len);
-
-/*
- * Parse a string of text containing an EUI-64 and hostname
- * and separate it into its component parts.
- */
-static int
-eui64_line(const char *l, struct eui64 *e, char *hostname, size_t len)
-{
- char *line, *linehead, *cur;
-
- linehead = strdup(l);
- if (linehead == NULL)
- return (-1);
- line = linehead;
-
- /* Find and parse the EUI64 */
- while ((cur = strsep(&line, " \t\r\n")) != NULL) {
- if (*cur != '\0') {
- if (eui64_aton(cur, e) == 0)
- break;
- else
- goto bad;
- }
- }
-
- /* Find the hostname */
- while ((cur = strsep(&line, " \t\r\n")) != NULL) {
- if (*cur != '\0') {
- if (strlcpy(hostname, cur, len) <= len)
- break;
- else
- goto bad;
- }
- }
-
- /* Make sure what remains is either whitespace or a comment */
- while ((cur = strsep(&line, " \t\r\n")) != NULL) {
- if (*cur == '#')
- break;
- if (*cur != '\0')
- goto bad;
- }
-
- return (0);
-
-bad:
- free(linehead);
- return (-1);
-}
-
-/*
- * Convert an ASCII representation of an EUI-64 to binary form.
- */
-int
-eui64_aton(const char *a, struct eui64 *e)
-{
- int i;
- unsigned int o0, o1, o2, o3, o4, o5, o6, o7;
-
- /* canonical form */
- i = sscanf(a, "%x-%x-%x-%x-%x-%x-%x-%x",
- &o0, &o1, &o2, &o3, &o4, &o5, &o6, &o7);
- if (i == EUI64_LEN)
- goto good;
- /* ethernet form */
- i = sscanf(a, "%x:%x:%x:%x:%x:%x:%x:%x",
- &o0, &o1, &o2, &o3, &o4, &o5, &o6, &o7);
- if (i == EUI64_LEN)
- goto good;
- /* classic fwcontrol/dconschat form */
- i = sscanf(a, "0x%2x%2x%2x%2x%2x%2x%2x%2x",
- &o0, &o1, &o2, &o3, &o4, &o5, &o6, &o7);
- if (i == EUI64_LEN)
- goto good;
- /* MAC format (-) */
- i = sscanf(a, "%x-%x-%x-%x-%x-%x",
- &o0, &o1, &o2, &o5, &o6, &o7);
- if (i == 6) {
- o3 = 0xff;
- o4 = 0xfe;
- goto good;
- }
- /* MAC format (:) */
- i = sscanf(a, "%x:%x:%x:%x:%x:%x",
- &o0, &o1, &o2, &o5, &o6, &o7);
- if (i == 6) {
- o3 = 0xff;
- o4 = 0xfe;
- goto good;
- }
-
- return (-1);
-
-good:
- e->octet[0]=o0;
- e->octet[1]=o1;
- e->octet[2]=o2;
- e->octet[3]=o3;
- e->octet[4]=o4;
- e->octet[5]=o5;
- e->octet[6]=o6;
- e->octet[7]=o7;
-
- return (0);
-}
-
-/*
- * Convert a binary representation of an EUI-64 to an ASCII string.
- */
-int
-eui64_ntoa(const struct eui64 *id, char *a, size_t len)
-{
- int i;
-
- i = snprintf(a, len, "%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x",
- id->octet[0], id->octet[1], id->octet[2], id->octet[3],
- id->octet[4], id->octet[5], id->octet[6], id->octet[7]);
- if (i < 23 || i >= len)
- return (-1);
- return (0);
-}
-
-/*
- * Map an EUI-64 to a hostname. Use either /etc/eui64 or NIS/YP.
- */
-int
-eui64_ntohost(char *hostname, size_t len, const struct eui64 *id)
-{
- FILE *fp;
- char buf[BUFSIZ + 2];
- struct eui64 local_eui64;
- char local_host[MAXHOSTNAMELEN];
-#ifdef YP
- char *result;
- int resultlen;
- char eui64_a[24];
- char *yp_domain;
-#endif
- if ((fp = fopen(_PATH_EUI64, "r")) == NULL)
- return (1);
-
- while (fgets(buf,BUFSIZ,fp)) {
- if (buf[0] == '#')
- continue;
-#ifdef YP
- if (buf[0] == '+') {
- if (yp_get_default_domain(&yp_domain))
- continue;
- eui64_ntoa(id, eui64_a, sizeof(eui64_a));
- if (yp_match(yp_domain, "eui64.byid", eui64_a,
- strlen(eui64_a), &result, &resultlen)) {
- continue;
- }
- strncpy(buf, result, resultlen);
- buf[resultlen] = '\0';
- free(result);
- }
-#endif
- if (eui64_line(buf, &local_eui64, local_host,
- sizeof(local_host)) == 0) {
- if (bcmp(&local_eui64.octet[0],
- &id->octet[0], EUI64_LEN) == 0) {
- /* We have a match */
- strcpy(hostname, local_host);
- fclose(fp);
- return(0);
- }
- }
- }
- fclose(fp);
- return (1);
-}
-
-/*
- * Map a hostname to an EUI-64 using /etc/eui64 or NIS/YP.
- */
-int
-eui64_hostton(const char *hostname, struct eui64 *id)
-{
- FILE *fp;
- char buf[BUFSIZ + 2];
- struct eui64 local_eui64;
- char local_host[MAXHOSTNAMELEN];
-#ifdef YP
- char *result;
- int resultlen;
- char *yp_domain;
-#endif
- if ((fp = fopen(_PATH_EUI64, "r")) == NULL)
- return (1);
-
- while (fgets(buf,BUFSIZ,fp)) {
- if (buf[0] == '#')
- continue;
-#ifdef YP
- if (buf[0] == '+') {
- if (yp_get_default_domain(&yp_domain))
- continue;
- if (yp_match(yp_domain, "eui64.byname", hostname,
- strlen(hostname), &result, &resultlen)) {
- continue;
- }
- strncpy(buf, result, resultlen);
- buf[resultlen] = '\0';
- free(result);
- }
-#endif
- if (eui64_line(buf, &local_eui64, local_host,
- sizeof(local_host)) == 0) {
- if (strcmp(hostname, local_host) == 0) {
- /* We have a match */
- bcopy(&local_eui64, id, sizeof(struct eui64));
- fclose(fp);
- return(0);
- }
- }
- }
- fclose(fp);
- return (1);
-}
OpenPOWER on IntegriCloud