Home | History | Annotate | Download | only in missing
      1 /*
      2  * Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998
      3  *	The Regents of the University of California.  All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions
      7  * are met:
      8  * 1. Redistributions of source code must retain the above copyright
      9  *    notice, this list of conditions and the following disclaimer.
     10  * 2. Redistributions in binary form must reproduce the above copyright
     11  *    notice, this list of conditions and the following disclaimer in the
     12  *    documentation and/or other materials provided with the distribution.
     13  * 3. All advertising materials mentioning features or use of this software
     14  *    must display the following acknowledgement:
     15  *	This product includes software developed by the Computer Systems
     16  *	Engineering Group at Lawrence Berkeley Laboratory.
     17  * 4. Neither the name of the University nor of the Laboratory may be used
     18  *    to endorse or promote products derived from this software without
     19  *    specific prior written permission.
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     31  * SUCH DAMAGE.
     32  */
     33 
     34 #ifndef lint
     35 static const char rcsid[] _U_ =
     36     "@(#) $Header: /tcpdump/master/tcpdump/missing/dlnames.c,v 1.5 2003/11/18 23:09:43 guy Exp $ (LBL)";
     37 #endif
     38 
     39 #ifdef HAVE_CONFIG_H
     40 #include "config.h"
     41 #endif
     42 
     43 #include <tcpdump-stdinc.h>
     44 
     45 #include <pcap.h>
     46 #include <string.h>
     47 
     48 #include "pcap-missing.h"
     49 
     50 struct dlt_choice {
     51 	const char *name;
     52 	const char *description;
     53 	int	dlt;
     54 };
     55 
     56 #define DLT_CHOICE(code, description) { #code, description, code }
     57 #define DLT_CHOICE_SENTINEL { NULL, NULL, 0 }
     58 
     59 static struct dlt_choice dlt_choices[] = {
     60 	DLT_CHOICE(DLT_NULL, "BSD loopback"),
     61 	DLT_CHOICE(DLT_EN10MB, "Ethernet"),
     62 	DLT_CHOICE(DLT_IEEE802, "Token ring"),
     63 	DLT_CHOICE(DLT_ARCNET, "ARCNET"),
     64 	DLT_CHOICE(DLT_SLIP, "SLIP"),
     65 	DLT_CHOICE(DLT_PPP, "PPP"),
     66 	DLT_CHOICE(DLT_FDDI, "FDDI"),
     67 	DLT_CHOICE(DLT_ATM_RFC1483, "RFC 1483 IP-over-ATM"),
     68 	DLT_CHOICE(DLT_RAW, "Raw IP"),
     69 #ifdef DLT_SLIP_BSDOS
     70 	DLT_CHOICE(DLT_SLIP_BSDOS, "BSD/OS SLIP"),
     71 #endif
     72 #ifdef DLT_PPP_BSDOS
     73 	DLT_CHOICE(DLT_PPP_BSDOS, "BSD/OS PPP"),
     74 #endif
     75 #ifdef DLT_ATM_CLIP
     76 	DLT_CHOICE(DLT_ATM_CLIP, "Linux Classical IP-over-ATM"),
     77 #endif
     78 #ifdef DLT_PPP_SERIAL
     79 	DLT_CHOICE(DLT_PPP_SERIAL, "PPP over serial"),
     80 #endif
     81 #ifdef DLT_PPP_ETHER
     82 	DLT_CHOICE(DLT_PPP_ETHER, "PPPoE"),
     83 #endif
     84 #ifdef DLT_C_HDLC
     85 	DLT_CHOICE(DLT_C_HDLC, "Cisco HDLC"),
     86 #endif
     87 #ifdef DLT_IEEE802_11
     88 	DLT_CHOICE(DLT_IEEE802_11, "802.11"),
     89 #endif
     90 #ifdef DLT_FRELAY
     91 	DLT_CHOICE(DLT_FRELAY, "Frame Relay"),
     92 #endif
     93 #ifdef DLT_LOOP
     94 	DLT_CHOICE(DLT_LOOP, "OpenBSD loopback"),
     95 #endif
     96 #ifdef DLT_ENC
     97 	DLT_CHOICE(DLT_ENC, "OpenBSD encapsulated IP"),
     98 #endif
     99 #ifdef DLT_LINUX_SLL
    100 	DLT_CHOICE(DLT_LINUX_SLL, "Linux cooked"),
    101 #endif
    102 #ifdef DLT_LTALK
    103 	DLT_CHOICE(DLT_LTALK, "Localtalk"),
    104 #endif
    105 #ifdef DLT_PFLOG
    106 	DLT_CHOICE(DLT_PFLOG, "OpenBSD pflog file"),
    107 #endif
    108 #ifdef DLT_PRISM_HEADER
    109 	DLT_CHOICE(DLT_PRISM_HEADER, "802.11 plus Prism header"),
    110 #endif
    111 #ifdef DLT_IP_OVER_FC
    112 	DLT_CHOICE(DLT_IP_OVER_FC, "RFC 2625 IP-over-Fibre Channel"),
    113 #endif
    114 #ifdef DLT_SUNATM
    115 	DLT_CHOICE(DLT_SUNATM, "Sun raw ATM"),
    116 #endif
    117 #ifdef DLT_IEEE802_11_RADIO
    118 	DLT_CHOICE(DLT_IEEE802_11_RADIO, "802.11 plus radio information header"),
    119 #endif
    120 #ifdef DLT_ARCNET_LINUX
    121 	DLT_CHOICE(DLT_ARCNET_LINUX, "Linux ARCNET"),
    122 #endif
    123 #ifdef DLT_LINUX_IRDA
    124 	DLT_CHOICE(DLT_LINUX_IRDA, "Linux IrDA"),
    125 #endif
    126 #ifdef DLT_LANE8023
    127 	DLT_CHOICE(DLT_LANE8023, "Linux 802.3 LANE"),
    128 #endif
    129 #ifdef DLT_CIP
    130 	DLT_CHOICE(DLT_CIP, "Linux Classical IP-over-ATM"),
    131 #endif
    132 #ifdef DLT_HDLC
    133 	DLT_CHOICE(DLT_HDLC, "Cisco HDLC"),
    134 #endif
    135 	DLT_CHOICE_SENTINEL
    136 };
    137 
    138 #ifndef HAVE_PCAP_DATALINK_NAME_TO_VAL
    139 int
    140 pcap_datalink_name_to_val(const char *name)
    141 {
    142 	int i;
    143 
    144 	for (i = 0; dlt_choices[i].name != NULL; i++) {
    145 		if (strcasecmp(dlt_choices[i].name + sizeof("DLT_") - 1,
    146 		    name) == 0)
    147 			return (dlt_choices[i].dlt);
    148 	}
    149 	return (-1);
    150 }
    151 
    152 const char *
    153 pcap_datalink_val_to_name(int dlt)
    154 {
    155 	int i;
    156 
    157 	for (i = 0; dlt_choices[i].name != NULL; i++) {
    158 		if (dlt_choices[i].dlt == dlt)
    159 			return (dlt_choices[i].name + sizeof("DLT_") - 1);
    160 	}
    161 	return (NULL);
    162 }
    163 #endif
    164 
    165 const char *
    166 pcap_datalink_val_to_description(int dlt)
    167 {
    168 	int i;
    169 
    170 	for (i = 0; dlt_choices[i].name != NULL; i++) {
    171 		if (dlt_choices[i].dlt == dlt)
    172 			return (dlt_choices[i].description);
    173 	}
    174 	return (NULL);
    175 }
    176