netif.h

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__ */

Generated on Wed Apr 28 17:49:38 2004 for Ubixos by doxygen 1.3.3