12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998 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 the following conditions 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * are met: 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer. 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * documentation and/or other materials provided with the distribution. 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 3. All advertising materials mentioning features or use of this software 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * must display the following acknowledgement: 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This product includes software developed by the Computer Systems 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Engineering Group at Lawrence Berkeley Laboratory. 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 4. Neither the name of the University nor of the Laboratory may be used 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * to endorse or promote products derived from this software without 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * specific prior written permission. 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * SUCH DAMAGE. 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ = 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "@(#) $Header: /tcpdump/master/tcpdump/missing/dlnames.c,v 1.5 2003/11/18 23:09:43 guy Exp $ (LBL)"; 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h" 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h> 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <pcap.h> 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h> 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "pcap-missing.h" 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct dlt_choice { 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *name; 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const char *description; 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int dlt; 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DLT_CHOICE(code, description) { #code, description, code } 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define DLT_CHOICE_SENTINEL { NULL, NULL, 0 } 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct dlt_choice dlt_choices[] = { 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_NULL, "BSD loopback"), 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_EN10MB, "Ethernet"), 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_IEEE802, "Token ring"), 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_ARCNET, "ARCNET"), 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_SLIP, "SLIP"), 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_PPP, "PPP"), 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_FDDI, "FDDI"), 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_ATM_RFC1483, "RFC 1483 IP-over-ATM"), 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_RAW, "Raw IP"), 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_SLIP_BSDOS 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_SLIP_BSDOS, "BSD/OS SLIP"), 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_PPP_BSDOS 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_PPP_BSDOS, "BSD/OS PPP"), 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_ATM_CLIP 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_ATM_CLIP, "Linux Classical IP-over-ATM"), 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_PPP_SERIAL 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_PPP_SERIAL, "PPP over serial"), 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_PPP_ETHER 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_PPP_ETHER, "PPPoE"), 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_C_HDLC 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_C_HDLC, "Cisco HDLC"), 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_IEEE802_11 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_IEEE802_11, "802.11"), 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_FRELAY 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_FRELAY, "Frame Relay"), 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_LOOP 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_LOOP, "OpenBSD loopback"), 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_ENC 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_ENC, "OpenBSD encapsulated IP"), 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_LINUX_SLL 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_LINUX_SLL, "Linux cooked"), 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_LTALK 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_LTALK, "Localtalk"), 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_PFLOG 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_PFLOG, "OpenBSD pflog file"), 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_PRISM_HEADER 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_PRISM_HEADER, "802.11 plus Prism header"), 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_IP_OVER_FC 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_IP_OVER_FC, "RFC 2625 IP-over-Fibre Channel"), 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_SUNATM 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_SUNATM, "Sun raw ATM"), 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_IEEE802_11_RADIO 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_IEEE802_11_RADIO, "802.11 plus radio information header"), 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_ARCNET_LINUX 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_ARCNET_LINUX, "Linux ARCNET"), 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_LINUX_IRDA 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_LINUX_IRDA, "Linux IrDA"), 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_LANE8023 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_LANE8023, "Linux 802.3 LANE"), 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_CIP 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_CIP, "Linux Classical IP-over-ATM"), 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef DLT_HDLC 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE(DLT_HDLC, "Cisco HDLC"), 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project DLT_CHOICE_SENTINEL 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef HAVE_PCAP_DATALINK_NAME_TO_VAL 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectpcap_datalink_name_to_val(const char *name) 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; dlt_choices[i].name != NULL; i++) { 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (strcasecmp(dlt_choices[i].name + sizeof("DLT_") - 1, 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project name) == 0) 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (dlt_choices[i].dlt); 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (-1); 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectpcap_datalink_val_to_name(int dlt) 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; dlt_choices[i].name != NULL; i++) { 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (dlt_choices[i].dlt == dlt) 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (dlt_choices[i].name + sizeof("DLT_") - 1); 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (NULL); 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectconst char * 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectpcap_datalink_val_to_description(int dlt) 1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project int i; 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (i = 0; dlt_choices[i].name != NULL; i++) { 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (dlt_choices[i].dlt == dlt) 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (dlt_choices[i].description); 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (NULL); 1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 176