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