/* wscontrol.h * * This header file includes #defines, structure and type definitions, * and function declarations that support the implementation of the * (undocumented) Winsock 1 call WsControl. * * The functionality of WsControl was created by observing its behaviour * in Windows 98, so there are likely to be bugs with the assumptions * that were made. * * Copyright 2000 James Hatheway * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef WSCONTROL_H_INCLUDED #define WSCONTROL_H_INCLUDED typedef unsigned char uchar; /* This doesn't seem to be in any standard headers */ #define WSCTL_SUCCESS 0 #define PROCFS_NETDEV_FILE "/proc/net/dev" /* Points to the file in the /proc fs that lists the network devices. Do we need an #ifdef LINUX for this? */ #define PROCFS_ROUTE_FILE "/proc/net/route" /* Points to the file in the /proc fs that contains the routing table */ #define WSCNTL_COUNT_INTERFACES 1 #define WSCNTL_COUNT_ROUTES 2 /* struct contains a routing table entry */ typedef struct wscntl_routeentry { unsigned long wre_intf; unsigned long wre_dest; unsigned long wre_gw; unsigned long wre_mask; unsigned long wre_metric; } wscntl_routeentry; /* WsControl Helper Functions */ int WSCNTL_GetEntryCount(const int); /* Obtains the number of network interfaces/routes */ int WSCNTL_GetInterfaceName(int, char *); /* Obtains the name of an interface */ int WSCNTL_GetTransRecvStat(int intNumber, unsigned long *transBytes, unsigned long *recvBytes); /* Obtains bytes recv'd/trans by interface */ int WSCNTL_GetRouteTable(int numRoutes, wscntl_routeentry *routeTable); /* get the routing for the interface intf */ /* * TCP/IP action codes. */ #define WSCNTL_TCPIP_QUERY_INFO 0x00000000 #define WSCNTL_TCPIP_SET_INFO 0x00000001 #define WSCNTL_TCPIP_ICMP_ECHO 0x00000002 #define WSCNTL_TCPIP_TEST 0x00000003 /* Structure of an entity ID */ typedef struct TDIEntityID { unsigned long tei_entity; unsigned long tei_instance; } TDIEntityID; /* Structure of an object ID */ typedef struct TDIObjectID { TDIEntityID toi_entity; unsigned long toi_class; unsigned long toi_type; unsigned long toi_id; } TDIObjectID; typedef struct IPSNMPInfo { unsigned long ipsi_forwarding; unsigned long ipsi_defaultttl; unsigned long ipsi_inreceives; unsigned long ipsi_inhdrerrors; unsigned long ipsi_inaddrerrors; unsigned long ipsi_forwdatagrams; unsigned long ipsi_inunknownprotos; unsigned long ipsi_indiscards; unsigned long ipsi_indelivers; unsigned long ipsi_outrequests; unsigned long ipsi_routingdiscards; unsigned long ipsi_outdiscards; unsigned long ipsi_outnoroutes; unsigned long ipsi_reasmtimeout; unsigned long ipsi_reasmreqds; unsigned long ipsi_reasmoks; unsigned long ipsi_reasmfails; unsigned long ipsi_fragoks; unsigned long ipsi_fragfails; unsigned long ipsi_fragcreates; unsigned long ipsi_numif; unsigned long ipsi_numaddr; unsigned long ipsi_numroutes; } IPSNMPInfo; typedef struct IPAddrEntry { unsigned long iae_addr; unsigned long iae_index; unsigned long iae_mask; unsigned long iae_bcastaddr; unsigned long iae_reasmsize; ushort iae_context; ushort iae_pad; } IPAddrEntry; #ifdef __NetBSD__ #undef if_type #undef if_mtu #undef if_lastchange #endif #define MAX_PHYSADDR_SIZE 8 #define MAX_IFDESCR_LEN 256 typedef struct IFEntry { unsigned long if_index; unsigned long if_type; unsigned long if_mtu; unsigned long if_speed; unsigned long if_physaddrlen; uchar if_physaddr[MAX_PHYSADDR_SIZE]; unsigned long if_adminstatus; unsigned long if_operstatus; unsigned long if_lastchange; unsigned long if_inoctets; unsigned long if_inucastpkts; unsigned long if_innucastpkts; unsigned long if_indiscards; unsigned long if_inerrors; unsigned long if_inunknownprotos; unsigned long if_outoctets; unsigned long if_outucastpkts; unsigned long if_outnucastpkts; unsigned long if_outdiscards; unsigned long if_outerrors; unsigned long if_outqlen; unsigned long if_descrlen; uchar if_descr[1]; } IFEntry; /* FIXME: real name and definition of this struct that contains * an IP route table entry is unknown */ typedef struct IPRouteEntry { unsigned long ire_addr; unsigned long ire_index; /*matches if_index in IFEntry and iae_index in IPAddrEntry */ unsigned long ire_metric; unsigned long ire_option4; unsigned long ire_option5; unsigned long ire_option6; unsigned long ire_gw; unsigned long ire_option8; unsigned long ire_option9; unsigned long ire_option10; unsigned long ire_mask; unsigned long ire_option12; } IPRouteEntry; /* Not sure what EXACTLY most of this stuff does. WsControl was implemented mainly by observing its behaviour in Win98 ************************/ #define INFO_CLASS_GENERIC 0x100 #define INFO_CLASS_PROTOCOL 0x200 #define INFO_TYPE_PROVIDER 0x100 #define ENTITY_LIST_ID 0 #define CL_NL_ENTITY 0x301 #define IF_ENTITY 0x200 #define ENTITY_TYPE_ID 1 #define IP_MIB_ADDRTABLE_ENTRY_ID 0x102 #define IP_MIB_ROUTETABLE_ENTRY_ID 0x101 /* FIXME: not real name */ /************************************************/ /* Valid values to get back from entity type ID query */ #define CO_TL_NBF 0x400 /* Entity implements NBF prot. */ #define CO_TL_SPX 0x402 /* Entity implements SPX prot. */ #define CO_TL_TCP 0x404 /* Entity implements TCP prot. */ #define CO_TL_SPP 0x406 /* Entity implements SPP prot. */ #define CL_TL_NBF 0x401 /* CL NBF protocol */ #define CL_TL_UDP 0x403 /* Entity implements UDP */ #define ER_ICMP 0x380 /* The ICMP protocol */ #define CL_NL_IPX 0x301 /* Entity implements IPX */ #define CL_NL_IP 0x303 /* Entity implements IP */ #define AT_ARP 0x280 /* Entity implements ARP */ #define AT_NULL 0x282 /* Entity does no address */ #define IF_GENERIC 0x200 /* Generic interface */ #define IF_MIB 0x202 /* Supports MIB-2 interface */ #endif /* WSCONTROL_H_INCLUDED */