Lines Matching +full:cable +full:- +full:modem

49 #include "pcap-int.h"
52 #include "os-proto.h"
65 struct pcap_snoop *psn = p->priv; in pcap_read_snoop()
76 if (p->break_loop) { in pcap_read_snoop()
78 * Yes - clear the flag that indicates that it in pcap_read_snoop()
79 * has, and return -2 to indicate that we were in pcap_read_snoop()
82 p->break_loop = 0; in pcap_read_snoop()
83 return (-2); in pcap_read_snoop()
85 cc = read(p->fd, (char *)p->buffer, p->bufsize); in pcap_read_snoop()
96 pcapint_fmt_errmsg_for_errno(p->errbuf, sizeof(p->errbuf), in pcap_read_snoop()
98 return (-1); in pcap_read_snoop()
100 sh = (struct snoopheader *)p->buffer; in pcap_read_snoop()
101 datalen = sh->snoop_packetlen; in pcap_read_snoop()
104 * XXX - Sigh, snoop_packetlen is a 16 bit quantity. If we in pcap_read_snoop()
108 if (cc == (p->snapshot + sizeof(struct snoopheader)) && in pcap_read_snoop()
109 (datalen < p->snapshot)) in pcap_read_snoop()
112 caplen = (datalen < p->snapshot) ? datalen : p->snapshot; in pcap_read_snoop()
113 cp = (u_char *)(sh + 1) + p->offset; /* XXX */ in pcap_read_snoop()
121 if (p->linktype == DLT_NULL && *((short *)(cp + 2)) == 0) { in pcap_read_snoop()
126 if (p->fcode.bf_insns == NULL || in pcap_read_snoop()
127 pcapint_filter(p->fcode.bf_insns, cp, datalen, caplen)) { in pcap_read_snoop()
129 ++psn->stat.ps_recv; in pcap_read_snoop()
130 h.ts.tv_sec = sh->snoop_timestamp.tv_sec; in pcap_read_snoop()
131 h.ts.tv_usec = sh->snoop_timestamp.tv_usec; in pcap_read_snoop()
146 * XXX - libnet overwrites the source address with what I in pcap_inject_snoop()
149 ret = write(p->fd, buf, size); in pcap_inject_snoop()
150 if (ret == -1) { in pcap_inject_snoop()
151 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_inject_snoop()
153 return (-1); in pcap_inject_snoop()
161 struct pcap_snoop *psn = p->priv; in pcap_stats_snoop()
167 if (ioctl(p->fd, SIOCRAWSTATS, (char *)rs) < 0) { in pcap_stats_snoop()
168 pcapint_fmt_errmsg_for_errno(p->errbuf, sizeof(p->errbuf), in pcap_stats_snoop()
170 return (-1); in pcap_stats_snoop()
182 * XXX - does this count *all* Snoop or Drain sockets, in pcap_stats_snoop()
186 psn->stat.ps_drop = in pcap_stats_snoop()
187 rs->rs_snoop.ss_ifdrops + rs->rs_snoop.ss_sbdrops + in pcap_stats_snoop()
188 rs->rs_drain.ds_ifdrops + rs->rs_drain.ds_sbdrops; in pcap_stats_snoop()
195 *ps = psn->stat; in pcap_stats_snoop()
213 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_snoop()
217 p->fd = fd; in pcap_activate_snoop()
220 (void)strncpy(sr.sr_ifname, p->opt.device, sizeof(sr.sr_ifname)); in pcap_activate_snoop()
223 * XXX - there's probably a particular bind error that in pcap_activate_snoop()
229 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_snoop()
235 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_snoop()
239 if (p->opt.buffer_size != 0) in pcap_activate_snoop()
240 v = p->opt.buffer_size; in pcap_activate_snoop()
245 * XXX hack - map device name to link layer type in pcap_activate_snoop()
247 if (strncmp("et", p->opt.device, 2) == 0 || /* Challenge 10 Mbit */ in pcap_activate_snoop()
248 strncmp("ec", p->opt.device, 2) == 0 || /* Indigo/Indy 10 Mbit, in pcap_activate_snoop()
250 strncmp("ef", p->opt.device, 2) == 0 || /* O200/2000 10/100 Mbit */ in pcap_activate_snoop()
251 strncmp("eg", p->opt.device, 2) == 0 || /* Octane/O2xxx/O3xxx Gigabit */ in pcap_activate_snoop()
252 strncmp("gfe", p->opt.device, 3) == 0 || /* GIO 100 Mbit */ in pcap_activate_snoop()
253 strncmp("fxp", p->opt.device, 3) == 0 || /* Challenge VME Enet */ in pcap_activate_snoop()
254 strncmp("ep", p->opt.device, 2) == 0 || /* Challenge 8x10 Mbit EPLEX */ in pcap_activate_snoop()
255 strncmp("vfe", p->opt.device, 3) == 0 || /* Challenge VME 100Mbit */ in pcap_activate_snoop()
256 strncmp("fa", p->opt.device, 2) == 0 || in pcap_activate_snoop()
257 strncmp("qaa", p->opt.device, 3) == 0 || in pcap_activate_snoop()
258 strncmp("cip", p->opt.device, 3) == 0 || in pcap_activate_snoop()
259 strncmp("el", p->opt.device, 2) == 0) { in pcap_activate_snoop()
260 p->linktype = DLT_EN10MB; in pcap_activate_snoop()
261 p->offset = RAW_HDRPAD(sizeof(struct ether_header)); in pcap_activate_snoop()
265 * link-layer-type list with DLT_EN10MB and DLT_DOCSIS, so in pcap_activate_snoop()
267 * capturing DOCSIS traffic that a Cisco Cable Modem in pcap_activate_snoop()
270 * DOCSIS frames out on the wire inside the low-level in pcap_activate_snoop()
273 * XXX - are there any sorts of "fake Ethernet" that have in pcap_activate_snoop()
274 * Ethernet link-layer headers but that *shouldn't offer in pcap_activate_snoop()
280 * as well; what are "cip" devices - some other ATM in pcap_activate_snoop()
283 p->dlt_list = (u_int *) malloc(sizeof(u_int) * 2); in pcap_activate_snoop()
284 if (p->dlt_list == NULL) { in pcap_activate_snoop()
285 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_snoop()
289 p->dlt_list[0] = DLT_EN10MB; in pcap_activate_snoop()
290 p->dlt_list[1] = DLT_DOCSIS; in pcap_activate_snoop()
291 p->dlt_count = 2; in pcap_activate_snoop()
292 } else if (strncmp("ipg", p->opt.device, 3) == 0 || in pcap_activate_snoop()
293 strncmp("rns", p->opt.device, 3) == 0 || /* O2/200/2000 FDDI */ in pcap_activate_snoop()
294 strncmp("xpi", p->opt.device, 3) == 0) { in pcap_activate_snoop()
295 p->linktype = DLT_FDDI; in pcap_activate_snoop()
296 p->offset = 3; /* XXX yeah? */ in pcap_activate_snoop()
298 } else if (strncmp("ppp", p->opt.device, 3) == 0) { in pcap_activate_snoop()
299 p->linktype = DLT_RAW; in pcap_activate_snoop()
301 } else if (strncmp("qfa", p->opt.device, 3) == 0) { in pcap_activate_snoop()
302 p->linktype = DLT_IP_OVER_FC; in pcap_activate_snoop()
304 } else if (strncmp("pl", p->opt.device, 2) == 0) { in pcap_activate_snoop()
305 p->linktype = DLT_RAW; in pcap_activate_snoop()
307 } else if (strncmp("lo", p->opt.device, 2) == 0) { in pcap_activate_snoop()
308 p->linktype = DLT_NULL; in pcap_activate_snoop()
311 snprintf(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_snoop()
316 if (p->opt.rfmon) { in pcap_activate_snoop()
318 * No monitor mode on Irix (no Wi-Fi devices on in pcap_activate_snoop()
332 if (p->snapshot <= 0 || p->snapshot > MAXIMUM_SNAPLEN) in pcap_activate_snoop()
333 p->snapshot = MAXIMUM_SNAPLEN; in pcap_activate_snoop()
337 * XXX - IRIX appears to give you an error if you try to set the in pcap_activate_snoop()
342 (void)strncpy(ifr.ifr_name, p->opt.device, sizeof(ifr.ifr_name)); in pcap_activate_snoop()
344 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_snoop()
351 * XXX - some versions of IRIX 6.5 define "ifr_mtu" and have an in pcap_activate_snoop()
365 if (p->snapshot > ifr.ifr_mtu + ll_hdrlen) in pcap_activate_snoop()
366 p->snapshot = ifr.ifr_mtu + ll_hdrlen; in pcap_activate_snoop()
370 * The argument to SIOCSNOOPLEN is the number of link-layer in pcap_activate_snoop()
371 * payload bytes to capture - it doesn't count link-layer in pcap_activate_snoop()
374 snooplen = p->snapshot - ll_hdrlen; in pcap_activate_snoop()
378 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_snoop()
384 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_snoop()
389 p->bufsize = 4096; /* XXX */ in pcap_activate_snoop()
390 p->buffer = malloc(p->bufsize); in pcap_activate_snoop()
391 if (p->buffer == NULL) { in pcap_activate_snoop()
392 pcapint_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE, in pcap_activate_snoop()
398 * "p->fd" is a socket, so "select()" should work on it. in pcap_activate_snoop()
400 p->selectable_fd = p->fd; in pcap_activate_snoop()
402 p->read_op = pcap_read_snoop; in pcap_activate_snoop()
403 p->inject_op = pcap_inject_snoop; in pcap_activate_snoop()
404 p->setfilter_op = pcapint_install_bpf_program; /* no kernel filtering */ in pcap_activate_snoop()
405 p->setdirection_op = NULL; /* Not implemented. */ in pcap_activate_snoop()
406 p->set_datalink_op = NULL; /* can't change data link type */ in pcap_activate_snoop()
407 p->getnonblock_op = pcapint_getnonblock_fd; in pcap_activate_snoop()
408 p->setnonblock_op = pcapint_setnonblock_fd; in pcap_activate_snoop()
409 p->stats_op = pcap_stats_snoop; in pcap_activate_snoop()
426 p->activate_op = pcap_activate_snoop; in pcapint_create_interface()
431 * XXX - there's probably a particular bind error that means "that device
445 * XXX - is there a way to find out whether an adapter has in get_if_flags()