home *** CD-ROM | disk | FTP | other *** search
/ Steganos Hacker Tools / SHT151.iso / programme / scanner / nmapNTsp1 / Win_2000.exe / nmapNT-src / nmapNT / NET / if.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-03-24  |  8.6 KB  |  235 lines

  1. /*
  2.  * Copyright (c) 1982, 1986, 1989, 1993
  3.  *    The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *    @(#)if.h    8.1 (Berkeley) 6/10/93
  34.  * $FreeBSD: src/sys/net/if.h,v 1.49.2.1 1999/08/29 16:28:15 peter Exp $
  35.  */
  36.  
  37. #ifndef _NET_IF_H_
  38. #define    _NET_IF_H_
  39.  
  40.  
  41. #ifdef WIN32
  42. typedef char *    caddr_t;
  43. #endif
  44.  
  45.  /*
  46.  * <net/if.h> does not depend on <sys/time.h> on most other systems.  This
  47.  * helps userland compatability.  (struct timeval ifi_lastchange)
  48.  */
  49. #ifndef KERNEL
  50. #ifndef WIN32
  51. #include <sys/time.h>
  52. #endif
  53. #endif
  54.  
  55. /*
  56.  * Structure describing information about an interface
  57.  * which may be of interest to management entities.
  58.  */
  59. struct if_data {
  60.     /* generic interface information */
  61.     u_char    ifi_type;        /* ethernet, tokenring, etc */
  62.     u_char    ifi_physical;        /* e.g., AUI, Thinnet, 10base-T, etc */
  63.     u_char    ifi_addrlen;        /* media address length */
  64.     u_char    ifi_hdrlen;        /* media header length */
  65.     u_char    ifi_recvquota;        /* polling quota for receive intrs */
  66.     u_char    ifi_xmitquota;        /* polling quota for xmit intrs */
  67.     u_long    ifi_mtu;        /* maximum transmission unit */
  68.     u_long    ifi_metric;        /* routing metric (external only) */
  69.     u_long    ifi_baudrate;        /* linespeed */
  70.     /* volatile statistics */
  71.     u_long    ifi_ipackets;        /* packets received on interface */
  72.     u_long    ifi_ierrors;        /* input errors on interface */
  73.     u_long    ifi_opackets;        /* packets sent on interface */
  74.     u_long    ifi_oerrors;        /* output errors on interface */
  75.     u_long    ifi_collisions;        /* collisions on csma interfaces */
  76.     u_long    ifi_ibytes;        /* total number of octets received */
  77.     u_long    ifi_obytes;        /* total number of octets sent */
  78.     u_long    ifi_imcasts;        /* packets received via multicast */
  79.     u_long    ifi_omcasts;        /* packets sent via multicast */
  80.     u_long    ifi_iqdrops;        /* dropped on input, this interface */
  81.     u_long    ifi_noproto;        /* destined for unsupported protocol */
  82.     u_long    ifi_recvtiming;        /* usec spent receiving when timing */
  83.     u_long    ifi_xmittiming;        /* usec spent xmitting when timing */
  84.     struct    timeval ifi_lastchange;    /* time of last administrative change */
  85. };
  86.  
  87. #define    IFF_UP        0x1        /* interface is up */
  88. #define    IFF_BROADCAST    0x2        /* broadcast address valid */
  89. #define    IFF_DEBUG    0x4        /* turn on debugging */
  90. #define    IFF_LOOPBACK    0x8        /* is a loopback net */
  91. #define    IFF_POINTOPOINT    0x10        /* interface is point-to-point link */
  92. /*#define IFF_NOTRAILERS 0x20         * obsolete: avoid use of trailers */
  93. #define    IFF_RUNNING    0x40        /* resources allocated */
  94. #define    IFF_NOARP    0x80        /* no address resolution protocol */
  95. #define    IFF_PROMISC    0x100        /* receive all packets */
  96. #define    IFF_ALLMULTI    0x200        /* receive all multicast packets */
  97. #define    IFF_OACTIVE    0x400        /* transmission in progress */
  98. #define    IFF_SIMPLEX    0x800        /* can't hear own transmissions */
  99. #define    IFF_LINK0    0x1000        /* per link layer defined bit */
  100. #define    IFF_LINK1    0x2000        /* per link layer defined bit */
  101. #define    IFF_LINK2    0x4000        /* per link layer defined bit */
  102. #define    IFF_ALTPHYS    IFF_LINK2    /* use alternate physical connection */
  103. #define    IFF_MULTICAST    0x8000        /* supports multicast */
  104.  
  105. /* flags set internally only: */
  106. #define    IFF_CANTCHANGE \
  107.     (IFF_BROADCAST|IFF_POINTOPOINT|IFF_RUNNING|IFF_OACTIVE|\
  108.         IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI)
  109.  
  110. #define    IFQ_MAXLEN    50
  111. #define    IFNET_SLOWHZ    1        /* granularity is 1 second */
  112.  
  113. /*
  114.  * Message format for use in obtaining information about interfaces
  115.  * from getkerninfo and the routing socket
  116.  */
  117. struct if_msghdr {
  118.     u_short    ifm_msglen;    /* to skip over non-understood messages */
  119.     u_char    ifm_version;    /* future binary compatability */
  120.     u_char    ifm_type;    /* message type */
  121.     int    ifm_addrs;    /* like rtm_addrs */
  122.     int    ifm_flags;    /* value of if_flags */
  123.     u_short    ifm_index;    /* index for associated ifp */
  124.     struct    if_data ifm_data;/* statistics and other data about if */
  125. };
  126.  
  127. /*
  128.  * Message format for use in obtaining information about interface addresses
  129.  * from getkerninfo and the routing socket
  130.  */
  131. struct ifa_msghdr {
  132.     u_short    ifam_msglen;    /* to skip over non-understood messages */
  133.     u_char    ifam_version;    /* future binary compatability */
  134.     u_char    ifam_type;    /* message type */
  135.     int    ifam_addrs;    /* like rtm_addrs */
  136.     int    ifam_flags;    /* value of ifa_flags */
  137.     u_short    ifam_index;    /* index for associated ifp */
  138.     int    ifam_metric;    /* value of ifa_metric */
  139. };
  140.  
  141. /*
  142.  * Message format for use in obtaining information about multicast addresses
  143.  * from the routing socket
  144.  */
  145. struct ifma_msghdr {
  146.     u_short    ifmam_msglen;    /* to skip over non-understood messages */
  147.     u_char    ifmam_version;    /* future binary compatability */
  148.     u_char    ifmam_type;    /* message type */
  149.     int    ifmam_addrs;    /* like rtm_addrs */
  150.     int    ifmam_flags;    /* value of ifa_flags */
  151.     u_short    ifmam_index;    /* index for associated ifp */
  152. };
  153.  
  154. /*
  155.  * Interface request structure used for socket
  156.  * ioctl's.  All interface ioctl's must have parameter
  157.  * definitions which begin with ifr_name.  The
  158.  * remainder may be interface specific.
  159.  */
  160. struct    ifreq {
  161. #define    IFNAMSIZ    16
  162.     char    ifr_name[IFNAMSIZ];        /* if name, e.g. "en0" */
  163.     union {
  164.         struct    sockaddr ifru_addr;
  165.         struct    sockaddr ifru_dstaddr;
  166.         struct    sockaddr ifru_broadaddr;
  167.         short    ifru_flags;
  168.         int    ifru_metric;
  169.         int    ifru_mtu;
  170.         int    ifru_phys;
  171.         int    ifru_media;
  172.         caddr_t    ifru_data;
  173.     } ifr_ifru;
  174. #define    ifr_addr    ifr_ifru.ifru_addr    /* address */
  175. #define    ifr_dstaddr    ifr_ifru.ifru_dstaddr    /* other end of p-to-p link */
  176. #define    ifr_broadaddr    ifr_ifru.ifru_broadaddr    /* broadcast address */
  177. #define    ifr_flags    ifr_ifru.ifru_flags    /* flags */
  178. #define    ifr_metric    ifr_ifru.ifru_metric    /* metric */
  179. #define    ifr_mtu        ifr_ifru.ifru_mtu    /* mtu */
  180. #define ifr_phys    ifr_ifru.ifru_phys    /* physical wire */
  181. #define ifr_media    ifr_ifru.ifru_media    /* physical media */
  182. #define    ifr_data    ifr_ifru.ifru_data    /* for use by interface */
  183. };
  184.  
  185. #define    _SIZEOF_ADDR_IFREQ(ifr) \
  186.     ((ifr).ifr_addr.sa_len > sizeof(struct sockaddr) ? \
  187.      (sizeof(struct ifreq) - sizeof(struct sockaddr) + \
  188.       (ifr).ifr_addr.sa_len) : sizeof(struct ifreq))
  189.  
  190. struct ifaliasreq {
  191.     char    ifra_name[IFNAMSIZ];        /* if name, e.g. "en0" */
  192.     struct    sockaddr ifra_addr;
  193.     struct    sockaddr ifra_broadaddr;
  194.     struct    sockaddr ifra_mask;
  195. };
  196.  
  197. struct ifmediareq {
  198.     char    ifm_name[IFNAMSIZ];    /* if name, e.g. "en0" */
  199.     int    ifm_current;        /* current media options */
  200.     int    ifm_mask;        /* don't care mask */
  201.     int    ifm_status;        /* media status */
  202.     int    ifm_active;        /* active options */
  203.     int    ifm_count;        /* # entries in ifm_ulist array */
  204.     int    *ifm_ulist;        /* media words */
  205. };
  206. /*
  207.  * Structure used in SIOCGIFCONF request.
  208.  * Used to retrieve interface configuration
  209.  * for machine (useful for programs which
  210.  * must know all networks accessible).
  211.  */
  212. struct    ifconf {
  213.     int    ifc_len;        /* size of associated buffer */
  214.     union {
  215.         caddr_t    ifcu_buf;
  216.         struct    ifreq *ifcu_req;
  217.     } ifc_ifcu;
  218. #define    ifc_buf    ifc_ifcu.ifcu_buf    /* buffer address */
  219. #define    ifc_req    ifc_ifcu.ifcu_req    /* array of structures returned */
  220. };
  221.  
  222. #ifdef KERNEL
  223. #ifdef MALLOC_DECLARE
  224. MALLOC_DECLARE(M_IFADDR);
  225. MALLOC_DECLARE(M_IFMADDR);
  226. #endif
  227. #endif
  228.  
  229. /* XXX - this should go away soon */
  230. #ifdef KERNEL
  231. #include <net/if_var.h>
  232. #endif
  233.  
  234. #endif /* !_NET_IF_H_ */
  235.