# ip.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_IP_H__
    00036 #define __LWIP_IP_H__
    00037
    00038 #include "lwip/debug.h"
    00039 #include "lwip/def.h"
    00040 #include "lwip/pbuf.h"
    00041 #include "lwip/ip_addr.h"
    00042
    00043 #include "lwip/err.h"
    00044
    00045 #define IP_HLEN 40
    00046
    00047 #define IP_PROTO_ICMP 58
    00048 #define IP_PROTO_UDP 17
    00049 #define IP_PROTO_UDPLITE 170
    00050 #define IP_PROTO_TCP 6
    00051
    00052 /* This is passed as the destination address to ip_output_if (not
    00053    to ip_output), meaning that an IP header already is constructed
    00054    in the pbuf. This is used when TCP retransmits. */
    00055 #ifdef IP_HDRINCL
    00056 #undef IP_HDRINCL
    00057 #endif /* IP_HDRINCL */
    00058 #define IP_HDRINCL  NULL
    00059
    00060
    00061 /* The IPv6 header. */
    00062 struct ip_hdr {
    00063 #if BYTE_ORDER == LITTLE_ENDIAN
    00064   u8_t tclass1:4, v:4;
    00065   u8_t flow1:4, tclass2:4;
    00066 #else
    00067   u8_t v:4, tclass1:4;
    00068   u8_t tclass2:8, flow1:4;
    00069 #endif
    00070   u16_t flow2;
    00071   u16_t len;                /* payload length */
    00072   u8_t nexthdr;             /* next header */
    00073   u8_t hoplim;              /* hop limit (TTL) */
    00074   struct ip_addr src, dest;          /* source and destination IP addresses */
    00075 };
    00076
    00077 void ip_init(void);
    00078
    00079 #include "lwip/netif.h"
    00080
    00081 struct netif *ip_route(struct ip_addr *dest);
    00082
    00083 void ip_input(struct pbuf *p, struct netif *inp);
    00084
    00085 /* source and destination addresses in network byte order, please */
    00086 err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest,
    00087                unsigned char ttl, unsigned char proto);
    00088
    00089 err_t ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest,
    00090                   unsigned char ttl, unsigned char proto,
    00091                   struct netif *netif);
    00092
    00093 #if IP_DEBUG
    00094 void ip_debug_print(struct pbuf *p);
    00095 #endif /* IP_DEBUG */
    00096
    00097 #endif /* __LWIP_IP_H__ */
    00098
    00099