Made driver compilable with both Cygwin and VC++ (and usable for platform/win32 by using logging API).
This commit is contained in:
parent
ee6180dec6
commit
274afdb55c
1 changed files with 24 additions and 15 deletions
|
@ -30,7 +30,7 @@
|
||||||
*
|
*
|
||||||
* Author: Oliver Schmidt <ol.sc@web.de>
|
* Author: Oliver Schmidt <ol.sc@web.de>
|
||||||
*
|
*
|
||||||
* $Id: wpcap.c,v 1.5 2007/04/08 20:06:56 oliverschmidt Exp $
|
* $Id: wpcap.c,v 1.6 2007/04/11 00:21:28 oliverschmidt Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
@ -41,15 +41,19 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
/* Avoid 'conflicting types' errors. */
|
/* Avoid 'conflicting types' errors. */
|
||||||
#define htonl
|
#define htonl
|
||||||
#define htons
|
#define htons
|
||||||
|
|
||||||
#include "contiki-net.h"
|
#include "contiki-net.h"
|
||||||
|
#include "sys/log.h"
|
||||||
#include "wpcap.h"
|
#include "wpcap.h"
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__
|
||||||
__attribute__((dllimport)) extern char **__argv[];
|
__attribute__((dllimport)) extern char **__argv[];
|
||||||
|
#endif
|
||||||
|
|
||||||
struct pcap;
|
struct pcap;
|
||||||
|
|
||||||
|
@ -64,13 +68,13 @@ struct pcap_if {
|
||||||
struct sockaddr *broadaddr;
|
struct sockaddr *broadaddr;
|
||||||
struct sockaddr *dstaddr;
|
struct sockaddr *dstaddr;
|
||||||
} *addresses;
|
} *addresses;
|
||||||
uint32_t flags;
|
DWORD flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pcap_pkthdr {
|
struct pcap_pkthdr {
|
||||||
struct timeval ts;
|
struct timeval ts;
|
||||||
uint32_t caplen;
|
DWORD caplen;
|
||||||
uint32_t len;
|
DWORD len;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pcap *pcap;
|
static struct pcap *pcap;
|
||||||
|
@ -101,7 +105,7 @@ init_pcap(struct in_addr addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
while(interfaces != NULL) {
|
while(interfaces != NULL) {
|
||||||
printf("init_pcap: found interface: %s\n", interfaces->description);
|
log_message("init_pcap: found interface: ", interfaces->description);
|
||||||
|
|
||||||
if(interfaces->addresses != NULL &&
|
if(interfaces->addresses != NULL &&
|
||||||
interfaces->addresses->addr != NULL &&
|
interfaces->addresses->addr != NULL &&
|
||||||
|
@ -109,7 +113,7 @@ init_pcap(struct in_addr addr)
|
||||||
|
|
||||||
struct in_addr interface_addr;
|
struct in_addr interface_addr;
|
||||||
interface_addr = ((struct sockaddr_in *)interfaces->addresses->addr)->sin_addr;
|
interface_addr = ((struct sockaddr_in *)interfaces->addresses->addr)->sin_addr;
|
||||||
printf("init_pcap: with address: %s\n", inet_ntoa(interface_addr));
|
log_message("init_pcap: with address: ", inet_ntoa(interface_addr));
|
||||||
|
|
||||||
if(interface_addr.s_addr == addr.s_addr) {
|
if(interface_addr.s_addr == addr.s_addr) {
|
||||||
break;
|
break;
|
||||||
|
@ -150,10 +154,10 @@ set_ethaddr(struct in_addr addr)
|
||||||
|
|
||||||
while(adapters != NULL) {
|
while(adapters != NULL) {
|
||||||
|
|
||||||
char description[256];
|
char buffer[256];
|
||||||
WideCharToMultiByte(CP_ACP, 0, adapters->Description, -1,
|
WideCharToMultiByte(CP_ACP, 0, adapters->Description, -1,
|
||||||
description, sizeof(description), NULL, NULL);
|
buffer, sizeof(buffer), NULL, NULL);
|
||||||
printf("set_ethaddr: found adapter: %s\n", description);
|
log_message("set_ethaddr: found adapter: ", buffer);
|
||||||
|
|
||||||
if(adapters->FirstUnicastAddress != NULL &&
|
if(adapters->FirstUnicastAddress != NULL &&
|
||||||
adapters->FirstUnicastAddress->Address.lpSockaddr != NULL &&
|
adapters->FirstUnicastAddress->Address.lpSockaddr != NULL &&
|
||||||
|
@ -161,16 +165,17 @@ set_ethaddr(struct in_addr addr)
|
||||||
|
|
||||||
struct in_addr adapter_addr;
|
struct in_addr adapter_addr;
|
||||||
adapter_addr = ((struct sockaddr_in *)adapters->FirstUnicastAddress->Address.lpSockaddr)->sin_addr;
|
adapter_addr = ((struct sockaddr_in *)adapters->FirstUnicastAddress->Address.lpSockaddr)->sin_addr;
|
||||||
printf("set_ethaddr: with address: %s\n", inet_ntoa(adapter_addr));
|
log_message("set_ethaddr: with address: ", inet_ntoa(adapter_addr));
|
||||||
|
|
||||||
if(adapter_addr.s_addr == addr.s_addr) {
|
if(adapter_addr.s_addr == addr.s_addr) {
|
||||||
if(adapters->PhysicalAddressLength != 6) {
|
if(adapters->PhysicalAddressLength != 6) {
|
||||||
error_exit("ip addr specified on cmdline does not belong to an ethernet card\n");
|
error_exit("ip addr specified on cmdline does not belong to an ethernet card\n");
|
||||||
}
|
}
|
||||||
printf("set_ethaddr: ethernetaddr: %02X-%02X-%02X-%02X-%02X-%02X\n",
|
wsprintf(buffer, "%02X-%02X-%02X-%02X-%02X-%02X",
|
||||||
adapters->PhysicalAddress[0], adapters->PhysicalAddress[1],
|
adapters->PhysicalAddress[0], adapters->PhysicalAddress[1],
|
||||||
adapters->PhysicalAddress[2], adapters->PhysicalAddress[3],
|
adapters->PhysicalAddress[2], adapters->PhysicalAddress[3],
|
||||||
adapters->PhysicalAddress[4], adapters->PhysicalAddress[5]);
|
adapters->PhysicalAddress[4], adapters->PhysicalAddress[5]);
|
||||||
|
log_message("set_ethaddr: ethernetaddr: ", buffer);
|
||||||
|
|
||||||
uip_setethaddr((*(struct uip_eth_addr *)adapters->PhysicalAddress));
|
uip_setethaddr((*(struct uip_eth_addr *)adapters->PhysicalAddress));
|
||||||
break;
|
break;
|
||||||
|
@ -190,11 +195,15 @@ wpcap_init(void)
|
||||||
struct in_addr addr;
|
struct in_addr addr;
|
||||||
HMODULE wpcap;
|
HMODULE wpcap;
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__
|
||||||
addr.s_addr = inet_addr((*__argv)[1]);
|
addr.s_addr = inet_addr((*__argv)[1]);
|
||||||
|
#else
|
||||||
|
addr.s_addr = inet_addr(__argv[1]);
|
||||||
|
#endif
|
||||||
if(addr.s_addr == INADDR_NONE) {
|
if(addr.s_addr == INADDR_NONE) {
|
||||||
error_exit("usage: <program> <ip addr of ethernet card to share>\n");
|
error_exit("usage: <program> <ip addr of ethernet card to share>\n");
|
||||||
}
|
}
|
||||||
printf("wpcap_init: cmdline address: %s\n", inet_ntoa(addr));
|
log_message("wpcap_init: cmdline address: ", inet_ntoa(addr));
|
||||||
|
|
||||||
wpcap = LoadLibrary("wpcap.dll");
|
wpcap = LoadLibrary("wpcap.dll");
|
||||||
(FARPROC)pcap_findalldevs = GetProcAddress(wpcap, "pcap_findalldevs");
|
(FARPROC)pcap_findalldevs = GetProcAddress(wpcap, "pcap_findalldevs");
|
||||||
|
|
Loading…
Reference in a new issue