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)20int 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)87int 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