00001 /* 00002 * Copyright (c) 2001, Swedish Institute of Computer Science. 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions 00007 * are met: 00008 * 1. Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * 2. Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * 3. Neither the name of the Institute nor the names of its contributors 00014 * may be used to endorse or promote products derived from this software 00015 * without specific prior written permission. 00016 * 00017 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 00018 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00019 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00020 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 00021 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00022 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00023 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00024 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00025 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00026 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00027 * SUCH DAMAGE. 00028 * 00029 * This file is part of the lwIP TCP/IP stack. 00030 * 00031 * Author: Adam Dunkels <adam@sics.se> 00032 * 00033 * $Id$ 00034 */ 00035 #ifndef __LWIP_NETIF_H__ 00036 #define __LWIP_NETIF_H__ 00037 00038 #include "net/opt.h" 00039 00040 #include "net/err.h" 00041 00042 #include "net/ipv4/ip_addr.h" 00043 #include "net/ipv4/inet.h" 00044 00045 #include "net/pbuf.h" 00046 00047 00048 struct netif { 00049 struct netif *next; 00050 uInt8 num; 00051 struct ip_addr ip_addr; 00052 struct ip_addr netmask; /* netmask in network byte order */ 00053 struct ip_addr gw; 00054 char hwaddr[6]; 00055 00056 /* This function is called by the network device driver 00057 when it wants to pass a packet to the TCP/IP stack. */ 00058 err_t (* input)(struct pbuf *p, struct netif *inp); 00059 00060 /* The following two fields should be filled in by the 00061 initialization function for the device driver. */ 00062 00063 char name[2]; 00064 /* This function is called by the IP module when it wants 00065 to send a packet on the interface. */ 00066 err_t (* output)(struct netif *netif, struct pbuf *p, struct ip_addr *ipaddr); 00067 err_t (* linkoutput)(struct netif *netif, struct pbuf *p); 00068 00069 /* This field can be set bu the device driver and could point 00070 to state information for the device. */ 00071 void *state; 00072 }; 00073 00074 /* The list of network interfaces. */ 00075 extern struct netif *netif_list; 00076 extern struct netif *netif_default; 00077 00078 00079 /* netif_init() must be called first. */ 00080 void netif_init(); 00081 00082 struct netif *netif_add(struct ip_addr *ipaddr, struct ip_addr *netmask, 00083 struct ip_addr *gw, 00084 void (* init)(struct netif *netif), 00085 err_t (* input)(struct pbuf *p, struct netif *netif)); 00086 00087 /* Returns a network interface given its name. The name is of the form 00088 "et0", where the first two letters are the "name" field in the 00089 netif structure, and the digit is in the num field in the same 00090 structure. */ 00091 struct netif *netif_find(char *name); 00092 00093 void netif_set_default(struct netif *netif); 00094 00095 void netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr); 00096 void netif_set_netmask(struct netif *netif, struct ip_addr *netmast); 00097 void netif_set_gw(struct netif *netif, struct ip_addr *gw); 00098 00099 #endif /* __LWIP_NETIF_H__ */