1*c0b746e5SOllivier Robert /* this is a hacked version of if.h from unix to contain the stuff we need only to build named (bind) with 2*c0b746e5SOllivier Robert the minimal amount of changes... by l. kahn */ 3*c0b746e5SOllivier Robert 4*c0b746e5SOllivier Robert /* 5*c0b746e5SOllivier Robert * Copyright (c) 1982, 1986 Regents of the University of California. 6*c0b746e5SOllivier Robert * All rights reserved. The Berkeley software License Agreement 7*c0b746e5SOllivier Robert * specifies the terms and conditions for redistribution. 8*c0b746e5SOllivier Robert */ 9*c0b746e5SOllivier Robert 10*c0b746e5SOllivier Robert #ifndef _NET_IF_H 11*c0b746e5SOllivier Robert #define _NET_IF_H 12*c0b746e5SOllivier Robert 13*c0b746e5SOllivier Robert 14*c0b746e5SOllivier Robert /* #pragma ident "@(#)if.h 1.3 93/06/30 SMI" 15*c0b746e5SOllivier Robert /* if.h 1.26 90/05/29 SMI; from UCB 7.1 6/4/86 */ 16*c0b746e5SOllivier Robert 17*c0b746e5SOllivier Robert #ifdef __cplusplus 18*c0b746e5SOllivier Robert extern "C" { 19*c0b746e5SOllivier Robert #endif 20*c0b746e5SOllivier Robert 21*c0b746e5SOllivier Robert /* 22*c0b746e5SOllivier Robert * Structures defining a network interface, providing a packet 23*c0b746e5SOllivier Robert * transport mechanism (ala level 0 of the PUP protocols). 24*c0b746e5SOllivier Robert * 25*c0b746e5SOllivier Robert * Each interface accepts output datagrams of a specified maximum 26*c0b746e5SOllivier Robert * length, and provides higher level routines with input datagrams 27*c0b746e5SOllivier Robert * received from its medium. 28*c0b746e5SOllivier Robert * 29*c0b746e5SOllivier Robert * Output occurs when the routine if_output is called, with three parameters: 30*c0b746e5SOllivier Robert * (*ifp->if_output)(ifp, m, dst) 31*c0b746e5SOllivier Robert * Here m is the mbuf chain to be sent and dst is the destination address. 32*c0b746e5SOllivier Robert * The output routine encapsulates the supplied datagram if necessary, 33*c0b746e5SOllivier Robert * and then transmits it on its medium. 34*c0b746e5SOllivier Robert * 35*c0b746e5SOllivier Robert * On input, each interface unwraps the data received by it, and either 36*c0b746e5SOllivier Robert * places it on the input queue of a internetwork datagram routine 37*c0b746e5SOllivier Robert * and posts the associated software interrupt, or passes the datagram to a raw 38*c0b746e5SOllivier Robert * packet input routine. 39*c0b746e5SOllivier Robert * 40*c0b746e5SOllivier Robert * Routines exist for locating interfaces by their addresses 41*c0b746e5SOllivier Robert * or for locating a interface on a certain network, as well as more general 42*c0b746e5SOllivier Robert * routing and gateway routines maintaining information used to locate 43*c0b746e5SOllivier Robert * interfaces. These routines live in the files if.c and route.c 44*c0b746e5SOllivier Robert */ 45*c0b746e5SOllivier Robert 46*c0b746e5SOllivier Robert /* 47*c0b746e5SOllivier Robert * Structure defining a queue for a network interface. 48*c0b746e5SOllivier Robert * 49*c0b746e5SOllivier Robert * (Would like to call this struct ``if'', but C isn't PL/1.) 50*c0b746e5SOllivier Robert */ 51*c0b746e5SOllivier Robert /* 52*c0b746e5SOllivier Robert * Interface request structure used for socket 53*c0b746e5SOllivier Robert * ioctl's. All interface ioctl's must have parameter 54*c0b746e5SOllivier Robert * definitions which begin with ifr_name. The 55*c0b746e5SOllivier Robert * remainder may be interface specific. 56*c0b746e5SOllivier Robert */ 57*c0b746e5SOllivier Robert #ifdef FD_SETSIZE 58*c0b746e5SOllivier Robert #undef FD_SETSIZE 59*c0b746e5SOllivier Robert #endif 60*c0b746e5SOllivier Robert #define FD_SETSIZE 512 61*c0b746e5SOllivier Robert #include <winsock.h> 62*c0b746e5SOllivier Robert typedef char *caddr_t; 63*c0b746e5SOllivier Robert 64*c0b746e5SOllivier Robert int get_winnt_interfaces(); 65*c0b746e5SOllivier Robert 66*c0b746e5SOllivier Robert struct ifreq { 67*c0b746e5SOllivier Robert #define IFNAMSIZ 16 68*c0b746e5SOllivier Robert char ifr_name[IFNAMSIZ]; /* if name, e.g. "en0" */ 69*c0b746e5SOllivier Robert struct sockaddr ifru_addr; 70*c0b746e5SOllivier Robert char nt_mask[IFNAMSIZ]; /* new field to store mask returned from nt lookup l. kahn */ 71*c0b746e5SOllivier Robert 72*c0b746e5SOllivier Robert #define ifr_addr ifru_addr /* address */ 73*c0b746e5SOllivier Robert #define ifr_mask nt_mask /* nt mask in character form */ 74*c0b746e5SOllivier Robert 75*c0b746e5SOllivier Robert }; 76*c0b746e5SOllivier Robert 77*c0b746e5SOllivier Robert /* 78*c0b746e5SOllivier Robert * Structure used in SIOCGIFCONF request. 79*c0b746e5SOllivier Robert * Used to retrieve interface configuration 80*c0b746e5SOllivier Robert * for machine (useful for programs which 81*c0b746e5SOllivier Robert * must know all networks accessible). 82*c0b746e5SOllivier Robert */ 83*c0b746e5SOllivier Robert struct ifconf { 84*c0b746e5SOllivier Robert int ifc_len; /* size of associated buffer */ 85*c0b746e5SOllivier Robert union { 86*c0b746e5SOllivier Robert caddr_t ifcu_buf; 87*c0b746e5SOllivier Robert struct ifreq *ifcu_req; 88*c0b746e5SOllivier Robert } ifc_ifcu; 89*c0b746e5SOllivier Robert #define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */ 90*c0b746e5SOllivier Robert #define ifc_req ifc_ifcu.ifcu_req /* array of structures returned */ 91*c0b746e5SOllivier Robert }; 92*c0b746e5SOllivier Robert 93*c0b746e5SOllivier Robert #ifdef __cplusplus 94*c0b746e5SOllivier Robert } 95*c0b746e5SOllivier Robert #endif 96*c0b746e5SOllivier Robert 97*c0b746e5SOllivier Robert #endif /* _NET_IF_H */ 98*c0b746e5SOllivier Robert 99