X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=misc%2Fnetwork_servers%2Fvtl%2Fif.h;fp=misc%2Fnetwork_servers%2Fvtl%2Fif.h;h=03be171e7bddf9c3d22d18d5c7345533c8c9fafb;hp=0000000000000000000000000000000000000000;hb=ac93f0773f4c6cef2f2f542240695a8706037d41;hpb=c016bb46bd68474161e275a5ace086c3fb810d9f diff --git a/misc/network_servers/vtl/if.h b/misc/network_servers/vtl/if.h new file mode 100644 index 0000000..03be171 --- /dev/null +++ b/misc/network_servers/vtl/if.h @@ -0,0 +1,67 @@ +#ifndef __IF_H +#define __IF_H 1 + +#include "util.h" +#include "debug.h" +#include "raw_ethernet_packet.h" + + + +#ifdef linux +#include +#define LIBNET_ERRORBUF_SIZE 256 +#elif defined(WIN32) +#define WPCAP +#endif + +#include + +#ifdef WIN32 +#include +#endif + + +typedef struct iface { + string *name; + + pcap_t * pcap_interface; + + char mode; + +#ifdef linux + int pcap_fd; + + libnet_t * net_interface; +#elif defined(WIN32) + HANDLE pcap_event; +#endif + +} iface_t; + +#define IF_PACKET 1 +#define IF_BREAK 2 +#define IF_CONT 3 + + +#define IF_RD 0x1 +#define IF_WR 0x2 +#define IF_RW 0x3 + + +iface_t * if_connect(string if_name, char mode = IF_RW); +int if_setup_filter(iface_t * iface, string bpf_str); + +#ifdef linux +int if_get_fd(iface_t * iface); +#elif WIN32 +HANDLE if_get_event(iface_t * iface); +#endif + +int if_loop(iface_t * iface, RawEthernetPacket * pkt); +void pkt_handler(u_char * pkt, const struct pcap_pkthdr * pkt_header, const u_char * pkt_data); + +int if_write_pkt(iface_t * iface, RawEthernetPacket * pkt); +int if_read_pkt(iface_t * iface, RawEthernetPacket * pkt); + + +#endif // !__IF_H