1478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 2478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Stanford Enetfilter subroutines for tcpdump 3478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 4478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Based on the MERIT NNstat etherifrt.c and the Ultrix pcap-pf.c 5478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * subroutines. 6478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 7478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Rayan Zachariassen, CA*Net 8478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 9478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef lint 10478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic const char rcsid[] _U_ = 11478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project "@(#) $Header: /tcpdump/master/libpcap/pcap-enet.c,v 1.8 2003/11/15 23:24:02 guy Exp $"; 12478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 13478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 14478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef HAVE_CONFIG_H 15478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "config.h" 16478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 17478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 18478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <sys/types.h> 19478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <sys/time.h> 20478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <sys/file.h> 21478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <sys/ioctl.h> 22478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <sys/socket.h> 23478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 24478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <net/if.h> 25478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <pcap-bpf.h> 26478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <net/enet.h> 27478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 28478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <netinet/in.h> 29478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <netinet/if_ether.h> 30478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 31478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <stdio.h> 32478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <errno.h> 33478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 34478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "interface.h" 35478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 36478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct packet_header { 37478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef IBMRTPC 38478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct LengthWords length; 39478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct tap_header tap; 40478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* IBMRTPC */ 41478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project u_char packet[8] 42478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 43478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 44478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectextern int errno; 45478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 46478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define BUFSPACE (4*1024) 47478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 48478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Forwards */ 49478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic void efReadError(int, char *); 50478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 51478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid 52478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectreadloop(int cnt, int if_fd, struct bpf_program *fp, printfunc printit) 53478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 54478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef IBMRTPC 55478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project register struct packet_header *ph; 56478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project register u_char *bp; 57478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project register int inc; 58478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else /* !IBMRTPC */ 59478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project static struct timeval tv = { 0 }; 60478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* IBMRTPC */ 61478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project register int cc, caplen; 62478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project register struct bpf_insn *fcode = fp->bf_insns; 63478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project union { 64478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct packet_header hdr; 65478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project u_char p[BUFSPACE]; 66478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project u_short s; 67478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } buf; 68478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 69478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project while (1) { 70478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if ((cc = read(if_fd, (char *)buf.p, sizeof(buf))) < 0) 71478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project efReadError(if_fd, "reader"); 72478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 73478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef IBMRTPC 74478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* 75478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Loop through each packet. 76478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 77478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bp = buf.p; 78478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project while (cc > 0) { 79478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ph = (struct packet_header *)bp; 80478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project caplen = ph->tap.th_wirelen > snaplen ? snaplen : ph->tap 81478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project.th_wirelen ; 82478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (bpf_filter(fcode, (char *)ph->packet, 83478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ph->tap.th_wirelen, caplen)) { 84478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (cnt >= 0 && --cnt < 0) 85478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project goto out; 86478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project (*printit)((char *)ph->packet, 87478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project (struct timeval *)ph->tap.th_timestamp, 88478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ph->tap.th_wirelen, caplen); 89478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 90478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project inc = ph->length.PacketOffset; 91478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project cc -= inc; 92478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bp += inc; 93478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 94478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else /* !IBMRTPC */ 95478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project caplen = cc > snaplen ? snaplen : cc ; 96478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (bpf_filter(fcode, buf.hdr.packet, cc, caplen)) { 97478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (cnt >= 0 && --cnt < 0) 98478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project goto out; 99478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project (*printit)(buf.hdr.packet, &tv, cc, caplen); 100478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 101478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* IBMRTPC */ 102478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 103478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project out: 104478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project wrapup(if_fd); 105478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 106478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 107478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Call ONLY if read() has returned an error on packet filter */ 108478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic void 109478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source ProjectefReadError(int fid, char *msg) 110478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 111478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (errno == EINVAL) { /* read MAXINT bytes already! */ 112478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (lseek(fid, 0, 0) < 0) { 113478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project perror("tcpdump: efReadError/lseek"); 114478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit(-1); 115478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 116478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else 117478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project return; 118478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 119478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else { 120478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project (void) fprintf(stderr, "tcpdump: "); 121478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project perror(msg); 122478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit(-1); 123478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 124478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 125478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 126478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid 127478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectwrapup(int fd) 128478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 129478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef IBMRTPC 130478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct enstats es; 131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (ioctl(fd, EIOSTATS, &es) == -1) { 133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project perror("tcpdump: enet ioctl EIOSTATS error"); 134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit(-1); 135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 137478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fprintf(stderr, "%d packets queued", es.enStat_Rcnt); 138478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (es.enStat_Rdrops > 0) 139478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fprintf(stderr, ", %d dropped", es.enStat_Rdrops); 140478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (es.enStat_Reads > 0) 141478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fprintf(stderr, ", %d tcpdump %s", es.enStat_Reads, 142478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project es.enStat_Reads > 1 ? "reads" : "read"); 143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (es.enStat_MaxRead > 1) 144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project fprintf(stderr, ", %d packets in largest read", 145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project es.enStat_MaxRead); 146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project putc('\n', stderr); 147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* IBMRTPC */ 148478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project close(fd); 149478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 150478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 151478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint 152478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectinitdevice(char *device, int pflag, int *linktype) 153478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 154478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct eniocb ctl; 155478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct enfilter filter; 156478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project u_int maxwaiting; 157478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int if_fd; 158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef IBMRTPC 160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project GETENETDEVICE(0, O_RDONLY, &if_fd); 161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else /* !IBMRTPC */ 162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if_fd = open("/dev/enet", O_RDONLY, 0); 163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* IBMRTPC */ 164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (if_fd == -1) { 166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project perror("tcpdump: enet open error"); 167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project error( 168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project"your system may not be properly configured; see \"man enet(4)\""); 169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit(-1); 170478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* Get operating parameters. */ 173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (ioctl(if_fd, EIOCGETP, (char *)&ctl) == -1) { 175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project perror("tcpdump: enet ioctl EIOCGETP error"); 176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit(-1); 177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* Set operating parameters. */ 180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef IBMRTPC 182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ctl.en_rtout = 1 * ctl.en_hz; 183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ctl.en_tr_etherhead = 1; 184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ctl.en_tap_network = 1; 185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ctl.en_multi_packet = 1; 186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ctl.en_maxlen = BUFSPACE; 187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else /* !IBMRTPC */ 188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ctl.en_rtout = 64; /* randomly picked value for HZ */ 189478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* IBMRTPC */ 190478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (ioctl(if_fd, EIOCSETP, &ctl) == -1) { 191478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project perror("tcpdump: enet ioctl EIOCSETP error"); 192478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit(-1); 193478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* Flush the receive queue, since we've changed 196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project the operating parameters and we otherwise might 197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project receive data without headers. */ 198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (ioctl(if_fd, EIOCFLUSH) == -1) { 200478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project perror("tcpdump: enet ioctl EIOCFLUSH error"); 201478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit(-1); 202478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 203478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 204478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* Set the receive queue depth to its maximum. */ 205478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 206478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project maxwaiting = ctl.en_maxwaiting; 207478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (ioctl(if_fd, EIOCSETW, &maxwaiting) == -1) { 208478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project perror("tcpdump: enet ioctl EIOCSETW error"); 209478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit(-1); 210478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 211478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 212478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef IBMRTPC 213478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* Clear statistics. */ 214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (ioctl(if_fd, EIOCLRSTAT, 0) == -1) { 216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project perror("tcpdump: enet ioctl EIOCLRSTAT error"); 217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit(-1); 218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* IBMRTPC */ 220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* Set the filter (accept all packets). */ 222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project filter.enf_Priority = 3; 224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project filter.enf_FilterLen = 0; 225478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (ioctl(if_fd, EIOCSETF, &filter) == -1) { 226478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project perror("tcpdump: enet ioctl EIOCSETF error"); 227478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project exit(-1); 228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* 230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * "enetfilter" supports only ethernets. 231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *linktype = DLT_EN10MB; 233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project return(if_fd); 235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 236