netif.h
上传用户:yyhongfa
上传日期:2013-01-18
资源大小:267k
文件大小:5k
开发平台:

C/C++

  1. /*
  2.  * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
  3.  * All rights reserved. 
  4.  * 
  5.  * Redistribution and use in source and binary forms, with or without modification, 
  6.  * are permitted provided that the following conditions are met:
  7.  *
  8.  * 1. Redistributions of source code must retain the above copyright notice,
  9.  *    this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright notice,
  11.  *    this list of conditions and the following disclaimer in the documentation
  12.  *    and/or other materials provided with the distribution.
  13.  * 3. The name of the author may not be used to endorse or promote products
  14.  *    derived from this software without specific prior written permission. 
  15.  *
  16.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
  17.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  18.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
  19.  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  20.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
  21.  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
  22.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
  23.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
  24.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
  25.  * OF SUCH DAMAGE.
  26.  *
  27.  * This file is part of the lwIP TCP/IP stack.
  28.  * 
  29.  * Author: Adam Dunkels <adam@sics.se>
  30.  *
  31.  */
  32. #ifndef __LWIP_NETIF_H__
  33. #define __LWIP_NETIF_H__
  34. #include "lwip/opt.h"
  35. #include "lwip/err.h"
  36. #include "lwip/ip_addr.h"
  37. #include "lwip/inet.h"
  38. #include "lwip/pbuf.h"
  39. #if LWIP_DHCP
  40. #  include "lwip/dhcp.h"
  41. #endif
  42. /** must be the maximum of all used hardware address lengths
  43.     across all types of interfaces in use */
  44. #define NETIF_MAX_HWADDR_LEN 6U
  45. /** TODO: define the use (where, when, whom) of netif flags */
  46. /** whether the network interface is 'up'. this is
  47.  * a software flag used to control whether this network
  48.  * interface is enabled and processes traffic.
  49.  */
  50. #define NETIF_FLAG_UP 0x1U
  51. /** if set, the netif has broadcast capability */
  52. #define NETIF_FLAG_BROADCAST 0x2U
  53. /** if set, the netif is one end of a point-to-point connection */
  54. #define NETIF_FLAG_POINTTOPOINT 0x4U
  55. /** if set, the interface is configured using DHCP */
  56. #define NETIF_FLAG_DHCP 0x08U
  57. /** if set, the interface has an active link
  58.  *  (set by the network interface driver) */
  59. #define NETIF_FLAG_LINK_UP 0x10U
  60. /** Generic data structure used for all lwIP network interfaces.
  61.  *  The following fields should be filled in by the initialization
  62.  *  function for the device driver: hwaddr_len, hwaddr[], mtu, flags */
  63. struct netif {
  64.   /** pointer to next in linked list */
  65.   struct netif *next;
  66.   /** IP address configuration in network byte order */
  67.   struct ip_addr ip_addr;
  68.   struct ip_addr netmask;
  69.   struct ip_addr gw;
  70.   /** This function is called by the network device driver
  71.    *  to pass a packet up the TCP/IP stack. */
  72.   err_t (* input)(struct pbuf *p, struct netif *inp);
  73.   /** This function is called by the IP module when it wants
  74.    *  to send a packet on the interface. This function typically
  75.    *  first resolves the hardware address, then sends the packet. */
  76.   err_t (* output)(struct netif *netif, struct pbuf *p,
  77.        struct ip_addr *ipaddr);
  78.   /** This function is called by the ARP module when it wants
  79.    *  to send a packet on the interface. This function outputs
  80.    *  the pbuf as-is on the link medium. */
  81.   err_t (* linkoutput)(struct netif *netif, struct pbuf *p);
  82.   /** This field can be set by the device driver and could point
  83.    *  to state information for the device. */
  84.   void *state;
  85. #if LWIP_DHCP
  86.   /** the DHCP client state information for this netif */
  87.   struct dhcp *dhcp;
  88. #endif
  89.   /** number of bytes used in hwaddr */
  90.   unsigned char hwaddr_len;
  91.   /** link level hardware address of this interface */
  92.   unsigned char hwaddr[NETIF_MAX_HWADDR_LEN];
  93.   /** maximum transfer unit (in bytes) */
  94.   u16_t mtu;
  95.   /** flags (see NETIF_FLAG_ above) */
  96.   u8_t flags;
  97.   /** link type */
  98.   u8_t link_type;
  99.   /** descriptive abbreviation */
  100.   char name[2];
  101.   /** number of this interface */
  102.   u8_t num;
  103. };
  104. /** The list of network interfaces. */
  105. extern struct netif *netif_list;
  106. /** The default network interface. */
  107. extern struct netif *netif_default;
  108. /* netif_init() must be called first. */
  109. void netif_init(void);
  110. struct netif *netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask,
  111.       struct ip_addr *gw,
  112.       void *state,
  113.       err_t (* init)(struct netif *netif),
  114.       err_t (* input)(struct pbuf *p, struct netif *netif));
  115. void
  116. netif_set_addr(struct netif *netif,struct ip_addr *ipaddr, struct ip_addr *netmask,
  117.     struct ip_addr *gw);
  118. void netif_remove(struct netif * netif);
  119. /* Returns a network interface given its name. The name is of the form
  120.    "et0", where the first two letters are the "name" field in the
  121.    netif structure, and the digit is in the num field in the same
  122.    structure. */
  123. struct netif *netif_find(char *name);
  124. void netif_set_default(struct netif *netif);
  125. void netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr);
  126. void netif_set_netmask(struct netif *netif, struct ip_addr *netmast);
  127. void netif_set_gw(struct netif *netif, struct ip_addr *gw);
  128. void netif_set_up(struct netif *netif);
  129. void netif_set_down(struct netif *netif);
  130. u8_t netif_is_up(struct netif *netif);
  131. #endif /* __LWIP_NETIF_H__ */