12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * The Regents of the University of California. All rights reserved. 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that: (1) source code distributions 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * retain the above copyright notice and this paragraph in its entirety, (2) 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * distributions including binary code include the above copyright notice and 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this paragraph in its entirety in the documentation or other materials 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * provided with the distribution, and (3) all advertising materials mentioning 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * features or use of this software display the following acknowledgement: 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ``This product includes software developed by the University of California, 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the University nor the names of its contributors may be used to endorse 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * or promote products derived from this software without specific prior 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * written permission. 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Internet, ethernet, port, and protocol string to address 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * and address to string conversion routines 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ = 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "@(#) $Header: /tcpdump/master/tcpdump/addrtoname.c,v 1.108.2.9 2007/09/14 00:26:18 guy Exp $ (LBL)"; 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h" 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h> 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef USE_ETHER_NTOHOST 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_NETINET_IF_ETHER_H 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct mbuf; /* Squelch compiler warnings on some platforms for */ 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct rtentry; /* declarations in <net/if.h> */ 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <net/if.h> /* for "struct ifnet" in "struct arpcom" on Solaris */ 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <netinet/if_ether.h> 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* HAVE_NETINET_IF_ETHER_H */ 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef NETINET_ETHER_H_DECLARES_ETHER_NTOHOST 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <netinet/ether.h> 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* NETINET_ETHER_H_DECLARES_ETHER_NTOHOST */ 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if !defined(HAVE_DECL_ETHER_NTOHOST) || !HAVE_DECL_ETHER_NTOHOST 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef HAVE_STRUCT_ETHER_ADDR 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ether_addr { 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned char ether_addr_octet[6]; 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectextern int ether_ntohost(char *, const struct ether_addr *); 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* USE_ETHER_NTOHOST */ 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <pcap.h> 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <pcap-namedb.h> 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <signal.h> 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h> 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdlib.h> 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h" 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "addrtoname.h" 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "llc.h" 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "setsignal.h" 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "extract.h" 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "oui.h" 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef ETHER_ADDR_LEN 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define ETHER_ADDR_LEN 6 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * hash tables for whatever-to-name translations 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * XXX there has to be error checks against strdup(3) failure 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define HASHNAMESIZE 4096 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define BUFSIZE 128 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct hnamemem { 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t addr; 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *name; 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct hnamemem *nxt; 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct hnamemem hnametable[HASHNAMESIZE]; 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct hnamemem tporttable[HASHNAMESIZE]; 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct hnamemem uporttable[HASHNAMESIZE]; 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct hnamemem eprototable[HASHNAMESIZE]; 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct hnamemem dnaddrtable[HASHNAMESIZE]; 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct hnamemem ipxsaptable[HASHNAMESIZE]; 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if defined(INET6) && defined(WIN32) 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * fake gethostbyaddr for Win2k/XP 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * gethostbyaddr() returns incorrect value when AF_INET6 is passed 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * to 3rd argument. 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * h_name in struct hostent is only valid. 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct hostent * 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectwin32_gethostbyaddr(const char *addr, int len, int type) 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static struct hostent host; 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static char hostbuf[NI_MAXHOST]; 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char hname[NI_MAXHOST]; 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct sockaddr_in6 addr6; 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project host.h_name = hostbuf; 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project switch (type) { 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AF_INET: 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return gethostbyaddr(addr, len, type); 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project case AF_INET6: 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memset(&addr6, 0, sizeof(addr6)); 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project addr6.sin6_family = AF_INET6; 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memcpy(&addr6.sin6_addr, addr, len); 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (getnameinfo((struct sockaddr *)&addr6, sizeof(addr6), 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project hname, sizeof(hname), NULL, 0, 0)) { 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project strcpy(host.h_name, hname); 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return &host; 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project break; 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project default: 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return NULL; 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define gethostbyaddr win32_gethostbyaddr 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* INET6 & WIN32 */ 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct h6namemem { 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct in6_addr addr; 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *name; 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct h6namemem *nxt; 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct h6namemem h6nametable[HASHNAMESIZE]; 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* INET6 */ 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct enamemem { 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_short e_addr0; 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_short e_addr1; 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_short e_addr2; 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *e_name; 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_char *e_nsap; /* used only for nsaptable[] */ 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define e_bs e_nsap /* for bytestringtable */ 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct enamemem *e_nxt; 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct enamemem enametable[HASHNAMESIZE]; 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct enamemem nsaptable[HASHNAMESIZE]; 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct enamemem bytestringtable[HASHNAMESIZE]; 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct protoidmem { 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t p_oui; 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_short p_proto; 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *p_name; 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct protoidmem *p_nxt; 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct protoidmem protoidtable[HASHNAMESIZE]; 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * A faster replacement for inet_ntoa(). 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectintoa(u_int32_t addr) 1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register char *cp; 1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int byte; 1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register int n; 1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static char buf[sizeof(".xxx.xxx.xxx.xxx")]; 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NTOHL(addr); 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cp = buf + sizeof(buf); 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *--cp = '\0'; 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project n = 4; 1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project do { 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project byte = addr & 0xff; 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *--cp = byte % 10 + '0'; 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project byte /= 10; 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (byte > 0) { 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *--cp = byte % 10 + '0'; 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project byte /= 10; 1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (byte > 0) 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *--cp = byte + '0'; 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *--cp = '.'; 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project addr >>= 8; 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } while (--n > 0); 1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return cp + 1; 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic u_int32_t f_netmask; 2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic u_int32_t f_localnet; 2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Return a name for the IP address pointed to by ap. This address 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * is assumed to be in network byte order. 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * NOTE: ap is *NOT* necessarily part of the packet data (not even if 2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this is being called with the "ipaddr_string()" macro), so you 2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * *CANNOT* use the TCHECK{2}/TTEST{2} macros on it. Furthermore, 2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * even in cases where it *is* part of the packet data, the caller 2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * would still have to check for a null return value, even if it's 2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * just printing the return value with "%s" - not all versions of 2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * printf print "(null)" with "%s" and a null pointer, some of them 2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * don't check for a null pointer and crash in that case. 2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * The callers of this routine should, before handing this routine 2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * a pointer to packet data, be sure that the data is present in 2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the packet buffer. They should probably do those checks anyway, 2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * as other data at that layer might not be IP addresses, and it 2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * also needs to check whether they're present in the packet buffer. 2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectgetname(const u_char *ap) 2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct hostent *hp; 2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int32_t addr; 2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static struct hnamemem *p; /* static for longjmp() */ 2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memcpy(&addr, ap, sizeof(addr)); 2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = &hnametable[addr & (HASHNAMESIZE-1)]; 2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (; p->nxt; p = p->nxt) { 2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (p->addr == addr) 2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (p->name); 2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p->addr = addr; 2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p->nxt = newhnamemem(); 2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Print names unless: 2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * (1) -n was given. 2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * (2) Address is foreign and -f was given. (If -f was not 2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * given, f_netmask and f_localnet are 0 and the test 2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * evaluates to true) 2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!nflag && 2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (addr & f_netmask) == f_localnet) { 2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project hp = gethostbyaddr((char *)&addr, 4, AF_INET); 2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (hp) { 2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *dotp; 2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p->name = strdup(hp->h_name); 2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (Nflag) { 2562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Remove domain qualifications */ 2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dotp = strchr(p->name, '.'); 2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (dotp) 2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *dotp = '\0'; 2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (p->name); 2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p->name = strdup(intoa(addr)); 2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (p->name); 2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 2702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Return a name for the IP6 address pointed to by ap. This address 2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * is assumed to be in network byte order. 2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectgetname6(const u_char *ap) 2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct hostent *hp; 2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct in6_addr addr; 2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static struct h6namemem *p; /* static for longjmp() */ 2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register const char *cp; 2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char ntop_buf[INET6_ADDRSTRLEN]; 2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memcpy(&addr, ap, sizeof(addr)); 2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = &h6nametable[*(u_int16_t *)&addr.s6_addr[14] & (HASHNAMESIZE-1)]; 2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (; p->nxt; p = p->nxt) { 2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (memcmp(&p->addr, &addr, sizeof(addr)) == 0) 2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (p->name); 2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p->addr = addr; 2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p->nxt = newh6namemem(); 2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Do not print names if -n was given. 2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!nflag) { 2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project hp = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET6); 2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (hp) { 2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char *dotp; 2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p->name = strdup(hp->h_name); 3002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (Nflag) { 3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Remove domain qualifications */ 3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dotp = strchr(p->name, '.'); 3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (dotp) 3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *dotp = '\0'; 3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (p->name); 3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cp = inet_ntop(AF_INET6, &addr, ntop_buf, sizeof(ntop_buf)); 3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p->name = strdup(cp); 3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (p->name); 3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 3132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* INET6 */ 3142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic char hex[] = "0123456789abcdef"; 3162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Find the hash node that corresponds the ether address 'ep' */ 3192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic inline struct enamemem * 3212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectlookup_emem(const u_char *ep) 3222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 3232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int i, j, k; 3242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct enamemem *tp; 3252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project k = (ep[0] << 8) | ep[1]; 3272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = (ep[2] << 8) | ep[3]; 3282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = (ep[4] << 8) | ep[5]; 3292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = &enametable[(i ^ j) & (HASHNAMESIZE-1)]; 3312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (tp->e_nxt) 3322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_addr0 == i && 3332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr1 == j && 3342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr2 == k) 3352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return tp; 3362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 3372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = tp->e_nxt; 3382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr0 = i; 3392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr1 = j; 3402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr2 = k; 3412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_nxt = (struct enamemem *)calloc(1, sizeof(*tp)); 3422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_nxt == NULL) 3432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project error("lookup_emem: calloc"); 3442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return tp; 3462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 3472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 3492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Find the hash node that corresponds to the bytestring 'bs' 3502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * with length 'nlen' 3512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 3522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic inline struct enamemem * 3542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectlookup_bytestring(register const u_char *bs, const unsigned int nlen) 3552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 3562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct enamemem *tp; 3572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int i, j, k; 3582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nlen >= 6) { 3602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project k = (bs[0] << 8) | bs[1]; 3612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = (bs[2] << 8) | bs[3]; 3622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = (bs[4] << 8) | bs[5]; 3632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else if (nlen >= 4) { 3642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project k = (bs[0] << 8) | bs[1]; 3652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = (bs[2] << 8) | bs[3]; 3662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = 0; 3672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else 3682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = j = k = 0; 3692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = &bytestringtable[(i ^ j) & (HASHNAMESIZE-1)]; 3712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (tp->e_nxt) 3722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_addr0 == i && 3732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr1 == j && 3742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr2 == k && 3752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memcmp((const char *)bs, (const char *)(tp->e_bs), nlen) == 0) 3762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return tp; 3772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 3782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = tp->e_nxt; 3792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr0 = i; 3812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr1 = j; 3822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr2 = k; 3832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_bs = (u_char *) calloc(1, nlen + 1); 3852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memcpy(tp->e_bs, bs, nlen); 3862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_nxt = (struct enamemem *)calloc(1, sizeof(*tp)); 3872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_nxt == NULL) 3882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project error("lookup_bytestring: calloc"); 3892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return tp; 3912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 3922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Find the hash node that corresponds the NSAP 'nsap' */ 3942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 3952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic inline struct enamemem * 3962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectlookup_nsap(register const u_char *nsap) 3972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 3982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int i, j, k; 3992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned int nlen = *nsap; 4002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct enamemem *tp; 4012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *ensap = nsap + nlen - 6; 4022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nlen > 6) { 4042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project k = (ensap[0] << 8) | ensap[1]; 4052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = (ensap[2] << 8) | ensap[3]; 4062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = (ensap[4] << 8) | ensap[5]; 4072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = j = k = 0; 4102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = &nsaptable[(i ^ j) & (HASHNAMESIZE-1)]; 4122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (tp->e_nxt) 4132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_addr0 == i && 4142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr1 == j && 4152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr2 == k && 4162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_nsap[0] == nlen && 4172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memcmp((const char *)&(nsap[1]), 4182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (char *)&(tp->e_nsap[1]), nlen) == 0) 4192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return tp; 4202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = tp->e_nxt; 4222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr0 = i; 4232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr1 = j; 4242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_addr2 = k; 4252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_nsap = (u_char *)malloc(nlen + 1); 4262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_nsap == NULL) 4272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project error("lookup_nsap: malloc"); 4282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memcpy((char *)tp->e_nsap, (const char *)nsap, nlen + 1); 4292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_nxt = (struct enamemem *)calloc(1, sizeof(*tp)); 4302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_nxt == NULL) 4312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project error("lookup_nsap: calloc"); 4322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return tp; 4342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 4352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Find the hash node that corresponds the protoid 'pi'. */ 4372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic inline struct protoidmem * 4392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectlookup_protoid(const u_char *pi) 4402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 4412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int i, j; 4422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct protoidmem *tp; 4432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 5 octets won't be aligned */ 4452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = (((pi[0] << 8) + pi[1]) << 8) + pi[2]; 4462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project j = (pi[3] << 8) + pi[4]; 4472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* XXX should be endian-insensitive, but do big-endian testing XXX */ 4482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = &protoidtable[(i ^ j) & (HASHNAMESIZE-1)]; 4502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (tp->p_nxt) 4512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->p_oui == i && tp->p_proto == j) 4522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return tp; 4532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 4542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = tp->p_nxt; 4552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->p_oui = i; 4562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->p_proto = j; 4572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->p_nxt = (struct protoidmem *)calloc(1, sizeof(*tp)); 4582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->p_nxt == NULL) 4592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project error("lookup_protoid: calloc"); 4602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return tp; 4622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 4632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 4652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectetheraddr_string(register const u_char *ep) 4662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 4672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register int i; 4682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register char *cp; 4692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct enamemem *tp; 4702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int oui; 4712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char buf[BUFSIZE]; 4722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = lookup_emem(ep); 4742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_name) 4752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->e_name); 4762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef USE_ETHER_NTOHOST 4772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!nflag) { 4782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char buf2[BUFSIZE]; 4792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 4802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 4812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * We don't cast it to "const struct ether_addr *" 4822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * because some systems fail to declare the second 4832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * argument as a "const" pointer, even though they 4842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * don't modify what it points to. 4852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 4862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ether_ntohost(buf2, (struct ether_addr *)ep) == 0) { 4872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_name = strdup(buf2); 4882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->e_name); 4892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 4912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 4922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cp = buf; 4932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oui = EXTRACT_24BITS(ep); 4942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*ep >> 4 ]; 4952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*ep++ & 0xf]; 4962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 5; --i >= 0;) { 4972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = ':'; 4982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*ep >> 4 ]; 4992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*ep++ & 0xf]; 5002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (!nflag) { 5032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project snprintf(cp, BUFSIZE - (2 + 5*3), " (oui %s)", 5042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tok2str(oui_values, "Unknown", oui)); 5052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else 5062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp = '\0'; 5072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_name = strdup(buf); 5082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->e_name); 5092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 5102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 5122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectlinkaddr_string(const u_char *ep, const unsigned int len) 5132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 5142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int i; 5152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register char *cp; 5162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct enamemem *tp; 5172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (len == ETHER_ADDR_LEN) /* XXX not totally correct... */ 5192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return etheraddr_string(ep); 5202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = lookup_bytestring(ep, len); 5222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_name) 5232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->e_name); 5242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_name = cp = (char *)malloc(len*3); 5262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_name == NULL) 5272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project error("linkaddr_string: malloc"); 5282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*ep >> 4]; 5292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*ep++ & 0xf]; 5302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = len-1; i > 0 ; --i) { 5312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = ':'; 5322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*ep >> 4]; 5332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*ep++ & 0xf]; 5342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp = '\0'; 5362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->e_name); 5372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 5382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 5402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectetherproto_string(u_short port) 5412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 5422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register char *cp; 5432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct hnamemem *tp; 5442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int32_t i = port; 5452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char buf[sizeof("0000")]; 5462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (tp = &eprototable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt) 5482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->addr == i) 5492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->name); 5502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->addr = i; 5522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->nxt = newhnamemem(); 5532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cp = buf; 5552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NTOHS(port); 5562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[port >> 12 & 0xf]; 5572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[port >> 8 & 0xf]; 5582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[port >> 4 & 0xf]; 5592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[port & 0xf]; 5602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = '\0'; 5612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->name = strdup(buf); 5622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->name); 5632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 5642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 5662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectprotoid_string(register const u_char *pi) 5672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 5682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int i, j; 5692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register char *cp; 5702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct protoidmem *tp; 5712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char buf[sizeof("00:00:00:00:00")]; 5722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = lookup_protoid(pi); 5742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->p_name) 5752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return tp->p_name; 5762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cp = buf; 5782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ((j = *pi >> 4) != 0) 5792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[j]; 5802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*pi++ & 0xf]; 5812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 4; (int)--i >= 0;) { 5822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = ':'; 5832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if ((j = *pi >> 4) != 0) 5842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[j]; 5852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*pi++ & 0xf]; 5862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 5872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp = '\0'; 5882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->p_name = strdup(buf); 5892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->p_name); 5902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 5912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 5922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define ISONSAP_MAX_LENGTH 20 5932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 5942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectisonsap_string(const u_char *nsap, register u_int nsap_length) 5952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 5962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int nsap_idx; 5972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register char *cp; 5982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct enamemem *tp; 5992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nsap_length < 1 || nsap_length > ISONSAP_MAX_LENGTH) 6012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return ("isonsap_string: illegal length"); 6022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = lookup_nsap(nsap); 6042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_name) 6052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return tp->e_name; 6062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_name = cp = (char *)malloc(sizeof("xx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xx")); 6082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (cp == NULL) 6092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project error("isonsap_string: malloc"); 6102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (nsap_idx = 0; nsap_idx < nsap_length; nsap_idx++) { 6122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*nsap >> 4]; 6132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[*nsap++ & 0xf]; 6142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (((nsap_idx & 1) == 0) && 6152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (nsap_idx + 1 < nsap_length)) { 6162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = '.'; 6172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 6182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 6192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp = '\0'; 6202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->e_name); 6212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 6222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 6242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttcpport_string(u_short port) 6252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 6262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct hnamemem *tp; 6272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int32_t i = port; 6282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char buf[sizeof("00000")]; 6292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (tp = &tporttable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt) 6312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->addr == i) 6322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->name); 6332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->addr = i; 6352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->nxt = newhnamemem(); 6362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (void)snprintf(buf, sizeof(buf), "%u", i); 6382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->name = strdup(buf); 6392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->name); 6402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 6412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 6432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectudpport_string(register u_short port) 6442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 6452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct hnamemem *tp; 6462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int32_t i = port; 6472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char buf[sizeof("00000")]; 6482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (tp = &uporttable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt) 6502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->addr == i) 6512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->name); 6522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->addr = i; 6542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->nxt = newhnamemem(); 6552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (void)snprintf(buf, sizeof(buf), "%u", i); 6572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->name = strdup(buf); 6582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->name); 6592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 6602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 6622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectipxsap_string(u_short port) 6632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 6642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register char *cp; 6652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct hnamemem *tp; 6662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register u_int32_t i = port; 6672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char buf[sizeof("0000")]; 6682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (tp = &ipxsaptable[i & (HASHNAMESIZE-1)]; tp->nxt; tp = tp->nxt) 6702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->addr == i) 6712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->name); 6722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->addr = i; 6742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->nxt = newhnamemem(); 6752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project cp = buf; 6772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project NTOHS(port); 6782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[port >> 12 & 0xf]; 6792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[port >> 8 & 0xf]; 6802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[port >> 4 & 0xf]; 6812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = hex[port & 0xf]; 6822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *cp++ = '\0'; 6832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->name = strdup(buf); 6842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->name); 6852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 6862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 6882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectinit_servarray(void) 6892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 6902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct servent *sv; 6912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct hnamemem *table; 6922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register int i; 6932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char buf[sizeof("0000000000")]; 6942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 6952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while ((sv = getservent()) != NULL) { 6962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int port = ntohs(sv->s_port); 6972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project i = port & (HASHNAMESIZE-1); 6982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (strcmp(sv->s_proto, "tcp") == 0) 6992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table = &tporttable[i]; 7002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else if (strcmp(sv->s_proto, "udp") == 0) 7012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table = &uporttable[i]; 7022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 7032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project continue; 7042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (table->name) 7062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table = table->nxt; 7072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nflag) { 7082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (void)snprintf(buf, sizeof(buf), "%d", port); 7092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table->name = strdup(buf); 7102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else 7112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table->name = strdup(sv->s_name); 7122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table->addr = port; 7132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table->nxt = newhnamemem(); 7142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 7152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project endservent(); 7162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 7172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* in libpcap.a (nametoaddr.c) */ 7192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if defined(WIN32) && !defined(USE_STATIC_LIBPCAP) 7202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project__declspec(dllimport) 7212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 7222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectextern 7232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 7242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst struct eproto { 7252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *s; 7262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_short p; 7272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} eproto_db[]; 7282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 7302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectinit_eprotoarray(void) 7312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 7322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register int i; 7332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct hnamemem *table; 7342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; eproto_db[i].s; i++) { 7362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int j = htons(eproto_db[i].p) & (HASHNAMESIZE-1); 7372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table = &eprototable[j]; 7382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (table->name) 7392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table = table->nxt; 7402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table->name = eproto_db[i].s; 7412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table->addr = htons(eproto_db[i].p); 7422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table->nxt = newhnamemem(); 7432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 7442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 7452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct protoidlist { 7472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char protoid[5]; 7482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *name; 7492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} protoidlist[] = { 7502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project {{ 0x00, 0x00, 0x0c, 0x01, 0x07 }, "CiscoMLS" }, 7512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project {{ 0x00, 0x00, 0x0c, 0x20, 0x00 }, "CiscoCDP" }, 7522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project {{ 0x00, 0x00, 0x0c, 0x20, 0x01 }, "CiscoCGMP" }, 7532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project {{ 0x00, 0x00, 0x0c, 0x20, 0x03 }, "CiscoVTP" }, 7542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project {{ 0x00, 0xe0, 0x2b, 0x00, 0xbb }, "ExtremeEDP" }, 7552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project {{ 0x00, 0x00, 0x00, 0x00, 0x00 }, NULL } 7562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 7572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 7592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * SNAP proto IDs with org code 0:0:0 are actually encapsulated Ethernet 7602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * types. 7612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 7622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 7632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectinit_protoidarray(void) 7642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 7652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register int i; 7662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct protoidmem *tp; 7672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project struct protoidlist *pl; 7682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_char protoid[5]; 7692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project protoid[0] = 0; 7712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project protoid[1] = 0; 7722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project protoid[2] = 0; 7732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; eproto_db[i].s; i++) { 7742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_short etype = htons(eproto_db[i].p); 7752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project memcpy((char *)&protoid[3], (char *)&etype, 2); 7772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = lookup_protoid(protoid); 7782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->p_name = strdup(eproto_db[i].s); 7792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 7802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Hardwire some SNAP proto ID names */ 7812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (pl = protoidlist; pl->name != NULL; ++pl) { 7822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = lookup_protoid(pl->protoid); 7832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Don't override existing name */ 7842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->p_name != NULL) 7852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project continue; 7862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->p_name = pl->name; 7882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 7892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 7902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct etherlist { 7922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char addr[6]; 7932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *name; 7942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} etherlist[] = { 7952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project {{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }, "Broadcast" }, 7962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project {{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, NULL } 7972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 7982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 7992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 8002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Initialize the ethers hash table. We take two different approaches 8012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * depending on whether or not the system provides the ethers name 8022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * service. If it does, we just wire in a few names at startup, 8032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * and etheraddr_string() fills in the table on demand. If it doesn't, 8042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * then we suck in the entire /etc/ethers file at startup. The idea 8052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * is that parsing the local file will be fast, but spinning through 8062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * all the ethers entries via NIS & next_etherent might be very slow. 8072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 8082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * XXX pcap_next_etherent doesn't belong in the pcap interface, but 8092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * since the pcap module already does name-to-address translation, 8102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * it's already does most of the work for the ethernet address-to-name 8112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * translation, so we just pcap_next_etherent as a convenience. 8122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 8132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 8142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectinit_etherarray(void) 8152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 8162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct etherlist *el; 8172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct enamemem *tp; 8182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef USE_ETHER_NTOHOST 8192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char name[256]; 8202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 8212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct pcap_etherent *ep; 8222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register FILE *fp; 8232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Suck in entire ethers file */ 8252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project fp = fopen(PCAP_ETHERS_FILE, "r"); 8262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (fp != NULL) { 8272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while ((ep = pcap_next_etherent(fp)) != NULL) { 8282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = lookup_emem(ep->addr); 8292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_name = strdup(ep->name); 8302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (void)fclose(fp); 8322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 8342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Hardwire some ethernet names */ 8362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (el = etherlist; el->name != NULL; ++el) { 8372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = lookup_emem(el->addr); 8382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Don't override existing name */ 8392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->e_name != NULL) 8402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project continue; 8412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef USE_ETHER_NTOHOST 8432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 8442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Use YP/NIS version of name if available. 8452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 8462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * We don't cast it to "const struct ether_addr *" 8472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * because some systems don't modify the Ethernet 8482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * address but fail to declare the second argument 8492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * as a "const" pointer. 8502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 8512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ether_ntohost(name, (struct ether_addr *)el->addr) == 0) { 8522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_name = strdup(name); 8532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project continue; 8542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 8562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->e_name = el->name; 8572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 8582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 8592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 8602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct tok ipxsap_db[] = { 8612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0000, "Unknown" }, 8622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0001, "User" }, 8632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0002, "User Group" }, 8642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0003, "PrintQueue" }, 8652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0004, "FileServer" }, 8662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0005, "JobServer" }, 8672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0006, "Gateway" }, 8682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0007, "PrintServer" }, 8692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0008, "ArchiveQueue" }, 8702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0009, "ArchiveServer" }, 8712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x000a, "JobQueue" }, 8722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x000b, "Administration" }, 8732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x000F, "Novell TI-RPC" }, 8742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0017, "Diagnostics" }, 8752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0020, "NetBIOS" }, 8762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0021, "NAS SNA Gateway" }, 8772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0023, "NACS AsyncGateway" }, 8782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0024, "RemoteBridge/RoutingService" }, 8792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0026, "BridgeServer" }, 8802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0027, "TCP/IP Gateway" }, 8812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0028, "Point-to-point X.25 BridgeServer" }, 8822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0029, "3270 Gateway" }, 8832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x002a, "CHI Corp" }, 8842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x002c, "PC Chalkboard" }, 8852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x002d, "TimeSynchServer" }, 8862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x002e, "ARCserve5.0/PalindromeBackup" }, 8872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0045, "DI3270 Gateway" }, 8882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0047, "AdvertisingPrintServer" }, 8892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x004a, "NetBlazerModems" }, 8902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x004b, "BtrieveVAP" }, 8912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x004c, "NetwareSQL" }, 8922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x004d, "XtreeNetwork" }, 8932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0050, "BtrieveVAP4.11" }, 8942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0052, "QuickLink" }, 8952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0053, "PrintQueueUser" }, 8962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0058, "Multipoint X.25 Router" }, 8972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0060, "STLB/NLM" }, 8982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0064, "ARCserve" }, 8992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0066, "ARCserve3.0" }, 9002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0072, "WAN CopyUtility" }, 9012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x007a, "TES-NetwareVMS" }, 9022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0092, "WATCOM Debugger/EmeraldTapeBackupServer" }, 9032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0095, "DDA OBGYN" }, 9042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0098, "NetwareAccessServer" }, 9052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x009a, "Netware for VMS II/NamedPipeServer" }, 9062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x009b, "NetwareAccessServer" }, 9072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x009e, "PortableNetwareServer/SunLinkNVT" }, 9082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x00a1, "PowerchuteAPC UPS" }, 9092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x00aa, "LAWserve" }, 9102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x00ac, "CompaqIDA StatusMonitor" }, 9112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0100, "PIPE STAIL" }, 9122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0102, "LAN ProtectBindery" }, 9132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0103, "OracleDataBaseServer" }, 9142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0107, "Netware386/RSPX RemoteConsole" }, 9152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x010f, "NovellSNA Gateway" }, 9162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0111, "TestServer" }, 9172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0112, "HP PrintServer" }, 9182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0114, "CSA MUX" }, 9192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0115, "CSA LCA" }, 9202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0116, "CSA CM" }, 9212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0117, "CSA SMA" }, 9222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0118, "CSA DBA" }, 9232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0119, "CSA NMA" }, 9242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x011a, "CSA SSA" }, 9252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x011b, "CSA STATUS" }, 9262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x011e, "CSA APPC" }, 9272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0126, "SNA TEST SSA Profile" }, 9282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x012a, "CSA TRACE" }, 9292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x012b, "NetwareSAA" }, 9302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x012e, "IKARUS VirusScan" }, 9312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0130, "CommunicationsExecutive" }, 9322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0133, "NNS DomainServer/NetwareNamingServicesDomain" }, 9332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0135, "NetwareNamingServicesProfile" }, 9342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0137, "Netware386 PrintQueue/NNS PrintQueue" }, 9352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0141, "LAN SpoolServer" }, 9362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0152, "IRMALAN Gateway" }, 9372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0154, "NamedPipeServer" }, 9382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0166, "NetWareManagement" }, 9392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0168, "Intel PICKIT CommServer/Intel CAS TalkServer" }, 9402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0173, "Compaq" }, 9412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0174, "Compaq SNMP Agent" }, 9422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0175, "Compaq" }, 9432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0180, "XTreeServer/XTreeTools" }, 9442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x018A, "NASI ServicesBroadcastServer" }, 9452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01b0, "GARP Gateway" }, 9462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01b1, "Binfview" }, 9472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01bf, "IntelLanDeskManager" }, 9482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01ca, "AXTEC" }, 9492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01cb, "ShivaNetModem/E" }, 9502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01cc, "ShivaLanRover/E" }, 9512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01cd, "ShivaLanRover/T" }, 9522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01ce, "ShivaUniversal" }, 9532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01d8, "CastelleFAXPressServer" }, 9542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01da, "CastelleLANPressPrintServer" }, 9552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01dc, "CastelleFAX/Xerox7033 FaxServer/ExcelLanFax" }, 9562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01f0, "LEGATO" }, 9572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x01f5, "LEGATO" }, 9582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0233, "NMS Agent/NetwareManagementAgent" }, 9592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0237, "NMS IPX Discovery/LANternReadWriteChannel" }, 9602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0238, "NMS IP Discovery/LANternTrapAlarmChannel" }, 9612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x023a, "LANtern" }, 9622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x023c, "MAVERICK" }, 9632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x023f, "NovellSMDR" }, 9642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x024e, "NetwareConnect" }, 9652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x024f, "NASI ServerBroadcast Cisco" }, 9662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x026a, "NMS ServiceConsole" }, 9672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x026b, "TimeSynchronizationServer Netware 4.x" }, 9682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0278, "DirectoryServer Netware 4.x" }, 9692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x027b, "NetwareManagementAgent" }, 9702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0280, "Novell File and Printer Sharing Service for PC" }, 9712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0304, "NovellSAA Gateway" }, 9722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0308, "COM/VERMED" }, 9732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x030a, "GalacticommWorldgroupServer" }, 9742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x030c, "IntelNetport2/HP JetDirect/HP Quicksilver" }, 9752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0320, "AttachmateGateway" }, 9762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0327, "MicrosoftDiagnostiocs" }, 9772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0328, "WATCOM SQL Server" }, 9782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0335, "MultiTechSystems MultisynchCommServer" }, 9792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0343, "Xylogics RemoteAccessServer/LANModem" }, 9802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0355, "ArcadaBackupExec" }, 9812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0358, "MSLCD1" }, 9822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0361, "NETINELO" }, 9832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x037e, "Powerchute UPS Monitoring" }, 9842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x037f, "ViruSafeNotify" }, 9852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0386, "HP Bridge" }, 9862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0387, "HP Hub" }, 9872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0394, "NetWare SAA Gateway" }, 9882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x039b, "LotusNotes" }, 9892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x03b7, "CertusAntiVirus" }, 9902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x03c4, "ARCserve4.0" }, 9912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x03c7, "LANspool3.5" }, 9922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x03d7, "LexmarkPrinterServer" }, 9932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x03d8, "LexmarkXLE PrinterServer" }, 9942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x03dd, "BanyanENS NetwareClient" }, 9952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x03de, "GuptaSequelBaseServer/NetWareSQL" }, 9962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x03e1, "UnivelUnixware" }, 9972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x03e4, "UnivelUnixware" }, 9982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x03fc, "IntelNetport" }, 9992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x03fd, "PrintServerQueue" }, 10002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x040A, "ipnServer" }, 10012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x040D, "LVERRMAN" }, 10022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x040E, "LVLIC" }, 10032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0414, "NET Silicon (DPI)/Kyocera" }, 10042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0429, "SiteLockVirus" }, 10052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0432, "UFHELPR???" }, 10062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0433, "Synoptics281xAdvancedSNMPAgent" }, 10072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0444, "MicrosoftNT SNA Server" }, 10082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0448, "Oracle" }, 10092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x044c, "ARCserve5.01" }, 10102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0457, "CanonGP55" }, 10112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x045a, "QMS Printers" }, 10122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x045b, "DellSCSI Array" }, 10132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0491, "NetBlazerModems" }, 10142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x04ac, "OnTimeScheduler" }, 10152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x04b0, "CD-Net" }, 10162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0513, "EmulexNQA" }, 10172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0520, "SiteLockChecks" }, 10182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0529, "SiteLockChecks" }, 10192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x052d, "CitrixOS2 AppServer" }, 10202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0535, "Tektronix" }, 10212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0536, "Milan" }, 10222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x055d, "Attachmate SNA gateway" }, 10232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x056b, "IBM8235 ModemServer" }, 10242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x056c, "ShivaLanRover/E PLUS" }, 10252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x056d, "ShivaLanRover/T PLUS" }, 10262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0580, "McAfeeNetShield" }, 10272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x05B8, "NLM to workstation communication (Revelation Software)" }, 10282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x05BA, "CompatibleSystemsRouters" }, 10292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x05BE, "CheyenneHierarchicalStorageManager" }, 10302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0606, "JCWatermarkImaging" }, 10312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x060c, "AXISNetworkPrinter" }, 10322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0610, "AdaptecSCSIManagement" }, 10332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0621, "IBM AntiVirus" }, 10342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0640, "Windows95 RemoteRegistryService" }, 10352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x064e, "MicrosoftIIS" }, 10362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x067b, "Microsoft Win95/98 File and Print Sharing for NetWare" }, 10372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x067c, "Microsoft Win95/98 File and Print Sharing for NetWare" }, 10382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x076C, "Xerox" }, 10392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x079b, "ShivaLanRover/E 115" }, 10402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x079c, "ShivaLanRover/T 115" }, 10412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x07B4, "CubixWorldDesk" }, 10422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x07c2, "Quarterdeck IWare Connect V2.x NLM" }, 10432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x07c1, "Quarterdeck IWare Connect V3.x NLM" }, 10442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0810, "ELAN License Server Demo" }, 10452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0824, "ShivaLanRoverAccessSwitch/E" }, 10462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x086a, "ISSC Collector" }, 10472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x087f, "ISSC DAS AgentAIX" }, 10482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0880, "Intel Netport PRO" }, 10492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0881, "Intel Netport PRO" }, 10502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0b29, "SiteLock" }, 10512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0c29, "SiteLockApplications" }, 10522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x0c2c, "LicensingServer" }, 10532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x2101, "PerformanceTechnologyInstantInternet" }, 10542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x2380, "LAI SiteLock" }, 10552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x238c, "MeetingMaker" }, 10562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x4808, "SiteLockServer/SiteLockMetering" }, 10572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x5555, "SiteLockUser" }, 10582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x6312, "Tapeware" }, 10592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x6f00, "RabbitGateway" }, 10602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x7703, "MODEM" }, 10612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x8002, "NetPortPrinters" }, 10622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x8008, "WordPerfectNetworkVersion" }, 10632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x85BE, "Cisco EIGRP" }, 10642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x8888, "WordPerfectNetworkVersion/QuickNetworkManagement" }, 10652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x9000, "McAfeeNetShield" }, 10662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0x9604, "CSA-NT_MON" }, 10672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0xb6a8, "OceanIsleReachoutRemoteControl" }, 10682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0xf11f, "SiteLockMetering" }, 10692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0xf1ff, "SiteLock" }, 10702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0xf503, "Microsoft SQL Server" }, 10712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0xF905, "IBM TimeAndPlace" }, 10722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0xfbfb, "TopCallIII FaxServer" }, 10732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0xffff, "AnyService/Wildcard" }, 10742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, (char *)0 } 10752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 10762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic void 10782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectinit_ipxsaparray(void) 10792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 10802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register int i; 10812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct hnamemem *table; 10822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; ipxsap_db[i].s != NULL; i++) { 10842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int j = htons(ipxsap_db[i].v) & (HASHNAMESIZE-1); 10852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table = &ipxsaptable[j]; 10862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (table->name) 10872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table = table->nxt; 10882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table->name = ipxsap_db[i].s; 10892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table->addr = htons(ipxsap_db[i].v); 10902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project table->nxt = newhnamemem(); 10912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 10922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 10932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 10942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 10952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Initialize the address to name translation machinery. We map all 10962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * non-local IP addresses to numeric addresses if fflag is true (i.e., 10972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * to prevent blocking on the nameserver). localnet is the IP address 10982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * of the local network. mask is its subnet mask. 10992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 11002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectvoid 11012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectinit_addrtoname(u_int32_t localnet, u_int32_t mask) 11022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 11032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (fflag) { 11042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f_localnet = localnet; 11052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project f_netmask = mask; 11062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nflag) 11082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 11092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Simplest way to suppress names. 11102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 11112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return; 11122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project init_etherarray(); 11142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project init_servarray(); 11152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project init_eprotoarray(); 11162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project init_protoidarray(); 11172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project init_ipxsaparray(); 11182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 11192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 11212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectdnaddr_string(u_short dnaddr) 11222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 11232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct hnamemem *tp; 11242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (tp = &dnaddrtable[dnaddr & (HASHNAMESIZE-1)]; tp->nxt != 0; 11262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp = tp->nxt) 11272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tp->addr == dnaddr) 11282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (tp->name); 11292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->addr = dnaddr; 11312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->nxt = newhnamemem(); 11322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (nflag) 11332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->name = dnnum_string(dnaddr); 11342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project else 11352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tp->name = dnname_string(dnaddr); 11362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return(tp->name); 11382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 11392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Return a zero'ed hnamemem struct and cuts down on calloc() overhead */ 11412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct hnamemem * 11422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectnewhnamemem(void) 11432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 11442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct hnamemem *p; 11452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static struct hnamemem *ptr = NULL; 11462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static u_int num = 0; 11472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (num <= 0) { 11492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project num = 64; 11502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ptr = (struct hnamemem *)calloc(num, sizeof (*ptr)); 11512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ptr == NULL) 11522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project error("newhnamemem: calloc"); 11532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project --num; 11552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = ptr++; 11562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (p); 11572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 11582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef INET6 11602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Return a zero'ed h6namemem struct and cuts down on calloc() overhead */ 11612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct h6namemem * 11622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectnewh6namemem(void) 11632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 11642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project register struct h6namemem *p; 11652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static struct h6namemem *ptr = NULL; 11662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project static u_int num = 0; 11672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 11682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (num <= 0) { 11692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project num = 64; 11702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project ptr = (struct h6namemem *)calloc(num, sizeof (*ptr)); 11712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (ptr == NULL) 11722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project error("newh6namemem: calloc"); 11732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 11742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project --num; 11752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p = ptr++; 11762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (p); 11772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 11782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* INET6 */ 1179