# netif.h

Go to the documentation of this file.

    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: netif_8h-source.html 88 2016-01-12 00:11:29Z reddawg $
    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__ */