1 /*
2  * $smu-mark$
3  * $name: getlhs.c$
4  * $author: Salvatore Sanfilippo <antirez@invece.org>$
5  * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$
6  * $license: This software is under GPL version 2 of license$
7  * $date: Fri Nov  5 11:55:47 MET 1999$
8  * $rev: 8$
9  */
10 
11 /* $Id: getlhs.c,v 1.10 2003/07/25 12:11:24 njombart Exp $ */
12 
13 #include <string.h>
14 
15 #include "hping2.h"
16 #include "globals.h"
17 
18 
19 #if (!defined OSTYPE_LINUX) || (defined FORCE_LIBPCAP)
get_linkhdr_size(char * ifname)20 int get_linkhdr_size(char *ifname)
21 {
22 	int dltype = pcap_datalink(pcapfp);
23 
24 	if (opt_debug)
25 		printf("DEBUG: dltype is %d\n", dltype);
26 
27 	switch(dltype) {
28 	case DLT_EN10MB:
29 	case DLT_IEEE802:
30 		linkhdr_size = 14;
31 		break;
32 	case DLT_SLIP:
33 	case DLT_SLIP_BSDOS:
34 		linkhdr_size = 16;
35 		break;
36 	case DLT_PPP:
37 	case DLT_NULL:
38 #ifdef DLT_PPP_SERIAL
39 	case DLT_PPP_SERIAL:
40 #endif
41 #ifdef DLT_LOOP
42 	case DLT_LOOP:
43 #endif
44 		linkhdr_size = 4;
45 		break;
46 	case DLT_PPP_BSDOS:
47 		linkhdr_size = 24;
48 		break;
49 	case DLT_FDDI:
50 		linkhdr_size = 13;
51 		break;
52 	case DLT_RAW:
53 		linkhdr_size = 0;
54 		break;
55 	case DLT_IEEE802_11:
56 		linkhdr_size = 14;
57 		break;
58 	case DLT_ATM_RFC1483:
59 #ifdef DLT_CIP
60 	case DLT_CIP:
61 #endif
62 #ifdef DLT_ATM_CLIP
63 	case DLT_ATM_CLIP:
64 #endif
65 		linkhdr_size = 8;
66 		break;
67 #ifdef DLT_C_HDLC
68 	case DLT_C_HDLC:
69 		linkhdr_size = 4;
70 		break;
71 #endif
72 #ifdef DLT_LINUX_SLL
73 	case DLT_LINUX_SLL:
74 #endif
75 #ifdef DLT_LANE8023
76 	case DLT_LANE8023:
77 #endif
78 		linkhdr_size = 16;
79 		break;
80 	default:
81 		return -1;
82 		break;
83 	}
84 	return 0;
85 }
86 #else /* Linux... */
get_linkhdr_size(char * ifname)87 int get_linkhdr_size(char *ifname)
88 {
89 
90 	if ( strstr(ifname, "ppp") ) { /* also works for ippp (ISDN) */
91 		linkhdr_size = PPPHDR_SIZE_LINUX;
92 		return 0;
93 	} else if ( strstr(ifname, "eth") ) {
94 		linkhdr_size = ETHHDR_SIZE;
95 		return 0;
96 	} else if (strstr(ifname, "ets")) {
97 		linkhdr_size = 0;
98 		return 0;
99 	} else if ( strstr(ifname, "lo") ) {
100 		linkhdr_size = LOHDR_SIZE;
101 		return 0;
102 	} else if (strstr(ifname, "atm")) {
103 		linkhdr_size = 0;
104 		return 0;
105 	} else if ( strstr(ifname, "wlan") ) {
106 		linkhdr_size = WLANHDR_SIZE;
107 		return 0;
108 	}
109 	else
110 		return -1;
111 }
112 #endif /* (!defined OSTYPE_LINUX) || (defined FORCE_LIBPCAP) */
113