pcap_t * pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebuf) { pcap_t *p; short enmode; int backlog = -1; /* request the most */ struct enfilter Filter; struct endevp devparams; p = (pcap_t *)malloc(sizeof(*p)); if (p == NULL) { snprintf(ebuf, PCAP_ERRBUF_SIZE, "pcap_open_live: %s", pcap_strerror(errno)); return (0); } memset(p, 0, sizeof(*p)); /* * XXX - we assume here that "pfopen()" does not, in fact, modify * its argument, even though it takes a "char *" rather than a * "const char *" as its first argument. That appears to be * the case, at least on Digital UNIX 4.0. */ p->fd = pfopen(device, O_RDONLY); if (p->fd < 0) { snprintf(ebuf, PCAP_ERRBUF_SIZE, "pf open: %s: %s\n\ your system may not be properly configured; see the packetfilter(4) man page\n", device, pcap_strerror(errno)); goto bad; }
pcap_t * pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebuf) { pcap_t *p; short enmode; int backlog = -1; /* request the most */ struct enfilter Filter; struct endevp devparams; p = (pcap_t *)malloc(sizeof(*p)); if (p == NULL) { snprintf(ebuf, PCAP_ERRBUF_SIZE, "pcap_open_live: %s", pcap_strerror(errno)); return (0); } memset(p, 0, sizeof(*p)); /* * Initially try a read/write open (to allow the inject * method to work). If that fails due to permission * issues, fall back to read-only. This allows a * non-root user to be granted specific access to pcap * capabilities via file permissions. * * XXX - we should have an API that has a flag that * controls whether to open read-only or read-write, * so that denial of permission to send (or inability * to send, if sending packets isn't supported on * the device in question) can be indicated at open * time. * * XXX - we assume here that "pfopen()" does not, in fact, modify * its argument, even though it takes a "char *" rather than a * "const char *" as its first argument. That appears to be * the case, at least on Digital UNIX 4.0. */ p->fd = pfopen(device, O_RDWR); if (p->fd == -1 && errno == EACCES) p->fd = pfopen(device, O_RDONLY); if (p->fd < 0) { snprintf(ebuf, PCAP_ERRBUF_SIZE, "pf open: %s: %s\n\ your system may not be properly configured; see the packetfilter(4) man page\n", device, pcap_strerror(errno)); goto bad; }
static int pcap_activate_pf(pcap_t *p) { struct pcap_pf *pf = p->priv; short enmode; int backlog = -1; /* request the most */ struct enfilter Filter; struct endevp devparams; /* * Initially try a read/write open (to allow the inject * method to work). If that fails due to permission * issues, fall back to read-only. This allows a * non-root user to be granted specific access to pcap * capabilities via file permissions. * * XXX - we should have an API that has a flag that * controls whether to open read-only or read-write, * so that denial of permission to send (or inability * to send, if sending packets isn't supported on * the device in question) can be indicated at open * time. * * XXX - we assume here that "pfopen()" does not, in fact, modify * its argument, even though it takes a "char *" rather than a * "const char *" as its first argument. That appears to be * the case, at least on Digital UNIX 4.0. * * XXX - is there an error that means "no such device"? Is * there one that means "that device doesn't support pf"? */ p->fd = pfopen(p->opt.device, O_RDWR); if (p->fd == -1 && errno == EACCES) p->fd = pfopen(p->opt.device, O_RDONLY); if (p->fd < 0) { pcap_snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "pf open: %s: %s\n\ your system may not be properly configured; see the packetfilter(4) man page\n", p->opt.device, pcap_strerror(errno)); goto bad; }
static int handleread (TrapContext *ctx, struct priv_s2devstruct *pdev, uaecptr request, uae_u8 *d, int len, int cmd) { uae_u8 flags = get_byte (request + 30); uaecptr data = get_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2 + 4); uaecptr srcaddr = request + 32 + 4 + 4; uaecptr dstaddr = request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES; uae_u16 type = (d[2 * ADDR_SIZE] << 8) | d[2 * ADDR_SIZE + 1]; uae_u32 v = 0; uaecptr data2; memcpyha_safe (pdev->tempbuf, d, len); memcpyha_safe (dstaddr, d, ADDR_SIZE); memcpyha_safe (srcaddr, d + ADDR_SIZE, ADDR_SIZE); put_long (request + 32 + 4, type); if (pdev->tracks[type]) { pdev->bytesreceived += len; pdev->packetsreceived++; } flags &= ~(SANA2IOF_BCAST | SANA2IOF_MCAST); if (isbroadcast (d)) flags |= SANA2IOF_BCAST; else if (ismulticast (d)) flags |= SANA2IOF_MCAST; put_byte (request + 30, flags); data2 = pdev->tempbuf; if (!(flags & SANA2IOF_RAW)) { len -= ETH_HEADER_SIZE; data2 += ETH_HEADER_SIZE; } put_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2, len); if (pdev->packetfilter && cmd == CMD_READ && packetfilter (ctx, pdev->packetfilter, request, data2) == 0) return 0; if (!copytobuff (ctx, data2, data, len, pdev->copytobuff)) { put_long (request + 32, S2WERR_BUFF_ERROR); put_byte (request + 31, S2ERR_NO_RESOURCES); } return 1; }
pcap_t * pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf) { pcap_t *p; short enmode; int backlog = -1; /* request the most */ struct enfilter Filter; struct endevp devparams; p = (pcap_t *)malloc(sizeof(*p)); if (p == NULL) { sprintf(ebuf, "pcap_open_live: %s", pcap_strerror(errno)); return (0); } bzero((char *)p, sizeof(*p)); p->fd = pfopen(device, O_RDONLY); if (p->fd < 0) { sprintf(ebuf, "pf open: %s: %s\n\ your system may not be properly configured; see \"man packetfilter(4)\"\n", device, pcap_strerror(errno)); goto bad; }
struct libnet_link_int * libnet_open_link_interface(char *device, char *ebuf) { register struct libnet_link_int *l; short enmode; int backlog = -1; /* request the most */ struct enfilter Filter; struct endevp devparams; l = (struct libnet_link_int *)malloc(sizeof(*l)); if (l == NULL) { sprintf(ebuf, "libnet_open_link_int: %s", ll_strerror(errno)); return (0); } memset(l, 0, sizeof(*l)); l->fd = pfopen(device, O_RDWR); if (l->fd < 0) { sprintf(ebuf, "pf open: %s: %s\n\your system may not be properly configured; see \"man packetfilter(4)\"\n", device, ll_strerror(errno)); goto bad; }