mirror of https://github.com/jeelabs/esp-link.git
parent
7df9b2bcdb
commit
e56fdc4d6a
@ -1,117 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001, Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
* |
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the Institute nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __ARCH_CC_H__ |
||||
#define __ARCH_CC_H__ |
||||
|
||||
//#include <string.h>
|
||||
#include "c_types.h" |
||||
#include "ets_sys.h" |
||||
#include "osapi.h" |
||||
#define EFAULT 14 |
||||
|
||||
//#define LWIP_PROVIDE_ERRNO
|
||||
|
||||
#if (1) |
||||
#define BYTE_ORDER LITTLE_ENDIAN |
||||
#else |
||||
#define BYTE_ORDER BIG_ENDIAN |
||||
#endif |
||||
|
||||
|
||||
typedef unsigned char u8_t; |
||||
typedef signed char s8_t; |
||||
typedef unsigned short u16_t; |
||||
typedef signed short s16_t; |
||||
typedef unsigned long u32_t; |
||||
typedef signed long s32_t; |
||||
typedef unsigned long mem_ptr_t; |
||||
|
||||
#define S16_F "d" |
||||
#define U16_F "d" |
||||
#define X16_F "x" |
||||
|
||||
#define S32_F "d" |
||||
#define U32_F "d" |
||||
#define X32_F "x" |
||||
|
||||
|
||||
|
||||
//#define PACK_STRUCT_FIELD(x) x __attribute__((packed))
|
||||
#define PACK_STRUCT_FIELD(x) x |
||||
#define PACK_STRUCT_STRUCT __attribute__((packed)) |
||||
#define PACK_STRUCT_BEGIN |
||||
#define PACK_STRUCT_END |
||||
|
||||
//#define LWIP_DEBUG
|
||||
|
||||
#ifdef LWIP_DEBUG |
||||
#define LWIP_PLATFORM_DIAG(x) os_printf x |
||||
#define LWIP_PLATFORM_ASSERT(x) ETS_ASSERT(x) |
||||
#else |
||||
#define LWIP_PLATFORM_DIAG(x) |
||||
#define LWIP_PLATFORM_ASSERT(x) |
||||
#endif |
||||
|
||||
#define SYS_ARCH_DECL_PROTECT(x) |
||||
#define SYS_ARCH_PROTECT(x) |
||||
#define SYS_ARCH_UNPROTECT(x) |
||||
|
||||
#define LWIP_PLATFORM_BYTESWAP 1 |
||||
#define LWIP_PLATFORM_HTONS(_n) ((u16_t)((((_n) & 0xff) << 8) | (((_n) >> 8) & 0xff))) |
||||
#define LWIP_PLATFORM_HTONL(_n) ((u32_t)( (((_n) & 0xff) << 24) | (((_n) & 0xff00) << 8) | (((_n) >> 8) & 0xff00) | (((_n) >> 24) & 0xff) )) |
||||
|
||||
#if LWIP_RAW |
||||
extern u8_t memp_memory_RAW_PCB_base[]; |
||||
#endif /* LWIP_RAW */ |
||||
|
||||
#if LWIP_UDP |
||||
extern u8_t memp_memory_UDP_PCB_base[]; |
||||
#endif /* LWIP_UDP */ |
||||
|
||||
#if LWIP_TCP |
||||
extern u8_t memp_memory_TCP_PCB_base[]; |
||||
extern u8_t memp_memory_TCP_PCB_LISTEN_base[]; |
||||
extern u8_t memp_memory_TCP_SEG_base[] SHMEM_ATTR; |
||||
#endif /* LWIP_TCP */ |
||||
|
||||
#if (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS)) /* LWIP_TIMERS */ |
||||
extern u8_t memp_memory_SYS_TIMEOUT_base[]; |
||||
#endif /* LWIP_TIMERS */ |
||||
|
||||
extern u8_t memp_memory_PBUF_base[]; |
||||
extern u8_t memp_memory_PBUF_POOL_base[]; |
||||
|
||||
|
||||
|
||||
#endif /* __ARCH_CC_H__ */ |
@ -1,40 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001, Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
* |
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the Institute nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __PERF_H__ |
||||
#define __PERF_H__ |
||||
|
||||
#define PERF_START /* null definition */ |
||||
#define PERF_STOP(x) /* null definition */ |
||||
|
||||
#endif /* __PERF_H__ */ |
@ -1,13 +0,0 @@ |
||||
#ifndef ESPMISSINGINCLUDES_IP_H |
||||
#define ESPMISSINGINCLUDES_IP_H |
||||
|
||||
//Missing function prototypes in include folders. Gcc will warn on these if we don't define 'em anywhere.
|
||||
//MOST OF THESE ARE GUESSED! but they seem to swork and shut up the compiler.
|
||||
|
||||
struct station_info *wifi_softap_get_station_info(); |
||||
bool wifi_softap_set_station_info(uint8_t *addr, struct ip_addr *adr); |
||||
int igmp_leavegroup(ip_addr_t *host_ip, ip_addr_t *multicast_ip); |
||||
int igmp_joingroup(ip_addr_t *host_ip, ip_addr_t *multicast_ip); |
||||
void system_station_got_ip_set(ip_addr_t * ip_addr, ip_addr_t *sn_mask, ip_addr_t *gw_addr); |
||||
bool wifi_get_ip_info(uint8 if_index, struct ip_info *info); |
||||
#endif |
@ -1,2 +0,0 @@ |
||||
//Dummy file to keep the file in the SDK from b0rking things up
|
||||
#include "lwip/ip_addr.h" |
@ -1,284 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_API_H__ |
||||
#define __LWIP_API_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include <stddef.h> /* for size_t */ |
||||
|
||||
#include "lwip/netbuf.h" |
||||
#include "lwip/sys.h" |
||||
#include "lwip/ip_addr.h" |
||||
#include "lwip/err.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Throughout this file, IP addresses and port numbers are expected to be in
|
||||
* the same byte order as in the corresponding pcb. |
||||
*/ |
||||
|
||||
/* Flags for netconn_write (u8_t) */ |
||||
#define NETCONN_NOFLAG 0x00 |
||||
#define NETCONN_NOCOPY 0x00 /* Only for source code compatibility */ |
||||
#define NETCONN_COPY 0x01 |
||||
#define NETCONN_MORE 0x02 |
||||
#define NETCONN_DONTBLOCK 0x04 |
||||
|
||||
/* Flags for struct netconn.flags (u8_t) */ |
||||
/** TCP: when data passed to netconn_write doesn't fit into the send buffer,
|
||||
this temporarily stores whether to wake up the original application task |
||||
if data couldn't be sent in the first try. */ |
||||
#define NETCONN_FLAG_WRITE_DELAYED 0x01 |
||||
/** Should this netconn avoid blocking? */ |
||||
#define NETCONN_FLAG_NON_BLOCKING 0x02 |
||||
/** Was the last connect action a non-blocking one? */ |
||||
#define NETCONN_FLAG_IN_NONBLOCKING_CONNECT 0x04 |
||||
/** If this is set, a TCP netconn must call netconn_recved() to update
|
||||
the TCP receive window (done automatically if not set). */ |
||||
#define NETCONN_FLAG_NO_AUTO_RECVED 0x08 |
||||
/** If a nonblocking write has been rejected before, poll_tcp needs to
|
||||
check if the netconn is writable again */ |
||||
#define NETCONN_FLAG_CHECK_WRITESPACE 0x10 |
||||
|
||||
|
||||
/* Helpers to process several netconn_types by the same code */ |
||||
#define NETCONNTYPE_GROUP(t) (t&0xF0) |
||||
#define NETCONNTYPE_DATAGRAM(t) (t&0xE0) |
||||
|
||||
/** Protocol family and type of the netconn */ |
||||
enum netconn_type { |
||||
NETCONN_INVALID = 0, |
||||
/* NETCONN_TCP Group */ |
||||
NETCONN_TCP = 0x10, |
||||
/* NETCONN_UDP Group */ |
||||
NETCONN_UDP = 0x20, |
||||
NETCONN_UDPLITE = 0x21, |
||||
NETCONN_UDPNOCHKSUM= 0x22, |
||||
/* NETCONN_RAW Group */ |
||||
NETCONN_RAW = 0x40 |
||||
}; |
||||
|
||||
/** Current state of the netconn. Non-TCP netconns are always
|
||||
* in state NETCONN_NONE! */ |
||||
enum netconn_state { |
||||
NETCONN_NONE, |
||||
NETCONN_WRITE, |
||||
NETCONN_LISTEN, |
||||
NETCONN_CONNECT, |
||||
NETCONN_CLOSE |
||||
}; |
||||
|
||||
/** Use to inform the callback function about changes */ |
||||
enum netconn_evt { |
||||
NETCONN_EVT_RCVPLUS, |
||||
NETCONN_EVT_RCVMINUS, |
||||
NETCONN_EVT_SENDPLUS, |
||||
NETCONN_EVT_SENDMINUS, |
||||
NETCONN_EVT_ERROR |
||||
}; |
||||
|
||||
#if LWIP_IGMP |
||||
/** Used for netconn_join_leave_group() */ |
||||
enum netconn_igmp { |
||||
NETCONN_JOIN, |
||||
NETCONN_LEAVE |
||||
}; |
||||
#endif /* LWIP_IGMP */ |
||||
|
||||
/* forward-declare some structs to avoid to include their headers */ |
||||
struct ip_pcb; |
||||
struct tcp_pcb; |
||||
struct udp_pcb; |
||||
struct raw_pcb; |
||||
struct netconn; |
||||
struct api_msg_msg; |
||||
|
||||
/** A callback prototype to inform about events for a netconn */ |
||||
typedef void (* netconn_callback)(struct netconn *, enum netconn_evt, u16_t len); |
||||
|
||||
/** A netconn descriptor */ |
||||
struct netconn { |
||||
/** type of the netconn (TCP, UDP or RAW) */ |
||||
enum netconn_type type; |
||||
/** current state of the netconn */ |
||||
enum netconn_state state; |
||||
/** the lwIP internal protocol control block */ |
||||
union { |
||||
struct ip_pcb *ip; |
||||
struct tcp_pcb *tcp; |
||||
struct udp_pcb *udp; |
||||
struct raw_pcb *raw; |
||||
} pcb; |
||||
/** the last error this netconn had */ |
||||
err_t last_err; |
||||
/** sem that is used to synchroneously execute functions in the core context */ |
||||
sys_sem_t op_completed; |
||||
/** mbox where received packets are stored until they are fetched
|
||||
by the netconn application thread (can grow quite big) */ |
||||
sys_mbox_t recvmbox; |
||||
#if LWIP_TCP |
||||
/** mbox where new connections are stored until processed
|
||||
by the application thread */ |
||||
sys_mbox_t acceptmbox; |
||||
#endif /* LWIP_TCP */ |
||||
/** only used for socket layer */ |
||||
#if LWIP_SOCKET |
||||
int socket; |
||||
#endif /* LWIP_SOCKET */ |
||||
#if LWIP_SO_RCVTIMEO |
||||
/** timeout to wait for new data to be received
|
||||
(or connections to arrive for listening netconns) */ |
||||
int recv_timeout; |
||||
#endif /* LWIP_SO_RCVTIMEO */ |
||||
#if LWIP_SO_RCVBUF |
||||
/** maximum amount of bytes queued in recvmbox
|
||||
not used for TCP: adjust TCP_WND instead! */ |
||||
int recv_bufsize; |
||||
/** number of bytes currently in recvmbox to be received,
|
||||
tested against recv_bufsize to limit bytes on recvmbox |
||||
for UDP and RAW, used for FIONREAD */ |
||||
s16_t recv_avail; |
||||
#endif /* LWIP_SO_RCVBUF */ |
||||
/** flags holding more netconn-internal state, see NETCONN_FLAG_* defines */ |
||||
u8_t flags; |
||||
#if LWIP_TCP |
||||
/** TCP: when data passed to netconn_write doesn't fit into the send buffer,
|
||||
this temporarily stores how much is already sent. */ |
||||
size_t write_offset; |
||||
/** TCP: when data passed to netconn_write doesn't fit into the send buffer,
|
||||
this temporarily stores the message. |
||||
Also used during connect and close. */ |
||||
struct api_msg_msg *current_msg; |
||||
#endif /* LWIP_TCP */ |
||||
/** A callback function that is informed about events for this netconn */ |
||||
netconn_callback callback; |
||||
}; |
||||
|
||||
/** Register an Network connection event */ |
||||
#define API_EVENT(c,e,l) if (c->callback) { \ |
||||
(*c->callback)(c, e, l); \
|
||||
} |
||||
|
||||
/** Set conn->last_err to err but don't overwrite fatal errors */ |
||||
#define NETCONN_SET_SAFE_ERR(conn, err) do { \ |
||||
SYS_ARCH_DECL_PROTECT(lev); \
|
||||
SYS_ARCH_PROTECT(lev); \
|
||||
if (!ERR_IS_FATAL((conn)->last_err)) { \
|
||||
(conn)->last_err = err; \
|
||||
} \
|
||||
SYS_ARCH_UNPROTECT(lev); \
|
||||
} while(0); |
||||
|
||||
/* Network connection functions: */ |
||||
#define netconn_new(t) netconn_new_with_proto_and_callback(t, 0, NULL) |
||||
#define netconn_new_with_callback(t, c) netconn_new_with_proto_and_callback(t, 0, c) |
||||
struct |
||||
netconn *netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, |
||||
netconn_callback callback); |
||||
err_t netconn_delete(struct netconn *conn); |
||||
/** Get the type of a netconn (as enum netconn_type). */ |
||||
#define netconn_type(conn) (conn->type) |
||||
|
||||
err_t netconn_getaddr(struct netconn *conn, ip_addr_t *addr, |
||||
u16_t *port, u8_t local); |
||||
#define netconn_peer(c,i,p) netconn_getaddr(c,i,p,0) |
||||
#define netconn_addr(c,i,p) netconn_getaddr(c,i,p,1) |
||||
|
||||
err_t netconn_bind(struct netconn *conn, ip_addr_t *addr, u16_t port); |
||||
err_t netconn_connect(struct netconn *conn, ip_addr_t *addr, u16_t port); |
||||
err_t netconn_disconnect (struct netconn *conn); |
||||
err_t netconn_listen_with_backlog(struct netconn *conn, u8_t backlog); |
||||
#define netconn_listen(conn) netconn_listen_with_backlog(conn, TCP_DEFAULT_LISTEN_BACKLOG) |
||||
err_t netconn_accept(struct netconn *conn, struct netconn **new_conn); |
||||
err_t netconn_recv(struct netconn *conn, struct netbuf **new_buf); |
||||
err_t netconn_recv_tcp_pbuf(struct netconn *conn, struct pbuf **new_buf); |
||||
void netconn_recved(struct netconn *conn, u32_t length); |
||||
err_t netconn_sendto(struct netconn *conn, struct netbuf *buf, |
||||
ip_addr_t *addr, u16_t port); |
||||
err_t netconn_send(struct netconn *conn, struct netbuf *buf); |
||||
err_t netconn_write(struct netconn *conn, const void *dataptr, size_t size, |
||||
u8_t apiflags); |
||||
err_t netconn_close(struct netconn *conn); |
||||
err_t netconn_shutdown(struct netconn *conn, u8_t shut_rx, u8_t shut_tx); |
||||
|
||||
#if LWIP_IGMP |
||||
err_t netconn_join_leave_group(struct netconn *conn, ip_addr_t *multiaddr, |
||||
ip_addr_t *netif_addr, enum netconn_igmp join_or_leave); |
||||
#endif /* LWIP_IGMP */ |
||||
#if LWIP_DNS |
||||
err_t netconn_gethostbyname(const char *name, ip_addr_t *addr); |
||||
#endif /* LWIP_DNS */ |
||||
|
||||
#define netconn_err(conn) ((conn)->last_err) |
||||
#define netconn_recv_bufsize(conn) ((conn)->recv_bufsize) |
||||
|
||||
/** Set the blocking status of netconn calls (@todo: write/send is missing) */ |
||||
#define netconn_set_nonblocking(conn, val) do { if(val) { \ |
||||
(conn)->flags |= NETCONN_FLAG_NON_BLOCKING; \
|
||||
} else { \
|
||||
(conn)->flags &= ~ NETCONN_FLAG_NON_BLOCKING; }} while(0) |
||||
/** Get the blocking status of netconn calls (@todo: write/send is missing) */ |
||||
#define netconn_is_nonblocking(conn) (((conn)->flags & NETCONN_FLAG_NON_BLOCKING) != 0) |
||||
|
||||
/** TCP: Set the no-auto-recved status of netconn calls (see NETCONN_FLAG_NO_AUTO_RECVED) */ |
||||
#define netconn_set_noautorecved(conn, val) do { if(val) { \ |
||||
(conn)->flags |= NETCONN_FLAG_NO_AUTO_RECVED; \
|
||||
} else { \
|
||||
(conn)->flags &= ~ NETCONN_FLAG_NO_AUTO_RECVED; }} while(0) |
||||
/** TCP: Get the no-auto-recved status of netconn calls (see NETCONN_FLAG_NO_AUTO_RECVED) */ |
||||
#define netconn_get_noautorecved(conn) (((conn)->flags & NETCONN_FLAG_NO_AUTO_RECVED) != 0) |
||||
|
||||
#if LWIP_SO_RCVTIMEO |
||||
/** Set the receive timeout in milliseconds */ |
||||
#define netconn_set_recvtimeout(conn, timeout) ((conn)->recv_timeout = (timeout)) |
||||
/** Get the receive timeout in milliseconds */ |
||||
#define netconn_get_recvtimeout(conn) ((conn)->recv_timeout) |
||||
#endif /* LWIP_SO_RCVTIMEO */ |
||||
#if LWIP_SO_RCVBUF |
||||
/** Set the receive buffer in bytes */ |
||||
#define netconn_set_recvbufsize(conn, recvbufsize) ((conn)->recv_bufsize = (recvbufsize)) |
||||
/** Get the receive buffer in bytes */ |
||||
#define netconn_get_recvbufsize(conn) ((conn)->recv_bufsize) |
||||
#endif /* LWIP_SO_RCVBUF*/ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_NETCONN */ |
||||
|
||||
#endif /* __LWIP_API_H__ */ |
@ -1,174 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_API_MSG_H__ |
||||
#define __LWIP_API_MSG_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include <stddef.h> /* for size_t */ |
||||
|
||||
#include "lwip/ip_addr.h" |
||||
#include "lwip/err.h" |
||||
#include "lwip/sys.h" |
||||
#include "lwip/igmp.h" |
||||
#include "lwip/api.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* For the netconn API, these values are use as a bitmask! */ |
||||
#define NETCONN_SHUT_RD 1 |
||||
#define NETCONN_SHUT_WR 2 |
||||
#define NETCONN_SHUT_RDWR (NETCONN_SHUT_RD | NETCONN_SHUT_WR) |
||||
|
||||
/* IP addresses and port numbers are expected to be in
|
||||
* the same byte order as in the corresponding pcb. |
||||
*/ |
||||
/** This struct includes everything that is necessary to execute a function
|
||||
for a netconn in another thread context (mainly used to process netconns |
||||
in the tcpip_thread context to be thread safe). */ |
||||
struct api_msg_msg { |
||||
/** The netconn which to process - always needed: it includes the semaphore
|
||||
which is used to block the application thread until the function finished. */ |
||||
struct netconn *conn; |
||||
/** The return value of the function executed in tcpip_thread. */ |
||||
err_t err; |
||||
/** Depending on the executed function, one of these union members is used */ |
||||
union { |
||||
/** used for do_send */ |
||||
struct netbuf *b; |
||||
/** used for do_newconn */ |
||||
struct { |
||||
u8_t proto; |
||||
} n; |
||||
/** used for do_bind and do_connect */ |
||||
struct { |
||||
ip_addr_t *ipaddr; |
||||
u16_t port; |
||||
} bc; |
||||
/** used for do_getaddr */ |
||||
struct { |
||||
ip_addr_t *ipaddr; |
||||
u16_t *port; |
||||
u8_t local; |
||||
} ad; |
||||
/** used for do_write */ |
||||
struct { |
||||
const void *dataptr; |
||||
size_t len; |
||||
u8_t apiflags; |
||||
} w; |
||||
/** used for do_recv */ |
||||
struct { |
||||
u32_t len; |
||||
} r; |
||||
/** used for do_close (/shutdown) */ |
||||
struct { |
||||
u8_t shut; |
||||
} sd; |
||||
#if LWIP_IGMP |
||||
/** used for do_join_leave_group */ |
||||
struct { |
||||
ip_addr_t *multiaddr; |
||||
ip_addr_t *netif_addr; |
||||
enum netconn_igmp join_or_leave; |
||||
} jl; |
||||
#endif /* LWIP_IGMP */ |
||||
#if TCP_LISTEN_BACKLOG |
||||
struct { |
||||
u8_t backlog; |
||||
} lb; |
||||
#endif /* TCP_LISTEN_BACKLOG */ |
||||
} msg; |
||||
}; |
||||
|
||||
/** This struct contains a function to execute in another thread context and
|
||||
a struct api_msg_msg that serves as an argument for this function. |
||||
This is passed to tcpip_apimsg to execute functions in tcpip_thread context. */ |
||||
struct api_msg { |
||||
/** function to execute in tcpip_thread context */ |
||||
void (* function)(struct api_msg_msg *msg); |
||||
/** arguments for this function */ |
||||
struct api_msg_msg msg; |
||||
}; |
||||
|
||||
#if LWIP_DNS |
||||
/** As do_gethostbyname requires more arguments but doesn't require a netconn,
|
||||
it has its own struct (to avoid struct api_msg getting bigger than necessary). |
||||
do_gethostbyname must be called using tcpip_callback instead of tcpip_apimsg |
||||
(see netconn_gethostbyname). */ |
||||
struct dns_api_msg { |
||||
/** Hostname to query or dotted IP address string */ |
||||
const char *name; |
||||
/** Rhe resolved address is stored here */ |
||||
ip_addr_t *addr; |
||||
/** This semaphore is posted when the name is resolved, the application thread
|
||||
should wait on it. */ |
||||
sys_sem_t *sem; |
||||
/** Errors are given back here */ |
||||
err_t *err; |
||||
}; |
||||
#endif /* LWIP_DNS */ |
||||
|
||||
void do_newconn ( struct api_msg_msg *msg); |
||||
void do_delconn ( struct api_msg_msg *msg); |
||||
void do_bind ( struct api_msg_msg *msg); |
||||
void do_connect ( struct api_msg_msg *msg); |
||||
void do_disconnect ( struct api_msg_msg *msg); |
||||
void do_listen ( struct api_msg_msg *msg); |
||||
void do_send ( struct api_msg_msg *msg); |
||||
void do_recv ( struct api_msg_msg *msg); |
||||
void do_write ( struct api_msg_msg *msg); |
||||
void do_getaddr ( struct api_msg_msg *msg); |
||||
void do_close ( struct api_msg_msg *msg); |
||||
void do_shutdown ( struct api_msg_msg *msg); |
||||
#if LWIP_IGMP |
||||
void do_join_leave_group( struct api_msg_msg *msg); |
||||
#endif /* LWIP_IGMP */ |
||||
|
||||
#if LWIP_DNS |
||||
void do_gethostbyname(void *arg); |
||||
#endif /* LWIP_DNS */ |
||||
|
||||
struct netconn* netconn_alloc(enum netconn_type t, netconn_callback callback); |
||||
void netconn_free(struct netconn *conn); |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_NETCONN */ |
||||
|
||||
#endif /* __LWIP_API_MSG_H__ */ |
@ -1,381 +0,0 @@ |
||||
#ifndef __ESPCONN_H__ |
||||
#define __ESPCONN_H__ |
||||
|
||||
#include "lwip/dns.h" |
||||
#include "os_type.h" |
||||
|
||||
#if 0 |
||||
#define espconn_printf(fmt, args...) os_printf(fmt,## args) |
||||
#else |
||||
#define espconn_printf(fmt, args...) |
||||
#endif |
||||
|
||||
|
||||
typedef void *espconn_handle; |
||||
typedef void (* espconn_connect_callback)(void *arg); |
||||
typedef void (* espconn_reconnect_callback)(void *arg, sint8 err); |
||||
|
||||
/* Definitions for error constants. */ |
||||
|
||||
#define ESPCONN_OK 0 /* No error, everything OK. */ |
||||
#define ESPCONN_MEM -1 /* Out of memory error. */ |
||||
#define ESPCONN_TIMEOUT -3 /* Timeout. */ |
||||
#define ESPCONN_RTE -4 /* Routing problem. */ |
||||
#define ESPCONN_INPROGRESS -5 /* Operation in progress */ |
||||
|
||||
#define ESPCONN_ABRT -8 /* Connection aborted. */ |
||||
#define ESPCONN_RST -9 /* Connection reset. */ |
||||
#define ESPCONN_CLSD -10 /* Connection closed. */ |
||||
#define ESPCONN_CONN -11 /* Not connected. */ |
||||
|
||||
#define ESPCONN_ARG -12 /* Illegal argument. */ |
||||
#define ESPCONN_ISCONN -15 /* Already connected. */ |
||||
|
||||
#define ESPCONN_SSL 0x01 |
||||
#define ESPCONN_NORM 0x00 |
||||
|
||||
#define ESPCONN_STA 0x01 |
||||
#define ESPCONN_AP 0x02 |
||||
#define ESPCONN_AP_STA 0x03 |
||||
|
||||
#define STA_NETIF 0x00 |
||||
#define AP_NETIF 0x01 |
||||
|
||||
/** Protocol family and type of the espconn */ |
||||
enum espconn_type { |
||||
ESPCONN_INVALID = 0, |
||||
/* ESPCONN_TCP Group */ |
||||
ESPCONN_TCP = 0x10, |
||||
/* ESPCONN_UDP Group */ |
||||
ESPCONN_UDP = 0x20, |
||||
}; |
||||
|
||||
/** Current state of the espconn. Non-TCP espconn are always in state ESPCONN_NONE! */ |
||||
enum espconn_state { |
||||
ESPCONN_NONE, |
||||
ESPCONN_WAIT, |
||||
ESPCONN_LISTEN, |
||||
ESPCONN_CONNECT, |
||||
ESPCONN_WRITE, |
||||
ESPCONN_READ, |
||||
ESPCONN_CLOSE |
||||
}; |
||||
|
||||
typedef struct _esp_tcp { |
||||
int remote_port; |
||||
int local_port; |
||||
uint8 local_ip[4]; |
||||
uint8 remote_ip[4]; |
||||
espconn_connect_callback connect_callback; |
||||
espconn_reconnect_callback reconnect_callback; |
||||
espconn_connect_callback disconnect_callback; |
||||
} esp_tcp; |
||||
|
||||
typedef struct _esp_udp { |
||||
int remote_port; |
||||
int local_port; |
||||
uint8 local_ip[4]; |
||||
uint8 remote_ip[4]; |
||||
} esp_udp; |
||||
|
||||
typedef struct _remot_info{ |
||||
enum espconn_state state; |
||||
int remote_port; |
||||
uint8 remote_ip[4]; |
||||
}remot_info; |
||||
|
||||
/** A callback prototype to inform about events for a espconn */ |
||||
typedef void (* espconn_recv_callback)(void *arg, char *pdata, unsigned short len); |
||||
typedef void (* espconn_sent_callback)(void *arg); |
||||
|
||||
/** A espconn descriptor */ |
||||
struct espconn { |
||||
/** type of the espconn (TCP, UDP) */ |
||||
enum espconn_type type; |
||||
/** current state of the espconn */ |
||||
enum espconn_state state; |
||||
union { |
||||
esp_tcp *tcp; |
||||
esp_udp *udp; |
||||
} proto; |
||||
/** A callback function that is informed about events for this espconn */ |
||||
espconn_recv_callback recv_callback; |
||||
espconn_sent_callback sent_callback; |
||||
uint8 link_cnt; |
||||
void *reverse; |
||||
}; |
||||
|
||||
typedef struct _comon_pkt{ |
||||
void *pcb; |
||||
int remote_port; |
||||
uint8 remote_ip[4]; |
||||
uint8 *ptrbuf; |
||||
uint16 cntr; |
||||
sint8 err; |
||||
uint32 timeout; |
||||
uint32 recv_check; |
||||
os_timer_t ptimer; |
||||
}comon_pkt; |
||||
|
||||
typedef struct _espconn_msg{ |
||||
struct espconn *pespconn; |
||||
comon_pkt pcommon; |
||||
uint8 count_opt; |
||||
void *preverse; |
||||
void *pssl; |
||||
struct _espconn_msg *pnext; |
||||
}espconn_msg; |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_copy_partial |
||||
* Description : reconnect with host |
||||
* Parameters : arg -- Additional argument to pass to the callback function |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
void espconn_copy_partial(struct espconn *pesp_dest, struct espconn *pesp_source); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_copy_partial |
||||
* Description : insert the node to the active connection list |
||||
* Parameters : arg -- Additional argument to pass to the callback function |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
void espconn_list_creat(espconn_msg **phead, espconn_msg* pinsert); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_list_delete |
||||
* Description : remove the node from the active connection list |
||||
* Parameters : arg -- Additional argument to pass to the callback function |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
void espconn_list_delete(espconn_msg **phead, espconn_msg* pdelete); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_find_connection |
||||
* Description : Initialize the server: set up a listening PCB and bind it to |
||||
* the defined port |
||||
* Parameters : espconn -- the espconn used to build server |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
bool espconn_find_connection(struct espconn *pespconn, espconn_msg **pnode); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_get_connection_info |
||||
* Description : used to specify the function that should be called when disconnect |
||||
* Parameters : espconn -- espconn to set the err callback |
||||
* discon_cb -- err callback function to call when err |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
sint8 espconn_get_connection_info(struct espconn *pespconn, remot_info **pcon_info, uint8 typeflags); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_connect |
||||
* Description : The function given as the connect |
||||
* Parameters : espconn -- the espconn used to listen the connection |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_connect(struct espconn *espconn); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_disconnect |
||||
* Description : disconnect with host |
||||
* Parameters : espconn -- the espconn used to disconnect the connection |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_disconnect(struct espconn *espconn); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_delete |
||||
* Description : disconnect with host |
||||
* Parameters : espconn -- the espconn used to disconnect the connection |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_delete(struct espconn *espconn); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_accept |
||||
* Description : The function given as the listen |
||||
* Parameters : espconn -- the espconn used to listen the connection |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_accept(struct espconn *espconn); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_create |
||||
* Description : sent data for client or server |
||||
* Parameters : espconn -- espconn to the data transmission |
||||
* Returns : result |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_create(struct espconn *espconn); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_tcp_get_max_con |
||||
* Description : get the number of simulatenously active TCP connections |
||||
* Parameters : none |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern uint8 espconn_tcp_get_max_con(void); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_tcp_set_max_con |
||||
* Description : set the number of simulatenously active TCP connections |
||||
* Parameters : num -- total number |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_tcp_set_max_con(uint8 num); |
||||
/******************************************************************************
|
||||
* FunctionName : espconn_tcp_get_max_con_allow |
||||
* Description : get the count of simulatenously active connections on the server |
||||
* Parameters : espconn -- espconn to get the count |
||||
* Returns : result |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_tcp_get_max_con_allow(struct espconn *espconn); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_tcp_set_max_con_allow |
||||
* Description : set the count of simulatenously active connections on the server |
||||
* Parameters : espconn -- espconn to set the count |
||||
* Returns : result |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_tcp_set_max_con_allow(struct espconn *espconn, uint8 num); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_regist_time |
||||
* Description : used to specify the time that should be called when don't recv data |
||||
* Parameters : espconn -- the espconn used to the connection |
||||
* interval -- the timer when don't recv data |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_regist_time(struct espconn *espconn, uint32 interval, uint8 type_flag); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_regist_sentcb |
||||
* Description : Used to specify the function that should be called when data |
||||
* has been successfully delivered to the remote host. |
||||
* Parameters : struct espconn *espconn -- espconn to set the sent callback |
||||
* espconn_sent_callback sent_cb -- sent callback function to
|
||||
* call for this espconn when data is successfully sent |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_regist_sentcb(struct espconn *espconn, espconn_sent_callback sent_cb); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_sent |
||||
* Description : sent data for client or server |
||||
* Parameters : espconn -- espconn to set for client or server |
||||
* psent -- data to send |
||||
* length -- length of data to send |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_sent(struct espconn *espconn, uint8 *psent, uint16 length); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_regist_connectcb |
||||
* Description : used to specify the function that should be called when
|
||||
* connects to host.
|
||||
* Parameters : espconn -- espconn to set the connect callback
|
||||
* connect_cb -- connected callback function to call when connected
|
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_regist_connectcb(struct espconn *espconn, espconn_connect_callback connect_cb); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_regist_recvcb |
||||
* Description : used to specify the function that should be called when recv
|
||||
* data from host. |
||||
* Parameters : espconn -- espconn to set the recv callback
|
||||
* recv_cb -- recv callback function to call when recv data |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_regist_recvcb(struct espconn *espconn, espconn_recv_callback recv_cb); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_regist_reconcb |
||||
* Description : used to specify the function that should be called when connection
|
||||
* because of err disconnect. |
||||
* Parameters : espconn -- espconn to set the err callback
|
||||
* recon_cb -- err callback function to call when err
|
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_regist_reconcb(struct espconn *espconn, espconn_reconnect_callback recon_cb); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_regist_disconcb |
||||
* Description : used to specify the function that should be called when disconnect |
||||
* Parameters : espconn -- espconn to set the err callback |
||||
* discon_cb -- err callback function to call when err |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_regist_disconcb(struct espconn *espconn, espconn_connect_callback discon_cb); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_port |
||||
* Description : access port value for client so that we don't end up bouncing |
||||
* all connections at the same time . |
||||
* Parameters : none |
||||
* Returns : access port value |
||||
*******************************************************************************/ |
||||
|
||||
extern uint32 espconn_port(void); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_gethostbyname |
||||
* Description : Resolve a hostname (string) into an IP address. |
||||
* Parameters : pespconn -- espconn to resolve a hostname |
||||
* hostname -- the hostname that is to be queried |
||||
* addr -- pointer to a ip_addr_t where to store the address if
|
||||
* it is already cached in the dns_table (only valid if |
||||
* ESPCONN_OK is returned!) |
||||
* found -- a callback function to be called on success, failure |
||||
* or timeout (only if ERR_INPROGRESS is returned!) |
||||
* Returns : err_t return code |
||||
* - ESPCONN_OK if hostname is a valid IP address string or the host |
||||
* name is already in the local names table. |
||||
* - ESPCONN_INPROGRESS enqueue a request to be sent to the DNS server |
||||
* for resolution if no errors are present. |
||||
* - ESPCONN_ARG: dns client not initialized or invalid hostname |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_gethostbyname(struct espconn *pespconn, const char *name, ip_addr_t *addr, dns_found_callback found); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_igmp_join |
||||
* Description : join a multicast group |
||||
* Parameters : host_ip -- the ip address of udp server |
||||
* multicast_ip -- multicast ip given by user |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
extern sint8 espconn_igmp_join(ip_addr_t *host_ip, ip_addr_t *multicast_ip); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_igmp_leave |
||||
* Description : leave a multicast group |
||||
* Parameters : host_ip -- the ip address of udp server |
||||
* multicast_ip -- multicast ip given by user |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
extern sint8 espconn_igmp_leave(ip_addr_t *host_ip, ip_addr_t *multicast_ip); |
||||
|
||||
#endif |
||||
|
@ -1,49 +0,0 @@ |
||||
#ifndef __ESPCONN_TCP_H__ |
||||
#define __ESPCONN_TCP_H__ |
||||
|
||||
#ifndef ESPCONN_TCP_DEBUG |
||||
#define ESPCONN_TCP_DEBUG LWIP_DBG_OFF |
||||
#endif |
||||
#include "lwip/app/espconn.h" |
||||
|
||||
#ifndef ESPCONN_TCP_TIMER |
||||
#define ESPCONN_TCP_TIMER 40 |
||||
#endif |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_tcp_disconnect |
||||
* Description : A new incoming connection has been disconnected. |
||||
* Parameters : espconn -- the espconn used to disconnect with host |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern void espconn_tcp_disconnect(espconn_msg *pdiscon); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_tcp_client |
||||
* Description : Initialize the client: set up a connect PCB and bind it to
|
||||
* the defined port |
||||
* Parameters : espconn -- the espconn used to build client |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_tcp_client(struct espconn* espconn); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_tcp_server |
||||
* Description : Initialize the server: set up a listening PCB and bind it to
|
||||
* the defined port |
||||
* Parameters : espconn -- the espconn used to build server |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_tcp_server(struct espconn *espconn); |
||||
|
||||
void ICACHE_FLASH_ATTR |
||||
espconn_tcp_sent(void *arg, uint8 *psent, uint16 length); |
||||
|
||||
sint8 ICACHE_FLASH_ATTR espconn_tcp_delete(struct espconn *pdeletecon); |
||||
|
||||
|
||||
#endif /* __CLIENT_TCP_H__ */ |
||||
|
@ -1,51 +0,0 @@ |
||||
#ifndef __ESPCONN_UDP_H__ |
||||
#define __ESPCONN_UDP_H__ |
||||
|
||||
#ifndef ESPCONN_UDP_DEBUG |
||||
#define ESPCONN_UDP_DEBUG LWIP_DBG_OFF |
||||
#endif |
||||
|
||||
#include "lwip/app/espconn.h" |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_udp_client |
||||
* Description : Initialize the client: set up a PCB and bind it to the port |
||||
* Parameters : pespconn -- the espconn used to build client |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_udp_client(struct espconn *pespconn); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_udp_disconnect |
||||
* Description : A new incoming connection has been disconnected. |
||||
* Parameters : espconn -- the espconn used to disconnect with host |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern void espconn_udp_disconnect(espconn_msg *pdiscon); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_udp_server |
||||
* Description : Initialize the server: set up a PCB and bind it to the port |
||||
* Parameters : pespconn -- the espconn used to build server |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern sint8 espconn_udp_server(struct espconn *espconn); |
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : espconn_udp_sent |
||||
* Description : sent data for client or server |
||||
* Parameters : void *arg -- client or server to send |
||||
* uint8* psent -- Data to send |
||||
* uint16 length -- Length of data to send |
||||
* Returns : none |
||||
*******************************************************************************/ |
||||
|
||||
extern void espconn_udp_sent(void *arg, uint8 *psent, uint16 length); |
||||
|
||||
|
||||
#endif /* __ESPCONN_UDP_H__ */ |
||||
|
||||
|
@ -1,26 +0,0 @@ |
||||
#ifndef __PING_H__ |
||||
#define __PING_H__ |
||||
#include "lwip/ip_addr.h" |
||||
#include "lwip/icmp.h" |
||||
/**
|
||||
* PING_USE_SOCKETS: Set to 1 to use sockets, otherwise the raw api is used |
||||
*/ |
||||
#ifndef PING_USE_SOCKETS |
||||
#define PING_USE_SOCKETS LWIP_SOCKET |
||||
#endif |
||||
|
||||
|
||||
void ping_init(void)ICACHE_FLASH_ATTR; |
||||
void inline set_ping_length(u16_t ping_length)ICACHE_FLASH_ATTR; |
||||
u16_t inline get_ping_length()ICACHE_FLASH_ATTR; |
||||
|
||||
#if !PING_USE_SOCKETS |
||||
void ping_send_now(void)ICACHE_FLASH_ATTR; |
||||
#endif /* !PING_USE_SOCKETS */ |
||||
|
||||
#ifdef SSC |
||||
void ping_set_target(ip_addr_t *ip)ICACHE_FLASH_ATTR; |
||||
void ping_set_recv_cb(void (*ping_recv_cb)(struct pbuf *p, struct icmp_echo_hdr *iecho))ICACHE_FLASH_ATTR; |
||||
#endif /* SSC */ |
||||
|
||||
#endif /* __PING_H__ */ |
@ -1,238 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_ARCH_H__ |
||||
#define __LWIP_ARCH_H__ |
||||
|
||||
#ifndef LITTLE_ENDIAN |
||||
#define LITTLE_ENDIAN 1234 |
||||
#endif |
||||
|
||||
#ifndef BIG_ENDIAN |
||||
#define BIG_ENDIAN 4321 |
||||
#endif |
||||
|
||||
#include "arch/cc.h" |
||||
|
||||
/** Temporary: define format string for size_t if not defined in cc.h */ |
||||
#ifndef SZT_F |
||||
#define SZT_F U32_F |
||||
#endif /* SZT_F */ |
||||
/** Temporary upgrade helper: define format string for u8_t as hex if not
|
||||
defined in cc.h */ |
||||
#ifndef X8_F |
||||
#define X8_F "02x" |
||||
#endif /* X8_F */ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#ifndef PACK_STRUCT_BEGIN |
||||
#define PACK_STRUCT_BEGIN |
||||
#endif /* PACK_STRUCT_BEGIN */ |
||||
|
||||
#ifndef PACK_STRUCT_END |
||||
#define PACK_STRUCT_END |
||||
#endif /* PACK_STRUCT_END */ |
||||
|
||||
#ifndef PACK_STRUCT_FIELD |
||||
#define PACK_STRUCT_FIELD(x) x |
||||
#endif /* PACK_STRUCT_FIELD */ |
||||
|
||||
|
||||
#ifndef LWIP_UNUSED_ARG |
||||
#define LWIP_UNUSED_ARG(x) (void)x |
||||
#endif /* LWIP_UNUSED_ARG */ |
||||
|
||||
|
||||
#ifdef LWIP_PROVIDE_ERRNO |
||||
|
||||
#define EPERM 1 /* Operation not permitted */ |
||||
#define ENOENT 2 /* No such file or directory */ |
||||
#define ESRCH 3 /* No such process */ |
||||
#define EINTR 4 /* Interrupted system call */ |
||||
#define EIO 5 /* I/O error */ |
||||
#define ENXIO 6 /* No such device or address */ |
||||
#define E2BIG 7 /* Arg list too long */ |
||||
#define ENOEXEC 8 /* Exec format error */ |
||||
#define EBADF 9 /* Bad file number */ |
||||
#define ECHILD 10 /* No child processes */ |
||||
#define EAGAIN 11 /* Try again */ |
||||
#define ENOMEM 12 /* Out of memory */ |
||||
#define EACCES 13 /* Permission denied */ |
||||
#define EFAULT 14 /* Bad address */ |
||||
#define ENOTBLK 15 /* Block device required */ |
||||
#define EBUSY 16 /* Device or resource busy */ |
||||
#define EEXIST 17 /* File exists */ |
||||
#define EXDEV 18 /* Cross-device link */ |
||||
#define ENODEV 19 /* No such device */ |
||||
#define ENOTDIR 20 /* Not a directory */ |
||||
#define EISDIR 21 /* Is a directory */ |
||||
#define EINVAL 22 /* Invalid argument */ |
||||
#define ENFILE 23 /* File table overflow */ |
||||
#define EMFILE 24 /* Too many open files */ |
||||
#define ENOTTY 25 /* Not a typewriter */ |
||||
#define ETXTBSY 26 /* Text file busy */ |
||||
#define EFBIG 27 /* File too large */ |
||||
#define ENOSPC 28 /* No space left on device */ |
||||
#define ESPIPE 29 /* Illegal seek */ |
||||
#define EROFS 30 /* Read-only file system */ |
||||
#define EMLINK 31 /* Too many links */ |
||||
#define EPIPE 32 /* Broken pipe */ |
||||
#define EDOM 33 /* Math argument out of domain of func */ |
||||
#define ERANGE 34 /* Math result not representable */ |
||||
#define EDEADLK 35 /* Resource deadlock would occur */ |
||||
#define ENAMETOOLONG 36 /* File name too long */ |
||||
#define ENOLCK 37 /* No record locks available */ |
||||
#define ENOSYS 38 /* Function not implemented */ |
||||
#define ENOTEMPTY 39 /* Directory not empty */ |
||||
#define ELOOP 40 /* Too many symbolic links encountered */ |
||||
#define EWOULDBLOCK EAGAIN /* Operation would block */ |
||||
#define ENOMSG 42 /* No message of desired type */ |
||||
#define EIDRM 43 /* Identifier removed */ |
||||
#define ECHRNG 44 /* Channel number out of range */ |
||||
#define EL2NSYNC 45 /* Level 2 not synchronized */ |
||||
#define EL3HLT 46 /* Level 3 halted */ |
||||
#define EL3RST 47 /* Level 3 reset */ |
||||
#define ELNRNG 48 /* Link number out of range */ |
||||
#define EUNATCH 49 /* Protocol driver not attached */ |
||||
#define ENOCSI 50 /* No CSI structure available */ |
||||
#define EL2HLT 51 /* Level 2 halted */ |
||||
#define EBADE 52 /* Invalid exchange */ |
||||
#define EBADR 53 /* Invalid request descriptor */ |
||||
#define EXFULL 54 /* Exchange full */ |
||||
#define ENOANO 55 /* No anode */ |
||||
#define EBADRQC 56 /* Invalid request code */ |
||||
#define EBADSLT 57 /* Invalid slot */ |
||||
|
||||
#define EDEADLOCK EDEADLK |
||||
|
||||
#define EBFONT 59 /* Bad font file format */ |
||||
#define ENOSTR 60 /* Device not a stream */ |
||||
#define ENODATA 61 /* No data available */ |
||||
#define ETIME 62 /* Timer expired */ |
||||
#define ENOSR 63 /* Out of streams resources */ |
||||
#define ENONET 64 /* Machine is not on the network */ |
||||
#define ENOPKG 65 /* Package not installed */ |
||||
#define EREMOTE 66 /* Object is remote */ |
||||
#define ENOLINK 67 /* Link has been severed */ |
||||
#define EADV 68 /* Advertise error */ |
||||
#define ESRMNT 69 /* Srmount error */ |
||||
#define ECOMM 70 /* Communication error on send */ |
||||
#define EPROTO 71 /* Protocol error */ |
||||
#define EMULTIHOP 72 /* Multihop attempted */ |
||||
#define EDOTDOT 73 /* RFS specific error */ |
||||
#define EBADMSG 74 /* Not a data message */ |
||||
#define EOVERFLOW 75 /* Value too large for defined data type */ |
||||
#define ENOTUNIQ 76 /* Name not unique on network */ |
||||
#define EBADFD 77 /* File descriptor in bad state */ |
||||
#define EREMCHG 78 /* Remote address changed */ |
||||
#define ELIBACC 79 /* Can not access a needed shared library */ |
||||
#define ELIBBAD 80 /* Accessing a corrupted shared library */ |
||||
#define ELIBSCN 81 /* .lib section in a.out corrupted */ |
||||
#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ |
||||
#define ELIBEXEC 83 /* Cannot exec a shared library directly */ |
||||
#define EILSEQ 84 /* Illegal byte sequence */ |
||||
#define ERESTART 85 /* Interrupted system call should be restarted */ |
||||
#define ESTRPIPE 86 /* Streams pipe error */ |
||||
#define EUSERS 87 /* Too many users */ |
||||
#define ENOTSOCK 88 /* Socket operation on non-socket */ |
||||
#define EDESTADDRREQ 89 /* Destination address required */ |
||||
#define EMSGSIZE 90 /* Message too long */ |
||||
#define EPROTOTYPE 91 /* Protocol wrong type for socket */ |
||||
#define ENOPROTOOPT 92 /* Protocol not available */ |
||||
#define EPROTONOSUPPORT 93 /* Protocol not supported */ |
||||
#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ |
||||
#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ |
||||
#define EPFNOSUPPORT 96 /* Protocol family not supported */ |
||||
#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ |
||||
#define EADDRINUSE 98 /* Address already in use */ |
||||
#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ |
||||
#define ENETDOWN 100 /* Network is down */ |
||||
#define ENETUNREACH 101 /* Network is unreachable */ |
||||
#define ENETRESET 102 /* Network dropped connection because of reset */ |
||||
#define ECONNABORTED 103 /* Software caused connection abort */ |
||||
#define ECONNRESET 104 /* Connection reset by peer */ |
||||
#define ENOBUFS 105 /* No buffer space available */ |
||||
#define EISCONN 106 /* Transport endpoint is already connected */ |
||||
#define ENOTCONN 107 /* Transport endpoint is not connected */ |
||||
#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ |
||||
#define ETOOMANYREFS 109 /* Too many references: cannot splice */ |
||||
#define ETIMEDOUT 110 /* Connection timed out */ |
||||
#define ECONNREFUSED 111 /* Connection refused */ |
||||
#define EHOSTDOWN 112 /* Host is down */ |
||||
#define EHOSTUNREACH 113 /* No route to host */ |
||||
#define EALREADY 114 /* Operation already in progress */ |
||||
#define EINPROGRESS 115 /* Operation now in progress */ |
||||
#define ESTALE 116 /* Stale NFS file handle */ |
||||
#define EUCLEAN 117 /* Structure needs cleaning */ |
||||
#define ENOTNAM 118 /* Not a XENIX named type file */ |
||||
#define ENAVAIL 119 /* No XENIX semaphores available */ |
||||
#define EISNAM 120 /* Is a named type file */ |
||||
#define EREMOTEIO 121 /* Remote I/O error */ |
||||
#define EDQUOT 122 /* Quota exceeded */ |
||||
|
||||
#define ENOMEDIUM 123 /* No medium found */ |
||||
#define EMEDIUMTYPE 124 /* Wrong medium type */ |
||||
|
||||
|
||||
#define ENSROK 0 /* DNS server returned answer with no data */ |
||||
#define ENSRNODATA 160 /* DNS server returned answer with no data */ |
||||
#define ENSRFORMERR 161 /* DNS server claims query was misformatted */ |
||||
#define ENSRSERVFAIL 162 /* DNS server returned general failure */ |
||||
#define ENSRNOTFOUND 163 /* Domain name not found */ |
||||
#define ENSRNOTIMP 164 /* DNS server does not implement requested operation */ |
||||
#define ENSRREFUSED 165 /* DNS server refused query */ |
||||
#define ENSRBADQUERY 166 /* Misformatted DNS query */ |
||||
#define ENSRBADNAME 167 /* Misformatted domain name */ |
||||
#define ENSRBADFAMILY 168 /* Unsupported address family */ |
||||
#define ENSRBADRESP 169 /* Misformatted DNS reply */ |
||||
#define ENSRCONNREFUSED 170 /* Could not contact DNS servers */ |
||||
#define ENSRTIMEOUT 171 /* Timeout while contacting DNS servers */ |
||||
#define ENSROF 172 /* End of file */ |
||||
#define ENSRFILE 173 /* Error reading file */ |
||||
#define ENSRNOMEM 174 /* Out of memory */ |
||||
#define ENSRDESTRUCTION 175 /* Application terminated lookup */ |
||||
#define ENSRQUERYDOMAINTOOLONG 176 /* Domain name is too long */ |
||||
#define ENSRCNAMELOOP 177 /* Domain name is too long */ |
||||
|
||||
#ifndef errno |
||||
extern int errno; |
||||
#endif |
||||
|
||||
#endif /* LWIP_PROVIDE_ERRNO */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_ARCH_H__ */ |
@ -1,119 +0,0 @@ |
||||
/**
|
||||
* @file |
||||
* |
||||
* AutoIP Automatic LinkLocal IP Configuration |
||||
*/ |
||||
|
||||
/*
|
||||
* |
||||
* Copyright (c) 2007 Dominik Spies <kontakt@dspies.de> |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT |
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY |
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* Author: Dominik Spies <kontakt@dspies.de> |
||||
* |
||||
* This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform |
||||
* with RFC 3927. |
||||
* |
||||
* |
||||
* Please coordinate changes and requests with Dominik Spies |
||||
* <kontakt@dspies.de> |
||||
*/ |
||||
|
||||
#ifndef __LWIP_AUTOIP_H__ |
||||
#define __LWIP_AUTOIP_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include "lwip/netif.h" |
||||
#include "lwip/udp.h" |
||||
#include "netif/etharp.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* AutoIP Timing */ |
||||
#define AUTOIP_TMR_INTERVAL 100 |
||||
#define AUTOIP_TICKS_PER_SECOND (1000 / AUTOIP_TMR_INTERVAL) |
||||
|
||||
/* RFC 3927 Constants */ |
||||
#define PROBE_WAIT 1 /* second (initial random delay) */ |
||||
#define PROBE_MIN 1 /* second (minimum delay till repeated probe) */ |
||||
#define PROBE_MAX 2 /* seconds (maximum delay till repeated probe) */ |
||||
#define PROBE_NUM 3 /* (number of probe packets) */ |
||||
#define ANNOUNCE_NUM 2 /* (number of announcement packets) */ |
||||
#define ANNOUNCE_INTERVAL 2 /* seconds (time between announcement packets) */ |
||||
#define ANNOUNCE_WAIT 2 /* seconds (delay before announcing) */ |
||||
#define MAX_CONFLICTS 10 /* (max conflicts before rate limiting) */ |
||||
#define RATE_LIMIT_INTERVAL 60 /* seconds (delay between successive attempts) */ |
||||
#define DEFEND_INTERVAL 10 /* seconds (min. wait between defensive ARPs) */ |
||||
|
||||
/* AutoIP client states */ |
||||
#define AUTOIP_STATE_OFF 0 |
||||
#define AUTOIP_STATE_PROBING 1 |
||||
#define AUTOIP_STATE_ANNOUNCING 2 |
||||
#define AUTOIP_STATE_BOUND 3 |
||||
|
||||
struct autoip |
||||
{ |
||||
ip_addr_t llipaddr; /* the currently selected, probed, announced or used LL IP-Address */ |
||||
u8_t state; /* current AutoIP state machine state */ |
||||
u8_t sent_num; /* sent number of probes or announces, dependent on state */ |
||||
u16_t ttw; /* ticks to wait, tick is AUTOIP_TMR_INTERVAL long */ |
||||
u8_t lastconflict; /* ticks until a conflict can be solved by defending */ |
||||
u8_t tried_llipaddr; /* total number of probed/used Link Local IP-Addresses */ |
||||
}; |
||||
|
||||
|
||||
/** Init srand, has to be called before entering mainloop */ |
||||
void autoip_init(void); |
||||
|
||||
/** Set a struct autoip allocated by the application to work with */ |
||||
void autoip_set_struct(struct netif *netif, struct autoip *autoip); |
||||
|
||||
/** Start AutoIP client */ |
||||
err_t autoip_start(struct netif *netif); |
||||
|
||||
/** Stop AutoIP client */ |
||||
err_t autoip_stop(struct netif *netif); |
||||
|
||||
/** Handles every incoming ARP Packet, called by etharp_arp_input */ |
||||
void autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr); |
||||
|
||||
/** Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds */ |
||||
void autoip_tmr(void); |
||||
|
||||
/** Handle a possible change in the network configuration */ |
||||
void autoip_network_changed(struct netif *netif); |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_AUTOIP */ |
||||
|
||||
#endif /* __LWIP_AUTOIP_H__ */ |
@ -1,98 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_DEBUG_H__ |
||||
#define __LWIP_DEBUG_H__ |
||||
|
||||
#include "lwip/arch.h" |
||||
|
||||
/** lower two bits indicate debug level
|
||||
* - 0 all |
||||
* - 1 warning |
||||
* - 2 serious |
||||
* - 3 severe |
||||
*/ |
||||
#define LWIP_DBG_LEVEL_ALL 0x00 |
||||
#define LWIP_DBG_LEVEL_OFF LWIP_DBG_LEVEL_ALL /* compatibility define only */ |
||||
#define LWIP_DBG_LEVEL_WARNING 0x01 /* bad checksums, dropped packets, ... */ |
||||
#define LWIP_DBG_LEVEL_SERIOUS 0x02 /* memory allocation failures, ... */ |
||||
#define LWIP_DBG_LEVEL_SEVERE 0x03 |
||||
#define LWIP_DBG_MASK_LEVEL 0x03 |
||||
|
||||
/** flag for LWIP_DEBUGF to enable that debug message */ |
||||
#define LWIP_DBG_ON 0x80U |
||||
/** flag for LWIP_DEBUGF to disable that debug message */ |
||||
#define LWIP_DBG_OFF 0x00U |
||||
|
||||
/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */ |
||||
#define LWIP_DBG_TRACE 0x40U |
||||
/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */ |
||||
#define LWIP_DBG_STATE 0x20U |
||||
/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */ |
||||
#define LWIP_DBG_FRESH 0x10U |
||||
/** flag for LWIP_DEBUGF to halt after printing this debug message */ |
||||
#define LWIP_DBG_HALT 0x08U |
||||
|
||||
#ifndef LWIP_NOASSERT |
||||
#define LWIP_ASSERT(message, assertion) do { if(!(assertion)) \ |
||||
LWIP_PLATFORM_ASSERT(message); } while(0) |
||||
#else /* LWIP_NOASSERT */ |
||||
#define LWIP_ASSERT(message, assertion) |
||||
#endif /* LWIP_NOASSERT */ |
||||
|
||||
/** if "expression" isn't true, then print "message" and execute "handler" expression */ |
||||
#ifndef LWIP_ERROR |
||||
#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ |
||||
LWIP_PLATFORM_ASSERT(message); handler;}} while(0) |
||||
#endif /* LWIP_ERROR */ |
||||
|
||||
#ifdef LWIP_DEBUG |
||||
/** print debug message only if debug message type is enabled...
|
||||
* AND is of correct type AND is at least LWIP_DBG_LEVEL |
||||
*/ |
||||
#define LWIP_DEBUGF(debug, message) do { \ |
||||
if ( \
|
||||
((debug) & LWIP_DBG_ON) && \
|
||||
((debug) & LWIP_DBG_TYPES_ON) && \
|
||||
((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \
|
||||
LWIP_PLATFORM_DIAG(message); \
|
||||
if ((debug) & LWIP_DBG_HALT) { \
|
||||
while(1); \
|
||||
} \
|
||||
} \
|
||||
} while(0) |
||||
|
||||
#else /* LWIP_DEBUG */ |
||||
#define LWIP_DEBUGF(debug, message) |
||||
#endif /* LWIP_DEBUG */ |
||||
|
||||
#endif /* __LWIP_DEBUG_H__ */ |
||||
|
@ -1,127 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_DEF_H__ |
||||
#define __LWIP_DEF_H__ |
||||
|
||||
/* arch.h might define NULL already */ |
||||
#include "lwip/arch.h" |
||||
#include "lwip/opt.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#define LWIP_MAX(x , y) (((x) > (y)) ? (x) : (y)) |
||||
#define LWIP_MIN(x , y) (((x) < (y)) ? (x) : (y)) |
||||
|
||||
#ifndef NULL |
||||
#define NULL ((void *)0) |
||||
#endif |
||||
|
||||
/** Get the absolute difference between 2 u32_t values (correcting overflows)
|
||||
* 'a' is expected to be 'higher' (without overflow) than 'b'. */ |
||||
#define LWIP_U32_DIFF(a, b) (((a) >= (b)) ? ((a) - (b)) : (((a) + ((b) ^ 0xFFFFFFFF) + 1))) |
||||
|
||||
/* Endianess-optimized shifting of two u8_t to create one u16_t */ |
||||
#if BYTE_ORDER == LITTLE_ENDIAN |
||||
#define LWIP_MAKE_U16(a, b) ((a << 8) | b) |
||||
#else |
||||
#define LWIP_MAKE_U16(a, b) ((b << 8) | a) |
||||
#endif |
||||
|
||||
#ifndef LWIP_PLATFORM_BYTESWAP |
||||
#define LWIP_PLATFORM_BYTESWAP 0 |
||||
#endif |
||||
|
||||
#ifndef LWIP_PREFIX_BYTEORDER_FUNCS |
||||
/* workaround for naming collisions on some platforms */ |
||||
|
||||
#ifdef htons |
||||
#undef htons |
||||
#endif /* htons */ |
||||
#ifdef htonl |
||||
#undef htonl |
||||
#endif /* htonl */ |
||||
#ifdef ntohs |
||||
#undef ntohs |
||||
#endif /* ntohs */ |
||||
#ifdef ntohl |
||||
#undef ntohl |
||||
#endif /* ntohl */ |
||||
|
||||
#define htons(x) lwip_htons(x) |
||||
#define ntohs(x) lwip_ntohs(x) |
||||
#define htonl(x) lwip_htonl(x) |
||||
#define ntohl(x) lwip_ntohl(x) |
||||
#endif /* LWIP_PREFIX_BYTEORDER_FUNCS */ |
||||
|
||||
#if BYTE_ORDER == BIG_ENDIAN |
||||
#define lwip_htons(x) (x) |
||||
#define lwip_ntohs(x) (x) |
||||
#define lwip_htonl(x) (x) |
||||
#define lwip_ntohl(x) (x) |
||||
#define PP_HTONS(x) (x) |
||||
#define PP_NTOHS(x) (x) |
||||
#define PP_HTONL(x) (x) |
||||
#define PP_NTOHL(x) (x) |
||||
#else /* BYTE_ORDER != BIG_ENDIAN */ |
||||
#if LWIP_PLATFORM_BYTESWAP |
||||
#define lwip_htons(x) LWIP_PLATFORM_HTONS(x) |
||||
#define lwip_ntohs(x) LWIP_PLATFORM_HTONS(x) |
||||
#define lwip_htonl(x) LWIP_PLATFORM_HTONL(x) |
||||
#define lwip_ntohl(x) LWIP_PLATFORM_HTONL(x) |
||||
#else /* LWIP_PLATFORM_BYTESWAP */ |
||||
u16_t lwip_htons(u16_t x); |
||||
u16_t lwip_ntohs(u16_t x); |
||||
u32_t lwip_htonl(u32_t x); |
||||
u32_t lwip_ntohl(u32_t x); |
||||
#endif /* LWIP_PLATFORM_BYTESWAP */ |
||||
|
||||
/* These macros should be calculated by the preprocessor and are used
|
||||
with compile-time constants only (so that there is no little-endian |
||||
overhead at runtime). */ |
||||
#define PP_HTONS(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8)) |
||||
#define PP_NTOHS(x) PP_HTONS(x) |
||||
#define PP_HTONL(x) ((((x) & 0xff) << 24) | \ |
||||
(((x) & 0xff00) << 8) | \
|
||||
(((x) & 0xff0000UL) >> 8) | \
|
||||
(((x) & 0xff000000UL) >> 24)) |
||||
#define PP_NTOHL(x) PP_HTONL(x) |
||||
|
||||
#endif /* BYTE_ORDER == BIG_ENDIAN */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_DEF_H__ */ |
||||
|
@ -1,243 +0,0 @@ |
||||
/** @file
|
||||
*/ |
||||
|
||||
#ifndef __LWIP_DHCP_H__ |
||||
#define __LWIP_DHCP_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include "lwip/netif.h" |
||||
#include "lwip/udp.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/** period (in seconds) of the application calling dhcp_coarse_tmr() */ |
||||
#define DHCP_COARSE_TIMER_SECS 60 |
||||
/** period (in milliseconds) of the application calling dhcp_coarse_tmr() */ |
||||
#define DHCP_COARSE_TIMER_MSECS (DHCP_COARSE_TIMER_SECS * 1000UL) |
||||
/** period (in milliseconds) of the application calling dhcp_fine_tmr() */ |
||||
#define DHCP_FINE_TIMER_MSECS 500 |
||||
|
||||
#define DHCP_CHADDR_LEN 16U |
||||
#define DHCP_SNAME_LEN 64U |
||||
#define DHCP_FILE_LEN 128U |
||||
|
||||
struct dhcp |
||||
{ |
||||
/** transaction identifier of last sent request */
|
||||
u32_t xid; |
||||
/** our connection to the DHCP server */
|
||||
struct udp_pcb *pcb; |
||||
/** incoming msg */ |
||||
struct dhcp_msg *msg_in; |
||||
/** current DHCP state machine state */ |
||||
u8_t state; |
||||
/** retries of current request */ |
||||
u8_t tries; |
||||
#if LWIP_DHCP_AUTOIP_COOP |
||||
u8_t autoip_coop_state; |
||||
#endif |
||||
u8_t subnet_mask_given; |
||||
|
||||
struct pbuf *p_out; /* pbuf of outcoming msg */ |
||||
struct dhcp_msg *msg_out; /* outgoing msg */ |
||||
u16_t options_out_len; /* outgoing msg options length */ |
||||
u16_t request_timeout; /* #ticks with period DHCP_FINE_TIMER_SECS for request timeout */ |
||||
u16_t t1_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for renewal time */ |
||||
u16_t t2_timeout; /* #ticks with period DHCP_COARSE_TIMER_SECS for rebind time */ |
||||
ip_addr_t server_ip_addr; /* dhcp server address that offered this lease */ |
||||
ip_addr_t offered_ip_addr; |
||||
ip_addr_t offered_sn_mask; |
||||
ip_addr_t offered_gw_addr; |
||||
|
||||
u32_t offered_t0_lease; /* lease period (in seconds) */ |
||||
u32_t offered_t1_renew; /* recommended renew time (usually 50% of lease period) */ |
||||
u32_t offered_t2_rebind; /* recommended rebind time (usually 66% of lease period) */ |
||||
/* @todo: LWIP_DHCP_BOOTP_FILE configuration option?
|
||||
integrate with possible TFTP-client for booting? */ |
||||
#define LWIP_DHCP_BOOTP_FILE 0 |
||||
#if LWIP_DHCP_BOOTP_FILE |
||||
ip_addr_t offered_si_addr; |
||||
char boot_file_name[DHCP_FILE_LEN]; |
||||
#endif /* LWIP_DHCP_BOOTPFILE */ |
||||
}; |
||||
|
||||
/* MUST be compiled with "pack structs" or equivalent! */ |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
/** minimum set of fields of any DHCP message */ |
||||
struct dhcp_msg |
||||
{ |
||||
PACK_STRUCT_FIELD(u8_t op); |
||||
PACK_STRUCT_FIELD(u8_t htype); |
||||
PACK_STRUCT_FIELD(u8_t hlen); |
||||
PACK_STRUCT_FIELD(u8_t hops); |
||||
PACK_STRUCT_FIELD(u32_t xid); |
||||
PACK_STRUCT_FIELD(u16_t secs); |
||||
PACK_STRUCT_FIELD(u16_t flags); |
||||
PACK_STRUCT_FIELD(ip_addr_p_t ciaddr); |
||||
PACK_STRUCT_FIELD(ip_addr_p_t yiaddr); |
||||
PACK_STRUCT_FIELD(ip_addr_p_t siaddr); |
||||
PACK_STRUCT_FIELD(ip_addr_p_t giaddr); |
||||
PACK_STRUCT_FIELD(u8_t chaddr[DHCP_CHADDR_LEN]); |
||||
PACK_STRUCT_FIELD(u8_t sname[DHCP_SNAME_LEN]); |
||||
PACK_STRUCT_FIELD(u8_t file[DHCP_FILE_LEN]); |
||||
PACK_STRUCT_FIELD(u32_t cookie); |
||||
#define DHCP_MIN_OPTIONS_LEN 68U |
||||
/** make sure user does not configure this too small */ |
||||
#if ((defined(DHCP_OPTIONS_LEN)) && (DHCP_OPTIONS_LEN < DHCP_MIN_OPTIONS_LEN)) |
||||
# undef DHCP_OPTIONS_LEN |
||||
#endif |
||||
/** allow this to be configured in lwipopts.h, but not too small */ |
||||
#if (!defined(DHCP_OPTIONS_LEN)) |
||||
/** set this to be sufficient for your options in outgoing DHCP msgs */ |
||||
# define DHCP_OPTIONS_LEN DHCP_MIN_OPTIONS_LEN |
||||
#endif |
||||
PACK_STRUCT_FIELD(u8_t options[DHCP_OPTIONS_LEN]); |
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
void dhcp_set_struct(struct netif *netif, struct dhcp *dhcp); |
||||
/** Remove a struct dhcp previously set to the netif using dhcp_set_struct() */ |
||||
#define dhcp_remove_struct(netif) do { (netif)->dhcp = NULL; } while(0) |
||||
void dhcp_cleanup(struct netif *netif); |
||||
/** start DHCP configuration */ |
||||
err_t dhcp_start(struct netif *netif); |
||||
/** enforce early lease renewal (not needed normally)*/ |
||||
err_t dhcp_renew(struct netif *netif); |
||||
/** release the DHCP lease, usually called before dhcp_stop()*/ |
||||
err_t dhcp_release(struct netif *netif); |
||||
/** stop DHCP configuration */ |
||||
void dhcp_stop(struct netif *netif); |
||||
/** inform server of our manual IP address */ |
||||
void dhcp_inform(struct netif *netif); |
||||
/** Handle a possible change in the network configuration */ |
||||
void dhcp_network_changed(struct netif *netif); |
||||
|
||||
/** if enabled, check whether the offered IP address is not in use, using ARP */ |
||||
#if DHCP_DOES_ARP_CHECK |
||||
void dhcp_arp_reply(struct netif *netif, ip_addr_t *addr); |
||||
#endif |
||||
|
||||
/** to be called every minute */ |
||||
void dhcp_coarse_tmr(void); |
||||
/** to be called every half second */ |
||||
void dhcp_fine_tmr(void); |
||||
|
||||
/** DHCP message item offsets and length */ |
||||
#define DHCP_OP_OFS 0 |
||||
#define DHCP_HTYPE_OFS 1 |
||||
#define DHCP_HLEN_OFS 2 |
||||
#define DHCP_HOPS_OFS 3 |
||||
#define DHCP_XID_OFS 4 |
||||
#define DHCP_SECS_OFS 8 |
||||
#define DHCP_FLAGS_OFS 10 |
||||
#define DHCP_CIADDR_OFS 12 |
||||
#define DHCP_YIADDR_OFS 16 |
||||
#define DHCP_SIADDR_OFS 20 |
||||
#define DHCP_GIADDR_OFS 24 |
||||
#define DHCP_CHADDR_OFS 28 |
||||
#define DHCP_SNAME_OFS 44 |
||||
#define DHCP_FILE_OFS 108 |
||||
#define DHCP_MSG_LEN 236 |
||||
|
||||
#define DHCP_COOKIE_OFS DHCP_MSG_LEN |
||||
#define DHCP_OPTIONS_OFS (DHCP_MSG_LEN + 4) |
||||
|
||||
#define DHCP_CLIENT_PORT 68 |
||||
#define DHCP_SERVER_PORT 67 |
||||
|
||||
/** DHCP client states */ |
||||
#define DHCP_OFF 0 |
||||
#define DHCP_REQUESTING 1 |
||||
#define DHCP_INIT 2 |
||||
#define DHCP_REBOOTING 3 |
||||
#define DHCP_REBINDING 4 |
||||
#define DHCP_RENEWING 5 |
||||
#define DHCP_SELECTING 6 |
||||
#define DHCP_INFORMING 7 |
||||
#define DHCP_CHECKING 8 |
||||
#define DHCP_PERMANENT 9 |
||||
#define DHCP_BOUND 10 |
||||
/** not yet implemented #define DHCP_RELEASING 11 */ |
||||
#define DHCP_BACKING_OFF 12 |
||||
|
||||
/** AUTOIP cooperatation flags */ |
||||
#define DHCP_AUTOIP_COOP_STATE_OFF 0 |
||||
#define DHCP_AUTOIP_COOP_STATE_ON 1 |
||||
|
||||
#define DHCP_BOOTREQUEST 1 |
||||
#define DHCP_BOOTREPLY 2 |
||||
|
||||
/** DHCP message types */ |
||||
#define DHCP_DISCOVER 1 |
||||
#define DHCP_OFFER 2 |
||||
#define DHCP_REQUEST 3 |
||||
#define DHCP_DECLINE 4 |
||||
#define DHCP_ACK 5 |
||||
#define DHCP_NAK 6 |
||||
#define DHCP_RELEASE 7 |
||||
#define DHCP_INFORM 8 |
||||
|
||||
/** DHCP hardware type, currently only ethernet is supported */ |
||||
#define DHCP_HTYPE_ETH 1 |
||||
|
||||
#define DHCP_MAGIC_COOKIE 0x63825363UL |
||||
|
||||
/* This is a list of options for BOOTP and DHCP, see RFC 2132 for descriptions */ |
||||
|
||||
/** BootP options */ |
||||
#define DHCP_OPTION_PAD 0 |
||||
#define DHCP_OPTION_SUBNET_MASK 1 /* RFC 2132 3.3 */ |
||||
#define DHCP_OPTION_ROUTER 3 |
||||
#define DHCP_OPTION_DNS_SERVER 6 |
||||
#define DHCP_OPTION_HOSTNAME 12 |
||||
#define DHCP_OPTION_IP_TTL 23 |
||||
#define DHCP_OPTION_MTU 26 |
||||
#define DHCP_OPTION_BROADCAST 28 |
||||
#define DHCP_OPTION_TCP_TTL 37 |
||||
#define DHCP_OPTION_END 255 |
||||
|
||||
/** DHCP options */ |
||||
#define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */ |
||||
#define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */ |
||||
#define DHCP_OPTION_OVERLOAD 52 /* RFC2132 9.3, use file and/or sname field for options */ |
||||
|
||||
#define DHCP_OPTION_MESSAGE_TYPE 53 /* RFC 2132 9.6, important for DHCP */ |
||||
#define DHCP_OPTION_MESSAGE_TYPE_LEN 1 |
||||
|
||||
#define DHCP_OPTION_SERVER_ID 54 /* RFC 2132 9.7, server IP address */ |
||||
#define DHCP_OPTION_PARAMETER_REQUEST_LIST 55 /* RFC 2132 9.8, requested option types */ |
||||
|
||||
#define DHCP_OPTION_MAX_MSG_SIZE 57 /* RFC 2132 9.10, message size accepted >= 576 */ |
||||
#define DHCP_OPTION_MAX_MSG_SIZE_LEN 2 |
||||
|
||||
#define DHCP_OPTION_T1 58 /* T1 renewal time */ |
||||
#define DHCP_OPTION_T2 59 /* T2 rebinding time */ |
||||
#define DHCP_OPTION_US 60 |
||||
#define DHCP_OPTION_CLIENT_ID 61 |
||||
#define DHCP_OPTION_TFTP_SERVERNAME 66 |
||||
#define DHCP_OPTION_BOOTFILE 67 |
||||
|
||||
/** possible combinations of overloading the file and sname fields with options */ |
||||
#define DHCP_OVERLOAD_NONE 0 |
||||
#define DHCP_OVERLOAD_FILE 1 |
||||
#define DHCP_OVERLOAD_SNAME 2 |
||||
#define DHCP_OVERLOAD_SNAME_FILE 3 |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_DHCP */ |
||||
|
||||
#endif /*__LWIP_DHCP_H__*/ |
@ -1,124 +0,0 @@ |
||||
/**
|
||||
* lwip DNS resolver header file. |
||||
|
||||
* Author: Jim Pettinato
|
||||
* April 2007 |
||||
|
||||
* ported from uIP resolv.c Copyright (c) 2002-2003, Adam Dunkels. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions |
||||
* are met: |
||||
* 1. Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote |
||||
* products derived from this software without specific prior |
||||
* written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS |
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY |
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
*/ |
||||
|
||||
#ifndef __LWIP_DNS_H__ |
||||
#define __LWIP_DNS_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/** DNS timer period */ |
||||
#define DNS_TMR_INTERVAL 1000 |
||||
|
||||
/** DNS field TYPE used for "Resource Records" */ |
||||
#define DNS_RRTYPE_A 1 /* a host address */ |
||||
#define DNS_RRTYPE_NS 2 /* an authoritative name server */ |
||||
#define DNS_RRTYPE_MD 3 /* a mail destination (Obsolete - use MX) */ |
||||
#define DNS_RRTYPE_MF 4 /* a mail forwarder (Obsolete - use MX) */ |
||||
#define DNS_RRTYPE_CNAME 5 /* the canonical name for an alias */ |
||||
#define DNS_RRTYPE_SOA 6 /* marks the start of a zone of authority */ |
||||
#define DNS_RRTYPE_MB 7 /* a mailbox domain name (EXPERIMENTAL) */ |
||||
#define DNS_RRTYPE_MG 8 /* a mail group member (EXPERIMENTAL) */ |
||||
#define DNS_RRTYPE_MR 9 /* a mail rename domain name (EXPERIMENTAL) */ |
||||
#define DNS_RRTYPE_NULL 10 /* a null RR (EXPERIMENTAL) */ |
||||
#define DNS_RRTYPE_WKS 11 /* a well known service description */ |
||||
#define DNS_RRTYPE_PTR 12 /* a domain name pointer */ |
||||
#define DNS_RRTYPE_HINFO 13 /* host information */ |
||||
#define DNS_RRTYPE_MINFO 14 /* mailbox or mail list information */ |
||||
#define DNS_RRTYPE_MX 15 /* mail exchange */ |
||||
#define DNS_RRTYPE_TXT 16 /* text strings */ |
||||
|
||||
/** DNS field CLASS used for "Resource Records" */ |
||||
#define DNS_RRCLASS_IN 1 /* the Internet */ |
||||
#define DNS_RRCLASS_CS 2 /* the CSNET class (Obsolete - used only for examples in some obsolete RFCs) */ |
||||
#define DNS_RRCLASS_CH 3 /* the CHAOS class */ |
||||
#define DNS_RRCLASS_HS 4 /* Hesiod [Dyer 87] */ |
||||
#define DNS_RRCLASS_FLUSH 0x800 /* Flush bit */ |
||||
|
||||
/* The size used for the next line is rather a hack, but it prevents including socket.h in all files
|
||||
that include memp.h, and that would possibly break portability (since socket.h defines some types |
||||
and constants possibly already define by the OS). |
||||
Calculation rule: |
||||
sizeof(struct addrinfo) + sizeof(struct sockaddr_in) + DNS_MAX_NAME_LENGTH + 1 byte zero-termination */ |
||||
#define NETDB_ELEM_SIZE (32 + 16 + DNS_MAX_NAME_LENGTH + 1) |
||||
|
||||
#if DNS_LOCAL_HOSTLIST |
||||
/** struct used for local host-list */ |
||||
struct local_hostlist_entry { |
||||
/** static hostname */ |
||||
const char *name; |
||||
/** static host address in network byteorder */ |
||||
ip_addr_t addr; |
||||
struct local_hostlist_entry *next; |
||||
}; |
||||
#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC |
||||
#ifndef DNS_LOCAL_HOSTLIST_MAX_NAMELEN |
||||
#define DNS_LOCAL_HOSTLIST_MAX_NAMELEN DNS_MAX_NAME_LENGTH |
||||
#endif |
||||
#define LOCALHOSTLIST_ELEM_SIZE ((sizeof(struct local_hostlist_entry) + DNS_LOCAL_HOSTLIST_MAX_NAMELEN + 1)) |
||||
#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ |
||||
#endif /* DNS_LOCAL_HOSTLIST */ |
||||
|
||||
/** Callback which is invoked when a hostname is found.
|
||||
* A function of this type must be implemented by the application using the DNS resolver. |
||||
* @param name pointer to the name that was looked up. |
||||
* @param ipaddr pointer to an ip_addr_t containing the IP address of the hostname, |
||||
* or NULL if the name could not be found (or on any other error). |
||||
* @param callback_arg a user-specified callback argument passed to dns_gethostbyname |
||||
*/ |
||||
typedef void (*dns_found_callback)(const char *name, ip_addr_t *ipaddr, void *callback_arg); |
||||
|
||||
void dns_init(void); |
||||
void dns_tmr(void); |
||||
void dns_setserver(u8_t numdns, ip_addr_t *dnsserver); |
||||
ip_addr_t dns_getserver(u8_t numdns); |
||||
err_t dns_gethostbyname(const char *hostname, ip_addr_t *addr, |
||||
dns_found_callback found, void *callback_arg); |
||||
|
||||
#if DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC |
||||
int dns_local_removehost(const char *hostname, const ip_addr_t *addr); |
||||
err_t dns_local_addhost(const char *hostname, const ip_addr_t *addr); |
||||
#endif /* DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_DNS */ |
||||
|
||||
#endif /* __LWIP_DNS_H__ */ |
@ -1,86 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_ERR_H__ |
||||
#define __LWIP_ERR_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
#include "lwip/arch.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/** Define LWIP_ERR_T in cc.h if you want to use
|
||||
* a different type for your platform (must be signed). */ |
||||
#ifdef LWIP_ERR_T |
||||
typedef LWIP_ERR_T err_t; |
||||
#else /* LWIP_ERR_T */ |
||||
typedef s8_t err_t; |
||||
#endif /* LWIP_ERR_T*/ |
||||
|
||||
/* Definitions for error constants. */ |
||||
|
||||
#define ERR_OK 0 /* No error, everything OK. */ |
||||
#define ERR_MEM -1 /* Out of memory error. */ |
||||
#define ERR_BUF -2 /* Buffer error. */ |
||||
#define ERR_TIMEOUT -3 /* Timeout. */ |
||||
#define ERR_RTE -4 /* Routing problem. */ |
||||
#define ERR_INPROGRESS -5 /* Operation in progress */ |
||||
#define ERR_VAL -6 /* Illegal value. */ |
||||
#define ERR_WOULDBLOCK -7 /* Operation would block. */ |
||||
|
||||
#define ERR_IS_FATAL(e) ((e) < ERR_WOULDBLOCK) |
||||
|
||||
#define ERR_ABRT -8 /* Connection aborted. */ |
||||
#define ERR_RST -9 /* Connection reset. */ |
||||
#define ERR_CLSD -10 /* Connection closed. */ |
||||
#define ERR_CONN -11 /* Not connected. */ |
||||
|
||||
#define ERR_ARG -12 /* Illegal argument. */ |
||||
|
||||
#define ERR_USE -13 /* Address in use. */ |
||||
|
||||
#define ERR_IF -14 /* Low-level netif error */ |
||||
#define ERR_ISCONN -15 /* Already connected. */ |
||||
|
||||
|
||||
#ifdef LWIP_DEBUG |
||||
extern const char *lwip_strerr(err_t err)ICACHE_FLASH_ATTR; |
||||
#else |
||||
#define lwip_strerr(x) "" |
||||
#endif /* LWIP_DEBUG */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_ERR_H__ */ |
@ -1,115 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_ICMP_H__ |
||||
#define __LWIP_ICMP_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/ip_addr.h" |
||||
#include "lwip/netif.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#define ICMP_ER 0 /* echo reply */ |
||||
#define ICMP_DUR 3 /* destination unreachable */ |
||||
#define ICMP_SQ 4 /* source quench */ |
||||
#define ICMP_RD 5 /* redirect */ |
||||
#define ICMP_ECHO 8 /* echo */ |
||||
#define ICMP_TE 11 /* time exceeded */ |
||||
#define ICMP_PP 12 /* parameter problem */ |
||||
#define ICMP_TS 13 /* timestamp */ |
||||
#define ICMP_TSR 14 /* timestamp reply */ |
||||
#define ICMP_IRQ 15 /* information request */ |
||||
#define ICMP_IR 16 /* information reply */ |
||||
|
||||
enum icmp_dur_type { |
||||
ICMP_DUR_NET = 0, /* net unreachable */ |
||||
ICMP_DUR_HOST = 1, /* host unreachable */ |
||||
ICMP_DUR_PROTO = 2, /* protocol unreachable */ |
||||
ICMP_DUR_PORT = 3, /* port unreachable */ |
||||
ICMP_DUR_FRAG = 4, /* fragmentation needed and DF set */ |
||||
ICMP_DUR_SR = 5 /* source route failed */ |
||||
}; |
||||
|
||||
enum icmp_te_type { |
||||
ICMP_TE_TTL = 0, /* time to live exceeded in transit */ |
||||
ICMP_TE_FRAG = 1 /* fragment reassembly time exceeded */ |
||||
}; |
||||
|
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
/** This is the standard ICMP header only that the u32_t data
|
||||
* is splitted to two u16_t like ICMP echo needs it. |
||||
* This header is also used for other ICMP types that do not |
||||
* use the data part. |
||||
* 定义ICMP回送请求报文首部结构, |
||||
* 由于所有ICMP报文首部有很大相似性, |
||||
* 该结构同样适用于其它ICMP报文。 |
||||
*/ |
||||
PACK_STRUCT_BEGIN |
||||
struct icmp_echo_hdr { |
||||
PACK_STRUCT_FIELD(u8_t type); |
||||
PACK_STRUCT_FIELD(u8_t code); |
||||
PACK_STRUCT_FIELD(u16_t chksum); |
||||
PACK_STRUCT_FIELD(u16_t id); |
||||
PACK_STRUCT_FIELD(u16_t seqno); |
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
//读取ICMP首部中字段
|
||||
#define ICMPH_TYPE(hdr) ((hdr)->type) |
||||
#define ICMPH_CODE(hdr) ((hdr)->code) |
||||
|
||||
/** Combines type and code to an u16_t 向ICMP报文首部字段中写入相应值*/ |
||||
#define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t)) |
||||
#define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c)) |
||||
|
||||
|
||||
#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
void icmp_input(struct pbuf *p, struct netif *inp)ICACHE_FLASH_ATTR; |
||||
void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t)ICACHE_FLASH_ATTR; |
||||
void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t)ICACHE_FLASH_ATTR; |
||||
|
||||
#endif /* LWIP_ICMP */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_ICMP_H__ */ |
@ -1,106 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2002 CITEL Technologies Ltd. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of CITEL Technologies Ltd nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY CITEL TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' |
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL CITEL TECHNOLOGIES OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
* |
||||
* This file is a contribution to the lwIP TCP/IP stack. |
||||
* The Swedish Institute of Computer Science and Adam Dunkels |
||||
* are specifically granted permission to redistribute this |
||||
* source code. |
||||
*/ |
||||
|
||||
#ifndef __LWIP_IGMP_H__ |
||||
#define __LWIP_IGMP_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
#include "lwip/ip_addr.h" |
||||
#include "lwip/netif.h" |
||||
#include "lwip/pbuf.h" |
||||
|
||||
#if LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
|
||||
/* IGMP timer */ |
||||
#define IGMP_TMR_INTERVAL 100 /* Milliseconds */ |
||||
#define IGMP_V1_DELAYING_MEMBER_TMR (1000/IGMP_TMR_INTERVAL) |
||||
#define IGMP_JOIN_DELAYING_MEMBER_TMR (500 /IGMP_TMR_INTERVAL) |
||||
|
||||
/* MAC Filter Actions, these are passed to a netif's
|
||||
* igmp_mac_filter callback function. */ |
||||
#define IGMP_DEL_MAC_FILTER 0 |
||||
#define IGMP_ADD_MAC_FILTER 1 |
||||
|
||||
|
||||
/**
|
||||
* igmp group structure - there is |
||||
* a list of groups for each interface |
||||
* these should really be linked from the interface, but |
||||
* if we keep them separate we will not affect the lwip original code |
||||
* too much |
||||
*
|
||||
* There will be a group for the all systems group address but this
|
||||
* will not run the state machine as it is used to kick off reports |
||||
* from all the other groups |
||||
*/ |
||||
struct igmp_group { |
||||
/** next link */ |
||||
struct igmp_group *next; |
||||
/** interface on which the group is active */ |
||||
struct netif *netif; |
||||
/** multicast address */ |
||||
ip_addr_t group_address; |
||||
/** signifies we were the last person to report */ |
||||
u8_t last_reporter_flag; |
||||
/** current state of the group */ |
||||
u8_t group_state; |
||||
/** timer for reporting, negative is OFF */ |
||||
u16_t timer; |
||||
/** counter of simultaneous uses */ |
||||
u8_t use; |
||||
}; |
||||
|
||||
/* Prototypes */ |
||||
void igmp_init(void)ICACHE_FLASH_ATTR; |
||||
err_t igmp_start(struct netif *netif)ICACHE_FLASH_ATTR; |
||||
err_t igmp_stop(struct netif *netif)ICACHE_FLASH_ATTR; |
||||
void igmp_report_groups(struct netif *netif)ICACHE_FLASH_ATTR; |
||||
struct igmp_group *igmp_lookfor_group(struct netif *ifp, ip_addr_t *addr)ICACHE_FLASH_ATTR; |
||||
void igmp_input(struct pbuf *p, struct netif *inp, ip_addr_t *dest)ICACHE_FLASH_ATTR; |
||||
err_t igmp_joingroup(ip_addr_t *ifaddr, ip_addr_t *groupaddr)ICACHE_FLASH_ATTR; |
||||
err_t igmp_leavegroup(ip_addr_t *ifaddr, ip_addr_t *groupaddr)ICACHE_FLASH_ATTR; |
||||
void igmp_tmr(void)ICACHE_FLASH_ATTR; |
||||
#define LWIP_RAND() rand() |
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_IGMP */ |
||||
|
||||
#endif /* __LWIP_IGMP_H__ */ |
@ -1,107 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_INET_H__ |
||||
#define __LWIP_INET_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
#include "lwip/def.h" |
||||
#include "lwip/ip_addr.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/** For compatibility with BSD code */ |
||||
struct in_addr { |
||||
u32_t s_addr; |
||||
}; |
||||
|
||||
/** 255.255.255.255 */ |
||||
#define INADDR_NONE IPADDR_NONE |
||||
/** 127.0.0.1 */ |
||||
#define INADDR_LOOPBACK IPADDR_LOOPBACK |
||||
/** 0.0.0.0 */ |
||||
#define INADDR_ANY IPADDR_ANY |
||||
/** 255.255.255.255 */ |
||||
#define INADDR_BROADCAST IPADDR_BROADCAST |
||||
|
||||
/* Definitions of the bits in an Internet address integer.
|
||||
|
||||
On subnets, host and network parts are found according to |
||||
the subnet mask, not these masks. */ |
||||
#define IN_CLASSA(a) IP_CLASSA(a) |
||||
#define IN_CLASSA_NET IP_CLASSA_NET |
||||
#define IN_CLASSA_NSHIFT IP_CLASSA_NSHIFT |
||||
#define IN_CLASSA_HOST IP_CLASSA_HOST |
||||
#define IN_CLASSA_MAX IP_CLASSA_MAX |
||||
|
||||
#define IN_CLASSB(b) IP_CLASSB(b) |
||||
#define IN_CLASSB_NET IP_CLASSB_NET |
||||
#define IN_CLASSB_NSHIFT IP_CLASSB_NSHIFT |
||||
#define IN_CLASSB_HOST IP_CLASSB_HOST |
||||
#define IN_CLASSB_MAX IP_CLASSB_MAX |
||||
|
||||
#define IN_CLASSC(c) IP_CLASSC(c) |
||||
#define IN_CLASSC_NET IP_CLASSC_NET |
||||
#define IN_CLASSC_NSHIFT IP_CLASSC_NSHIFT |
||||
#define IN_CLASSC_HOST IP_CLASSC_HOST |
||||
#define IN_CLASSC_MAX IP_CLASSC_MAX |
||||
|
||||
#define IN_CLASSD(d) IP_CLASSD(d) |
||||
#define IN_CLASSD_NET IP_CLASSD_NET /* These ones aren't really */ |
||||
#define IN_CLASSD_NSHIFT IP_CLASSD_NSHIFT /* net and host fields, but */ |
||||
#define IN_CLASSD_HOST IP_CLASSD_HOST /* routing needn't know. */ |
||||
#define IN_CLASSD_MAX IP_CLASSD_MAX |
||||
|
||||
#define IN_MULTICAST(a) IP_MULTICAST(a) |
||||
|
||||
#define IN_EXPERIMENTAL(a) IP_EXPERIMENTAL(a) |
||||
#define IN_BADCLASS(a) IP_BADCLASS(a) |
||||
|
||||
#define IN_LOOPBACKNET IP_LOOPBACKNET |
||||
|
||||
#define inet_addr_from_ipaddr(target_inaddr, source_ipaddr) ((target_inaddr)->s_addr = ip4_addr_get_u32(source_ipaddr)) |
||||
#define inet_addr_to_ipaddr(target_ipaddr, source_inaddr) (ip4_addr_set_u32(target_ipaddr, (source_inaddr)->s_addr)) |
||||
/* ATTENTION: the next define only works because both s_addr and ip_addr_t are an u32_t effectively! */ |
||||
#define inet_addr_to_ipaddr_p(target_ipaddr_p, source_inaddr) ((target_ipaddr_p) = (ip_addr_t*)&((source_inaddr)->s_addr)) |
||||
|
||||
/* directly map this to the lwip internal functions */ |
||||
#define inet_addr(cp) ipaddr_addr(cp) |
||||
#define inet_aton(cp, addr) ipaddr_aton(cp, (ip_addr_t*)addr) |
||||
#define inet_ntoa(addr) ipaddr_ntoa((ip_addr_t*)&(addr)) |
||||
#define inet_ntoa_r(addr, buf, buflen) ipaddr_ntoa_r((ip_addr_t*)&(addr), buf, buflen) |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_INET_H__ */ |
@ -1,90 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_INET_CHKSUM_H__ |
||||
#define __LWIP_INET_CHKSUM_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/ip_addr.h" |
||||
|
||||
/** Swap the bytes in an u16_t: much like htons() for little-endian */ |
||||
#ifndef SWAP_BYTES_IN_WORD |
||||
#if LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN) |
||||
/* little endian and PLATFORM_BYTESWAP defined */ |
||||
#define SWAP_BYTES_IN_WORD(w) LWIP_PLATFORM_HTONS(w) |
||||
#else /* LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN) */ |
||||
/* can't use htons on big endian (or PLATFORM_BYTESWAP not defined)... */ |
||||
#define SWAP_BYTES_IN_WORD(w) (((w) & 0xff) << 8) | (((w) & 0xff00) >> 8) |
||||
#endif /* LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN)*/ |
||||
#endif /* SWAP_BYTES_IN_WORD */ |
||||
|
||||
/** Split an u32_t in two u16_ts and add them up */ |
||||
#ifndef FOLD_U32T |
||||
#define FOLD_U32T(u) (((u) >> 16) + ((u) & 0x0000ffffUL)) |
||||
#endif |
||||
|
||||
#if LWIP_CHECKSUM_ON_COPY |
||||
/** Function-like macro: same as MEMCPY but returns the checksum of copied data
|
||||
as u16_t */ |
||||
#ifndef LWIP_CHKSUM_COPY |
||||
#define LWIP_CHKSUM_COPY(dst, src, len) lwip_chksum_copy(dst, src, len) |
||||
#ifndef LWIP_CHKSUM_COPY_ALGORITHM |
||||
#define LWIP_CHKSUM_COPY_ALGORITHM 1 |
||||
#endif /* LWIP_CHKSUM_COPY_ALGORITHM */ |
||||
#endif /* LWIP_CHKSUM_COPY */ |
||||
#else /* LWIP_CHECKSUM_ON_COPY */ |
||||
#define LWIP_CHKSUM_COPY_ALGORITHM 0 |
||||
#endif /* LWIP_CHECKSUM_ON_COPY */ |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
u16_t inet_chksum(void *dataptr, u16_t len)ICACHE_FLASH_ATTR; |
||||
u16_t inet_chksum_pbuf(struct pbuf *p)ICACHE_FLASH_ATTR; |
||||
u16_t inet_chksum_pseudo(struct pbuf *p, |
||||
ip_addr_t *src, ip_addr_t *dest, |
||||
u8_t proto, u16_t proto_len)ICACHE_FLASH_ATTR; |
||||
u16_t inet_chksum_pseudo_partial(struct pbuf *p, |
||||
ip_addr_t *src, ip_addr_t *dest, |
||||
u8_t proto, u16_t proto_len, u16_t chksum_len)ICACHE_FLASH_ATTR; |
||||
#if LWIP_CHKSUM_COPY_ALGORITHM |
||||
u16_t lwip_chksum_copy(void *dst, const void *src, u16_t len)ICACHE_FLASH_ATTR; |
||||
#endif /* LWIP_CHKSUM_COPY_ALGORITHM */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_INET_H__ */ |
||||
|
@ -1,73 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_INIT_H__ |
||||
#define __LWIP_INIT_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/** X.x.x: Major version of the stack */ |
||||
#define LWIP_VERSION_MAJOR 1U |
||||
/** x.X.x: Minor version of the stack */ |
||||
#define LWIP_VERSION_MINOR 4U |
||||
/** x.x.X: Revision of the stack */ |
||||
#define LWIP_VERSION_REVISION 0U |
||||
/** For release candidates, this is set to 1..254
|
||||
* For official releases, this is set to 255 (LWIP_RC_RELEASE) |
||||
* For development versions (CVS), this is set to 0 (LWIP_RC_DEVELOPMENT) */ |
||||
#define LWIP_VERSION_RC 2U |
||||
|
||||
/** LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */ |
||||
#define LWIP_RC_RELEASE 255U |
||||
/** LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for CVS versions */ |
||||
#define LWIP_RC_DEVELOPMENT 0U |
||||
|
||||
#define LWIP_VERSION_IS_RELEASE (LWIP_VERSION_RC == LWIP_RC_RELEASE) |
||||
#define LWIP_VERSION_IS_DEVELOPMENT (LWIP_VERSION_RC == LWIP_RC_DEVELOPMENT) |
||||
#define LWIP_VERSION_IS_RC ((LWIP_VERSION_RC != LWIP_RC_RELEASE) && (LWIP_VERSION_RC != LWIP_RC_DEVELOPMENT)) |
||||
|
||||
/** Provides the version of the stack */ |
||||
#define LWIP_VERSION (LWIP_VERSION_MAJOR << 24 | LWIP_VERSION_MINOR << 16 | \ |
||||
LWIP_VERSION_REVISION << 8 | LWIP_VERSION_RC) |
||||
|
||||
/* Modules initialization */ |
||||
void lwip_init(void) ICACHE_FLASH_ATTR; |
||||
//void lwip_init(void);
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_INIT_H__ */ |
@ -1,215 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_IP_H__ |
||||
#define __LWIP_IP_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#include "lwip/def.h" |
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/ip_addr.h" |
||||
#include "lwip/err.h" |
||||
#include "lwip/netif.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/** Currently, the function ip_output_if_opt() is only used with IGMP */ |
||||
#define IP_OPTIONS_SEND LWIP_IGMP |
||||
|
||||
#define IP_HLEN 20 |
||||
|
||||
#define IP_PROTO_ICMP 1 |
||||
#define IP_PROTO_IGMP 2 |
||||
#define IP_PROTO_UDP 17 |
||||
#define IP_PROTO_UDPLITE 136 |
||||
#define IP_PROTO_TCP 6 |
||||
|
||||
/* This is passed as the destination address to ip_output_if (not
|
||||
to ip_output), meaning that an IP header already is constructed |
||||
in the pbuf. This is used when TCP retransmits. */ |
||||
#ifdef IP_HDRINCL |
||||
#undef IP_HDRINCL |
||||
#endif /* IP_HDRINCL */ |
||||
#define IP_HDRINCL NULL |
||||
|
||||
#if LWIP_NETIF_HWADDRHINT |
||||
#define IP_PCB_ADDRHINT ;u8_t addr_hint |
||||
#else |
||||
#define IP_PCB_ADDRHINT |
||||
#endif /* LWIP_NETIF_HWADDRHINT */ |
||||
|
||||
/* This is the common part of all PCB types. It needs to be at the
|
||||
beginning of a PCB type definition. It is located here so that |
||||
changes to this common part are made in one location instead of |
||||
having to change all PCB structs. */ |
||||
#define IP_PCB \ |
||||
/* ip addresses in network byte order */ \
|
||||
ip_addr_t local_ip; \
|
||||
ip_addr_t remote_ip; \
|
||||
/* Socket options */ \
|
||||
u8_t so_options; \
|
||||
/* Type Of Service */ \
|
||||
u8_t tos; \
|
||||
/* Time To Live */ \
|
||||
u8_t ttl \
|
||||
/* link layer address resolution hint */ \
|
||||
IP_PCB_ADDRHINT |
||||
|
||||
struct ip_pcb { |
||||
/* Common members of all PCB types */ |
||||
IP_PCB; |
||||
}; |
||||
|
||||
/*
|
||||
* Option flags per-socket. These are the same like SO_XXX. |
||||
*/ |
||||
/*#define SOF_DEBUG (u8_t)0x01U Unimplemented: turn on debugging info recording */ |
||||
#define SOF_ACCEPTCONN (u8_t)0x02U /* socket has had listen() */ |
||||
#define SOF_REUSEADDR (u8_t)0x04U /* allow local address reuse */ |
||||
#define SOF_KEEPALIVE (u8_t)0x08U /* keep connections alive */ |
||||
/*#define SOF_DONTROUTE (u8_t)0x10U Unimplemented: just use interface addresses */ |
||||
#define SOF_BROADCAST (u8_t)0x20U /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ |
||||
/*#define SOF_USELOOPBACK (u8_t)0x40U Unimplemented: bypass hardware when possible */ |
||||
#define SOF_LINGER (u8_t)0x80U /* linger on close if data present */ |
||||
/*#define SOF_OOBINLINE (u16_t)0x0100U Unimplemented: leave received OOB data in line */ |
||||
/*#define SOF_REUSEPORT (u16_t)0x0200U Unimplemented: allow local address & port reuse */ |
||||
|
||||
/* These flags are inherited (e.g. from a listen-pcb to a connection-pcb): */ |
||||
#define SOF_INHERITED (SOF_REUSEADDR|SOF_KEEPALIVE|SOF_LINGER/*|SOF_DEBUG|SOF_DONTROUTE|SOF_OOBINLINE*/) |
||||
|
||||
|
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
struct ip_hdr { |
||||
/* version / header length / type of service */ |
||||
PACK_STRUCT_FIELD(u16_t _v_hl_tos); |
||||
/* total length */ |
||||
PACK_STRUCT_FIELD(u16_t _len); |
||||
/* identification */ |
||||
PACK_STRUCT_FIELD(u16_t _id); |
||||
/* fragment offset field */ |
||||
PACK_STRUCT_FIELD(u16_t _offset); |
||||
#define IP_RF 0x8000 /* reserved fragment flag */ |
||||
#define IP_DF 0x4000 /* dont fragment flag */ |
||||
#define IP_MF 0x2000 /* more fragments flag */ |
||||
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ |
||||
/* time to live */ |
||||
PACK_STRUCT_FIELD(u8_t _ttl); |
||||
/* protocol*/ |
||||
PACK_STRUCT_FIELD(u8_t _proto); |
||||
/* checksum */ |
||||
PACK_STRUCT_FIELD(u16_t _chksum); |
||||
/* source and destination IP addresses */ |
||||
PACK_STRUCT_FIELD(ip_addr_p_t src); |
||||
PACK_STRUCT_FIELD(ip_addr_p_t dest);
|
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
#define IPH_V(hdr) (ntohs((hdr)->_v_hl_tos) >> 12) |
||||
#define IPH_HL(hdr) ((ntohs((hdr)->_v_hl_tos) >> 8) & 0x0f) |
||||
#define IPH_TOS(hdr) (ntohs((hdr)->_v_hl_tos) & 0xff) |
||||
#define IPH_LEN(hdr) ((hdr)->_len) |
||||
#define IPH_ID(hdr) ((hdr)->_id) |
||||
#define IPH_OFFSET(hdr) ((hdr)->_offset) |
||||
#define IPH_TTL(hdr) ((hdr)->_ttl) |
||||
#define IPH_PROTO(hdr) ((hdr)->_proto) |
||||
#define IPH_CHKSUM(hdr) ((hdr)->_chksum) |
||||
|
||||
#define IPH_VHLTOS_SET(hdr, v, hl, tos) (hdr)->_v_hl_tos = (htons(((v) << 12) | ((hl) << 8) | (tos))) |
||||
#define IPH_LEN_SET(hdr, len) (hdr)->_len = (len) |
||||
#define IPH_ID_SET(hdr, id) (hdr)->_id = (id) |
||||
#define IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off) |
||||
#define IPH_TTL_SET(hdr, ttl) (hdr)->_ttl = (u8_t)(ttl) |
||||
#define IPH_PROTO_SET(hdr, proto) (hdr)->_proto = (u8_t)(proto) |
||||
#define IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum) |
||||
|
||||
/** The interface that provided the packet for the current callback invocation. */ |
||||
extern struct netif *current_netif; |
||||
/** Header of the input packet currently being processed. */ |
||||
extern const struct ip_hdr *current_header; |
||||
/** Source IP address of current_header */ |
||||
extern ip_addr_t current_iphdr_src; |
||||
/** Destination IP address of current_header */ |
||||
extern ip_addr_t current_iphdr_dest; |
||||
|
||||
#define ip_init() /* Compatibility define, not init needed. */ |
||||
struct netif *ip_route(ip_addr_t *dest)ICACHE_FLASH_ATTR; |
||||
struct netif *ip_router(ip_addr_t *dest, ip_addr_t *source); |
||||
|
||||
err_t ip_input(struct pbuf *p, struct netif *inp)ICACHE_FLASH_ATTR; |
||||
err_t ip_output(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, |
||||
u8_t ttl, u8_t tos, u8_t proto)ICACHE_FLASH_ATTR; |
||||
err_t ip_output_if(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, |
||||
u8_t ttl, u8_t tos, u8_t proto, |
||||
struct netif *netif)ICACHE_FLASH_ATTR; |
||||
#if LWIP_NETIF_HWADDRHINT |
||||
err_t ip_output_hinted(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, |
||||
u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint)ICACHE_FLASH_ATTR; |
||||
#endif /* LWIP_NETIF_HWADDRHINT */ |
||||
#if IP_OPTIONS_SEND |
||||
err_t ip_output_if_opt(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest, |
||||
u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, |
||||
u16_t optlen)ICACHE_FLASH_ATTR; |
||||
#endif /* IP_OPTIONS_SEND */ |
||||
/** Get the interface that received the current packet.
|
||||
* This function must only be called from a receive callback (udp_recv, |
||||
* raw_recv, tcp_accept). It will return NULL otherwise. */ |
||||
#define ip_current_netif() (current_netif) |
||||
/** Get the IP header of the current packet.
|
||||
* This function must only be called from a receive callback (udp_recv, |
||||
* raw_recv, tcp_accept). It will return NULL otherwise. */ |
||||
#define ip_current_header() (current_header) |
||||
/** Source IP address of current_header */ |
||||
#define ip_current_src_addr() (¤t_iphdr_src) |
||||
/** Destination IP address of current_header */ |
||||
#define ip_current_dest_addr() (¤t_iphdr_dest) |
||||
|
||||
#if IP_DEBUG |
||||
void ip_debug_print(struct pbuf *p)ICACHE_FLASH_ATTR; |
||||
#else |
||||
#define ip_debug_print(p) |
||||
#endif /* IP_DEBUG */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_IP_H__ */ |
||||
|
||||
|
@ -1,256 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT |
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY |
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
* |
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_IP_ADDR_H__ |
||||
#define __LWIP_IP_ADDR_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
#include "lwip/def.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* This is the aligned version of ip_addr_t,
|
||||
used as local variable, on the stack, etc. */ |
||||
struct ip_addr { |
||||
u32_t addr; |
||||
}; |
||||
|
||||
/* This is the packed version of ip_addr_t,
|
||||
used in network headers that are itself packed */ |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
struct ip_addr_packed { |
||||
PACK_STRUCT_FIELD(u32_t addr); |
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
/** ip_addr_t uses a struct for convenience only, so that the same defines can
|
||||
* operate both on ip_addr_t as well as on ip_addr_p_t. */ |
||||
typedef struct ip_addr ip_addr_t; |
||||
typedef struct ip_addr_packed ip_addr_p_t; |
||||
|
||||
/*
|
||||
* struct ipaddr2 is used in the definition of the ARP packet format in |
||||
* order to support compilers that don't have structure packing. |
||||
*/ |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
struct ip_addr2 { |
||||
PACK_STRUCT_FIELD(u16_t addrw[2]); |
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
/* Forward declaration to not include netif.h */ |
||||
struct netif; |
||||
|
||||
extern const ip_addr_t ip_addr_any; |
||||
extern const ip_addr_t ip_addr_broadcast; |
||||
|
||||
/** IP_ADDR_ can be used as a fixed IP address
|
||||
* for the wildcard and the broadcast address |
||||
*/ |
||||
#define IP_ADDR_ANY ((ip_addr_t *)&ip_addr_any) |
||||
#define IP_ADDR_BROADCAST ((ip_addr_t *)&ip_addr_broadcast) |
||||
|
||||
/** 255.255.255.255 */ |
||||
#define IPADDR_NONE ((u32_t)0xffffffffUL) |
||||
/** 127.0.0.1 */ |
||||
#define IPADDR_LOOPBACK ((u32_t)0x7f000001UL) |
||||
/** 0.0.0.0 */ |
||||
#define IPADDR_ANY ((u32_t)0x00000000UL) |
||||
/** 255.255.255.255 */ |
||||
#define IPADDR_BROADCAST ((u32_t)0xffffffffUL) |
||||
|
||||
/* Definitions of the bits in an Internet address integer.
|
||||
|
||||
On subnets, host and network parts are found according to |
||||
the subnet mask, not these masks. */ |
||||
#define IP_CLASSA(a) ((((u32_t)(a)) & 0x80000000UL) == 0) |
||||
#define IP_CLASSA_NET 0xff000000 |
||||
#define IP_CLASSA_NSHIFT 24 |
||||
#define IP_CLASSA_HOST (0xffffffff & ~IP_CLASSA_NET) |
||||
#define IP_CLASSA_MAX 128 |
||||
|
||||
#define IP_CLASSB(a) ((((u32_t)(a)) & 0xc0000000UL) == 0x80000000UL) |
||||
#define IP_CLASSB_NET 0xffff0000 |
||||
#define IP_CLASSB_NSHIFT 16 |
||||
#define IP_CLASSB_HOST (0xffffffff & ~IP_CLASSB_NET) |
||||
#define IP_CLASSB_MAX 65536 |
||||
|
||||
#define IP_CLASSC(a) ((((u32_t)(a)) & 0xe0000000UL) == 0xc0000000UL) |
||||
#define IP_CLASSC_NET 0xffffff00 |
||||
#define IP_CLASSC_NSHIFT 8 |
||||
#define IP_CLASSC_HOST (0xffffffff & ~IP_CLASSC_NET) |
||||
|
||||
#define IP_CLASSD(a) (((u32_t)(a) & 0xf0000000UL) == 0xe0000000UL) |
||||
#define IP_CLASSD_NET 0xf0000000 /* These ones aren't really */ |
||||
#define IP_CLASSD_NSHIFT 28 /* net and host fields, but */ |
||||
#define IP_CLASSD_HOST 0x0fffffff /* routing needn't know. */ |
||||
#define IP_MULTICAST(a) IP_CLASSD(a) |
||||
|
||||
#define IP_EXPERIMENTAL(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) |
||||
#define IP_BADCLASS(a) (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) |
||||
|
||||
#define IP_LOOPBACKNET 127 /* official! */ |
||||
|
||||
|
||||
#if BYTE_ORDER == BIG_ENDIAN |
||||
/** Set an IP address given by the four byte-parts */ |
||||
#define IP4_ADDR(ipaddr, a,b,c,d) \ |
||||
(ipaddr)->addr = ((u32_t)((a) & 0xff) << 24) | \
|
||||
((u32_t)((b) & 0xff) << 16) | \
|
||||
((u32_t)((c) & 0xff) << 8) | \
|
||||
(u32_t)((d) & 0xff) |
||||
#else |
||||
/** Set an IP address given by the four byte-parts.
|
||||
Little-endian version that prevents the use of htonl. */ |
||||
#define IP4_ADDR(ipaddr, a,b,c,d) \ |
||||
(ipaddr)->addr = ((u32_t)((d) & 0xff) << 24) | \
|
||||
((u32_t)((c) & 0xff) << 16) | \
|
||||
((u32_t)((b) & 0xff) << 8) | \
|
||||
(u32_t)((a) & 0xff) |
||||
#endif |
||||
|
||||
/** MEMCPY-like copying of IP addresses where addresses are known to be
|
||||
* 16-bit-aligned if the port is correctly configured (so a port could define |
||||
* this to copying 2 u16_t's) - no NULL-pointer-checking needed. */ |
||||
#ifndef IPADDR2_COPY |
||||
#define IPADDR2_COPY(dest, src) SMEMCPY(dest, src, sizeof(ip_addr_t)) |
||||
#endif |
||||
|
||||
/** Copy IP address - faster than ip_addr_set: no NULL check */ |
||||
#define ip_addr_copy(dest, src) ((dest).addr = (src).addr) |
||||
/** Safely copy one IP address to another (src may be NULL) */ |
||||
#define ip_addr_set(dest, src) ((dest)->addr = \ |
||||
((src) == NULL ? 0 : \
|
||||
(src)->addr)) |
||||
/** Set complete address to zero */ |
||||
#define ip_addr_set_zero(ipaddr) ((ipaddr)->addr = 0) |
||||
/** Set address to IPADDR_ANY (no need for htonl()) */ |
||||
#define ip_addr_set_any(ipaddr) ((ipaddr)->addr = IPADDR_ANY) |
||||
/** Set address to loopback address */ |
||||
#define ip_addr_set_loopback(ipaddr) ((ipaddr)->addr = PP_HTONL(IPADDR_LOOPBACK)) |
||||
/** Safely copy one IP address to another and change byte order
|
||||
* from host- to network-order. */ |
||||
#define ip_addr_set_hton(dest, src) ((dest)->addr = \ |
||||
((src) == NULL ? 0:\
|
||||
htonl((src)->addr))) |
||||
/** IPv4 only: set the IP address given as an u32_t */ |
||||
#define ip4_addr_set_u32(dest_ipaddr, src_u32) ((dest_ipaddr)->addr = (src_u32)) |
||||
/** IPv4 only: get the IP address as an u32_t */ |
||||
#define ip4_addr_get_u32(src_ipaddr) ((src_ipaddr)->addr) |
||||
|
||||
/** Get the network address by combining host address with netmask */ |
||||
#define ip_addr_get_network(target, host, netmask) ((target)->addr = ((host)->addr) & ((netmask)->addr)) |
||||
|
||||
/**
|
||||
* Determine if two address are on the same network. |
||||
* |
||||
* @arg addr1 IP address 1 |
||||
* @arg addr2 IP address 2 |
||||
* @arg mask network identifier mask |
||||
* @return !0 if the network identifiers of both address match |
||||
*/ |
||||
#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \ |
||||
(mask)->addr) == \
|
||||
((addr2)->addr & \
|
||||
(mask)->addr)) |
||||
#define ip_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr) |
||||
|
||||
#define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->addr == IPADDR_ANY) |
||||
|
||||
#define ip_addr_isbroadcast(ipaddr, netif) ip4_addr_isbroadcast((ipaddr)->addr, (netif)) |
||||
u8_t ip4_addr_isbroadcast(u32_t addr, const struct netif *netif)ICACHE_FLASH_ATTR; |
||||
|
||||
#define ip_addr_netmask_valid(netmask) ip4_addr_netmask_valid((netmask)->addr) |
||||
u8_t ip4_addr_netmask_valid(u32_t netmask)ICACHE_FLASH_ATTR; |
||||
|
||||
#define ip_addr_ismulticast(addr1) (((addr1)->addr & PP_HTONL(0xf0000000UL)) == PP_HTONL(0xe0000000UL)) |
||||
|
||||
#define ip_addr_islinklocal(addr1) (((addr1)->addr & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xa9fe0000UL)) |
||||
|
||||
#define ip_addr_debug_print(debug, ipaddr) \ |
||||
LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F, \
|
||||
ipaddr != NULL ? ip4_addr1_16(ipaddr) : 0, \
|
||||
ipaddr != NULL ? ip4_addr2_16(ipaddr) : 0, \
|
||||
ipaddr != NULL ? ip4_addr3_16(ipaddr) : 0, \
|
||||
ipaddr != NULL ? ip4_addr4_16(ipaddr) : 0)) |
||||
|
||||
/* Get one byte from the 4-byte address */ |
||||
#define ip4_addr1(ipaddr) (((u8_t*)(ipaddr))[0]) |
||||
#define ip4_addr2(ipaddr) (((u8_t*)(ipaddr))[1]) |
||||
#define ip4_addr3(ipaddr) (((u8_t*)(ipaddr))[2]) |
||||
#define ip4_addr4(ipaddr) (((u8_t*)(ipaddr))[3]) |
||||
/* These are cast to u16_t, with the intent that they are often arguments
|
||||
* to printf using the U16_F format from cc.h. */ |
||||
#define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr)) |
||||
#define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr)) |
||||
#define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr)) |
||||
#define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr)) |
||||
|
||||
/** For backwards compatibility */ |
||||
#define ip_ntoa(ipaddr) ipaddr_ntoa(ipaddr) |
||||
|
||||
u32_t ipaddr_addr(const char *cp)ICACHE_FLASH_ATTR; |
||||
int ipaddr_aton(const char *cp, ip_addr_t *addr)ICACHE_FLASH_ATTR; |
||||
/** returns ptr to static buffer; not reentrant! */ |
||||
char *ipaddr_ntoa(const ip_addr_t *addr)ICACHE_FLASH_ATTR; |
||||
char *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen)ICACHE_FLASH_ATTR; |
||||
|
||||
#define IP2STR(ipaddr) ip4_addr1_16(ipaddr), \ |
||||
ip4_addr2_16(ipaddr), \
|
||||
ip4_addr3_16(ipaddr), \
|
||||
ip4_addr4_16(ipaddr) |
||||
|
||||
#define IPSTR "%d.%d.%d.%d" |
||||
|
||||
struct ip_info { |
||||
struct ip_addr ip; |
||||
struct ip_addr netmask; |
||||
struct ip_addr gw; |
||||
}; |
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_IP_ADDR_H__ */ |
@ -1,88 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Jani Monoses <jani@iv.ro> |
||||
* |
||||
*/ |
||||
|
||||
#ifndef __LWIP_IP_FRAG_H__ |
||||
#define __LWIP_IP_FRAG_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
#include "lwip/err.h" |
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/netif.h" |
||||
#include "lwip/ip_addr.h" |
||||
#include "lwip/ip.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#if IP_REASSEMBLY |
||||
/* The IP reassembly timer interval in milliseconds. */ |
||||
#define IP_TMR_INTERVAL 1000 |
||||
|
||||
/* IP reassembly helper struct.
|
||||
* This is exported because memp needs to know the size. |
||||
*/ |
||||
struct ip_reassdata { |
||||
struct ip_reassdata *next; |
||||
struct pbuf *p; |
||||
struct ip_hdr iphdr; |
||||
u16_t datagram_len; |
||||
u8_t flags; |
||||
u8_t timer; |
||||
}; |
||||
|
||||
void ip_reass_init(void)ICACHE_FLASH_ATTR; |
||||
void ip_reass_tmr(void)ICACHE_FLASH_ATTR; |
||||
struct pbuf * ip_reass(struct pbuf *p)ICACHE_FLASH_ATTR; |
||||
#endif /* IP_REASSEMBLY */ |
||||
|
||||
#if IP_FRAG |
||||
#if !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF |
||||
/** A custom pbuf that holds a reference to another pbuf, which is freed
|
||||
* when this custom pbuf is freed. This is used to create a custom PBUF_REF |
||||
* that points into the original pbuf. */ |
||||
struct pbuf_custom_ref { |
||||
/** 'base class' */ |
||||
struct pbuf_custom pc; |
||||
/** pointer to the original pbuf that is referenced */ |
||||
struct pbuf *original; |
||||
}; |
||||
#endif /* !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF */ |
||||
|
||||
err_t ip_frag(struct pbuf *p, struct netif *netif, ip_addr_t *dest)ICACHE_FLASH_ATTR; |
||||
#endif /* IP_FRAG */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_IP_FRAG_H__ */ |
@ -1,143 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_MEM_H__ |
||||
#define __LWIP_MEM_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
#include "mem_manager.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#if MEM_LIBC_MALLOC |
||||
|
||||
#include <stddef.h> /* for size_t */ |
||||
|
||||
typedef size_t mem_size_t; |
||||
|
||||
/* aliases for C library malloc() */ |
||||
#define mem_init() |
||||
/* in case C library malloc() needs extra protection,
|
||||
* allow these defines to be overridden. |
||||
*/ |
||||
#ifndef mem_free |
||||
#define mem_free vPortFree |
||||
#endif |
||||
#ifndef mem_malloc |
||||
#define mem_malloc pvPortMalloc |
||||
#endif |
||||
#ifndef mem_calloc |
||||
#define mem_calloc pvPortCalloc |
||||
#endif |
||||
#ifndef mem_realloc |
||||
#define mem_realloc pvPortRealloc |
||||
#endif |
||||
#ifndef mem_zalloc |
||||
#define mem_zalloc pvPortZalloc |
||||
#endif |
||||
|
||||
#ifndef os_malloc |
||||
#define os_malloc(s) mem_malloc((s)) |
||||
#endif |
||||
#ifndef os_realloc |
||||
#define os_realloc(p, s) mem_realloc((p), (s)) |
||||
#endif |
||||
#ifndef os_zalloc |
||||
#define os_zalloc(s) mem_zalloc((s)) |
||||
#endif |
||||
#ifndef os_free |
||||
#define os_free(p) mem_free((p)) |
||||
#endif |
||||
|
||||
/* Since there is no C library allocation function to shrink memory without
|
||||
moving it, define this to nothing. */ |
||||
#ifndef mem_trim |
||||
#define mem_trim(mem, size) (mem) |
||||
#endif |
||||
#else /* MEM_LIBC_MALLOC */ |
||||
|
||||
/* MEM_SIZE would have to be aligned, but using 64000 here instead of
|
||||
* 65535 leaves some room for alignment... |
||||
*/ |
||||
#if MEM_SIZE > 64000l |
||||
typedef u32_t mem_size_t; |
||||
#define MEM_SIZE_F U32_F |
||||
#else |
||||
typedef u16_t mem_size_t; |
||||
#define MEM_SIZE_F U16_F |
||||
#endif /* MEM_SIZE > 64000 */ |
||||
|
||||
#if MEM_USE_POOLS |
||||
/** mem_init is not used when using pools instead of a heap */ |
||||
#define mem_init() |
||||
/** mem_trim is not used when using pools instead of a heap:
|
||||
we can't free part of a pool element and don't want to copy the rest */ |
||||
#define mem_trim(mem, size) (mem) |
||||
#else /* MEM_USE_POOLS */ |
||||
/* lwIP alternative malloc */ |
||||
void mem_init(void)ICACHE_FLASH_ATTR; |
||||
void *mem_trim(void *mem, mem_size_t size)ICACHE_FLASH_ATTR; |
||||
#endif /* MEM_USE_POOLS */ |
||||
void *mem_malloc(mem_size_t size)ICACHE_FLASH_ATTR; |
||||
void *mem_calloc(mem_size_t count, mem_size_t size)ICACHE_FLASH_ATTR; |
||||
void mem_free(void *mem)ICACHE_FLASH_ATTR; |
||||
#endif /* MEM_LIBC_MALLOC */ |
||||
|
||||
/** Calculate memory size for an aligned buffer - returns the next highest
|
||||
* multiple of MEM_ALIGNMENT (e.g. LWIP_MEM_ALIGN_SIZE(3) and |
||||
* LWIP_MEM_ALIGN_SIZE(4) will both yield 4 for MEM_ALIGNMENT == 4). |
||||
*/ |
||||
#ifndef LWIP_MEM_ALIGN_SIZE |
||||
#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1)) |
||||
#endif |
||||
|
||||
/** Calculate safe memory size for an aligned buffer when using an unaligned
|
||||
* type as storage. This includes a safety-margin on (MEM_ALIGNMENT - 1) at the |
||||
* start (e.g. if buffer is u8_t[] and actual data will be u32_t*) |
||||
*/ |
||||
#ifndef LWIP_MEM_ALIGN_BUFFER |
||||
#define LWIP_MEM_ALIGN_BUFFER(size) (((size) + MEM_ALIGNMENT - 1)) |
||||
#endif |
||||
|
||||
/** Align a memory pointer to the alignment defined by MEM_ALIGNMENT
|
||||
* so that ADDR % MEM_ALIGNMENT == 0 |
||||
*/ |
||||
#ifndef LWIP_MEM_ALIGN |
||||
#define LWIP_MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + MEM_ALIGNMENT - 1) & ~(mem_ptr_t)(MEM_ALIGNMENT-1))) |
||||
#endif |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_MEM_H__ */ |
@ -1,116 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
|
||||
#ifndef __LWIP_MEMP_H__ |
||||
#define __LWIP_MEMP_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */ |
||||
typedef enum { |
||||
#define LWIP_MEMPOOL(name,num,size,desc, attr) MEMP_##name, |
||||
#include "lwip/memp_std.h" |
||||
MEMP_MAX |
||||
} memp_t; |
||||
|
||||
#if MEM_USE_POOLS |
||||
/* Use a helper type to get the start and end of the user "memory pools" for mem_malloc */ |
||||
typedef enum { |
||||
/* Get the first (via:
|
||||
MEMP_POOL_HELPER_START = ((u8_t) 1*MEMP_POOL_A + 0*MEMP_POOL_B + 0*MEMP_POOL_C + 0)*/ |
||||
MEMP_POOL_HELPER_FIRST = ((u8_t) |
||||
#define LWIP_MEMPOOL(name,num,size,desc) |
||||
#define LWIP_MALLOC_MEMPOOL_START 1 |
||||
#define LWIP_MALLOC_MEMPOOL(num, size) * MEMP_POOL_##size + 0 |
||||
#define LWIP_MALLOC_MEMPOOL_END |
||||
#include "lwip/memp_std.h" |
||||
) , |
||||
/* Get the last (via:
|
||||
MEMP_POOL_HELPER_END = ((u8_t) 0 + MEMP_POOL_A*0 + MEMP_POOL_B*0 + MEMP_POOL_C*1) */ |
||||
MEMP_POOL_HELPER_LAST = ((u8_t) |
||||
#define LWIP_MEMPOOL(name,num,size,desc) |
||||
#define LWIP_MALLOC_MEMPOOL_START |
||||
#define LWIP_MALLOC_MEMPOOL(num, size) 0 + MEMP_POOL_##size * |
||||
#define LWIP_MALLOC_MEMPOOL_END 1 |
||||
#include "lwip/memp_std.h" |
||||
) |
||||
} memp_pool_helper_t; |
||||
|
||||
/* The actual start and stop values are here (cast them over)
|
||||
We use this helper type and these defines so we can avoid using const memp_t values */ |
||||
#define MEMP_POOL_FIRST ((memp_t) MEMP_POOL_HELPER_FIRST) |
||||
#define MEMP_POOL_LAST ((memp_t) MEMP_POOL_HELPER_LAST) |
||||
#endif /* MEM_USE_POOLS */ |
||||
|
||||
#if MEMP_MEM_MALLOC || MEM_USE_POOLS |
||||
extern const u16_t memp_sizes[MEMP_MAX]; |
||||
#endif /* MEMP_MEM_MALLOC || MEM_USE_POOLS */ |
||||
|
||||
#if MEMP_MEM_MALLOC |
||||
|
||||
#include "mem.h" |
||||
|
||||
#define memp_init() |
||||
#define memp_malloc(type) mem_malloc(memp_sizes[type]) |
||||
#define memp_free(type, mem) mem_free(mem) |
||||
|
||||
#else /* MEMP_MEM_MALLOC */ |
||||
|
||||
#if MEM_USE_POOLS |
||||
/** This structure is used to save the pool one element came from. */ |
||||
struct memp_malloc_helper |
||||
{ |
||||
memp_t poolnr; |
||||
}; |
||||
#endif /* MEM_USE_POOLS */ |
||||
|
||||
void memp_init(void)ICACHE_FLASH_ATTR; |
||||
|
||||
#if MEMP_OVERFLOW_CHECK |
||||
void *memp_malloc_fn(memp_t type, const char* file, const int line)ICACHE_FLASH_ATTR; |
||||
#define memp_malloc(t) memp_malloc_fn((t), __FILE__, __LINE__) |
||||
#else |
||||
void *memp_malloc(memp_t type)ICACHE_FLASH_ATTR; |
||||
#endif |
||||
void memp_free(memp_t type, void *mem)ICACHE_FLASH_ATTR; |
||||
|
||||
#endif /* MEMP_MEM_MALLOC */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_MEMP_H__ */ |
@ -1,126 +0,0 @@ |
||||
/*
|
||||
* SETUP: Make sure we define everything we will need. |
||||
* |
||||
* We have create three types of pools: |
||||
* 1) MEMPOOL - standard pools |
||||
* 2) MALLOC_MEMPOOL - to be used by mem_malloc in mem.c |
||||
* 3) PBUF_MEMPOOL - a mempool of pbuf's, so include space for the pbuf struct |
||||
* |
||||
* If the include'r doesn't require any special treatment of each of the types |
||||
* above, then will declare #2 & #3 to be just standard mempools. |
||||
*/ |
||||
#ifndef LWIP_MALLOC_MEMPOOL |
||||
/* This treats "malloc pools" just like any other pool.
|
||||
The pools are a little bigger to provide 'size' as the amount of user data. */ |
||||
#define LWIP_MALLOC_MEMPOOL(num, size) LWIP_MEMPOOL(POOL_##size, num, (size + sizeof(struct memp_malloc_helper)), "MALLOC_"#size, attr) |
||||
#define LWIP_MALLOC_MEMPOOL_START |
||||
#define LWIP_MALLOC_MEMPOOL_END |
||||
#endif /* LWIP_MALLOC_MEMPOOL */ |
||||
|
||||
#ifndef LWIP_PBUF_MEMPOOL |
||||
/* This treats "pbuf pools" just like any other pool.
|
||||
* Allocates buffers for a pbuf struct AND a payload size */ |
||||
#define LWIP_PBUF_MEMPOOL(name, num, payload, desc, attr) LWIP_MEMPOOL(name, num, (MEMP_ALIGN_SIZE(sizeof(struct pbuf)) + MEMP_ALIGN_SIZE(payload)), desc, attr) |
||||
#endif /* LWIP_PBUF_MEMPOOL */ |
||||
|
||||
|
||||
/*
|
||||
* A list of internal pools used by LWIP. |
||||
* |
||||
* LWIP_MEMPOOL(pool_name, number_elements, element_size, pool_description) |
||||
* creates a pool name MEMP_pool_name. description is used in stats.c |
||||
*/ |
||||
#if LWIP_RAW |
||||
LWIP_MEMPOOL(RAW_PCB, MEMP_NUM_RAW_PCB, sizeof(struct raw_pcb), "RAW_PCB", DMEM_ATTR) |
||||
#endif /* LWIP_RAW */ |
||||
|
||||
#if LWIP_UDP |
||||
LWIP_MEMPOOL(UDP_PCB, MEMP_NUM_UDP_PCB, sizeof(struct udp_pcb), "UDP_PCB", DMEM_ATTR) |
||||
#endif /* LWIP_UDP */ |
||||
|
||||
#if LWIP_TCP |
||||
LWIP_MEMPOOL(TCP_PCB, MEMP_NUM_TCP_PCB, sizeof(struct tcp_pcb), "TCP_PCB", DMEM_ATTR) |
||||
LWIP_MEMPOOL(TCP_PCB_LISTEN, MEMP_NUM_TCP_PCB_LISTEN, sizeof(struct tcp_pcb_listen), "TCP_PCB_LISTEN", DMEM_ATTR) |
||||
LWIP_MEMPOOL(TCP_SEG, MEMP_NUM_TCP_SEG, sizeof(struct tcp_seg), "TCP_SEG", DMEM_ATTR) |
||||
#endif /* LWIP_TCP */ |
||||
|
||||
#if IP_REASSEMBLY |
||||
LWIP_MEMPOOL(REASSDATA, MEMP_NUM_REASSDATA, sizeof(struct ip_reassdata), "REASSDATA", DMEM_ATTR) |
||||
#endif /* IP_REASSEMBLY */ |
||||
#if IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF |
||||
LWIP_MEMPOOL(FRAG_PBUF, MEMP_NUM_FRAG_PBUF, sizeof(struct pbuf_custom_ref),"FRAG_PBUF", DMEM_ATTR) |
||||
#endif /* IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF */ |
||||
|
||||
#if LWIP_NETCONN |
||||
LWIP_MEMPOOL(NETBUF, MEMP_NUM_NETBUF, sizeof(struct netbuf), "NETBUF") |
||||
LWIP_MEMPOOL(NETCONN, MEMP_NUM_NETCONN, sizeof(struct netconn), "NETCONN") |
||||
#endif /* LWIP_NETCONN */ |
||||
|
||||
#if NO_SYS==0 |
||||
LWIP_MEMPOOL(TCPIP_MSG_API, MEMP_NUM_TCPIP_MSG_API, sizeof(struct tcpip_msg), "TCPIP_MSG_API") |
||||
#if !LWIP_TCPIP_CORE_LOCKING_INPUT |
||||
LWIP_MEMPOOL(TCPIP_MSG_INPKT,MEMP_NUM_TCPIP_MSG_INPKT, sizeof(struct tcpip_msg), "TCPIP_MSG_INPKT") |
||||
#endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */ |
||||
#endif /* NO_SYS==0 */ |
||||
|
||||
#if ARP_QUEUEING |
||||
LWIP_MEMPOOL(ARP_QUEUE, MEMP_NUM_ARP_QUEUE, sizeof(struct etharp_q_entry), "ARP_QUEUE", DMEM_ATTR) |
||||
#endif /* ARP_QUEUEING */ |
||||
|
||||
#if LWIP_IGMP |
||||
LWIP_MEMPOOL(IGMP_GROUP, MEMP_NUM_IGMP_GROUP, sizeof(struct igmp_group), "IGMP_GROUP", DMEM_ATTR) |
||||
#endif /* LWIP_IGMP */ |
||||
|
||||
#if (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS)) /* LWIP_TIMERS */ |
||||
LWIP_MEMPOOL(SYS_TIMEOUT, MEMP_NUM_SYS_TIMEOUT, sizeof(struct sys_timeo), "SYS_TIMEOUT", DMEM_ATTR) |
||||
#endif /* LWIP_TIMERS */ |
||||
|
||||
#if LWIP_SNMP |
||||
LWIP_MEMPOOL(SNMP_ROOTNODE, MEMP_NUM_SNMP_ROOTNODE, sizeof(struct mib_list_rootnode), "SNMP_ROOTNODE") |
||||
LWIP_MEMPOOL(SNMP_NODE, MEMP_NUM_SNMP_NODE, sizeof(struct mib_list_node), "SNMP_NODE") |
||||
LWIP_MEMPOOL(SNMP_VARBIND, MEMP_NUM_SNMP_VARBIND, sizeof(struct snmp_varbind), "SNMP_VARBIND") |
||||
LWIP_MEMPOOL(SNMP_VALUE, MEMP_NUM_SNMP_VALUE, SNMP_MAX_VALUE_SIZE, "SNMP_VALUE") |
||||
#endif /* LWIP_SNMP */ |
||||
#if LWIP_DNS && LWIP_SOCKET |
||||
LWIP_MEMPOOL(NETDB, MEMP_NUM_NETDB, NETDB_ELEM_SIZE, "NETDB") |
||||
#endif /* LWIP_DNS && LWIP_SOCKET */ |
||||
#if LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC |
||||
LWIP_MEMPOOL(LOCALHOSTLIST, MEMP_NUM_LOCALHOSTLIST, LOCALHOSTLIST_ELEM_SIZE, "LOCALHOSTLIST") |
||||
#endif /* LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ |
||||
#if PPP_SUPPORT && PPPOE_SUPPORT |
||||
LWIP_MEMPOOL(PPPOE_IF, MEMP_NUM_PPPOE_INTERFACES, sizeof(struct pppoe_softc), "PPPOE_IF") |
||||
#endif /* PPP_SUPPORT && PPPOE_SUPPORT */ |
||||
|
||||
/*
|
||||
* A list of pools of pbuf's used by LWIP. |
||||
* |
||||
* LWIP_PBUF_MEMPOOL(pool_name, number_elements, pbuf_payload_size, pool_description) |
||||
* creates a pool name MEMP_pool_name. description is used in stats.c |
||||
* This allocates enough space for the pbuf struct and a payload. |
||||
* (Example: pbuf_payload_size=0 allocates only size for the struct) |
||||
*/ |
||||
LWIP_PBUF_MEMPOOL(PBUF, MEMP_NUM_PBUF, 0, "PBUF_REF/ROM", DMEM_ATTR) |
||||
|
||||
/* XXX: need to align to 4 byte as memp strcut is 4-byte long. otherwise will crash */ |
||||
#define LWIP_MEM_ALIGN4_SIZE(size) (((size) + 4 - 1) & ~(4-1)) |
||||
|
||||
LWIP_PBUF_MEMPOOL(PBUF_POOL, PBUF_POOL_SIZE, LWIP_MEM_ALIGN4_SIZE(PBUF_POOL_BUFSIZE), "PBUF_POOL", DMEM_ATTR) |
||||
|
||||
|
||||
/*
|
||||
* Allow for user-defined pools; this must be explicitly set in lwipopts.h |
||||
* since the default is to NOT look for lwippools.h |
||||
*/ |
||||
#if MEMP_USE_CUSTOM_POOLS |
||||
#include "lwippools.h" |
||||
#endif /* MEMP_USE_CUSTOM_POOLS */ |
||||
|
||||
/*
|
||||
* REQUIRED CLEANUP: Clear up so we don't get "multiply defined" error later |
||||
* (#undef is ignored for something that is not defined) |
||||
*/ |
||||
#undef LWIP_MEMPOOL |
||||
#undef LWIP_MALLOC_MEMPOOL |
||||
#undef LWIP_MALLOC_MEMPOOL_START |
||||
#undef LWIP_MALLOC_MEMPOOL_END |
||||
#undef LWIP_PBUF_MEMPOOL |
@ -1,101 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_NETBUF_H__ |
||||
#define __LWIP_NETBUF_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/ip_addr.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/** This netbuf has dest-addr/port set */ |
||||
#define NETBUF_FLAG_DESTADDR 0x01 |
||||
/** This netbuf includes a checksum */ |
||||
#define NETBUF_FLAG_CHKSUM 0x02 |
||||
|
||||
struct netbuf { |
||||
struct pbuf *p, *ptr; |
||||
ip_addr_t addr; |
||||
u16_t port; |
||||
#if LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY |
||||
#if LWIP_CHECKSUM_ON_COPY |
||||
u8_t flags; |
||||
#endif /* LWIP_CHECKSUM_ON_COPY */ |
||||
u16_t toport_chksum; |
||||
#if LWIP_NETBUF_RECVINFO |
||||
ip_addr_t toaddr; |
||||
#endif /* LWIP_NETBUF_RECVINFO */ |
||||
#endif /* LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY */ |
||||
}; |
||||
|
||||
/* Network buffer functions: */ |
||||
struct netbuf * netbuf_new (void)ICACHE_FLASH_ATTR; |
||||
void netbuf_delete (struct netbuf *buf)ICACHE_FLASH_ATTR; |
||||
void * netbuf_alloc (struct netbuf *buf, u16_t size)ICACHE_FLASH_ATTR; |
||||
void netbuf_free (struct netbuf *buf)ICACHE_FLASH_ATTR; |
||||
err_t netbuf_ref (struct netbuf *buf, |
||||
const void *dataptr, u16_t size)ICACHE_FLASH_ATTR; |
||||
void netbuf_chain (struct netbuf *head, |
||||
struct netbuf *tail)ICACHE_FLASH_ATTR; |
||||
|
||||
err_t netbuf_data (struct netbuf *buf, |
||||
void **dataptr, u16_t *len)ICACHE_FLASH_ATTR; |
||||
s8_t netbuf_next (struct netbuf *buf)ICACHE_FLASH_ATTR; |
||||
void netbuf_first (struct netbuf *buf)ICACHE_FLASH_ATTR; |
||||
|
||||
|
||||
#define netbuf_copy_partial(buf, dataptr, len, offset) \ |
||||
pbuf_copy_partial((buf)->p, (dataptr), (len), (offset)) |
||||
#define netbuf_copy(buf,dataptr,len) netbuf_copy_partial(buf, dataptr, len, 0) |
||||
#define netbuf_take(buf, dataptr, len) pbuf_take((buf)->p, dataptr, len) |
||||
#define netbuf_len(buf) ((buf)->p->tot_len) |
||||
#define netbuf_fromaddr(buf) (&((buf)->addr)) |
||||
#define netbuf_set_fromaddr(buf, fromaddr) ip_addr_set((&(buf)->addr), fromaddr) |
||||
#define netbuf_fromport(buf) ((buf)->port) |
||||
#if LWIP_NETBUF_RECVINFO |
||||
#define netbuf_destaddr(buf) (&((buf)->toaddr)) |
||||
#define netbuf_set_destaddr(buf, destaddr) ip_addr_set((&(buf)->addr), destaddr) |
||||
#define netbuf_destport(buf) (((buf)->flags & NETBUF_FLAG_DESTADDR) ? (buf)->toport_chksum : 0) |
||||
#endif /* LWIP_NETBUF_RECVINFO */ |
||||
#if LWIP_CHECKSUM_ON_COPY |
||||
#define netbuf_set_chksum(buf, chksum) do { (buf)->flags = NETBUF_FLAG_CHKSUM; \ |
||||
(buf)->toport_chksum = chksum; } while(0) |
||||
#endif /* LWIP_CHECKSUM_ON_COPY */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_NETBUF_H__ */ |
@ -1,124 +0,0 @@ |
||||
/*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Simon Goldschmidt |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_NETDB_H__ |
||||
#define __LWIP_NETDB_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_DNS && LWIP_SOCKET |
||||
|
||||
#include <stddef.h> /* for size_t */ |
||||
|
||||
#include "lwip/inet.h" |
||||
#include "lwip/sockets.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* some rarely used options */ |
||||
#ifndef LWIP_DNS_API_DECLARE_H_ERRNO |
||||
#define LWIP_DNS_API_DECLARE_H_ERRNO 1 |
||||
#endif |
||||
|
||||
#ifndef LWIP_DNS_API_DEFINE_ERRORS |
||||
#define LWIP_DNS_API_DEFINE_ERRORS 1 |
||||
#endif |
||||
|
||||
#ifndef LWIP_DNS_API_DECLARE_STRUCTS |
||||
#define LWIP_DNS_API_DECLARE_STRUCTS 1 |
||||
#endif |
||||
|
||||
#if LWIP_DNS_API_DEFINE_ERRORS |
||||
/** Errors used by the DNS API functions, h_errno can be one of them */ |
||||
#define EAI_NONAME 200 |
||||
#define EAI_SERVICE 201 |
||||
#define EAI_FAIL 202 |
||||
#define EAI_MEMORY 203 |
||||
|
||||
#define HOST_NOT_FOUND 210 |
||||
#define NO_DATA 211 |
||||
#define NO_RECOVERY 212 |
||||
#define TRY_AGAIN 213 |
||||
#endif /* LWIP_DNS_API_DEFINE_ERRORS */ |
||||
|
||||
#if LWIP_DNS_API_DECLARE_STRUCTS |
||||
struct hostent { |
||||
char *h_name; /* Official name of the host. */ |
||||
char **h_aliases; /* A pointer to an array of pointers to alternative host names,
|
||||
terminated by a null pointer. */ |
||||
int h_addrtype; /* Address type. */ |
||||
int h_length; /* The length, in bytes, of the address. */ |
||||
char **h_addr_list; /* A pointer to an array of pointers to network addresses (in
|
||||
network byte order) for the host, terminated by a null pointer. */ |
||||
#define h_addr h_addr_list[0] /* for backward compatibility */ |
||||
}; |
||||
|
||||
struct addrinfo { |
||||
int ai_flags; /* Input flags. */ |
||||
int ai_family; /* Address family of socket. */ |
||||
int ai_socktype; /* Socket type. */ |
||||
int ai_protocol; /* Protocol of socket. */ |
||||
socklen_t ai_addrlen; /* Length of socket address. */ |
||||
struct sockaddr *ai_addr; /* Socket address of socket. */ |
||||
char *ai_canonname; /* Canonical name of service location. */ |
||||
struct addrinfo *ai_next; /* Pointer to next in list. */ |
||||
}; |
||||
#endif /* LWIP_DNS_API_DECLARE_STRUCTS */ |
||||
|
||||
#if LWIP_DNS_API_DECLARE_H_ERRNO |
||||
/* application accessable error code set by the DNS API functions */ |
||||
extern int h_errno; |
||||
#endif /* LWIP_DNS_API_DECLARE_H_ERRNO*/ |
||||
|
||||
struct hostent *lwip_gethostbyname(const char *name); |
||||
int lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf, |
||||
size_t buflen, struct hostent **result, int *h_errnop); |
||||
void lwip_freeaddrinfo(struct addrinfo *ai); |
||||
int lwip_getaddrinfo(const char *nodename, |
||||
const char *servname, |
||||
const struct addrinfo *hints, |
||||
struct addrinfo **res); |
||||
|
||||
#if LWIP_COMPAT_SOCKETS |
||||
#define gethostbyname(name) lwip_gethostbyname(name) |
||||
#define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \ |
||||
lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop) |
||||
#define freeaddrinfo(addrinfo) lwip_freeaddrinfo(addrinfo) |
||||
#define getaddrinfo(nodname, servname, hints, res) \ |
||||
lwip_getaddrinfo(nodname, servname, hints, res) |
||||
#endif /* LWIP_COMPAT_SOCKETS */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_DNS && LWIP_SOCKET */ |
||||
|
||||
#endif /* __LWIP_NETDB_H__ */ |
@ -1,315 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_NETIF_H__ |
||||
#define __LWIP_NETIF_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#define ENABLE_LOOPBACK (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) |
||||
|
||||
#include "lwip/err.h" |
||||
|
||||
#include "lwip/ip_addr.h" |
||||
|
||||
#include "lwip/def.h" |
||||
#include "lwip/pbuf.h" |
||||
#if LWIP_DHCP |
||||
struct dhcp; |
||||
#endif |
||||
#if LWIP_AUTOIP |
||||
struct autoip; |
||||
#endif |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Throughout this file, IP addresses are expected to be in
|
||||
* the same byte order as in IP_PCB. */ |
||||
|
||||
/** must be the maximum of all used hardware address lengths
|
||||
across all types of interfaces in use */ |
||||
#define NETIF_MAX_HWADDR_LEN 6U |
||||
|
||||
/** Whether the network interface is 'up'. This is
|
||||
* a software flag used to control whether this network |
||||
* interface is enabled and processes traffic. |
||||
* It is set by the startup code (for static IP configuration) or |
||||
* by dhcp/autoip when an address has been assigned. |
||||
*/ |
||||
#define NETIF_FLAG_UP 0x01U |
||||
/** If set, the netif has broadcast capability.
|
||||
* Set by the netif driver in its init function. */ |
||||
#define NETIF_FLAG_BROADCAST 0x02U |
||||
/** If set, the netif is one end of a point-to-point connection.
|
||||
* Set by the netif driver in its init function. */ |
||||
#define NETIF_FLAG_POINTTOPOINT 0x04U |
||||
/** If set, the interface is configured using DHCP.
|
||||
* Set by the DHCP code when starting or stopping DHCP. */ |
||||
#define NETIF_FLAG_DHCP 0x08U |
||||
/** If set, the interface has an active link
|
||||
* (set by the network interface driver). |
||||
* Either set by the netif driver in its init function (if the link |
||||
* is up at that time) or at a later point once the link comes up |
||||
* (if link detection is supported by the hardware). */ |
||||
#define NETIF_FLAG_LINK_UP 0x10U |
||||
/** If set, the netif is an ethernet device using ARP.
|
||||
* Set by the netif driver in its init function. |
||||
* Used to check input packet types and use of DHCP. */ |
||||
#define NETIF_FLAG_ETHARP 0x20U |
||||
/** If set, the netif is an ethernet device. It might not use
|
||||
* ARP or TCP/IP if it is used for PPPoE only. |
||||
*/ |
||||
#define NETIF_FLAG_ETHERNET 0x40U |
||||
/** If set, the netif has IGMP capability.
|
||||
* Set by the netif driver in its init function. */ |
||||
#define NETIF_FLAG_IGMP 0x80U |
||||
|
||||
/** Function prototype for netif init functions. Set up flags and output/linkoutput
|
||||
* callback functions in this function. |
||||
* |
||||
* @param netif The netif to initialize |
||||
*/ |
||||
typedef err_t (*netif_init_fn)(struct netif *netif); |
||||
/** Function prototype for netif->input functions. This function is saved as 'input'
|
||||
* callback function in the netif struct. Call it when a packet has been received. |
||||
* |
||||
* @param p The received packet, copied into a pbuf |
||||
* @param inp The netif which received the packet |
||||
*/ |
||||
typedef err_t (*netif_input_fn)(struct pbuf *p, struct netif *inp); |
||||
/** Function prototype for netif->output functions. Called by lwIP when a packet
|
||||
* shall be sent. For ethernet netif, set this to 'etharp_output' and set |
||||
* 'linkoutput'. |
||||
* |
||||
* @param netif The netif which shall send a packet |
||||
* @param p The packet to send (p->payload points to IP header) |
||||
* @param ipaddr The IP address to which the packet shall be sent |
||||
*/ |
||||
typedef err_t (*netif_output_fn)(struct netif *netif, struct pbuf *p, |
||||
ip_addr_t *ipaddr); |
||||
/** Function prototype for netif->linkoutput functions. Only used for ethernet
|
||||
* netifs. This function is called by ARP when a packet shall be sent. |
||||
* |
||||
* @param netif The netif which shall send a packet |
||||
* @param p The packet to send (raw ethernet packet) |
||||
*/ |
||||
typedef err_t (*netif_linkoutput_fn)(struct netif *netif, struct pbuf *p); |
||||
/** Function prototype for netif status- or link-callback functions. */ |
||||
typedef void (*netif_status_callback_fn)(struct netif *netif); |
||||
/** Function prototype for netif igmp_mac_filter functions */ |
||||
typedef err_t (*netif_igmp_mac_filter_fn)(struct netif *netif, |
||||
ip_addr_t *group, u8_t action); |
||||
|
||||
/** Generic data structure used for all lwIP network interfaces.
|
||||
* The following fields should be filled in by the initialization |
||||
* function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ |
||||
struct netif { |
||||
/** pointer to next in linked list */ |
||||
struct netif *next; |
||||
|
||||
/** IP address configuration in network byte order */ |
||||
ip_addr_t ip_addr; |
||||
ip_addr_t netmask; |
||||
ip_addr_t gw; |
||||
|
||||
/** This function is called by the network device driver
|
||||
* to pass a packet up the TCP/IP stack. 向IP层输入数据包*/ |
||||
netif_input_fn input; |
||||
/** This function is called by the IP module when it wants
|
||||
* to send a packet on the interface. This function typically |
||||
* first resolves the hardware address, then sends the packet. 发送IP数据包*/ |
||||
netif_output_fn output; |
||||
/** This function is called by the ARP module when it wants
|
||||
* to send a packet on the interface. This function outputs |
||||
* the pbuf as-is on the link medium. 底层数据包发送*/ |
||||
netif_linkoutput_fn linkoutput; |
||||
#if LWIP_NETIF_STATUS_CALLBACK |
||||
/** This function is called when the netif state is set to up or down
|
||||
*/ |
||||
netif_status_callback_fn status_callback; |
||||
#endif /* LWIP_NETIF_STATUS_CALLBACK */ |
||||
#if LWIP_NETIF_LINK_CALLBACK |
||||
/** This function is called when the netif link is set to up or down
|
||||
*/ |
||||
netif_status_callback_fn link_callback; |
||||
#endif /* LWIP_NETIF_LINK_CALLBACK */ |
||||
/** This field can be set by the device driver and could point
|
||||
* to state information for the device. 自由设置字段,比如指向底层设备相关信息*/ |
||||
void *state; |
||||
#if LWIP_DHCP |
||||
/** the DHCP client state information for this netif */ |
||||
struct dhcp *dhcp; |
||||
#endif /* LWIP_DHCP */ |
||||
#if LWIP_AUTOIP |
||||
/** the AutoIP client state information for this netif */ |
||||
struct autoip *autoip; |
||||
#endif |
||||
#if LWIP_NETIF_HOSTNAME |
||||
/* the hostname for this netif, NULL is a valid value */ |
||||
char* hostname; |
||||
#endif /* LWIP_NETIF_HOSTNAME */ |
||||
/** maximum transfer unit (in bytes) 该接口允许的最大数据包长度,多是1500*/ |
||||
u16_t mtu; |
||||
/** number of bytes used in hwaddr该接口物理地址长度 */ |
||||
u8_t hwaddr_len; |
||||
/** link level hardware address of this interface 该接口物理地址*/ |
||||
u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; |
||||
/** flags (see NETIF_FLAG_ above) 该接口状态、属性字段*/ |
||||
u8_t flags; |
||||
/** descriptive abbreviation 该接口的名字*/ |
||||
char name[2]; |
||||
/** number of this interface 该接口的编号*/ |
||||
u8_t num; |
||||
#if LWIP_SNMP |
||||
/** link type (from "snmp_ifType" enum from snmp.h) */ |
||||
u8_t link_type; |
||||
/** (estimate) link speed */ |
||||
u32_t link_speed; |
||||
/** timestamp at last change made (up/down) */ |
||||
u32_t ts; |
||||
/** counters */ |
||||
u32_t ifinoctets; |
||||
u32_t ifinucastpkts; |
||||
u32_t ifinnucastpkts; |
||||
u32_t ifindiscards; |
||||
u32_t ifoutoctets; |
||||
u32_t ifoutucastpkts; |
||||
u32_t ifoutnucastpkts; |
||||
u32_t ifoutdiscards; |
||||
#endif /* LWIP_SNMP */ |
||||
#if LWIP_IGMP |
||||
/** This function could be called to add or delete a entry in the multicast
|
||||
filter table of the ethernet MAC.*/ |
||||
netif_igmp_mac_filter_fn igmp_mac_filter; |
||||
#endif /* LWIP_IGMP */ |
||||
#if LWIP_NETIF_HWADDRHINT |
||||
u8_t *addr_hint; |
||||
#endif /* LWIP_NETIF_HWADDRHINT */ |
||||
#if ENABLE_LOOPBACK |
||||
/* List of packets to be queued for ourselves. 指向发送给自己的数据包的pbuf*/ |
||||
struct pbuf *loop_first;//第一个
|
||||
struct pbuf *loop_last;//最后一个
|
||||
#if LWIP_LOOPBACK_MAX_PBUFS |
||||
u16_t loop_cnt_current; |
||||
#endif /* LWIP_LOOPBACK_MAX_PBUFS */ |
||||
#endif /* ENABLE_LOOPBACK */ |
||||
}; |
||||
|
||||
#if LWIP_SNMP |
||||
#define NETIF_INIT_SNMP(netif, type, speed) \ |
||||
/* use "snmp_ifType" enum from snmp.h for "type", snmp_ifType_ethernet_csmacd by example */ \
|
||||
(netif)->link_type = (type); \
|
||||
/* your link speed here (units: bits per second) */ \
|
||||
(netif)->link_speed = (speed); \
|
||||
(netif)->ts = 0; \
|
||||
(netif)->ifinoctets = 0; \
|
||||
(netif)->ifinucastpkts = 0; \
|
||||
(netif)->ifinnucastpkts = 0; \
|
||||
(netif)->ifindiscards = 0; \
|
||||
(netif)->ifoutoctets = 0; \
|
||||
(netif)->ifoutucastpkts = 0; \
|
||||
(netif)->ifoutnucastpkts = 0; \
|
||||
(netif)->ifoutdiscards = 0 |
||||
#else /* LWIP_SNMP */ |
||||
#define NETIF_INIT_SNMP(netif, type, speed) |
||||
#endif /* LWIP_SNMP */ |
||||
|
||||
|
||||
/** The list of network interfaces. */ |
||||
extern struct netif *netif_list; |
||||
/** The default network interface. */ |
||||
extern struct netif *netif_default; |
||||
|
||||
void netif_init(void)ICACHE_FLASH_ATTR; |
||||
|
||||
struct netif *netif_add(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask, |
||||
ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input)ICACHE_FLASH_ATTR; |
||||
|
||||
void |
||||
netif_set_addr(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask, |
||||
ip_addr_t *gw)ICACHE_FLASH_ATTR; |
||||
void netif_remove(struct netif * netif)ICACHE_FLASH_ATTR; |
||||
|
||||
/* Returns a network interface given its name. The name is of the form
|
||||
"et0", where the first two letters are the "name" field in the |
||||
netif structure, and the digit is in the num field in the same |
||||
structure. */ |
||||
struct netif *netif_find(char *name)ICACHE_FLASH_ATTR; |
||||
|
||||
void netif_set_default(struct netif *netif)ICACHE_FLASH_ATTR; |
||||
|
||||
void netif_set_ipaddr(struct netif *netif, ip_addr_t *ipaddr)ICACHE_FLASH_ATTR; |
||||
void netif_set_netmask(struct netif *netif, ip_addr_t *netmask)ICACHE_FLASH_ATTR; |
||||
void netif_set_gw(struct netif *netif, ip_addr_t *gw)ICACHE_FLASH_ATTR; |
||||
|
||||
void netif_set_up(struct netif *netif)ICACHE_FLASH_ATTR; |
||||
void netif_set_down(struct netif *netif)ICACHE_FLASH_ATTR; |
||||
/** Ask if an interface is up */ |
||||
#define netif_is_up(netif) (((netif)->flags & NETIF_FLAG_UP) ? (u8_t)1 : (u8_t)0) |
||||
|
||||
#if LWIP_NETIF_STATUS_CALLBACK |
||||
void netif_set_status_callback(struct netif *netif, netif_status_callback_fn status_callback)ICACHE_FLASH_ATTR; |
||||
#endif /* LWIP_NETIF_STATUS_CALLBACK */ |
||||
|
||||
void netif_set_link_up(struct netif *netif)ICACHE_FLASH_ATTR; |
||||
void netif_set_link_down(struct netif *netif)ICACHE_FLASH_ATTR; |
||||
/** Ask if a link is up */
|
||||
#define netif_is_link_up(netif) (((netif)->flags & NETIF_FLAG_LINK_UP) ? (u8_t)1 : (u8_t)0) |
||||
|
||||
#if LWIP_NETIF_LINK_CALLBACK |
||||
void netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback)ICACHE_FLASH_ATTR; |
||||
#endif /* LWIP_NETIF_LINK_CALLBACK */ |
||||
|
||||
#if LWIP_NETIF_HOSTNAME |
||||
#define netif_set_hostname(netif, name) do { if((netif) != NULL) { (netif)->hostname = name; }}while(0) |
||||
#define netif_get_hostname(netif) (((netif) != NULL) ? ((netif)->hostname) : NULL) |
||||
#endif /* LWIP_NETIF_HOSTNAME */ |
||||
|
||||
#if LWIP_IGMP |
||||
#define netif_set_igmp_mac_filter(netif, function) do { if((netif) != NULL) { (netif)->igmp_mac_filter = function; }}while(0) |
||||
#define netif_get_igmp_mac_filter(netif) (((netif) != NULL) ? ((netif)->igmp_mac_filter) : NULL) |
||||
#endif /* LWIP_IGMP */ |
||||
|
||||
#if ENABLE_LOOPBACK |
||||
err_t netif_loop_output(struct netif *netif, struct pbuf *p, ip_addr_t *dest_ip)ICACHE_FLASH_ATTR; |
||||
void netif_poll(struct netif *netif)ICACHE_FLASH_ATTR; |
||||
#if !LWIP_NETIF_LOOPBACK_MULTITHREADING |
||||
void netif_poll_all(void)ICACHE_FLASH_ATTR; |
||||
#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ |
||||
#endif /* ENABLE_LOOPBACK */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_NETIF_H__ */ |
@ -1,108 +0,0 @@ |
||||
/*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
*/ |
||||
|
||||
#ifndef __LWIP_NETIFAPI_H__ |
||||
#define __LWIP_NETIFAPI_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include "lwip/sys.h" |
||||
#include "lwip/netif.h" |
||||
#include "lwip/dhcp.h" |
||||
#include "lwip/autoip.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
typedef void (*netifapi_void_fn)(struct netif *netif); |
||||
typedef err_t (*netifapi_errt_fn)(struct netif *netif); |
||||
|
||||
struct netifapi_msg_msg { |
||||
#if !LWIP_TCPIP_CORE_LOCKING |
||||
sys_sem_t sem; |
||||
#endif /* !LWIP_TCPIP_CORE_LOCKING */ |
||||
err_t err; |
||||
struct netif *netif; |
||||
union { |
||||
struct { |
||||
ip_addr_t *ipaddr; |
||||
ip_addr_t *netmask; |
||||
ip_addr_t *gw; |
||||
void *state; |
||||
netif_init_fn init; |
||||
netif_input_fn input; |
||||
} add; |
||||
struct { |
||||
netifapi_void_fn voidfunc; |
||||
netifapi_errt_fn errtfunc; |
||||
} common; |
||||
} msg; |
||||
}; |
||||
|
||||
struct netifapi_msg { |
||||
void (* function)(struct netifapi_msg_msg *msg); |
||||
struct netifapi_msg_msg msg; |
||||
}; |
||||
|
||||
|
||||
/* API for application */ |
||||
err_t netifapi_netif_add ( struct netif *netif, |
||||
ip_addr_t *ipaddr, |
||||
ip_addr_t *netmask, |
||||
ip_addr_t *gw, |
||||
void *state, |
||||
netif_init_fn init, |
||||
netif_input_fn input); |
||||
|
||||
err_t netifapi_netif_set_addr ( struct netif *netif, |
||||
ip_addr_t *ipaddr, |
||||
ip_addr_t *netmask, |
||||
ip_addr_t *gw ); |
||||
|
||||
err_t netifapi_netif_common ( struct netif *netif, |
||||
netifapi_void_fn voidfunc, |
||||
netifapi_errt_fn errtfunc); |
||||
|
||||
#define netifapi_netif_remove(n) netifapi_netif_common(n, netif_remove, NULL) |
||||
#define netifapi_netif_set_up(n) netifapi_netif_common(n, netif_set_up, NULL) |
||||
#define netifapi_netif_set_down(n) netifapi_netif_common(n, netif_set_down, NULL) |
||||
#define netifapi_netif_set_default(n) netifapi_netif_common(n, netif_set_default, NULL) |
||||
#define netifapi_dhcp_start(n) netifapi_netif_common(n, NULL, dhcp_start) |
||||
#define netifapi_dhcp_stop(n) netifapi_netif_common(n, dhcp_stop, NULL) |
||||
#define netifapi_autoip_start(n) netifapi_netif_common(n, NULL, autoip_start) |
||||
#define netifapi_autoip_stop(n) netifapi_netif_common(n, NULL, autoip_stop) |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_NETIF_API */ |
||||
|
||||
#endif /* __LWIP_NETIFAPI_H__ */ |
File diff suppressed because it is too large
Load Diff
@ -1,160 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
|
||||
#ifndef __LWIP_PBUF_H__ |
||||
#define __LWIP_PBUF_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
#include "lwip/err.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/** Currently, the pbuf_custom code is only needed for one specific configuration
|
||||
* of IP_FRAG */ |
||||
#define LWIP_SUPPORT_CUSTOM_PBUF (IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF) |
||||
|
||||
#define PBUF_TRANSPORT_HLEN 20 |
||||
#define PBUF_IP_HLEN 20 |
||||
|
||||
typedef enum { |
||||
PBUF_TRANSPORT, |
||||
PBUF_IP, |
||||
PBUF_LINK, |
||||
PBUF_RAW |
||||
} pbuf_layer; |
||||
|
||||
typedef enum { |
||||
PBUF_RAM, /* pbuf data is stored in RAM */ |
||||
PBUF_ROM, /* pbuf data is stored in ROM */ |
||||
PBUF_REF, /* pbuf comes from the pbuf pool */ |
||||
PBUF_POOL, /* pbuf payload refers to RAM */ |
||||
#ifdef EBUF_LWIP |
||||
PBUF_ESF_RX /* pbuf payload is from WLAN */ |
||||
#endif /* ESF_LWIP */ |
||||
} pbuf_type; |
||||
|
||||
|
||||
/** indicates this packet's data should be immediately passed to the application */ |
||||
#define PBUF_FLAG_PUSH 0x01U |
||||
/** indicates this is a custom pbuf: pbuf_free and pbuf_header handle such a
|
||||
a pbuf differently */ |
||||
#define PBUF_FLAG_IS_CUSTOM 0x02U |
||||
/** indicates this pbuf is UDP multicast to be looped back */ |
||||
#define PBUF_FLAG_MCASTLOOP 0x04U |
||||
|
||||
struct pbuf { |
||||
/** next pbuf in singly linked pbuf chain */ |
||||
struct pbuf *next; |
||||
|
||||
/** pointer to the actual data in the buffer */ |
||||
void *payload; |
||||
|
||||
/**
|
||||
* total length of this buffer and all next buffers in chain |
||||
* belonging to the same packet. |
||||
* |
||||
* For non-queue packet chains this is the invariant: |
||||
* p->tot_len == p->len + (p->next? p->next->tot_len: 0) |
||||
*/ |
||||
u16_t tot_len; |
||||
|
||||
/** length of this buffer */ |
||||
u16_t len; |
||||
|
||||
/** pbuf_type as u8_t instead of enum to save space */ |
||||
u8_t /*pbuf_type*/ type; |
||||
|
||||
/** misc flags */ |
||||
u8_t flags; |
||||
|
||||
/**
|
||||
* the reference count always equals the number of pointers |
||||
* that refer to this pbuf. This can be pointers from an application, |
||||
* the stack itself, or pbuf->next pointers from a chain. |
||||
*/ |
||||
u16_t ref; |
||||
|
||||
/* add a pointer for esf_buf */ |
||||
void * eb;
|
||||
}; |
||||
|
||||
#if LWIP_SUPPORT_CUSTOM_PBUF |
||||
/** Prototype for a function to free a custom pbuf */ |
||||
typedef void (*pbuf_free_custom_fn)(struct pbuf *p); |
||||
|
||||
/** A custom pbuf: like a pbuf, but following a function pointer to free it. */ |
||||
struct pbuf_custom { |
||||
/** The actual pbuf */ |
||||
struct pbuf pbuf; |
||||
/** This function is called when pbuf_free deallocates this pbuf(_custom) */ |
||||
pbuf_free_custom_fn custom_free_function; |
||||
}; |
||||
#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ |
||||
|
||||
/* Initializes the pbuf module. This call is empty for now, but may not be in future. */ |
||||
#define pbuf_init() |
||||
|
||||
struct pbuf *pbuf_alloc(pbuf_layer l, u16_t length, pbuf_type type)ICACHE_FLASH_ATTR; |
||||
#if LWIP_SUPPORT_CUSTOM_PBUF |
||||
struct pbuf *pbuf_alloced_custom(pbuf_layer l, u16_t length, pbuf_type type, |
||||
struct pbuf_custom *p, void *payload_mem, |
||||
u16_t payload_mem_len)ICACHE_FLASH_ATTR; |
||||
#endif /* LWIP_SUPPORT_CUSTOM_PBUF */ |
||||
void pbuf_realloc(struct pbuf *p, u16_t size)ICACHE_FLASH_ATTR; |
||||
u8_t pbuf_header(struct pbuf *p, s16_t header_size)ICACHE_FLASH_ATTR; |
||||
void pbuf_ref(struct pbuf *p)ICACHE_FLASH_ATTR; |
||||
u8_t pbuf_free(struct pbuf *p)ICACHE_FLASH_ATTR; |
||||
u8_t pbuf_clen(struct pbuf *p)ICACHE_FLASH_ATTR; |
||||
void pbuf_cat(struct pbuf *head, struct pbuf *tail)ICACHE_FLASH_ATTR; |
||||
void pbuf_chain(struct pbuf *head, struct pbuf *tail)ICACHE_FLASH_ATTR; |
||||
struct pbuf *pbuf_dechain(struct pbuf *p)ICACHE_FLASH_ATTR; |
||||
err_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from)ICACHE_FLASH_ATTR; |
||||
u16_t pbuf_copy_partial(struct pbuf *p, void *dataptr, u16_t len, u16_t offset)ICACHE_FLASH_ATTR; |
||||
err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len)ICACHE_FLASH_ATTR; |
||||
struct pbuf *pbuf_coalesce(struct pbuf *p, pbuf_layer layer)ICACHE_FLASH_ATTR; |
||||
#if LWIP_CHECKSUM_ON_COPY |
||||
err_t pbuf_fill_chksum(struct pbuf *p, u16_t start_offset, const void *dataptr, |
||||
u16_t len, u16_t *chksum)ICACHE_FLASH_ATTR; |
||||
#endif /* LWIP_CHECKSUM_ON_COPY */ |
||||
|
||||
u8_t pbuf_get_at(struct pbuf* p, u16_t offset)ICACHE_FLASH_ATTR; |
||||
u16_t pbuf_memcmp(struct pbuf* p, u16_t offset, const void* s2, u16_t n)ICACHE_FLASH_ATTR; |
||||
u16_t pbuf_memfind(struct pbuf* p, const void* mem, u16_t mem_len, u16_t start_offset)ICACHE_FLASH_ATTR; |
||||
u16_t pbuf_strstr(struct pbuf* p, const char* substr)ICACHE_FLASH_ATTR; |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_PBUF_H__ */ |
@ -1,98 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT |
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY |
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
* |
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_RAW_H__ |
||||
#define __LWIP_RAW_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/def.h" |
||||
#include "lwip/ip.h" |
||||
#include "lwip/ip_addr.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
struct raw_pcb; |
||||
|
||||
/** Function prototype for raw pcb receive callback functions.
|
||||
* @param arg user supplied argument (raw_pcb.recv_arg) |
||||
* @param pcb the raw_pcb which received data |
||||
* @param p the packet buffer that was received |
||||
* @param addr the remote IP address from which the packet was received |
||||
* @return 1 if the packet was 'eaten' (aka. deleted), |
||||
* 0 if the packet lives on |
||||
* If returning 1, the callback is responsible for freeing the pbuf |
||||
* if it's not used any more. |
||||
*/ |
||||
typedef u8_t (*raw_recv_fn)(void *arg, struct raw_pcb *pcb, struct pbuf *p, |
||||
ip_addr_t *addr); |
||||
|
||||
struct raw_pcb { |
||||
/* Common members of all PCB types */ |
||||
IP_PCB; |
||||
|
||||
struct raw_pcb *next; |
||||
|
||||
u8_t protocol; |
||||
|
||||
/** receive callback function */ |
||||
raw_recv_fn recv; |
||||
/* user-supplied argument for the recv callback */ |
||||
void *recv_arg; |
||||
}; |
||||
|
||||
/* The following functions is the application layer interface to the
|
||||
RAW code. */ |
||||
struct raw_pcb * raw_new (u8_t proto)ICACHE_FLASH_ATTR; |
||||
void raw_remove (struct raw_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
err_t raw_bind (struct raw_pcb *pcb, ip_addr_t *ipaddr)ICACHE_FLASH_ATTR; |
||||
err_t raw_connect (struct raw_pcb *pcb, ip_addr_t *ipaddr)ICACHE_FLASH_ATTR; |
||||
|
||||
void raw_recv (struct raw_pcb *pcb, raw_recv_fn recv, void *recv_arg)ICACHE_FLASH_ATTR; |
||||
err_t raw_sendto (struct raw_pcb *pcb, struct pbuf *p, ip_addr_t *ipaddr)ICACHE_FLASH_ATTR; |
||||
err_t raw_send (struct raw_pcb *pcb, struct pbuf *p); |
||||
|
||||
/* The following functions are the lower layer interface to RAW. */ |
||||
u8_t raw_input (struct pbuf *p, struct netif *inp)ICACHE_FLASH_ATTR; |
||||
#define raw_init() /* Compatibility define, not init needed. */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_RAW */ |
||||
|
||||
#endif /* __LWIP_RAW_H__ */ |
@ -1,141 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*/ |
||||
|
||||
/*
|
||||
* This is the interface to the platform specific serial IO module |
||||
* It needs to be implemented by those platforms which need SLIP or PPP |
||||
*/ |
||||
|
||||
#ifndef __SIO_H__ |
||||
#define __SIO_H__ |
||||
|
||||
#include "lwip/arch.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* If you want to define sio_fd_t elsewhere or differently,
|
||||
define this in your cc.h file. */ |
||||
#ifndef __sio_fd_t_defined |
||||
typedef void * sio_fd_t; |
||||
#endif |
||||
|
||||
/* The following functions can be defined to something else in your cc.h file
|
||||
or be implemented in your custom sio.c file. */ |
||||
|
||||
#ifndef sio_open |
||||
/**
|
||||
* Opens a serial device for communication. |
||||
*
|
||||
* @param devnum device number |
||||
* @return handle to serial device if successful, NULL otherwise |
||||
*/ |
||||
sio_fd_t sio_open(u8_t devnum)ICACHE_FLASH_ATTR; |
||||
#endif |
||||
|
||||
#ifndef sio_send |
||||
/**
|
||||
* Sends a single character to the serial device. |
||||
*
|
||||
* @param c character to send |
||||
* @param fd serial device handle |
||||
*
|
||||
* @note This function will block until the character can be sent. |
||||
*/ |
||||
void sio_send(u8_t c, sio_fd_t fd)ICACHE_FLASH_ATTR; |
||||
#endif |
||||
|
||||
#ifndef sio_recv |
||||
/**
|
||||
* Receives a single character from the serial device. |
||||
*
|
||||
* @param fd serial device handle |
||||
*
|
||||
* @note This function will block until a character is received. |
||||
*/ |
||||
u8_t sio_recv(sio_fd_t fd)ICACHE_FLASH_ATTR; |
||||
#endif |
||||
|
||||
#ifndef sio_read |
||||
/**
|
||||
* Reads from the serial device. |
||||
*
|
||||
* @param fd serial device handle |
||||
* @param data pointer to data buffer for receiving |
||||
* @param len maximum length (in bytes) of data to receive |
||||
* @return number of bytes actually received - may be 0 if aborted by sio_read_abort |
||||
*
|
||||
* @note This function will block until data can be received. The blocking |
||||
* can be cancelled by calling sio_read_abort(). |
||||
*/ |
||||
u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len)ICACHE_FLASH_ATTR; |
||||
#endif |
||||
|
||||
#ifndef sio_tryread |
||||
/**
|
||||
* Tries to read from the serial device. Same as sio_read but returns |
||||
* immediately if no data is available and never blocks. |
||||
*
|
||||
* @param fd serial device handle |
||||
* @param data pointer to data buffer for receiving |
||||
* @param len maximum length (in bytes) of data to receive |
||||
* @return number of bytes actually received |
||||
*/ |
||||
u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len)ICACHE_FLASH_ATTR; |
||||
#endif |
||||
|
||||
#ifndef sio_write |
||||
/**
|
||||
* Writes to the serial device. |
||||
*
|
||||
* @param fd serial device handle |
||||
* @param data pointer to data to send |
||||
* @param len length (in bytes) of data to send |
||||
* @return number of bytes actually sent |
||||
*
|
||||
* @note This function will block until all data can be sent. |
||||
*/ |
||||
u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len)ICACHE_FLASH_ATTR; |
||||
#endif |
||||
|
||||
#ifndef sio_read_abort |
||||
/**
|
||||
* Aborts a blocking sio_read() call. |
||||
*
|
||||
* @param fd serial device handle |
||||
*/ |
||||
void sio_read_abort(sio_fd_t fd)ICACHE_FLASH_ATTR; |
||||
#endif |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __SIO_H__ */ |
@ -1,367 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001, 2002 Leon Woestenberg <leon.woestenberg@axon.tv> |
||||
* Copyright (c) 2001, 2002 Axon Digital Design B.V., The Netherlands. |
||||
* All rights reserved. |
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Leon Woestenberg <leon.woestenberg@axon.tv> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_SNMP_H__ |
||||
#define __LWIP_SNMP_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#include "lwip/ip_addr.h" |
||||
|
||||
struct udp_pcb; |
||||
struct netif; |
||||
|
||||
/**
|
||||
* @see RFC1213, "MIB-II, 6. Definitions" |
||||
*/ |
||||
enum snmp_ifType { |
||||
snmp_ifType_other=1, /* none of the following */ |
||||
snmp_ifType_regular1822, |
||||
snmp_ifType_hdh1822, |
||||
snmp_ifType_ddn_x25, |
||||
snmp_ifType_rfc877_x25, |
||||
snmp_ifType_ethernet_csmacd, |
||||
snmp_ifType_iso88023_csmacd, |
||||
snmp_ifType_iso88024_tokenBus, |
||||
snmp_ifType_iso88025_tokenRing, |
||||
snmp_ifType_iso88026_man, |
||||
snmp_ifType_starLan, |
||||
snmp_ifType_proteon_10Mbit, |
||||
snmp_ifType_proteon_80Mbit, |
||||
snmp_ifType_hyperchannel, |
||||
snmp_ifType_fddi, |
||||
snmp_ifType_lapb, |
||||
snmp_ifType_sdlc, |
||||
snmp_ifType_ds1, /* T-1 */ |
||||
snmp_ifType_e1, /* european equiv. of T-1 */ |
||||
snmp_ifType_basicISDN, |
||||
snmp_ifType_primaryISDN, /* proprietary serial */ |
||||
snmp_ifType_propPointToPointSerial, |
||||
snmp_ifType_ppp, |
||||
snmp_ifType_softwareLoopback, |
||||
snmp_ifType_eon, /* CLNP over IP [11] */ |
||||
snmp_ifType_ethernet_3Mbit, |
||||
snmp_ifType_nsip, /* XNS over IP */ |
||||
snmp_ifType_slip, /* generic SLIP */ |
||||
snmp_ifType_ultra, /* ULTRA technologies */ |
||||
snmp_ifType_ds3, /* T-3 */ |
||||
snmp_ifType_sip, /* SMDS */ |
||||
snmp_ifType_frame_relay |
||||
}; |
||||
|
||||
#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
/** SNMP "sysuptime" Interval */ |
||||
#define SNMP_SYSUPTIME_INTERVAL 10 |
||||
|
||||
/** fixed maximum length for object identifier type */ |
||||
#define LWIP_SNMP_OBJ_ID_LEN 32 |
||||
|
||||
/** internal object identifier representation */ |
||||
struct snmp_obj_id |
||||
{ |
||||
u8_t len; |
||||
s32_t id[LWIP_SNMP_OBJ_ID_LEN]; |
||||
}; |
||||
|
||||
/* system */ |
||||
void snmp_set_sysdesr(u8_t* str, u8_t* len); |
||||
void snmp_set_sysobjid(struct snmp_obj_id *oid); |
||||
void snmp_get_sysobjid_ptr(struct snmp_obj_id **oid); |
||||
void snmp_inc_sysuptime(void); |
||||
void snmp_add_sysuptime(u32_t value); |
||||
void snmp_get_sysuptime(u32_t *value); |
||||
void snmp_set_syscontact(u8_t *ocstr, u8_t *ocstrlen); |
||||
void snmp_set_sysname(u8_t *ocstr, u8_t *ocstrlen); |
||||
void snmp_set_syslocation(u8_t *ocstr, u8_t *ocstrlen); |
||||
|
||||
/* network interface */ |
||||
void snmp_add_ifinoctets(struct netif *ni, u32_t value);
|
||||
void snmp_inc_ifinucastpkts(struct netif *ni); |
||||
void snmp_inc_ifinnucastpkts(struct netif *ni); |
||||
void snmp_inc_ifindiscards(struct netif *ni); |
||||
void snmp_add_ifoutoctets(struct netif *ni, u32_t value); |
||||
void snmp_inc_ifoutucastpkts(struct netif *ni); |
||||
void snmp_inc_ifoutnucastpkts(struct netif *ni); |
||||
void snmp_inc_ifoutdiscards(struct netif *ni); |
||||
void snmp_inc_iflist(void); |
||||
void snmp_dec_iflist(void); |
||||
|
||||
/* ARP (for atTable and ipNetToMediaTable) */ |
||||
void snmp_insert_arpidx_tree(struct netif *ni, ip_addr_t *ip); |
||||
void snmp_delete_arpidx_tree(struct netif *ni, ip_addr_t *ip); |
||||
|
||||
/* IP */ |
||||
void snmp_inc_ipinreceives(void); |
||||
void snmp_inc_ipinhdrerrors(void); |
||||
void snmp_inc_ipinaddrerrors(void); |
||||
void snmp_inc_ipforwdatagrams(void); |
||||
void snmp_inc_ipinunknownprotos(void); |
||||
void snmp_inc_ipindiscards(void); |
||||
void snmp_inc_ipindelivers(void); |
||||
void snmp_inc_ipoutrequests(void); |
||||
void snmp_inc_ipoutdiscards(void); |
||||
void snmp_inc_ipoutnoroutes(void); |
||||
void snmp_inc_ipreasmreqds(void); |
||||
void snmp_inc_ipreasmoks(void); |
||||
void snmp_inc_ipreasmfails(void); |
||||
void snmp_inc_ipfragoks(void); |
||||
void snmp_inc_ipfragfails(void); |
||||
void snmp_inc_ipfragcreates(void); |
||||
void snmp_inc_iproutingdiscards(void); |
||||
void snmp_insert_ipaddridx_tree(struct netif *ni); |
||||
void snmp_delete_ipaddridx_tree(struct netif *ni); |
||||
void snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni); |
||||
void snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni); |
||||
|
||||
/* ICMP */ |
||||
void snmp_inc_icmpinmsgs(void); |
||||
void snmp_inc_icmpinerrors(void); |
||||
void snmp_inc_icmpindestunreachs(void); |
||||
void snmp_inc_icmpintimeexcds(void); |
||||
void snmp_inc_icmpinparmprobs(void); |
||||
void snmp_inc_icmpinsrcquenchs(void); |
||||
void snmp_inc_icmpinredirects(void); |
||||
void snmp_inc_icmpinechos(void); |
||||
void snmp_inc_icmpinechoreps(void); |
||||
void snmp_inc_icmpintimestamps(void); |
||||
void snmp_inc_icmpintimestampreps(void); |
||||
void snmp_inc_icmpinaddrmasks(void); |
||||
void snmp_inc_icmpinaddrmaskreps(void); |
||||
void snmp_inc_icmpoutmsgs(void); |
||||
void snmp_inc_icmpouterrors(void); |
||||
void snmp_inc_icmpoutdestunreachs(void); |
||||
void snmp_inc_icmpouttimeexcds(void); |
||||
void snmp_inc_icmpoutparmprobs(void); |
||||
void snmp_inc_icmpoutsrcquenchs(void); |
||||
void snmp_inc_icmpoutredirects(void);
|
||||
void snmp_inc_icmpoutechos(void); |
||||
void snmp_inc_icmpoutechoreps(void); |
||||
void snmp_inc_icmpouttimestamps(void); |
||||
void snmp_inc_icmpouttimestampreps(void); |
||||
void snmp_inc_icmpoutaddrmasks(void); |
||||
void snmp_inc_icmpoutaddrmaskreps(void); |
||||
|
||||
/* TCP */ |
||||
void snmp_inc_tcpactiveopens(void); |
||||
void snmp_inc_tcppassiveopens(void); |
||||
void snmp_inc_tcpattemptfails(void); |
||||
void snmp_inc_tcpestabresets(void); |
||||
void snmp_inc_tcpinsegs(void); |
||||
void snmp_inc_tcpoutsegs(void); |
||||
void snmp_inc_tcpretranssegs(void); |
||||
void snmp_inc_tcpinerrs(void); |
||||
void snmp_inc_tcpoutrsts(void); |
||||
|
||||
/* UDP */ |
||||
void snmp_inc_udpindatagrams(void); |
||||
void snmp_inc_udpnoports(void); |
||||
void snmp_inc_udpinerrors(void); |
||||
void snmp_inc_udpoutdatagrams(void); |
||||
void snmp_insert_udpidx_tree(struct udp_pcb *pcb); |
||||
void snmp_delete_udpidx_tree(struct udp_pcb *pcb); |
||||
|
||||
/* SNMP */ |
||||
void snmp_inc_snmpinpkts(void); |
||||
void snmp_inc_snmpoutpkts(void); |
||||
void snmp_inc_snmpinbadversions(void); |
||||
void snmp_inc_snmpinbadcommunitynames(void); |
||||
void snmp_inc_snmpinbadcommunityuses(void); |
||||
void snmp_inc_snmpinasnparseerrs(void); |
||||
void snmp_inc_snmpintoobigs(void); |
||||
void snmp_inc_snmpinnosuchnames(void); |
||||
void snmp_inc_snmpinbadvalues(void); |
||||
void snmp_inc_snmpinreadonlys(void); |
||||
void snmp_inc_snmpingenerrs(void); |
||||
void snmp_add_snmpintotalreqvars(u8_t value); |
||||
void snmp_add_snmpintotalsetvars(u8_t value); |
||||
void snmp_inc_snmpingetrequests(void); |
||||
void snmp_inc_snmpingetnexts(void); |
||||
void snmp_inc_snmpinsetrequests(void); |
||||
void snmp_inc_snmpingetresponses(void); |
||||
void snmp_inc_snmpintraps(void); |
||||
void snmp_inc_snmpouttoobigs(void); |
||||
void snmp_inc_snmpoutnosuchnames(void); |
||||
void snmp_inc_snmpoutbadvalues(void); |
||||
void snmp_inc_snmpoutgenerrs(void); |
||||
void snmp_inc_snmpoutgetrequests(void); |
||||
void snmp_inc_snmpoutgetnexts(void); |
||||
void snmp_inc_snmpoutsetrequests(void); |
||||
void snmp_inc_snmpoutgetresponses(void); |
||||
void snmp_inc_snmpouttraps(void); |
||||
void snmp_get_snmpgrpid_ptr(struct snmp_obj_id **oid); |
||||
void snmp_set_snmpenableauthentraps(u8_t *value); |
||||
void snmp_get_snmpenableauthentraps(u8_t *value); |
||||
|
||||
/* LWIP_SNMP support not available */ |
||||
/* define everything to be empty */ |
||||
#else |
||||
|
||||
/* system */ |
||||
#define snmp_set_sysdesr(str, len) |
||||
#define snmp_set_sysobjid(oid); |
||||
#define snmp_get_sysobjid_ptr(oid) |
||||
#define snmp_inc_sysuptime() |
||||
#define snmp_add_sysuptime(value) |
||||
#define snmp_get_sysuptime(value) |
||||
#define snmp_set_syscontact(ocstr, ocstrlen); |
||||
#define snmp_set_sysname(ocstr, ocstrlen); |
||||
#define snmp_set_syslocation(ocstr, ocstrlen); |
||||
|
||||
/* network interface */ |
||||
#define snmp_add_ifinoctets(ni,value) |
||||
#define snmp_inc_ifinucastpkts(ni) |
||||
#define snmp_inc_ifinnucastpkts(ni) |
||||
#define snmp_inc_ifindiscards(ni) |
||||
#define snmp_add_ifoutoctets(ni,value) |
||||
#define snmp_inc_ifoutucastpkts(ni) |
||||
#define snmp_inc_ifoutnucastpkts(ni) |
||||
#define snmp_inc_ifoutdiscards(ni) |
||||
#define snmp_inc_iflist() |
||||
#define snmp_dec_iflist() |
||||
|
||||
/* ARP */ |
||||
#define snmp_insert_arpidx_tree(ni,ip) |
||||
#define snmp_delete_arpidx_tree(ni,ip) |
||||
|
||||
/* IP */ |
||||
#define snmp_inc_ipinreceives() |
||||
#define snmp_inc_ipinhdrerrors() |
||||
#define snmp_inc_ipinaddrerrors() |
||||
#define snmp_inc_ipforwdatagrams() |
||||
#define snmp_inc_ipinunknownprotos() |
||||
#define snmp_inc_ipindiscards() |
||||
#define snmp_inc_ipindelivers() |
||||
#define snmp_inc_ipoutrequests() |
||||
#define snmp_inc_ipoutdiscards() |
||||
#define snmp_inc_ipoutnoroutes() |
||||
#define snmp_inc_ipreasmreqds() |
||||
#define snmp_inc_ipreasmoks() |
||||
#define snmp_inc_ipreasmfails() |
||||
#define snmp_inc_ipfragoks() |
||||
#define snmp_inc_ipfragfails() |
||||
#define snmp_inc_ipfragcreates() |
||||
#define snmp_inc_iproutingdiscards() |
||||
#define snmp_insert_ipaddridx_tree(ni) |
||||
#define snmp_delete_ipaddridx_tree(ni) |
||||
#define snmp_insert_iprteidx_tree(dflt, ni) |
||||
#define snmp_delete_iprteidx_tree(dflt, ni) |
||||
|
||||
/* ICMP */ |
||||
#define snmp_inc_icmpinmsgs() |
||||
#define snmp_inc_icmpinerrors() |
||||
#define snmp_inc_icmpindestunreachs() |
||||
#define snmp_inc_icmpintimeexcds() |
||||
#define snmp_inc_icmpinparmprobs() |
||||
#define snmp_inc_icmpinsrcquenchs() |
||||
#define snmp_inc_icmpinredirects() |
||||
#define snmp_inc_icmpinechos() |
||||
#define snmp_inc_icmpinechoreps() |
||||
#define snmp_inc_icmpintimestamps() |
||||
#define snmp_inc_icmpintimestampreps() |
||||
#define snmp_inc_icmpinaddrmasks() |
||||
#define snmp_inc_icmpinaddrmaskreps() |
||||
#define snmp_inc_icmpoutmsgs() |
||||
#define snmp_inc_icmpouterrors() |
||||
#define snmp_inc_icmpoutdestunreachs() |
||||
#define snmp_inc_icmpouttimeexcds() |
||||
#define snmp_inc_icmpoutparmprobs() |
||||
#define snmp_inc_icmpoutsrcquenchs() |
||||
#define snmp_inc_icmpoutredirects() |
||||
#define snmp_inc_icmpoutechos() |
||||
#define snmp_inc_icmpoutechoreps() |
||||
#define snmp_inc_icmpouttimestamps() |
||||
#define snmp_inc_icmpouttimestampreps() |
||||
#define snmp_inc_icmpoutaddrmasks() |
||||
#define snmp_inc_icmpoutaddrmaskreps() |
||||
/* TCP */ |
||||
#define snmp_inc_tcpactiveopens() |
||||
#define snmp_inc_tcppassiveopens() |
||||
#define snmp_inc_tcpattemptfails() |
||||
#define snmp_inc_tcpestabresets() |
||||
#define snmp_inc_tcpinsegs() |
||||
#define snmp_inc_tcpoutsegs() |
||||
#define snmp_inc_tcpretranssegs() |
||||
#define snmp_inc_tcpinerrs() |
||||
#define snmp_inc_tcpoutrsts() |
||||
|
||||
/* UDP */ |
||||
#define snmp_inc_udpindatagrams() |
||||
#define snmp_inc_udpnoports() |
||||
#define snmp_inc_udpinerrors() |
||||
#define snmp_inc_udpoutdatagrams() |
||||
#define snmp_insert_udpidx_tree(pcb) |
||||
#define snmp_delete_udpidx_tree(pcb) |
||||
|
||||
/* SNMP */ |
||||
#define snmp_inc_snmpinpkts() |
||||
#define snmp_inc_snmpoutpkts() |
||||
#define snmp_inc_snmpinbadversions() |
||||
#define snmp_inc_snmpinbadcommunitynames() |
||||
#define snmp_inc_snmpinbadcommunityuses() |
||||
#define snmp_inc_snmpinasnparseerrs() |
||||
#define snmp_inc_snmpintoobigs() |
||||
#define snmp_inc_snmpinnosuchnames() |
||||
#define snmp_inc_snmpinbadvalues() |
||||
#define snmp_inc_snmpinreadonlys() |
||||
#define snmp_inc_snmpingenerrs() |
||||
#define snmp_add_snmpintotalreqvars(value) |
||||
#define snmp_add_snmpintotalsetvars(value) |
||||
#define snmp_inc_snmpingetrequests() |
||||
#define snmp_inc_snmpingetnexts() |
||||
#define snmp_inc_snmpinsetrequests() |
||||
#define snmp_inc_snmpingetresponses() |
||||
#define snmp_inc_snmpintraps() |
||||
#define snmp_inc_snmpouttoobigs() |
||||
#define snmp_inc_snmpoutnosuchnames() |
||||
#define snmp_inc_snmpoutbadvalues() |
||||
#define snmp_inc_snmpoutgenerrs() |
||||
#define snmp_inc_snmpoutgetrequests() |
||||
#define snmp_inc_snmpoutgetnexts() |
||||
#define snmp_inc_snmpoutsetrequests() |
||||
#define snmp_inc_snmpoutgetresponses() |
||||
#define snmp_inc_snmpouttraps() |
||||
#define snmp_get_snmpgrpid_ptr(oid) |
||||
#define snmp_set_snmpenableauthentraps(value) |
||||
#define snmp_get_snmpenableauthentraps(value) |
||||
|
||||
#endif /* LWIP_SNMP */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_SNMP_H__ */ |
@ -1,101 +0,0 @@ |
||||
/**
|
||||
* @file |
||||
* Abstract Syntax Notation One (ISO 8824, 8825) codec. |
||||
*/ |
||||
|
||||
/*
|
||||
* Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT |
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY |
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* Author: Christiaan Simons <christiaan.simons@axon.tv> |
||||
*/ |
||||
|
||||
#ifndef __LWIP_SNMP_ASN1_H__ |
||||
#define __LWIP_SNMP_ASN1_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
#include "lwip/err.h" |
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/snmp.h" |
||||
|
||||
#if LWIP_SNMP |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#define SNMP_ASN1_UNIV (0) /* (!0x80 | !0x40) */ |
||||
#define SNMP_ASN1_APPLIC (0x40) /* (!0x80 | 0x40) */ |
||||
#define SNMP_ASN1_CONTXT (0x80) /* ( 0x80 | !0x40) */ |
||||
|
||||
#define SNMP_ASN1_CONSTR (0x20) /* ( 0x20) */ |
||||
#define SNMP_ASN1_PRIMIT (0) /* (!0x20) */ |
||||
|
||||
/* universal tags */ |
||||
#define SNMP_ASN1_INTEG 2 |
||||
#define SNMP_ASN1_OC_STR 4 |
||||
#define SNMP_ASN1_NUL 5 |
||||
#define SNMP_ASN1_OBJ_ID 6 |
||||
#define SNMP_ASN1_SEQ 16 |
||||
|
||||
/* application specific (SNMP) tags */ |
||||
#define SNMP_ASN1_IPADDR 0 /* octet string size(4) */ |
||||
#define SNMP_ASN1_COUNTER 1 /* u32_t */ |
||||
#define SNMP_ASN1_GAUGE 2 /* u32_t */ |
||||
#define SNMP_ASN1_TIMETICKS 3 /* u32_t */ |
||||
#define SNMP_ASN1_OPAQUE 4 /* octet string */ |
||||
|
||||
/* context specific (SNMP) tags */ |
||||
#define SNMP_ASN1_PDU_GET_REQ 0 |
||||
#define SNMP_ASN1_PDU_GET_NEXT_REQ 1 |
||||
#define SNMP_ASN1_PDU_GET_RESP 2 |
||||
#define SNMP_ASN1_PDU_SET_REQ 3 |
||||
#define SNMP_ASN1_PDU_TRAP 4 |
||||
|
||||
err_t snmp_asn1_dec_type(struct pbuf *p, u16_t ofs, u8_t *type); |
||||
err_t snmp_asn1_dec_length(struct pbuf *p, u16_t ofs, u8_t *octets_used, u16_t *length); |
||||
err_t snmp_asn1_dec_u32t(struct pbuf *p, u16_t ofs, u16_t len, u32_t *value); |
||||
err_t snmp_asn1_dec_s32t(struct pbuf *p, u16_t ofs, u16_t len, s32_t *value); |
||||
err_t snmp_asn1_dec_oid(struct pbuf *p, u16_t ofs, u16_t len, struct snmp_obj_id *oid); |
||||
err_t snmp_asn1_dec_raw(struct pbuf *p, u16_t ofs, u16_t len, u16_t raw_len, u8_t *raw); |
||||
|
||||
void snmp_asn1_enc_length_cnt(u16_t length, u8_t *octets_needed); |
||||
void snmp_asn1_enc_u32t_cnt(u32_t value, u16_t *octets_needed); |
||||
void snmp_asn1_enc_s32t_cnt(s32_t value, u16_t *octets_needed); |
||||
void snmp_asn1_enc_oid_cnt(u8_t ident_len, s32_t *ident, u16_t *octets_needed); |
||||
err_t snmp_asn1_enc_type(struct pbuf *p, u16_t ofs, u8_t type); |
||||
err_t snmp_asn1_enc_length(struct pbuf *p, u16_t ofs, u16_t length); |
||||
err_t snmp_asn1_enc_u32t(struct pbuf *p, u16_t ofs, u16_t octets_needed, u32_t value); |
||||
err_t snmp_asn1_enc_s32t(struct pbuf *p, u16_t ofs, u16_t octets_needed, s32_t value); |
||||
err_t snmp_asn1_enc_oid(struct pbuf *p, u16_t ofs, u8_t ident_len, s32_t *ident); |
||||
err_t snmp_asn1_enc_raw(struct pbuf *p, u16_t ofs, u16_t raw_len, u8_t *raw); |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_SNMP */ |
||||
|
||||
#endif /* __LWIP_SNMP_ASN1_H__ */ |
@ -1,315 +0,0 @@ |
||||
/**
|
||||
* @file |
||||
* SNMP Agent message handling structures. |
||||
*/ |
||||
|
||||
/*
|
||||
* Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT |
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY |
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* Author: Christiaan Simons <christiaan.simons@axon.tv> |
||||
*/ |
||||
|
||||
#ifndef __LWIP_SNMP_MSG_H__ |
||||
#define __LWIP_SNMP_MSG_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
#include "lwip/snmp.h" |
||||
#include "lwip/snmp_structs.h" |
||||
#include "lwip/ip_addr.h" |
||||
#include "lwip/err.h" |
||||
|
||||
#if LWIP_SNMP |
||||
|
||||
#if SNMP_PRIVATE_MIB |
||||
/* When using a private MIB, you have to create a file 'private_mib.h' that contains
|
||||
* a 'struct mib_array_node mib_private' which contains your MIB. */ |
||||
#include "private_mib.h" |
||||
#endif |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* The listen port of the SNMP agent. Clients have to make their requests to
|
||||
this port. Most standard clients won't work if you change this! */ |
||||
#ifndef SNMP_IN_PORT |
||||
#define SNMP_IN_PORT 161 |
||||
#endif |
||||
/* The remote port the SNMP agent sends traps to. Most standard trap sinks won't
|
||||
work if you change this! */ |
||||
#ifndef SNMP_TRAP_PORT |
||||
#define SNMP_TRAP_PORT 162 |
||||
#endif |
||||
|
||||
#define SNMP_ES_NOERROR 0 |
||||
#define SNMP_ES_TOOBIG 1 |
||||
#define SNMP_ES_NOSUCHNAME 2 |
||||
#define SNMP_ES_BADVALUE 3 |
||||
#define SNMP_ES_READONLY 4 |
||||
#define SNMP_ES_GENERROR 5 |
||||
|
||||
#define SNMP_GENTRAP_COLDSTART 0 |
||||
#define SNMP_GENTRAP_WARMSTART 1 |
||||
#define SNMP_GENTRAP_AUTHFAIL 4 |
||||
#define SNMP_GENTRAP_ENTERPRISESPC 6 |
||||
|
||||
struct snmp_varbind |
||||
{ |
||||
/* next pointer, NULL for last in list */ |
||||
struct snmp_varbind *next; |
||||
/* previous pointer, NULL for first in list */ |
||||
struct snmp_varbind *prev; |
||||
|
||||
/* object identifier length (in s32_t) */ |
||||
u8_t ident_len; |
||||
/* object identifier array */ |
||||
s32_t *ident; |
||||
|
||||
/* object value ASN1 type */ |
||||
u8_t value_type; |
||||
/* object value length (in u8_t) */ |
||||
u8_t value_len; |
||||
/* object value */ |
||||
void *value; |
||||
|
||||
/* encoding varbind seq length length */ |
||||
u8_t seqlenlen; |
||||
/* encoding object identifier length length */ |
||||
u8_t olenlen; |
||||
/* encoding object value length length */ |
||||
u8_t vlenlen; |
||||
/* encoding varbind seq length */ |
||||
u16_t seqlen; |
||||
/* encoding object identifier length */ |
||||
u16_t olen; |
||||
/* encoding object value length */ |
||||
u16_t vlen; |
||||
}; |
||||
|
||||
struct snmp_varbind_root |
||||
{ |
||||
struct snmp_varbind *head; |
||||
struct snmp_varbind *tail; |
||||
/* number of variable bindings in list */ |
||||
u8_t count; |
||||
/* encoding varbind-list seq length length */ |
||||
u8_t seqlenlen; |
||||
/* encoding varbind-list seq length */ |
||||
u16_t seqlen; |
||||
}; |
||||
|
||||
/** output response message header length fields */ |
||||
struct snmp_resp_header_lengths |
||||
{ |
||||
/* encoding error-index length length */ |
||||
u8_t erridxlenlen; |
||||
/* encoding error-status length length */ |
||||
u8_t errstatlenlen; |
||||
/* encoding request id length length */ |
||||
u8_t ridlenlen; |
||||
/* encoding pdu length length */ |
||||
u8_t pdulenlen; |
||||
/* encoding community length length */ |
||||
u8_t comlenlen; |
||||
/* encoding version length length */ |
||||
u8_t verlenlen; |
||||
/* encoding sequence length length */ |
||||
u8_t seqlenlen; |
||||
|
||||
/* encoding error-index length */ |
||||
u16_t erridxlen; |
||||
/* encoding error-status length */ |
||||
u16_t errstatlen; |
||||
/* encoding request id length */ |
||||
u16_t ridlen; |
||||
/* encoding pdu length */ |
||||
u16_t pdulen; |
||||
/* encoding community length */ |
||||
u16_t comlen; |
||||
/* encoding version length */ |
||||
u16_t verlen; |
||||
/* encoding sequence length */ |
||||
u16_t seqlen; |
||||
}; |
||||
|
||||
/** output response message header length fields */ |
||||
struct snmp_trap_header_lengths |
||||
{ |
||||
/* encoding timestamp length length */ |
||||
u8_t tslenlen; |
||||
/* encoding specific-trap length length */ |
||||
u8_t strplenlen; |
||||
/* encoding generic-trap length length */ |
||||
u8_t gtrplenlen; |
||||
/* encoding agent-addr length length */ |
||||
u8_t aaddrlenlen; |
||||
/* encoding enterprise-id length length */ |
||||
u8_t eidlenlen; |
||||
/* encoding pdu length length */ |
||||
u8_t pdulenlen; |
||||
/* encoding community length length */ |
||||
u8_t comlenlen; |
||||
/* encoding version length length */ |
||||
u8_t verlenlen; |
||||
/* encoding sequence length length */ |
||||
u8_t seqlenlen; |
||||
|
||||
/* encoding timestamp length */ |
||||
u16_t tslen; |
||||
/* encoding specific-trap length */ |
||||
u16_t strplen; |
||||
/* encoding generic-trap length */ |
||||
u16_t gtrplen; |
||||
/* encoding agent-addr length */ |
||||
u16_t aaddrlen; |
||||
/* encoding enterprise-id length */ |
||||
u16_t eidlen; |
||||
/* encoding pdu length */ |
||||
u16_t pdulen; |
||||
/* encoding community length */ |
||||
u16_t comlen; |
||||
/* encoding version length */ |
||||
u16_t verlen; |
||||
/* encoding sequence length */ |
||||
u16_t seqlen; |
||||
}; |
||||
|
||||
/* Accepting new SNMP messages. */ |
||||
#define SNMP_MSG_EMPTY 0 |
||||
/* Search for matching object for variable binding. */ |
||||
#define SNMP_MSG_SEARCH_OBJ 1 |
||||
/* Perform SNMP operation on in-memory object.
|
||||
Pass-through states, for symmetry only. */ |
||||
#define SNMP_MSG_INTERNAL_GET_OBJDEF 2 |
||||
#define SNMP_MSG_INTERNAL_GET_VALUE 3 |
||||
#define SNMP_MSG_INTERNAL_SET_TEST 4 |
||||
#define SNMP_MSG_INTERNAL_GET_OBJDEF_S 5 |
||||
#define SNMP_MSG_INTERNAL_SET_VALUE 6 |
||||
/* Perform SNMP operation on object located externally.
|
||||
In theory this could be used for building a proxy agent. |
||||
Practical use is for an enterprise spc. app. gateway. */ |
||||
#define SNMP_MSG_EXTERNAL_GET_OBJDEF 7 |
||||
#define SNMP_MSG_EXTERNAL_GET_VALUE 8 |
||||
#define SNMP_MSG_EXTERNAL_SET_TEST 9 |
||||
#define SNMP_MSG_EXTERNAL_GET_OBJDEF_S 10 |
||||
#define SNMP_MSG_EXTERNAL_SET_VALUE 11 |
||||
|
||||
#define SNMP_COMMUNITY_STR_LEN 64 |
||||
struct snmp_msg_pstat |
||||
{ |
||||
/* lwIP local port (161) binding */ |
||||
struct udp_pcb *pcb; |
||||
/* source IP address */ |
||||
ip_addr_t sip; |
||||
/* source UDP port */ |
||||
u16_t sp; |
||||
/* request type */ |
||||
u8_t rt; |
||||
/* request ID */ |
||||
s32_t rid; |
||||
/* error status */ |
||||
s32_t error_status; |
||||
/* error index */ |
||||
s32_t error_index; |
||||
/* community name (zero terminated) */ |
||||
u8_t community[SNMP_COMMUNITY_STR_LEN + 1]; |
||||
/* community string length (exclusive zero term) */ |
||||
u8_t com_strlen; |
||||
/* one out of MSG_EMPTY, MSG_DEMUX, MSG_INTERNAL, MSG_EXTERNAL_x */ |
||||
u8_t state; |
||||
/* saved arguments for MSG_EXTERNAL_x */ |
||||
struct mib_external_node *ext_mib_node; |
||||
struct snmp_name_ptr ext_name_ptr; |
||||
struct obj_def ext_object_def; |
||||
struct snmp_obj_id ext_oid; |
||||
/* index into input variable binding list */ |
||||
u8_t vb_idx; |
||||
/* ptr into input variable binding list */ |
||||
struct snmp_varbind *vb_ptr; |
||||
/* list of variable bindings from input */ |
||||
struct snmp_varbind_root invb; |
||||
/* list of variable bindings to output */ |
||||
struct snmp_varbind_root outvb; |
||||
/* output response lengths used in ASN encoding */ |
||||
struct snmp_resp_header_lengths rhl; |
||||
}; |
||||
|
||||
struct snmp_msg_trap |
||||
{ |
||||
/* lwIP local port (161) binding */ |
||||
struct udp_pcb *pcb; |
||||
/* destination IP address in network order */ |
||||
ip_addr_t dip; |
||||
|
||||
/* source enterprise ID (sysObjectID) */ |
||||
struct snmp_obj_id *enterprise; |
||||
/* source IP address, raw network order format */ |
||||
u8_t sip_raw[4]; |
||||
/* generic trap code */ |
||||
u32_t gen_trap; |
||||
/* specific trap code */ |
||||
u32_t spc_trap; |
||||
/* timestamp */ |
||||
u32_t ts; |
||||
/* list of variable bindings to output */ |
||||
struct snmp_varbind_root outvb; |
||||
/* output trap lengths used in ASN encoding */ |
||||
struct snmp_trap_header_lengths thl; |
||||
}; |
||||
|
||||
/** Agent Version constant, 0 = v1 oddity */ |
||||
extern const s32_t snmp_version; |
||||
/** Agent default "public" community string */ |
||||
extern const char snmp_publiccommunity[7]; |
||||
|
||||
extern struct snmp_msg_trap trap_msg; |
||||
|
||||
/** Agent setup, start listening to port 161. */ |
||||
void snmp_init(void); |
||||
void snmp_trap_dst_enable(u8_t dst_idx, u8_t enable); |
||||
void snmp_trap_dst_ip_set(u8_t dst_idx, ip_addr_t *dst); |
||||
|
||||
/** Varbind-list functions. */ |
||||
struct snmp_varbind* snmp_varbind_alloc(struct snmp_obj_id *oid, u8_t type, u8_t len); |
||||
void snmp_varbind_free(struct snmp_varbind *vb); |
||||
void snmp_varbind_list_free(struct snmp_varbind_root *root); |
||||
void snmp_varbind_tail_add(struct snmp_varbind_root *root, struct snmp_varbind *vb); |
||||
struct snmp_varbind* snmp_varbind_tail_remove(struct snmp_varbind_root *root); |
||||
|
||||
/** Handle an internal (recv) or external (private response) event. */ |
||||
void snmp_msg_event(u8_t request_id); |
||||
err_t snmp_send_response(struct snmp_msg_pstat *m_stat); |
||||
err_t snmp_send_trap(s8_t generic_trap, struct snmp_obj_id *eoid, s32_t specific_trap); |
||||
void snmp_coldstart_trap(void); |
||||
void snmp_authfail_trap(void); |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_SNMP */ |
||||
|
||||
#endif /* __LWIP_SNMP_MSG_H__ */ |
@ -1,268 +0,0 @@ |
||||
/**
|
||||
* @file |
||||
* Generic MIB tree structures. |
||||
* |
||||
* @todo namespace prefixes |
||||
*/ |
||||
|
||||
/*
|
||||
* Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without modification, |
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT |
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY |
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* Author: Christiaan Simons <christiaan.simons@axon.tv> |
||||
*/ |
||||
|
||||
#ifndef __LWIP_SNMP_STRUCTS_H__ |
||||
#define __LWIP_SNMP_STRUCTS_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include "lwip/snmp.h" |
||||
|
||||
#if SNMP_PRIVATE_MIB |
||||
/* When using a private MIB, you have to create a file 'private_mib.h' that contains
|
||||
* a 'struct mib_array_node mib_private' which contains your MIB. */ |
||||
#include "private_mib.h" |
||||
#endif |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* MIB object instance */ |
||||
#define MIB_OBJECT_NONE 0 |
||||
#define MIB_OBJECT_SCALAR 1 |
||||
#define MIB_OBJECT_TAB 2 |
||||
|
||||
/* MIB access types */ |
||||
#define MIB_ACCESS_READ 1 |
||||
#define MIB_ACCESS_WRITE 2 |
||||
|
||||
/* MIB object access */ |
||||
#define MIB_OBJECT_READ_ONLY MIB_ACCESS_READ |
||||
#define MIB_OBJECT_READ_WRITE (MIB_ACCESS_READ | MIB_ACCESS_WRITE) |
||||
#define MIB_OBJECT_WRITE_ONLY MIB_ACCESS_WRITE |
||||
#define MIB_OBJECT_NOT_ACCESSIBLE 0 |
||||
|
||||
/** object definition returned by (get_object_def)() */ |
||||
struct obj_def |
||||
{ |
||||
/* MIB_OBJECT_NONE (0), MIB_OBJECT_SCALAR (1), MIB_OBJECT_TAB (2) */ |
||||
u8_t instance; |
||||
/* 0 read-only, 1 read-write, 2 write-only, 3 not-accessible */ |
||||
u8_t access; |
||||
/* ASN type for this object */ |
||||
u8_t asn_type; |
||||
/* value length (host length) */ |
||||
u16_t v_len; |
||||
/* length of instance part of supplied object identifier */ |
||||
u8_t id_inst_len; |
||||
/* instance part of supplied object identifier */ |
||||
s32_t *id_inst_ptr; |
||||
}; |
||||
|
||||
struct snmp_name_ptr |
||||
{ |
||||
u8_t ident_len; |
||||
s32_t *ident; |
||||
}; |
||||
|
||||
/** MIB const scalar (.0) node */ |
||||
#define MIB_NODE_SC 0x01 |
||||
/** MIB const array node */ |
||||
#define MIB_NODE_AR 0x02 |
||||
/** MIB array node (mem_malloced from RAM) */ |
||||
#define MIB_NODE_RA 0x03 |
||||
/** MIB list root node (mem_malloced from RAM) */ |
||||
#define MIB_NODE_LR 0x04 |
||||
/** MIB node for external objects */ |
||||
#define MIB_NODE_EX 0x05 |
||||
|
||||
/** node "base class" layout, the mandatory fields for a node */ |
||||
struct mib_node |
||||
{ |
||||
/** returns struct obj_def for the given object identifier */ |
||||
void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); |
||||
/** returns object value for the given object identifier,
|
||||
@note the caller must allocate at least len bytes for the value */ |
||||
void (*get_value)(struct obj_def *od, u16_t len, void *value); |
||||
/** tests length and/or range BEFORE setting */ |
||||
u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); |
||||
/** sets object value, only to be called when set_test() */ |
||||
void (*set_value)(struct obj_def *od, u16_t len, void *value);
|
||||
/** One out of MIB_NODE_AR, MIB_NODE_LR or MIB_NODE_EX */ |
||||
u8_t node_type; |
||||
/* array or max list length */ |
||||
u16_t maxlength; |
||||
}; |
||||
|
||||
/** derived node for scalars .0 index */ |
||||
typedef struct mib_node mib_scalar_node; |
||||
|
||||
/** derived node, points to a fixed size const array
|
||||
of sub-identifiers plus a 'child' pointer */ |
||||
struct mib_array_node |
||||
{ |
||||
/* inherited "base class" members */ |
||||
void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); |
||||
void (*get_value)(struct obj_def *od, u16_t len, void *value); |
||||
u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); |
||||
void (*set_value)(struct obj_def *od, u16_t len, void *value); |
||||
|
||||
u8_t node_type; |
||||
u16_t maxlength; |
||||
|
||||
/* additional struct members */ |
||||
const s32_t *objid; |
||||
struct mib_node* const *nptr; |
||||
}; |
||||
|
||||
/** derived node, points to a fixed size mem_malloced array
|
||||
of sub-identifiers plus a 'child' pointer */ |
||||
struct mib_ram_array_node |
||||
{ |
||||
/* inherited "base class" members */ |
||||
void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); |
||||
void (*get_value)(struct obj_def *od, u16_t len, void *value); |
||||
u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); |
||||
void (*set_value)(struct obj_def *od, u16_t len, void *value); |
||||
|
||||
u8_t node_type; |
||||
u16_t maxlength; |
||||
|
||||
/* aditional struct members */ |
||||
s32_t *objid; |
||||
struct mib_node **nptr; |
||||
}; |
||||
|
||||
struct mib_list_node |
||||
{ |
||||
struct mib_list_node *prev;
|
||||
struct mib_list_node *next; |
||||
s32_t objid; |
||||
struct mib_node *nptr; |
||||
}; |
||||
|
||||
/** derived node, points to a doubly linked list
|
||||
of sub-identifiers plus a 'child' pointer */ |
||||
struct mib_list_rootnode |
||||
{ |
||||
/* inherited "base class" members */ |
||||
void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); |
||||
void (*get_value)(struct obj_def *od, u16_t len, void *value); |
||||
u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); |
||||
void (*set_value)(struct obj_def *od, u16_t len, void *value); |
||||
|
||||
u8_t node_type; |
||||
u16_t maxlength; |
||||
|
||||
/* additional struct members */ |
||||
struct mib_list_node *head; |
||||
struct mib_list_node *tail; |
||||
/* counts list nodes in list */ |
||||
u16_t count; |
||||
}; |
||||
|
||||
/** derived node, has access functions for mib object in external memory or device
|
||||
using 'tree_level' and 'idx', with a range 0 .. (level_length() - 1) */ |
||||
struct mib_external_node |
||||
{ |
||||
/* inherited "base class" members */ |
||||
void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); |
||||
void (*get_value)(struct obj_def *od, u16_t len, void *value); |
||||
u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); |
||||
void (*set_value)(struct obj_def *od, u16_t len, void *value); |
||||
|
||||
u8_t node_type; |
||||
u16_t maxlength; |
||||
|
||||
/* additional struct members */ |
||||
/** points to an external (in memory) record of some sort of addressing
|
||||
information, passed to and interpreted by the funtions below */ |
||||
void* addr_inf; |
||||
/** tree levels under this node */ |
||||
u8_t tree_levels; |
||||
/** number of objects at this level */ |
||||
u16_t (*level_length)(void* addr_inf, u8_t level); |
||||
/** compares object sub identifier with external id
|
||||
return zero when equal, nonzero when unequal */ |
||||
s32_t (*ident_cmp)(void* addr_inf, u8_t level, u16_t idx, s32_t sub_id); |
||||
void (*get_objid)(void* addr_inf, u8_t level, u16_t idx, s32_t *sub_id); |
||||
|
||||
/** async Questions */ |
||||
void (*get_object_def_q)(void* addr_inf, u8_t rid, u8_t ident_len, s32_t *ident); |
||||
void (*get_value_q)(u8_t rid, struct obj_def *od); |
||||
void (*set_test_q)(u8_t rid, struct obj_def *od); |
||||
void (*set_value_q)(u8_t rid, struct obj_def *od, u16_t len, void *value); |
||||
/** async Answers */ |
||||
void (*get_object_def_a)(u8_t rid, u8_t ident_len, s32_t *ident, struct obj_def *od); |
||||
void (*get_value_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); |
||||
u8_t (*set_test_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); |
||||
void (*set_value_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); |
||||
/** async Panic Close (agent returns error reply,
|
||||
e.g. used for external transaction cleanup) */ |
||||
void (*get_object_def_pc)(u8_t rid, u8_t ident_len, s32_t *ident); |
||||
void (*get_value_pc)(u8_t rid, struct obj_def *od); |
||||
void (*set_test_pc)(u8_t rid, struct obj_def *od); |
||||
void (*set_value_pc)(u8_t rid, struct obj_def *od); |
||||
}; |
||||
|
||||
/** export MIB tree from mib2.c */ |
||||
extern const struct mib_array_node internet; |
||||
|
||||
/** dummy function pointers for non-leaf MIB nodes from mib2.c */ |
||||
void noleafs_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od); |
||||
void noleafs_get_value(struct obj_def *od, u16_t len, void *value); |
||||
u8_t noleafs_set_test(struct obj_def *od, u16_t len, void *value); |
||||
void noleafs_set_value(struct obj_def *od, u16_t len, void *value); |
||||
|
||||
void snmp_oidtoip(s32_t *ident, ip_addr_t *ip); |
||||
void snmp_iptooid(ip_addr_t *ip, s32_t *ident); |
||||
void snmp_ifindextonetif(s32_t ifindex, struct netif **netif); |
||||
void snmp_netiftoifindex(struct netif *netif, s32_t *ifidx); |
||||
|
||||
struct mib_list_node* snmp_mib_ln_alloc(s32_t id); |
||||
void snmp_mib_ln_free(struct mib_list_node *ln); |
||||
struct mib_list_rootnode* snmp_mib_lrn_alloc(void); |
||||
void snmp_mib_lrn_free(struct mib_list_rootnode *lrn); |
||||
|
||||
s8_t snmp_mib_node_insert(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **insn); |
||||
s8_t snmp_mib_node_find(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **fn); |
||||
struct mib_list_rootnode *snmp_mib_node_delete(struct mib_list_rootnode *rn, struct mib_list_node *n); |
||||
|
||||
struct mib_node* snmp_search_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_name_ptr *np); |
||||
struct mib_node* snmp_expand_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret); |
||||
u8_t snmp_iso_prefix_tst(u8_t ident_len, s32_t *ident); |
||||
u8_t snmp_iso_prefix_expand(u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret); |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_SNMP */ |
||||
|
||||
#endif /* __LWIP_SNMP_STRUCTS_H__ */ |
@ -1,376 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
|
||||
|
||||
#ifndef __LWIP_SOCKETS_H__ |
||||
#define __LWIP_SOCKETS_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include <stddef.h> /* for size_t */ |
||||
|
||||
#include "lwip/ip_addr.h" |
||||
#include "lwip/inet.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* members are in network byte order */ |
||||
struct sockaddr_in { |
||||
u8_t sin_len; |
||||
u8_t sin_family; |
||||
u16_t sin_port; |
||||
struct in_addr sin_addr; |
||||
char sin_zero[8]; |
||||
}; |
||||
|
||||
struct sockaddr { |
||||
u8_t sa_len; |
||||
u8_t sa_family; |
||||
char sa_data[14]; |
||||
}; |
||||
|
||||
#ifndef socklen_t |
||||
# define socklen_t u32_t |
||||
#endif |
||||
|
||||
/* Socket protocol types (TCP/UDP/RAW) */ |
||||
#define SOCK_STREAM 1 |
||||
#define SOCK_DGRAM 2 |
||||
#define SOCK_RAW 3 |
||||
|
||||
/*
|
||||
* Option flags per-socket. These must match the SOF_ flags in ip.h (checked in init.c) |
||||
*/ |
||||
#define SO_DEBUG 0x0001 /* Unimplemented: turn on debugging info recording */ |
||||
#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ |
||||
#define SO_REUSEADDR 0x0004 /* Allow local address reuse */ |
||||
#define SO_KEEPALIVE 0x0008 /* keep connections alive */ |
||||
#define SO_DONTROUTE 0x0010 /* Unimplemented: just use interface addresses */ |
||||
#define SO_BROADCAST 0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ |
||||
#define SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */ |
||||
#define SO_LINGER 0x0080 /* linger on close if data present */ |
||||
#define SO_OOBINLINE 0x0100 /* Unimplemented: leave received OOB data in line */ |
||||
#define SO_REUSEPORT 0x0200 /* Unimplemented: allow local address & port reuse */ |
||||
|
||||
#define SO_DONTLINGER ((int)(~SO_LINGER)) |
||||
|
||||
/*
|
||||
* Additional options, not kept in so_options. |
||||
*/ |
||||
#define SO_SNDBUF 0x1001 /* Unimplemented: send buffer size */ |
||||
#define SO_RCVBUF 0x1002 /* receive buffer size */ |
||||
#define SO_SNDLOWAT 0x1003 /* Unimplemented: send low-water mark */ |
||||
#define SO_RCVLOWAT 0x1004 /* Unimplemented: receive low-water mark */ |
||||
#define SO_SNDTIMEO 0x1005 /* Unimplemented: send timeout */ |
||||
#define SO_RCVTIMEO 0x1006 /* receive timeout */ |
||||
#define SO_ERROR 0x1007 /* get error status and clear */ |
||||
#define SO_TYPE 0x1008 /* get socket type */ |
||||
#define SO_CONTIMEO 0x1009 /* Unimplemented: connect timeout */ |
||||
#define SO_NO_CHECK 0x100a /* don't create UDP checksum */ |
||||
|
||||
|
||||
/*
|
||||
* Structure used for manipulating linger option. |
||||
*/ |
||||
struct linger { |
||||
int l_onoff; /* option on/off */ |
||||
int l_linger; /* linger time */ |
||||
}; |
||||
|
||||
/*
|
||||
* Level number for (get/set)sockopt() to apply to socket itself. |
||||
*/ |
||||
#define SOL_SOCKET 0xfff /* options for socket level */ |
||||
|
||||
|
||||
#define AF_UNSPEC 0 |
||||
#define AF_INET 2 |
||||
#define PF_INET AF_INET |
||||
#define PF_UNSPEC AF_UNSPEC |
||||
|
||||
#define IPPROTO_IP 0 |
||||
#define IPPROTO_TCP 6 |
||||
#define IPPROTO_UDP 17 |
||||
#define IPPROTO_UDPLITE 136 |
||||
|
||||
/* Flags we can use with send and recv. */ |
||||
#define MSG_PEEK 0x01 /* Peeks at an incoming message */ |
||||
#define MSG_WAITALL 0x02 /* Unimplemented: Requests that the function block until the full amount of data requested can be returned */ |
||||
#define MSG_OOB 0x04 /* Unimplemented: Requests out-of-band data. The significance and semantics of out-of-band data are protocol-specific */ |
||||
#define MSG_DONTWAIT 0x08 /* Nonblocking i/o for this operation only */ |
||||
#define MSG_MORE 0x10 /* Sender will send more */ |
||||
|
||||
|
||||
/*
|
||||
* Options for level IPPROTO_IP |
||||
*/ |
||||
#define IP_TOS 1 |
||||
#define IP_TTL 2 |
||||
|
||||
#if LWIP_TCP |
||||
/*
|
||||
* Options for level IPPROTO_TCP |
||||
*/ |
||||
#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ |
||||
#define TCP_KEEPALIVE 0x02 /* send KEEPALIVE probes when idle for pcb->keep_idle milliseconds */ |
||||
#define TCP_KEEPIDLE 0x03 /* set pcb->keep_idle - Same as TCP_KEEPALIVE, but use seconds for get/setsockopt */ |
||||
#define TCP_KEEPINTVL 0x04 /* set pcb->keep_intvl - Use seconds for get/setsockopt */ |
||||
#define TCP_KEEPCNT 0x05 /* set pcb->keep_cnt - Use number of probes sent for get/setsockopt */ |
||||
#endif /* LWIP_TCP */ |
||||
|
||||
#if LWIP_UDP && LWIP_UDPLITE |
||||
/*
|
||||
* Options for level IPPROTO_UDPLITE |
||||
*/ |
||||
#define UDPLITE_SEND_CSCOV 0x01 /* sender checksum coverage */ |
||||
#define UDPLITE_RECV_CSCOV 0x02 /* minimal receiver checksum coverage */ |
||||
#endif /* LWIP_UDP && LWIP_UDPLITE*/ |
||||
|
||||
|
||||
#if LWIP_IGMP |
||||
/*
|
||||
* Options and types for UDP multicast traffic handling |
||||
*/ |
||||
#define IP_ADD_MEMBERSHIP 3 |
||||
#define IP_DROP_MEMBERSHIP 4 |
||||
#define IP_MULTICAST_TTL 5 |
||||
#define IP_MULTICAST_IF 6 |
||||
#define IP_MULTICAST_LOOP 7 |
||||
|
||||
typedef struct ip_mreq { |
||||
struct in_addr imr_multiaddr; /* IP multicast address of group */ |
||||
struct in_addr imr_interface; /* local IP address of interface */ |
||||
} ip_mreq; |
||||
#endif /* LWIP_IGMP */ |
||||
|
||||
/*
|
||||
* The Type of Service provides an indication of the abstract |
||||
* parameters of the quality of service desired. These parameters are |
||||
* to be used to guide the selection of the actual service parameters |
||||
* when transmitting a datagram through a particular network. Several |
||||
* networks offer service precedence, which somehow treats high |
||||
* precedence traffic as more important than other traffic (generally |
||||
* by accepting only traffic above a certain precedence at time of high |
||||
* load). The major choice is a three way tradeoff between low-delay, |
||||
* high-reliability, and high-throughput. |
||||
* The use of the Delay, Throughput, and Reliability indications may |
||||
* increase the cost (in some sense) of the service. In many networks |
||||
* better performance for one of these parameters is coupled with worse |
||||
* performance on another. Except for very unusual cases at most two |
||||
* of these three indications should be set. |
||||
*/ |
||||
#define IPTOS_TOS_MASK 0x1E |
||||
#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) |
||||
#define IPTOS_LOWDELAY 0x10 |
||||
#define IPTOS_THROUGHPUT 0x08 |
||||
#define IPTOS_RELIABILITY 0x04 |
||||
#define IPTOS_LOWCOST 0x02 |
||||
#define IPTOS_MINCOST IPTOS_LOWCOST |
||||
|
||||
/*
|
||||
* The Network Control precedence designation is intended to be used |
||||
* within a network only. The actual use and control of that |
||||
* designation is up to each network. The Internetwork Control |
||||
* designation is intended for use by gateway control originators only. |
||||
* If the actual use of these precedence designations is of concern to |
||||
* a particular network, it is the responsibility of that network to |
||||
* control the access to, and use of, those precedence designations. |
||||
*/ |
||||
#define IPTOS_PREC_MASK 0xe0 |
||||
#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK) |
||||
#define IPTOS_PREC_NETCONTROL 0xe0 |
||||
#define IPTOS_PREC_INTERNETCONTROL 0xc0 |
||||
#define IPTOS_PREC_CRITIC_ECP 0xa0 |
||||
#define IPTOS_PREC_FLASHOVERRIDE 0x80 |
||||
#define IPTOS_PREC_FLASH 0x60 |
||||
#define IPTOS_PREC_IMMEDIATE 0x40 |
||||
#define IPTOS_PREC_PRIORITY 0x20 |
||||
#define IPTOS_PREC_ROUTINE 0x00 |
||||
|
||||
|
||||
/*
|
||||
* Commands for ioctlsocket(), taken from the BSD file fcntl.h. |
||||
* lwip_ioctl only supports FIONREAD and FIONBIO, for now |
||||
* |
||||
* Ioctl's have the command encoded in the lower word, |
||||
* and the size of any in or out parameters in the upper |
||||
* word. The high 2 bits of the upper word are used |
||||
* to encode the in/out status of the parameter; for now |
||||
* we restrict parameters to at most 128 bytes. |
||||
*/ |
||||
#if !defined(FIONREAD) || !defined(FIONBIO) |
||||
#define IOCPARM_MASK 0x7fU /* parameters must be < 128 bytes */ |
||||
#define IOC_VOID 0x20000000UL /* no parameters */ |
||||
#define IOC_OUT 0x40000000UL /* copy out parameters */ |
||||
#define IOC_IN 0x80000000UL /* copy in parameters */ |
||||
#define IOC_INOUT (IOC_IN|IOC_OUT) |
||||
/* 0x20000000 distinguishes new &
|
||||
old ioctl's */ |
||||
#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) |
||||
|
||||
#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) |
||||
|
||||
#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) |
||||
#endif /* !defined(FIONREAD) || !defined(FIONBIO) */ |
||||
|
||||
#ifndef FIONREAD |
||||
#define FIONREAD _IOR('f', 127, unsigned long) /* get # bytes to read */ |
||||
#endif |
||||
#ifndef FIONBIO |
||||
#define FIONBIO _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */ |
||||
#endif |
||||
|
||||
/* Socket I/O Controls: unimplemented */ |
||||
#ifndef SIOCSHIWAT |
||||
#define SIOCSHIWAT _IOW('s', 0, unsigned long) /* set high watermark */ |
||||
#define SIOCGHIWAT _IOR('s', 1, unsigned long) /* get high watermark */ |
||||
#define SIOCSLOWAT _IOW('s', 2, unsigned long) /* set low watermark */ |
||||
#define SIOCGLOWAT _IOR('s', 3, unsigned long) /* get low watermark */ |
||||
#define SIOCATMARK _IOR('s', 7, unsigned long) /* at oob mark? */ |
||||
#endif |
||||
|
||||
/* commands for fnctl */ |
||||
#ifndef F_GETFL |
||||
#define F_GETFL 3 |
||||
#endif |
||||
#ifndef F_SETFL |
||||
#define F_SETFL 4 |
||||
#endif |
||||
|
||||
/* File status flags and file access modes for fnctl,
|
||||
these are bits in an int. */ |
||||
#ifndef O_NONBLOCK |
||||
#define O_NONBLOCK 1 /* nonblocking I/O */ |
||||
#endif |
||||
#ifndef O_NDELAY |
||||
#define O_NDELAY 1 /* same as O_NONBLOCK, for compatibility */ |
||||
#endif |
||||
|
||||
#ifndef SHUT_RD |
||||
#define SHUT_RD 0 |
||||
#define SHUT_WR 1 |
||||
#define SHUT_RDWR 2 |
||||
#endif |
||||
|
||||
/* FD_SET used for lwip_select */ |
||||
#ifndef FD_SET |
||||
#undef FD_SETSIZE |
||||
/* Make FD_SETSIZE match NUM_SOCKETS in socket.c */ |
||||
#define FD_SETSIZE MEMP_NUM_NETCONN |
||||
#define FD_SET(n, p) ((p)->fd_bits[(n)/8] |= (1 << ((n) & 7))) |
||||
#define FD_CLR(n, p) ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7))) |
||||
#define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] & (1 << ((n) & 7))) |
||||
#define FD_ZERO(p) memset((void*)(p),0,sizeof(*(p))) |
||||
|
||||
typedef struct fd_set { |
||||
unsigned char fd_bits [(FD_SETSIZE+7)/8]; |
||||
} fd_set; |
||||
|
||||
#endif /* FD_SET */ |
||||
|
||||
/** LWIP_TIMEVAL_PRIVATE: if you want to use the struct timeval provided
|
||||
* by your system, set this to 0 and include <sys/time.h> in cc.h */
|
||||
#ifndef LWIP_TIMEVAL_PRIVATE |
||||
#define LWIP_TIMEVAL_PRIVATE 1 |
||||
#endif |
||||
|
||||
#if LWIP_TIMEVAL_PRIVATE |
||||
struct timeval { |
||||
long tv_sec; /* seconds */ |
||||
long tv_usec; /* and microseconds */ |
||||
}; |
||||
#endif /* LWIP_TIMEVAL_PRIVATE */ |
||||
|
||||
void lwip_socket_init(void); |
||||
|
||||
int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen); |
||||
int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen); |
||||
int lwip_shutdown(int s, int how); |
||||
int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen); |
||||
int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen); |
||||
int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen); |
||||
int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen); |
||||
int lwip_close(int s); |
||||
int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen); |
||||
int lwip_listen(int s, int backlog); |
||||
int lwip_recv(int s, void *mem, size_t len, int flags); |
||||
int lwip_read(int s, void *mem, size_t len); |
||||
int lwip_recvfrom(int s, void *mem, size_t len, int flags, |
||||
struct sockaddr *from, socklen_t *fromlen); |
||||
int lwip_send(int s, const void *dataptr, size_t size, int flags); |
||||
int lwip_sendto(int s, const void *dataptr, size_t size, int flags, |
||||
const struct sockaddr *to, socklen_t tolen); |
||||
int lwip_socket(int domain, int type, int protocol); |
||||
int lwip_write(int s, const void *dataptr, size_t size); |
||||
int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, |
||||
struct timeval *timeout); |
||||
int lwip_ioctl(int s, long cmd, void *argp); |
||||
int lwip_fcntl(int s, int cmd, int val); |
||||
|
||||
#if LWIP_COMPAT_SOCKETS |
||||
#define accept(a,b,c) lwip_accept(a,b,c) |
||||
#define bind(a,b,c) lwip_bind(a,b,c) |
||||
#define shutdown(a,b) lwip_shutdown(a,b) |
||||
#define closesocket(s) lwip_close(s) |
||||
#define connect(a,b,c) lwip_connect(a,b,c) |
||||
#define getsockname(a,b,c) lwip_getsockname(a,b,c) |
||||
#define getpeername(a,b,c) lwip_getpeername(a,b,c) |
||||
#define setsockopt(a,b,c,d,e) lwip_setsockopt(a,b,c,d,e) |
||||
#define getsockopt(a,b,c,d,e) lwip_getsockopt(a,b,c,d,e) |
||||
#define listen(a,b) lwip_listen(a,b) |
||||
#define recv(a,b,c,d) lwip_recv(a,b,c,d) |
||||
#define recvfrom(a,b,c,d,e,f) lwip_recvfrom(a,b,c,d,e,f) |
||||
#define send(a,b,c,d) lwip_send(a,b,c,d) |
||||
#define sendto(a,b,c,d,e,f) lwip_sendto(a,b,c,d,e,f) |
||||
#define socket(a,b,c) lwip_socket(a,b,c) |
||||
#define select(a,b,c,d,e) lwip_select(a,b,c,d,e) |
||||
#define ioctlsocket(a,b,c) lwip_ioctl(a,b,c) |
||||
|
||||
#if LWIP_POSIX_SOCKETS_IO_NAMES |
||||
#define read(a,b,c) lwip_read(a,b,c) |
||||
#define write(a,b,c) lwip_write(a,b,c) |
||||
#define close(s) lwip_close(s) |
||||
#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */ |
||||
|
||||
#endif /* LWIP_COMPAT_SOCKETS */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_SOCKET */ |
||||
|
||||
#endif /* __LWIP_SOCKETS_H__ */ |
@ -1,292 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_STATS_H__ |
||||
#define __LWIP_STATS_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#include "lwip/mem.h" |
||||
#include "lwip/memp.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#if LWIP_STATS |
||||
|
||||
#ifndef LWIP_STATS_LARGE |
||||
#define LWIP_STATS_LARGE 0 |
||||
#endif |
||||
|
||||
#if LWIP_STATS_LARGE |
||||
#define STAT_COUNTER u32_t |
||||
#define STAT_COUNTER_F U32_F |
||||
#else |
||||
#define STAT_COUNTER u16_t |
||||
#define STAT_COUNTER_F U16_F |
||||
#endif |
||||
|
||||
struct stats_proto { |
||||
STAT_COUNTER xmit; /* Transmitted packets. */ |
||||
STAT_COUNTER recv; /* Received packets. */ |
||||
STAT_COUNTER fw; /* Forwarded packets. */ |
||||
STAT_COUNTER drop; /* Dropped packets. */ |
||||
STAT_COUNTER chkerr; /* Checksum error. */ |
||||
STAT_COUNTER lenerr; /* Invalid length error. */ |
||||
STAT_COUNTER memerr; /* Out of memory error. */ |
||||
STAT_COUNTER rterr; /* Routing error. */ |
||||
STAT_COUNTER proterr; /* Protocol error. */ |
||||
STAT_COUNTER opterr; /* Error in options. */ |
||||
STAT_COUNTER err; /* Misc error. */ |
||||
STAT_COUNTER cachehit; |
||||
}; |
||||
|
||||
struct stats_igmp { |
||||
STAT_COUNTER xmit; /* Transmitted packets. */ |
||||
STAT_COUNTER recv; /* Received packets. */ |
||||
STAT_COUNTER drop; /* Dropped packets. */ |
||||
STAT_COUNTER chkerr; /* Checksum error. */ |
||||
STAT_COUNTER lenerr; /* Invalid length error. */ |
||||
STAT_COUNTER memerr; /* Out of memory error. */ |
||||
STAT_COUNTER proterr; /* Protocol error. */ |
||||
STAT_COUNTER rx_v1; /* Received v1 frames. */ |
||||
STAT_COUNTER rx_group; /* Received group-specific queries. */ |
||||
STAT_COUNTER rx_general; /* Received general queries. */ |
||||
STAT_COUNTER rx_report; /* Received reports. */ |
||||
STAT_COUNTER tx_join; /* Sent joins. */ |
||||
STAT_COUNTER tx_leave; /* Sent leaves. */ |
||||
STAT_COUNTER tx_report; /* Sent reports. */ |
||||
}; |
||||
|
||||
struct stats_mem { |
||||
#ifdef LWIP_DEBUG |
||||
const char *name; |
||||
#endif /* LWIP_DEBUG */ |
||||
mem_size_t avail; |
||||
mem_size_t used; |
||||
mem_size_t max; |
||||
STAT_COUNTER err; |
||||
STAT_COUNTER illegal; |
||||
}; |
||||
|
||||
struct stats_syselem { |
||||
STAT_COUNTER used; |
||||
STAT_COUNTER max; |
||||
STAT_COUNTER err; |
||||
}; |
||||
|
||||
struct stats_sys { |
||||
struct stats_syselem sem; |
||||
struct stats_syselem mutex; |
||||
struct stats_syselem mbox; |
||||
}; |
||||
|
||||
struct stats_ { |
||||
#if LINK_STATS |
||||
struct stats_proto link; |
||||
#endif |
||||
#if ETHARP_STATS |
||||
struct stats_proto etharp; |
||||
#endif |
||||
#if IPFRAG_STATS |
||||
struct stats_proto ip_frag; |
||||
#endif |
||||
#if IP_STATS |
||||
struct stats_proto ip; |
||||
#endif |
||||
#if ICMP_STATS |
||||
struct stats_proto icmp; |
||||
#endif |
||||
#if IGMP_STATS |
||||
struct stats_igmp igmp; |
||||
#endif |
||||
#if UDP_STATS |
||||
struct stats_proto udp; |
||||
#endif |
||||
#if TCP_STATS |
||||
struct stats_proto tcp; |
||||
#endif |
||||
#if MEM_STATS |
||||
struct stats_mem mem; |
||||
#endif |
||||
#if MEMP_STATS |
||||
struct stats_mem memp[MEMP_MAX]; |
||||
#endif |
||||
#if SYS_STATS |
||||
struct stats_sys sys; |
||||
#endif |
||||
}; |
||||
|
||||
extern struct stats_ lwip_stats; |
||||
|
||||
void stats_init(void)ICACHE_FLASH_ATTR; |
||||
|
||||
#define STATS_INC(x) ++lwip_stats.x |
||||
#define STATS_DEC(x) --lwip_stats.x |
||||
#define STATS_INC_USED(x, y) do { lwip_stats.x.used += y; \ |
||||
if (lwip_stats.x.max < lwip_stats.x.used) { \
|
||||
lwip_stats.x.max = lwip_stats.x.used; \
|
||||
} \
|
||||
} while(0) |
||||
#else /* LWIP_STATS */ |
||||
#define stats_init() |
||||
#define STATS_INC(x) |
||||
#define STATS_DEC(x) |
||||
#define STATS_INC_USED(x) |
||||
#endif /* LWIP_STATS */ |
||||
|
||||
#if TCP_STATS |
||||
#define TCP_STATS_INC(x) STATS_INC(x) |
||||
#define TCP_STATS_DISPLAY() stats_display_proto(&lwip_stats.tcp, "TCP") |
||||
#else |
||||
#define TCP_STATS_INC(x) |
||||
#define TCP_STATS_DISPLAY() |
||||
#endif |
||||
|
||||
#if UDP_STATS |
||||
#define UDP_STATS_INC(x) STATS_INC(x) |
||||
#define UDP_STATS_DISPLAY() stats_display_proto(&lwip_stats.udp, "UDP") |
||||
#else |
||||
#define UDP_STATS_INC(x) |
||||
#define UDP_STATS_DISPLAY() |
||||
#endif |
||||
|
||||
#if ICMP_STATS |
||||
#define ICMP_STATS_INC(x) STATS_INC(x) |
||||
#define ICMP_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp, "ICMP") |
||||
#else |
||||
#define ICMP_STATS_INC(x) |
||||
#define ICMP_STATS_DISPLAY() |
||||
#endif |
||||
|
||||
#if IGMP_STATS |
||||
#define IGMP_STATS_INC(x) STATS_INC(x) |
||||
#define IGMP_STATS_DISPLAY() stats_display_igmp(&lwip_stats.igmp) |
||||
#else |
||||
#define IGMP_STATS_INC(x) |
||||
#define IGMP_STATS_DISPLAY() |
||||
#endif |
||||
|
||||
#if IP_STATS |
||||
#define IP_STATS_INC(x) STATS_INC(x) |
||||
#define IP_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip, "IP") |
||||
#else |
||||
#define IP_STATS_INC(x) |
||||
#define IP_STATS_DISPLAY() |
||||
#endif |
||||
|
||||
#if IPFRAG_STATS |
||||
#define IPFRAG_STATS_INC(x) STATS_INC(x) |
||||
#define IPFRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip_frag, "IP_FRAG") |
||||
#else |
||||
#define IPFRAG_STATS_INC(x) |
||||
#define IPFRAG_STATS_DISPLAY() |
||||
#endif |
||||
|
||||
#if ETHARP_STATS |
||||
#define ETHARP_STATS_INC(x) STATS_INC(x) |
||||
#define ETHARP_STATS_DISPLAY() stats_display_proto(&lwip_stats.etharp, "ETHARP") |
||||
#else |
||||
#define ETHARP_STATS_INC(x) |
||||
#define ETHARP_STATS_DISPLAY() |
||||
#endif |
||||
|
||||
#if LINK_STATS |
||||
#define LINK_STATS_INC(x) STATS_INC(x) |
||||
#define LINK_STATS_DISPLAY() stats_display_proto(&lwip_stats.link, "LINK") |
||||
#else |
||||
#define LINK_STATS_INC(x) |
||||
#define LINK_STATS_DISPLAY() |
||||
#endif |
||||
|
||||
#if MEM_STATS |
||||
#define MEM_STATS_AVAIL(x, y) lwip_stats.mem.x = y |
||||
#define MEM_STATS_INC(x) STATS_INC(mem.x) |
||||
#define MEM_STATS_INC_USED(x, y) STATS_INC_USED(mem, y) |
||||
#define MEM_STATS_DEC_USED(x, y) lwip_stats.mem.x -= y |
||||
#define MEM_STATS_DISPLAY() stats_display_mem(&lwip_stats.mem, "HEAP") |
||||
#else |
||||
#define MEM_STATS_AVAIL(x, y) |
||||
#define MEM_STATS_INC(x) |
||||
#define MEM_STATS_INC_USED(x, y) |
||||
#define MEM_STATS_DEC_USED(x, y) |
||||
#define MEM_STATS_DISPLAY() |
||||
#endif |
||||
|
||||
#if MEMP_STATS |
||||
#define MEMP_STATS_AVAIL(x, i, y) lwip_stats.memp[i].x = y |
||||
#define MEMP_STATS_INC(x, i) STATS_INC(memp[i].x) |
||||
#define MEMP_STATS_DEC(x, i) STATS_DEC(memp[i].x) |
||||
#define MEMP_STATS_INC_USED(x, i) STATS_INC_USED(memp[i], 1) |
||||
#define MEMP_STATS_DISPLAY(i) stats_display_memp(&lwip_stats.memp[i], i) |
||||
#else |
||||
#define MEMP_STATS_AVAIL(x, i, y) |
||||
#define MEMP_STATS_INC(x, i) |
||||
#define MEMP_STATS_DEC(x, i) |
||||
#define MEMP_STATS_INC_USED(x, i) |
||||
#define MEMP_STATS_DISPLAY(i) |
||||
#endif |
||||
|
||||
#if SYS_STATS |
||||
#define SYS_STATS_INC(x) STATS_INC(sys.x) |
||||
#define SYS_STATS_DEC(x) STATS_DEC(sys.x) |
||||
#define SYS_STATS_INC_USED(x) STATS_INC_USED(sys.x, 1) |
||||
#define SYS_STATS_DISPLAY() stats_display_sys(&lwip_stats.sys) |
||||
#else |
||||
#define SYS_STATS_INC(x) |
||||
#define SYS_STATS_DEC(x) |
||||
#define SYS_STATS_INC_USED(x) |
||||
#define SYS_STATS_DISPLAY() |
||||
#endif |
||||
|
||||
/* Display of statistics */ |
||||
#if LWIP_STATS_DISPLAY |
||||
void stats_display(void)ICACHE_FLASH_ATTR; |
||||
void stats_display_proto(struct stats_proto *proto, char *name)ICACHE_FLASH_ATTR; |
||||
void stats_display_igmp(struct stats_igmp *igmp)ICACHE_FLASH_ATTR; |
||||
void stats_display_mem(struct stats_mem *mem, char *name)ICACHE_FLASH_ATTR; |
||||
void stats_display_memp(struct stats_mem *mem, int index)ICACHE_FLASH_ATTR; |
||||
void stats_display_sys(struct stats_sys *sys)ICACHE_FLASH_ATTR; |
||||
#else /* LWIP_STATS_DISPLAY */ |
||||
#define stats_display() |
||||
#define stats_display_proto(proto, name) |
||||
#define stats_display_igmp(igmp) |
||||
#define stats_display_mem(mem, name) |
||||
#define stats_display_memp(mem, index) |
||||
#define stats_display_sys(sys) |
||||
#endif /* LWIP_STATS_DISPLAY */ |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_STATS_H__ */ |
@ -1,337 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_SYS_H__ |
||||
#define __LWIP_SYS_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#include "eagle_soc.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#if NO_SYS |
||||
|
||||
/* For a totally minimal and standalone system, we provide null
|
||||
definitions of the sys_ functions. */ |
||||
typedef u8_t sys_sem_t; |
||||
typedef u8_t sys_mutex_t; |
||||
typedef u8_t sys_mbox_t; |
||||
|
||||
#define sys_sem_new(s, c) ERR_OK |
||||
#define sys_sem_signal(s) |
||||
#define sys_sem_wait(s) |
||||
#define sys_arch_sem_wait(s,t) |
||||
#define sys_sem_free(s) |
||||
#define sys_mutex_new(mu) ERR_OK |
||||
#define sys_mutex_lock(mu) |
||||
#define sys_mutex_unlock(mu) |
||||
#define sys_mutex_free(mu) |
||||
#define sys_mbox_new(m, s) ERR_OK |
||||
#define sys_mbox_fetch(m,d) |
||||
#define sys_mbox_tryfetch(m,d) |
||||
#define sys_mbox_post(m,d) |
||||
#define sys_mbox_trypost(m,d) |
||||
#define sys_mbox_free(m) |
||||
|
||||
#define sys_thread_new(n,t,a,s,p) |
||||
|
||||
#define sys_msleep(t) |
||||
|
||||
#else /* NO_SYS */ |
||||
|
||||
/** Return code for timeouts from sys_arch_mbox_fetch and sys_arch_sem_wait */ |
||||
#define SYS_ARCH_TIMEOUT 0xffffffffUL |
||||
|
||||
/** sys_mbox_tryfetch() returns SYS_MBOX_EMPTY if appropriate.
|
||||
* For now we use the same magic value, but we allow this to change in future. |
||||
*/ |
||||
#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT |
||||
|
||||
#include "lwip/err.h" |
||||
#include "arch/sys_arch.h" |
||||
|
||||
/** Function prototype for thread functions */ |
||||
typedef void (*lwip_thread_fn)(void *arg); |
||||
|
||||
/* Function prototypes for functions to be implemented by platform ports
|
||||
(in sys_arch.c) */ |
||||
|
||||
/* Mutex functions: */ |
||||
|
||||
/** Define LWIP_COMPAT_MUTEX if the port has no mutexes and binary semaphores
|
||||
should be used instead */ |
||||
#if LWIP_COMPAT_MUTEX |
||||
/* for old ports that don't have mutexes: define them to binary semaphores */ |
||||
#define sys_mutex_t sys_sem_t |
||||
#define sys_mutex_new(mutex) sys_sem_new(mutex, 1) |
||||
#define sys_mutex_lock(mutex) sys_sem_wait(mutex) |
||||
#define sys_mutex_unlock(mutex) sys_sem_signal(mutex) |
||||
#define sys_mutex_free(mutex) sys_sem_free(mutex) |
||||
#define sys_mutex_valid(mutex) sys_sem_valid(mutex) |
||||
#define sys_mutex_set_invalid(mutex) sys_sem_set_invalid(mutex) |
||||
|
||||
#else /* LWIP_COMPAT_MUTEX */ |
||||
|
||||
/** Create a new mutex
|
||||
* @param mutex pointer to the mutex to create |
||||
* @return a new mutex */ |
||||
err_t sys_mutex_new(sys_mutex_t *mutex); |
||||
/** Lock a mutex
|
||||
* @param mutex the mutex to lock */ |
||||
void sys_mutex_lock(sys_mutex_t *mutex); |
||||
/** Unlock a mutex
|
||||
* @param mutex the mutex to unlock */ |
||||
void sys_mutex_unlock(sys_mutex_t *mutex); |
||||
/** Delete a semaphore
|
||||
* @param mutex the mutex to delete */ |
||||
void sys_mutex_free(sys_mutex_t *mutex);
|
||||
#ifndef sys_mutex_valid |
||||
/** Check if a mutex is valid/allocated: return 1 for valid, 0 for invalid */ |
||||
int sys_mutex_valid(sys_mutex_t *mutex); |
||||
#endif |
||||
#ifndef sys_mutex_set_invalid |
||||
/** Set a mutex invalid so that sys_mutex_valid returns 0 */ |
||||
void sys_mutex_set_invalid(sys_mutex_t *mutex); |
||||
#endif |
||||
#endif /* LWIP_COMPAT_MUTEX */ |
||||
|
||||
/* Semaphore functions: */ |
||||
|
||||
/** Create a new semaphore
|
||||
* @param sem pointer to the semaphore to create |
||||
* @param count initial count of the semaphore |
||||
* @return ERR_OK if successful, another err_t otherwise */ |
||||
err_t sys_sem_new(sys_sem_t *sem, u8_t count); |
||||
/** Signals a semaphore
|
||||
* @param sem the semaphore to signal */ |
||||
void sys_sem_signal(sys_sem_t *sem); |
||||
/** Wait for a semaphore for the specified timeout
|
||||
* @param sem the semaphore to wait for |
||||
* @param timeout timeout in milliseconds to wait (0 = wait forever) |
||||
* @return time (in milliseconds) waited for the semaphore |
||||
* or SYS_ARCH_TIMEOUT on timeout */ |
||||
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout); |
||||
/** Delete a semaphore
|
||||
* @param sem semaphore to delete */ |
||||
void sys_sem_free(sys_sem_t *sem); |
||||
/** Wait for a semaphore - forever/no timeout */ |
||||
#define sys_sem_wait(sem) sys_arch_sem_wait(sem, 0) |
||||
#ifndef sys_sem_valid |
||||
/** Check if a sempahore is valid/allocated: return 1 for valid, 0 for invalid */ |
||||
int sys_sem_valid(sys_sem_t *sem); |
||||
#endif |
||||
#ifndef sys_sem_set_invalid |
||||
/** Set a semaphore invalid so that sys_sem_valid returns 0 */ |
||||
void sys_sem_set_invalid(sys_sem_t *sem); |
||||
#endif |
||||
|
||||
/* Time functions. */ |
||||
#ifndef sys_msleep |
||||
void sys_msleep(u32_t ms); /* only has a (close to) 1 jiffy resolution. */ |
||||
#endif |
||||
|
||||
/* Mailbox functions. */ |
||||
|
||||
/** Create a new mbox of specified size
|
||||
* @param mbox pointer to the mbox to create |
||||
* @param size (miminum) number of messages in this mbox |
||||
* @return ERR_OK if successful, another err_t otherwise */ |
||||
err_t sys_mbox_new(sys_mbox_t *mbox, int size); |
||||
/** Post a message to an mbox - may not fail
|
||||
* -> blocks if full, only used from tasks not from ISR |
||||
* @param mbox mbox to posts the message |
||||
* @param msg message to post (ATTENTION: can be NULL) */ |
||||
void sys_mbox_post(sys_mbox_t *mbox, void *msg); |
||||
/** Try to post a message to an mbox - may fail if full or ISR
|
||||
* @param mbox mbox to posts the message |
||||
* @param msg message to post (ATTENTION: can be NULL) */ |
||||
err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg); |
||||
/** Wait for a new message to arrive in the mbox
|
||||
* @param mbox mbox to get a message from |
||||
* @param msg pointer where the message is stored |
||||
* @param timeout maximum time (in milliseconds) to wait for a message |
||||
* @return time (in milliseconds) waited for a message, may be 0 if not waited |
||||
or SYS_ARCH_TIMEOUT on timeout |
||||
* The returned time has to be accurate to prevent timer jitter! */ |
||||
u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout); |
||||
/* Allow port to override with a macro, e.g. special timout for sys_arch_mbox_fetch() */ |
||||
#ifndef sys_arch_mbox_tryfetch |
||||
/** Wait for a new message to arrive in the mbox
|
||||
* @param mbox mbox to get a message from |
||||
* @param msg pointer where the message is stored |
||||
* @param timeout maximum time (in milliseconds) to wait for a message |
||||
* @return 0 (milliseconds) if a message has been received |
||||
* or SYS_MBOX_EMPTY if the mailbox is empty */ |
||||
u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg); |
||||
#endif |
||||
/** For now, we map straight to sys_arch implementation. */ |
||||
#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg) |
||||
/** Delete an mbox
|
||||
* @param mbox mbox to delete */ |
||||
void sys_mbox_free(sys_mbox_t *mbox); |
||||
#define sys_mbox_fetch(mbox, msg) sys_arch_mbox_fetch(mbox, msg, 0) |
||||
#ifndef sys_mbox_valid |
||||
/** Check if an mbox is valid/allocated: return 1 for valid, 0 for invalid */ |
||||
int sys_mbox_valid(sys_mbox_t *mbox); |
||||
#endif |
||||
#ifndef sys_mbox_set_invalid |
||||
/** Set an mbox invalid so that sys_mbox_valid returns 0 */ |
||||
void sys_mbox_set_invalid(sys_mbox_t *mbox); |
||||
#endif |
||||
|
||||
/** The only thread function:
|
||||
* Creates a new thread |
||||
* @param name human-readable name for the thread (used for debugging purposes) |
||||
* @param thread thread-function |
||||
* @param arg parameter passed to 'thread' |
||||
* @param stacksize stack size in bytes for the new thread (may be ignored by ports) |
||||
* @param prio priority of the new thread (may be ignored by ports) */ |
||||
sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio); |
||||
|
||||
#endif /* NO_SYS */ |
||||
|
||||
/* sys_init() must be called before anthing else. */ |
||||
void sys_init(void)ICACHE_FLASH_ATTR; |
||||
|
||||
#ifndef sys_jiffies |
||||
/** Ticks/jiffies since power up. */ |
||||
u32_t sys_jiffies(void)ICACHE_FLASH_ATTR; |
||||
#endif |
||||
|
||||
/** Returns the current time in milliseconds,
|
||||
* may be the same as sys_jiffies or at least based on it. */ |
||||
static inline u32_t sys_now(void) ICACHE_FLASH_ATTR; |
||||
static inline u32_t sys_now(void) |
||||
{ |
||||
return NOW()/(TIMER_CLK_FREQ/1000); |
||||
} |
||||
|
||||
/* Critical Region Protection */ |
||||
/* These functions must be implemented in the sys_arch.c file.
|
||||
In some implementations they can provide a more light-weight protection |
||||
mechanism than using semaphores. Otherwise semaphores can be used for |
||||
implementation */ |
||||
#ifndef SYS_ARCH_PROTECT |
||||
/** SYS_LIGHTWEIGHT_PROT
|
||||
* define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection |
||||
* for certain critical regions during buffer allocation, deallocation and memory |
||||
* allocation and deallocation. |
||||
*/ |
||||
#if SYS_LIGHTWEIGHT_PROT |
||||
|
||||
/** SYS_ARCH_DECL_PROTECT
|
||||
* declare a protection variable. This macro will default to defining a variable of |
||||
* type sys_prot_t. If a particular port needs a different implementation, then |
||||
* this macro may be defined in sys_arch.h. |
||||
*/ |
||||
#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev |
||||
/** SYS_ARCH_PROTECT
|
||||
* Perform a "fast" protect. This could be implemented by |
||||
* disabling interrupts for an embedded system or by using a semaphore or |
||||
* mutex. The implementation should allow calling SYS_ARCH_PROTECT when |
||||
* already protected. The old protection level is returned in the variable |
||||
* "lev". This macro will default to calling the sys_arch_protect() function |
||||
* which should be implemented in sys_arch.c. If a particular port needs a |
||||
* different implementation, then this macro may be defined in sys_arch.h |
||||
*/ |
||||
#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect() |
||||
/** SYS_ARCH_UNPROTECT
|
||||
* Perform a "fast" set of the protection level to "lev". This could be |
||||
* implemented by setting the interrupt level to "lev" within the MACRO or by |
||||
* using a semaphore or mutex. This macro will default to calling the |
||||
* sys_arch_unprotect() function which should be implemented in |
||||
* sys_arch.c. If a particular port needs a different implementation, then |
||||
* this macro may be defined in sys_arch.h |
||||
*/ |
||||
#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev) |
||||
sys_prot_t sys_arch_protect(void)ICACHE_FLASH_ATTR; |
||||
void sys_arch_unprotect(sys_prot_t pval)ICACHE_FLASH_ATTR; |
||||
|
||||
#else |
||||
|
||||
#define SYS_ARCH_DECL_PROTECT(lev) |
||||
#define SYS_ARCH_PROTECT(lev) lev = os_intr_lock() //fix by ives at 2014.3.24
|
||||
#define SYS_ARCH_UNPROTECT(lev) lev = os_intr_unlock() |
||||
|
||||
#endif /* SYS_LIGHTWEIGHT_PROT */ |
||||
|
||||
#endif /* SYS_ARCH_PROTECT */ |
||||
|
||||
/*
|
||||
* Macros to set/get and increase/decrease variables in a thread-safe way. |
||||
* Use these for accessing variable that are used from more than one thread. |
||||
*/ |
||||
|
||||
#ifndef SYS_ARCH_INC |
||||
#define SYS_ARCH_INC(var, val) do { \ |
||||
SYS_ARCH_DECL_PROTECT(old_level); \
|
||||
SYS_ARCH_PROTECT(old_level); \
|
||||
var += val; \
|
||||
SYS_ARCH_UNPROTECT(old_level); \
|
||||
} while(0) |
||||
#endif /* SYS_ARCH_INC */ |
||||
|
||||
#ifndef SYS_ARCH_DEC |
||||
#define SYS_ARCH_DEC(var, val) do { \ |
||||
SYS_ARCH_DECL_PROTECT(old_level); \
|
||||
SYS_ARCH_PROTECT(old_level); \
|
||||
var -= val; \
|
||||
SYS_ARCH_UNPROTECT(old_level); \
|
||||
} while(0) |
||||
#endif /* SYS_ARCH_DEC */ |
||||
|
||||
#ifndef SYS_ARCH_GET |
||||
#define SYS_ARCH_GET(var, ret) do { \ |
||||
SYS_ARCH_DECL_PROTECT(old_level); \
|
||||
SYS_ARCH_PROTECT(old_level); \
|
||||
ret = var; \
|
||||
SYS_ARCH_UNPROTECT(old_level); \
|
||||
} while(0) |
||||
#endif /* SYS_ARCH_GET */ |
||||
|
||||
#ifndef SYS_ARCH_SET |
||||
#define SYS_ARCH_SET(var, val) do { \ |
||||
SYS_ARCH_DECL_PROTECT(old_level); \
|
||||
SYS_ARCH_PROTECT(old_level); \
|
||||
var = val; \
|
||||
SYS_ARCH_UNPROTECT(old_level); \
|
||||
} while(0) |
||||
#endif /* SYS_ARCH_SET */ |
||||
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __LWIP_SYS_H__ */ |
@ -1,377 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_TCP_H__ |
||||
#define __LWIP_TCP_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include "lwip/sys.h" |
||||
#include "lwip/mem.h" |
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/ip.h" |
||||
#include "lwip/icmp.h" |
||||
#include "lwip/err.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
struct tcp_pcb; |
||||
|
||||
/** Function prototype for tcp accept callback functions. Called when a new
|
||||
* connection can be accepted on a listening pcb. |
||||
* |
||||
* @param arg Additional argument to pass to the callback function (@see tcp_arg()) |
||||
* @param newpcb The new connection pcb |
||||
* @param err An error code if there has been an error accepting. |
||||
* Only return ERR_ABRT if you have called tcp_abort from within the |
||||
* callback function! |
||||
*/ |
||||
typedef err_t (*tcp_accept_fn)(void *arg, struct tcp_pcb *newpcb, err_t err); |
||||
|
||||
/** Function prototype for tcp receive callback functions. Called when data has
|
||||
* been received. |
||||
* |
||||
* @param arg Additional argument to pass to the callback function (@see tcp_arg()) |
||||
* @param tpcb The connection pcb which received data |
||||
* @param p The received data (or NULL when the connection has been closed!) |
||||
* @param err An error code if there has been an error receiving |
||||
* Only return ERR_ABRT if you have called tcp_abort from within the |
||||
* callback function! |
||||
*/ |
||||
typedef err_t (*tcp_recv_fn)(void *arg, struct tcp_pcb *tpcb, |
||||
struct pbuf *p, err_t err); |
||||
|
||||
/** Function prototype for tcp sent callback functions. Called when sent data has
|
||||
* been acknowledged by the remote side. Use it to free corresponding resources. |
||||
* This also means that the pcb has now space available to send new data. |
||||
* |
||||
* @param arg Additional argument to pass to the callback function (@see tcp_arg()) |
||||
* @param tpcb The connection pcb for which data has been acknowledged |
||||
* @param len The amount of bytes acknowledged |
||||
* @return ERR_OK: try to send some data by calling tcp_output |
||||
* Only return ERR_ABRT if you have called tcp_abort from within the |
||||
* callback function! |
||||
*/ |
||||
typedef err_t (*tcp_sent_fn)(void *arg, struct tcp_pcb *tpcb, |
||||
u16_t len); |
||||
|
||||
/** Function prototype for tcp poll callback functions. Called periodically as
|
||||
* specified by @see tcp_poll. |
||||
* |
||||
* @param arg Additional argument to pass to the callback function (@see tcp_arg()) |
||||
* @param tpcb tcp pcb |
||||
* @return ERR_OK: try to send some data by calling tcp_output |
||||
* Only return ERR_ABRT if you have called tcp_abort from within the |
||||
* callback function! |
||||
*/ |
||||
typedef err_t (*tcp_poll_fn)(void *arg, struct tcp_pcb *tpcb); |
||||
|
||||
/** Function prototype for tcp error callback functions. Called when the pcb
|
||||
* receives a RST or is unexpectedly closed for any other reason. |
||||
* |
||||
* @note The corresponding pcb is already freed when this callback is called! |
||||
* |
||||
* @param arg Additional argument to pass to the callback function (@see tcp_arg()) |
||||
* @param err Error code to indicate why the pcb has been closed |
||||
* ERR_ABRT: aborted through tcp_abort or by a TCP timer |
||||
* ERR_RST: the connection was reset by the remote host |
||||
*/ |
||||
typedef void (*tcp_err_fn)(void *arg, err_t err); |
||||
|
||||
/** Function prototype for tcp connected callback functions. Called when a pcb
|
||||
* is connected to the remote side after initiating a connection attempt by |
||||
* calling tcp_connect(). |
||||
* |
||||
* @param arg Additional argument to pass to the callback function (@see tcp_arg()) |
||||
* @param tpcb The connection pcb which is connected |
||||
* @param err An unused error code, always ERR_OK currently ;-) TODO! |
||||
* Only return ERR_ABRT if you have called tcp_abort from within the |
||||
* callback function! |
||||
* |
||||
* @note When a connection attempt fails, the error callback is currently called! |
||||
*/ |
||||
typedef err_t (*tcp_connected_fn)(void *arg, struct tcp_pcb *tpcb, err_t err); |
||||
|
||||
enum tcp_state { |
||||
CLOSED = 0, |
||||
LISTEN = 1, |
||||
SYN_SENT = 2, |
||||
SYN_RCVD = 3, |
||||
ESTABLISHED = 4, |
||||
FIN_WAIT_1 = 5, |
||||
FIN_WAIT_2 = 6, |
||||
CLOSE_WAIT = 7, |
||||
CLOSING = 8, |
||||
LAST_ACK = 9, |
||||
TIME_WAIT = 10 |
||||
}; |
||||
|
||||
#if LWIP_CALLBACK_API |
||||
/* Function to call when a listener has been connected.
|
||||
* @param arg user-supplied argument (tcp_pcb.callback_arg) |
||||
* @param pcb a new tcp_pcb that now is connected |
||||
* @param err an error argument (TODO: that is current always ERR_OK?) |
||||
* @return ERR_OK: accept the new connection, |
||||
* any other err_t abortsthe new connection |
||||
*/ |
||||
#define DEF_ACCEPT_CALLBACK tcp_accept_fn accept; |
||||
#else /* LWIP_CALLBACK_API */ |
||||
#define DEF_ACCEPT_CALLBACK |
||||
#endif /* LWIP_CALLBACK_API */ |
||||
|
||||
/**
|
||||
* members common to struct tcp_pcb and struct tcp_listen_pcb |
||||
*/ |
||||
#define TCP_PCB_COMMON(type) \ |
||||
type *next; /* for the linked list */ \
|
||||
enum tcp_state state; /* TCP state */ \
|
||||
u8_t prio; \
|
||||
void *callback_arg; \
|
||||
/* the accept callback for listen- and normal pcbs, if LWIP_CALLBACK_API */ \
|
||||
DEF_ACCEPT_CALLBACK \
|
||||
/* ports are in host byte order */ \
|
||||
u16_t local_port |
||||
|
||||
|
||||
/* the TCP protocol control block */ |
||||
struct tcp_pcb { |
||||
/** common PCB members */ |
||||
IP_PCB; |
||||
/** protocol specific PCB members */ |
||||
TCP_PCB_COMMON(struct tcp_pcb); |
||||
|
||||
/* ports are in host byte order */ |
||||
u16_t remote_port; |
||||
|
||||
u8_t flags; |
||||
#define TF_ACK_DELAY ((u8_t)0x01U) /* Delayed ACK. */ |
||||
#define TF_ACK_NOW ((u8_t)0x02U) /* Immediate ACK. */ |
||||
#define TF_INFR ((u8_t)0x04U) /* In fast recovery. */ |
||||
#define TF_TIMESTAMP ((u8_t)0x08U) /* Timestamp option enabled */ |
||||
#define TF_RXCLOSED ((u8_t)0x10U) /* rx closed by tcp_shutdown */ |
||||
#define TF_FIN ((u8_t)0x20U) /* Connection was closed locally (FIN segment enqueued). */ |
||||
#define TF_NODELAY ((u8_t)0x40U) /* Disable Nagle algorithm */ |
||||
#define TF_NAGLEMEMERR ((u8_t)0x80U) /* nagle enabled, memerr, try to output to prevent delayed ACK to happen */ |
||||
|
||||
/* the rest of the fields are in host byte order
|
||||
as we have to do some math with them */ |
||||
/* receiver variables */ |
||||
u32_t rcv_nxt; /* next seqno expected */ |
||||
u16_t rcv_wnd; /* receiver window available */ |
||||
u16_t rcv_ann_wnd; /* receiver window to announce */ |
||||
u32_t rcv_ann_right_edge; /* announced right edge of window */ |
||||
|
||||
/* Timers */ |
||||
u32_t tmr; |
||||
u8_t polltmr, pollinterval; |
||||
|
||||
/* Retransmission timer. */ |
||||
s16_t rtime; |
||||
|
||||
u16_t mss; /* maximum segment size */ |
||||
|
||||
/* RTT (round trip time) estimation variables */ |
||||
u32_t rttest; /* RTT estimate in 500ms ticks */ |
||||
u32_t rtseq; /* sequence number being timed */ |
||||
s16_t sa, sv; /* @todo document this */ |
||||
|
||||
s16_t rto; /* retransmission time-out */ |
||||
u8_t nrtx; /* number of retransmissions */ |
||||
|
||||
/* fast retransmit/recovery */ |
||||
u32_t lastack; /* Highest acknowledged seqno. */ |
||||
u8_t dupacks; |
||||
|
||||
/* congestion avoidance/control variables */ |
||||
u16_t cwnd;
|
||||
u16_t ssthresh; |
||||
|
||||
/* sender variables */ |
||||
u32_t snd_nxt; /* next new seqno to be sent */ |
||||
u16_t snd_wnd; /* sender window */ |
||||
u32_t snd_wl1, snd_wl2; /* Sequence and acknowledgement numbers of last
|
||||
window update. */ |
||||
u32_t snd_lbb; /* Sequence number of next byte to be buffered. */ |
||||
|
||||
u16_t acked; |
||||
|
||||
u16_t snd_buf; /* Available buffer space for sending (in bytes). */ |
||||
#define TCP_SNDQUEUELEN_OVERFLOW (0xffff-3) |
||||
u16_t snd_queuelen; /* Available buffer space for sending (in tcp_segs). */ |
||||
|
||||
#if TCP_OVERSIZE |
||||
/* Extra bytes available at the end of the last pbuf in unsent. */ |
||||
u16_t unsent_oversize; |
||||
#endif /* TCP_OVERSIZE */ |
||||
|
||||
/* These are ordered by sequence number: */ |
||||
struct tcp_seg *unsent; /* Unsent (queued) segments. */ |
||||
struct tcp_seg *unacked; /* Sent but unacknowledged segments. */ |
||||
#if TCP_QUEUE_OOSEQ |
||||
struct tcp_seg *ooseq; /* Received out of sequence segments. */ |
||||
#endif /* TCP_QUEUE_OOSEQ */ |
||||
|
||||
struct pbuf *refused_data; /* Data previously received but not yet taken by upper layer */ |
||||
|
||||
#if LWIP_CALLBACK_API |
||||
/* Function to be called when more send buffer space is available. */ |
||||
tcp_sent_fn sent; |
||||
/* Function to be called when (in-sequence) data has arrived. */ |
||||
tcp_recv_fn recv; |
||||
/* Function to be called when a connection has been set up. */ |
||||
tcp_connected_fn connected; |
||||
/* Function which is called periodically. */ |
||||
tcp_poll_fn poll; |
||||
/* Function to be called whenever a fatal error occurs. */ |
||||
tcp_err_fn errf; |
||||
#endif /* LWIP_CALLBACK_API */ |
||||
|
||||
#if LWIP_TCP_TIMESTAMPS |
||||
u32_t ts_lastacksent; |
||||
u32_t ts_recent; |
||||
#endif /* LWIP_TCP_TIMESTAMPS */ |
||||
|
||||
/* idle time before KEEPALIVE is sent */ |
||||
u32_t keep_idle; |
||||
#if LWIP_TCP_KEEPALIVE |
||||
u32_t keep_intvl; |
||||
u32_t keep_cnt; |
||||
#endif /* LWIP_TCP_KEEPALIVE */ |
||||
|
||||
/* Persist timer counter */ |
||||
u32_t persist_cnt; |
||||
/* Persist timer back-off */ |
||||
u8_t persist_backoff; |
||||
|
||||
/* KEEPALIVE counter */ |
||||
u8_t keep_cnt_sent; |
||||
}; |
||||
|
||||
struct tcp_pcb_listen {
|
||||
/* Common members of all PCB types */ |
||||
IP_PCB; |
||||
/* Protocol specific PCB members */ |
||||
TCP_PCB_COMMON(struct tcp_pcb_listen); |
||||
|
||||
#if TCP_LISTEN_BACKLOG |
||||
u8_t backlog; |
||||
u8_t accepts_pending; |
||||
#endif /* TCP_LISTEN_BACKLOG */ |
||||
}; |
||||
|
||||
#if LWIP_EVENT_API |
||||
|
||||
enum lwip_event { |
||||
LWIP_EVENT_ACCEPT, |
||||
LWIP_EVENT_SENT, |
||||
LWIP_EVENT_RECV, |
||||
LWIP_EVENT_CONNECTED, |
||||
LWIP_EVENT_POLL, |
||||
LWIP_EVENT_ERR |
||||
}; |
||||
|
||||
err_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb, |
||||
enum lwip_event, |
||||
struct pbuf *p, |
||||
u16_t size, |
||||
err_t err); |
||||
|
||||
#endif /* LWIP_EVENT_API */ |
||||
|
||||
/* Application program's interface: */ |
||||
struct tcp_pcb * tcp_new (void)ICACHE_FLASH_ATTR; |
||||
|
||||
void tcp_arg (struct tcp_pcb *pcb, void *arg) ICACHE_FLASH_ATTR; |
||||
void tcp_accept (struct tcp_pcb *pcb, tcp_accept_fn accept) ICACHE_FLASH_ATTR; |
||||
void tcp_recv (struct tcp_pcb *pcb, tcp_recv_fn recv) ICACHE_FLASH_ATTR; |
||||
void tcp_sent (struct tcp_pcb *pcb, tcp_sent_fn sent)ICACHE_FLASH_ATTR; |
||||
void tcp_poll (struct tcp_pcb *pcb, tcp_poll_fn poll, u8_t interval)ICACHE_FLASH_ATTR; |
||||
void tcp_err (struct tcp_pcb *pcb, tcp_err_fn err)ICACHE_FLASH_ATTR; |
||||
|
||||
#define tcp_mss(pcb) (((pcb)->flags & TF_TIMESTAMP) ? ((pcb)->mss - 12) : (pcb)->mss) |
||||
#define tcp_sndbuf(pcb) ((pcb)->snd_buf) |
||||
#define tcp_sndqueuelen(pcb) ((pcb)->snd_queuelen) |
||||
#define tcp_nagle_disable(pcb) ((pcb)->flags |= TF_NODELAY) |
||||
#define tcp_nagle_enable(pcb) ((pcb)->flags &= ~TF_NODELAY) |
||||
#define tcp_nagle_disabled(pcb) (((pcb)->flags & TF_NODELAY) != 0) |
||||
|
||||
#if TCP_LISTEN_BACKLOG |
||||
#define tcp_accepted(pcb) do { \ |
||||
LWIP_ASSERT("pcb->state == LISTEN (called for wrong pcb?)", pcb->state == LISTEN); \
|
||||
(((struct tcp_pcb_listen *)(pcb))->accepts_pending--); } while(0) |
||||
#else /* TCP_LISTEN_BACKLOG */ |
||||
#define tcp_accepted(pcb) LWIP_ASSERT("pcb->state == LISTEN (called for wrong pcb?)", \ |
||||
pcb->state == LISTEN) |
||||
#endif /* TCP_LISTEN_BACKLOG */ |
||||
|
||||
void tcp_recved (struct tcp_pcb *pcb, u16_t len)ICACHE_FLASH_ATTR; |
||||
err_t tcp_bind (struct tcp_pcb *pcb, ip_addr_t *ipaddr, |
||||
u16_t port)ICACHE_FLASH_ATTR; |
||||
err_t tcp_connect (struct tcp_pcb *pcb, ip_addr_t *ipaddr, |
||||
u16_t port, tcp_connected_fn connected)ICACHE_FLASH_ATTR; |
||||
|
||||
struct tcp_pcb * tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog)ICACHE_FLASH_ATTR; |
||||
#define tcp_listen(pcb) tcp_listen_with_backlog(pcb, TCP_DEFAULT_LISTEN_BACKLOG) |
||||
|
||||
void tcp_abort (struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
err_t tcp_close (struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
err_t tcp_shutdown(struct tcp_pcb *pcb, int shut_rx, int shut_tx)ICACHE_FLASH_ATTR; |
||||
|
||||
/* Flags for "apiflags" parameter in tcp_write */ |
||||
#define TCP_WRITE_FLAG_COPY 0x01 |
||||
#define TCP_WRITE_FLAG_MORE 0x02 |
||||
|
||||
err_t tcp_write (struct tcp_pcb *pcb, const void *dataptr, u16_t len, |
||||
u8_t apiflags)ICACHE_FLASH_ATTR; |
||||
|
||||
void tcp_setprio (struct tcp_pcb *pcb, u8_t prio)ICACHE_FLASH_ATTR; |
||||
|
||||
#define TCP_PRIO_MIN 1 |
||||
#define TCP_PRIO_NORMAL 64 |
||||
#define TCP_PRIO_MAX 127 |
||||
|
||||
extern err_t tcp_output(struct tcp_pcb *pcb); |
||||
|
||||
|
||||
const char* tcp_debug_state_str(enum tcp_state s)ICACHE_FLASH_ATTR; |
||||
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_TCP */ |
||||
|
||||
#endif /* __LWIP_TCP_H__ */ |
@ -1,472 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_TCP_IMPL_H__ |
||||
#define __LWIP_TCP_IMPL_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include "lwip/tcp.h" |
||||
#include "lwip/sys.h" |
||||
#include "lwip/mem.h" |
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/ip.h" |
||||
#include "lwip/icmp.h" |
||||
#include "lwip/err.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/* Functions for interfacing with TCP: */ |
||||
|
||||
/* Lower layer interface to TCP: */ |
||||
#define tcp_init() /* Compatibility define, no init needed. */ |
||||
void tcp_tmr (void)ICACHE_FLASH_ATTR; /* Must be called every
|
||||
TCP_TMR_INTERVAL |
||||
ms. (Typically 250 ms). */ |
||||
/* It is also possible to call these two functions at the right
|
||||
intervals (instead of calling tcp_tmr()). */ |
||||
void tcp_slowtmr (void)ICACHE_FLASH_ATTR; |
||||
void tcp_fasttmr (void)ICACHE_FLASH_ATTR; |
||||
|
||||
|
||||
/* Only used by IP to pass a TCP segment to TCP: */ |
||||
void tcp_input (struct pbuf *p, struct netif *inp)ICACHE_FLASH_ATTR; |
||||
/* Used within the TCP code only: */ |
||||
struct tcp_pcb * tcp_alloc (u8_t prio)ICACHE_FLASH_ATTR; |
||||
void tcp_abandon (struct tcp_pcb *pcb, int reset)ICACHE_FLASH_ATTR; |
||||
err_t tcp_send_empty_ack(struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
void tcp_rexmit (struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
void tcp_rexmit_rto (struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
void tcp_rexmit_fast (struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
|
||||
/**
|
||||
* This is the Nagle algorithm: try to combine user data to send as few TCP |
||||
* segments as possible. Only send if |
||||
* - no previously transmitted data on the connection remains unacknowledged or |
||||
* - the TF_NODELAY flag is set (nagle algorithm turned off for this pcb) or |
||||
* - the only unsent segment is at least pcb->mss bytes long (or there is more |
||||
* than one unsent segment - with lwIP, this can happen although unsent->len < mss) |
||||
* - or if we are in fast-retransmit (TF_INFR) |
||||
*/ |
||||
#define tcp_do_output_nagle(tpcb) ((((tpcb)->unacked == NULL) || \ |
||||
((tpcb)->flags & (TF_NODELAY | TF_INFR)) || \
|
||||
(((tpcb)->unsent != NULL) && (((tpcb)->unsent->next != NULL) || \
|
||||
((tpcb)->unsent->len >= (tpcb)->mss))) \
|
||||
) ? 1 : 0) |
||||
#define tcp_output_nagle(tpcb) (tcp_do_output_nagle(tpcb) ? tcp_output(tpcb) : ERR_OK) |
||||
|
||||
|
||||
#define TCP_SEQ_LT(a,b) ((s32_t)((a)-(b)) < 0) |
||||
#define TCP_SEQ_LEQ(a,b) ((s32_t)((a)-(b)) <= 0) |
||||
#define TCP_SEQ_GT(a,b) ((s32_t)((a)-(b)) > 0) |
||||
#define TCP_SEQ_GEQ(a,b) ((s32_t)((a)-(b)) >= 0) |
||||
/* is b<=a<=c? */ |
||||
#if 0 /* see bug #10548 */
|
||||
#define TCP_SEQ_BETWEEN(a,b,c) ((c)-(b) >= (a)-(b)) |
||||
#endif |
||||
#define TCP_SEQ_BETWEEN(a,b,c) (TCP_SEQ_GEQ(a,b) && TCP_SEQ_LEQ(a,c)) |
||||
#define TCP_FIN 0x01U |
||||
#define TCP_SYN 0x02U |
||||
#define TCP_RST 0x04U |
||||
#define TCP_PSH 0x08U |
||||
#define TCP_ACK 0x10U |
||||
#define TCP_URG 0x20U |
||||
#define TCP_ECE 0x40U |
||||
#define TCP_CWR 0x80U |
||||
|
||||
#define TCP_FLAGS 0x3fU |
||||
|
||||
/* Length of the TCP header, excluding options. */ |
||||
#define TCP_HLEN 20 |
||||
|
||||
#ifndef TCP_TMR_INTERVAL |
||||
#define TCP_TMR_INTERVAL 250 /* The TCP timer interval in milliseconds. */ |
||||
#endif /* TCP_TMR_INTERVAL */ |
||||
|
||||
#ifndef TCP_FAST_INTERVAL |
||||
#define TCP_FAST_INTERVAL TCP_TMR_INTERVAL /* the fine grained timeout in milliseconds */ |
||||
#endif /* TCP_FAST_INTERVAL */ |
||||
|
||||
#ifndef TCP_SLOW_INTERVAL |
||||
#define TCP_SLOW_INTERVAL (2*TCP_TMR_INTERVAL) /* the coarse grained timeout in milliseconds */ |
||||
#endif /* TCP_SLOW_INTERVAL */ |
||||
|
||||
#define TCP_FIN_WAIT_TIMEOUT 20000 /* milliseconds */ |
||||
#define TCP_SYN_RCVD_TIMEOUT 20000 /* milliseconds */ |
||||
|
||||
#define TCP_OOSEQ_TIMEOUT 6U /* x RTO */ |
||||
|
||||
#ifndef TCP_MSL |
||||
#define TCP_MSL 60000UL /* The maximum segment lifetime in milliseconds */ |
||||
#endif |
||||
|
||||
/* Keepalive values, compliant with RFC 1122. Don't change this unless you know what you're doing */ |
||||
#ifndef TCP_KEEPIDLE_DEFAULT |
||||
#define TCP_KEEPIDLE_DEFAULT 3000UL /* Default KEEPALIVE timer in milliseconds */ |
||||
#endif |
||||
|
||||
#ifndef TCP_KEEPINTVL_DEFAULT |
||||
#define TCP_KEEPINTVL_DEFAULT 1000UL /* Default Time between KEEPALIVE probes in milliseconds */ |
||||
#endif |
||||
|
||||
#ifndef TCP_KEEPCNT_DEFAULT |
||||
#define TCP_KEEPCNT_DEFAULT 3U /* Default Counter for KEEPALIVE probes */ |
||||
#endif |
||||
|
||||
#define TCP_MAXIDLE TCP_KEEPCNT_DEFAULT * TCP_KEEPINTVL_DEFAULT /* Maximum KEEPALIVE probe time */ |
||||
|
||||
/* Fields are (of course) in network byte order.
|
||||
* Some fields are converted to host byte order in tcp_input(). |
||||
*/ |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
struct tcp_hdr { |
||||
PACK_STRUCT_FIELD(u16_t src); //源端口
|
||||
PACK_STRUCT_FIELD(u16_t dest); //目的端口
|
||||
PACK_STRUCT_FIELD(u32_t seqno); //序号
|
||||
PACK_STRUCT_FIELD(u32_t ackno); //应答序号
|
||||
PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags);//首部长度+保留位+标志位
|
||||
PACK_STRUCT_FIELD(u16_t wnd); //窗口大小
|
||||
PACK_STRUCT_FIELD(u16_t chksum); //校验和
|
||||
PACK_STRUCT_FIELD(u16_t urgp); //紧急指针
|
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
#define TCPH_OFFSET(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 8) |
||||
#define TCPH_HDRLEN(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 12) |
||||
#define TCPH_FLAGS(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) & TCP_FLAGS) |
||||
|
||||
#define TCPH_OFFSET_SET(phdr, offset) (phdr)->_hdrlen_rsvd_flags = htons(((offset) << 8) | TCPH_FLAGS(phdr)) |
||||
#define TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | TCPH_FLAGS(phdr)) |
||||
#define TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = (((phdr)->_hdrlen_rsvd_flags & PP_HTONS((u16_t)(~(u16_t)(TCP_FLAGS)))) | htons(flags)) |
||||
#define TCPH_HDRLEN_FLAGS_SET(phdr, len, flags) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | (flags)) |
||||
|
||||
#define TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = ((phdr)->_hdrlen_rsvd_flags | htons(flags)) |
||||
#define TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags) | (TCPH_FLAGS(phdr) & ~(flags)) ) |
||||
|
||||
#define TCP_TCPLEN(seg) ((seg)->len + ((TCPH_FLAGS((seg)->tcphdr) & (TCP_FIN | TCP_SYN)) != 0)) |
||||
|
||||
/** Flags used on input processing, not on pcb->flags
|
||||
*/ |
||||
#define TF_RESET (u8_t)0x08U /* Connection was reset. */ |
||||
#define TF_CLOSED (u8_t)0x10U /* Connection was sucessfully closed. */ |
||||
#define TF_GOT_FIN (u8_t)0x20U /* Connection was closed by the remote end. */ |
||||
|
||||
|
||||
#if LWIP_EVENT_API |
||||
|
||||
#define TCP_EVENT_ACCEPT(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ |
||||
LWIP_EVENT_ACCEPT, NULL, 0, err) |
||||
#define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ |
||||
LWIP_EVENT_SENT, NULL, space, ERR_OK) |
||||
#define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ |
||||
LWIP_EVENT_RECV, (p), 0, (err)) |
||||
#define TCP_EVENT_CLOSED(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ |
||||
LWIP_EVENT_RECV, NULL, 0, ERR_OK) |
||||
#define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ |
||||
LWIP_EVENT_CONNECTED, NULL, 0, (err)) |
||||
#define TCP_EVENT_POLL(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ |
||||
LWIP_EVENT_POLL, NULL, 0, ERR_OK) |
||||
#define TCP_EVENT_ERR(errf,arg,err) lwip_tcp_event((arg), NULL, \ |
||||
LWIP_EVENT_ERR, NULL, 0, (err)) |
||||
|
||||
#else /* LWIP_EVENT_API */ |
||||
|
||||
#define TCP_EVENT_ACCEPT(pcb,err,ret) \ |
||||
do { \
|
||||
if((pcb)->accept != NULL) \
|
||||
(ret) = (pcb)->accept((pcb)->callback_arg,(pcb),(err)); \
|
||||
else (ret) = ERR_ARG; \
|
||||
} while (0) |
||||
|
||||
#define TCP_EVENT_SENT(pcb,space,ret) \ |
||||
do { \
|
||||
if((pcb)->sent != NULL) \
|
||||
(ret) = (pcb)->sent((pcb)->callback_arg,(pcb),(space)); \
|
||||
else (ret) = ERR_OK; \
|
||||
} while (0) |
||||
|
||||
#define TCP_EVENT_RECV(pcb,p,err,ret) \ |
||||
do { \
|
||||
if((pcb)->recv != NULL) { \
|
||||
(ret) = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err));\
|
||||
} else { \
|
||||
(ret) = tcp_recv_null(NULL, (pcb), (p), (err)); \
|
||||
} \
|
||||
} while (0) |
||||
|
||||
#define TCP_EVENT_CLOSED(pcb,ret) \ |
||||
do { \
|
||||
if(((pcb)->recv != NULL)) { \
|
||||
(ret) = (pcb)->recv((pcb)->callback_arg,(pcb),NULL,ERR_OK);\
|
||||
} else { \
|
||||
(ret) = ERR_OK; \
|
||||
} \
|
||||
} while (0) |
||||
|
||||
#define TCP_EVENT_CONNECTED(pcb,err,ret) \ |
||||
do { \
|
||||
if((pcb)->connected != NULL) \
|
||||
(ret) = (pcb)->connected((pcb)->callback_arg,(pcb),(err)); \
|
||||
else (ret) = ERR_OK; \
|
||||
} while (0) |
||||
|
||||
#define TCP_EVENT_POLL(pcb,ret) \ |
||||
do { \
|
||||
if((pcb)->poll != NULL) \
|
||||
(ret) = (pcb)->poll((pcb)->callback_arg,(pcb)); \
|
||||
else (ret) = ERR_OK; \
|
||||
} while (0) |
||||
|
||||
#define TCP_EVENT_ERR(errf,arg,err) \ |
||||
do { \
|
||||
if((errf) != NULL) \
|
||||
(errf)((arg),(err)); \
|
||||
} while (0) |
||||
|
||||
#endif /* LWIP_EVENT_API */ |
||||
|
||||
/** Enabled extra-check for TCP_OVERSIZE if LWIP_DEBUG is enabled */ |
||||
#if TCP_OVERSIZE && defined(LWIP_DEBUG) |
||||
#define TCP_OVERSIZE_DBGCHECK 1 |
||||
#else |
||||
#define TCP_OVERSIZE_DBGCHECK 0 |
||||
#endif |
||||
|
||||
/** Don't generate checksum on copy if CHECKSUM_GEN_TCP is disabled */ |
||||
#define TCP_CHECKSUM_ON_COPY (LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_TCP) |
||||
|
||||
/* This structure represents a TCP segment on the unsent, unacked and ooseq queues */ |
||||
struct tcp_seg { |
||||
struct tcp_seg *next; /* used when putting segements on a queue */ |
||||
struct pbuf *p; /* buffer containing data + TCP header */ |
||||
void *dataptr; /* pointer to the TCP data in the pbuf */ |
||||
u16_t len; /* the TCP length of this segment */ |
||||
#if TCP_OVERSIZE_DBGCHECK |
||||
u16_t oversize_left; /* Extra bytes available at the end of the last
|
||||
pbuf in unsent (used for asserting vs. |
||||
tcp_pcb.unsent_oversized only) */ |
||||
#endif /* TCP_OVERSIZE_DBGCHECK */ |
||||
#if TCP_CHECKSUM_ON_COPY |
||||
u16_t chksum; |
||||
u8_t chksum_swapped; |
||||
#endif /* TCP_CHECKSUM_ON_COPY */ |
||||
u8_t flags; |
||||
#define TF_SEG_OPTS_MSS (u8_t)0x01U /* Include MSS option. */ |
||||
#define TF_SEG_OPTS_TS (u8_t)0x02U /* Include timestamp option. */ |
||||
#define TF_SEG_DATA_CHECKSUMMED (u8_t)0x04U /* ALL data (not the header) is |
||||
checksummed into 'chksum' */ |
||||
struct tcp_hdr *tcphdr; /* the TCP header */ |
||||
}; |
||||
|
||||
#define LWIP_TCP_OPT_LENGTH(flags) \ |
||||
(flags & TF_SEG_OPTS_MSS ? 4 : 0) + \
|
||||
(flags & TF_SEG_OPTS_TS ? 12 : 0) |
||||
|
||||
/** This returns a TCP header option for MSS in an u32_t */ |
||||
#define TCP_BUILD_MSS_OPTION(x) (x) = PP_HTONL(((u32_t)2 << 24) | \ |
||||
((u32_t)4 << 16) | \
|
||||
(((u32_t)TCP_MSS / 256) << 8) | \
|
||||
(TCP_MSS & 255)) |
||||
|
||||
/* Global variables: */ |
||||
extern struct tcp_pcb *tcp_input_pcb; |
||||
extern u32_t tcp_ticks; |
||||
|
||||
/* The TCP PCB lists. */ |
||||
union tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. */ |
||||
struct tcp_pcb_listen *listen_pcbs;
|
||||
struct tcp_pcb *pcbs; |
||||
}; |
||||
extern struct tcp_pcb *tcp_bound_pcbs; |
||||
extern union tcp_listen_pcbs_t tcp_listen_pcbs; |
||||
extern struct tcp_pcb *tcp_active_pcbs; /* List of all TCP PCBs that are in a
|
||||
state in which they accept or send |
||||
data. */ |
||||
extern struct tcp_pcb *tcp_tw_pcbs; /* List of all TCP PCBs in TIME-WAIT. */ |
||||
|
||||
extern struct tcp_pcb *tcp_tmp_pcb; /* Only used for temporary storage. */ |
||||
|
||||
/* Axioms about the above lists:
|
||||
1) Every TCP PCB that is not CLOSED is in one of the lists. |
||||
2) A PCB is only in one of the lists. |
||||
3) All PCBs in the tcp_listen_pcbs list is in LISTEN state. |
||||
4) All PCBs in the tcp_tw_pcbs list is in TIME-WAIT state. |
||||
*/ |
||||
/* Define two macros, TCP_REG and TCP_RMV that registers a TCP PCB
|
||||
with a PCB list or removes a PCB from a list, respectively. */ |
||||
#ifndef TCP_DEBUG_PCB_LISTS |
||||
#define TCP_DEBUG_PCB_LISTS 0 |
||||
#endif |
||||
#if TCP_DEBUG_PCB_LISTS |
||||
#define TCP_REG(pcbs, npcb) do {\ |
||||
LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %d\n", (npcb), (npcb)->local_port)); \
|
||||
for(tcp_tmp_pcb = *(pcbs); \
|
||||
tcp_tmp_pcb != NULL; \
|
||||
tcp_tmp_pcb = tcp_tmp_pcb->next) { \
|
||||
LWIP_ASSERT("TCP_REG: already registered\n", tcp_tmp_pcb != (npcb)); \
|
||||
} \
|
||||
LWIP_ASSERT("TCP_REG: pcb->state != CLOSED", ((pcbs) == &tcp_bound_pcbs) || ((npcb)->state != CLOSED)); \
|
||||
(npcb)->next = *(pcbs); \
|
||||
LWIP_ASSERT("TCP_REG: npcb->next != npcb", (npcb)->next != (npcb)); \
|
||||
*(pcbs) = (npcb); \
|
||||
LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \
|
||||
tcp_timer_needed(); \
|
||||
} while(0) |
||||
#define TCP_RMV(pcbs, npcb) do { \ |
||||
LWIP_ASSERT("TCP_RMV: pcbs != NULL", *(pcbs) != NULL); \
|
||||
LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removing %p from %p\n", (npcb), *(pcbs))); \
|
||||
if(*(pcbs) == (npcb)) { \
|
||||
*(pcbs) = (*pcbs)->next; \
|
||||
} else for(tcp_tmp_pcb = *(pcbs); tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \
|
||||
if(tcp_tmp_pcb->next == (npcb)) { \
|
||||
tcp_tmp_pcb->next = (npcb)->next; \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
(npcb)->next = NULL; \
|
||||
LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \
|
||||
LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removed %p from %p\n", (npcb), *(pcbs))); \
|
||||
} while(0) |
||||
|
||||
#else /* LWIP_DEBUG */ |
||||
|
||||
#define TCP_REG(pcbs, npcb) \ |
||||
do { \
|
||||
(npcb)->next = *pcbs; \
|
||||
*(pcbs) = (npcb); \
|
||||
tcp_timer_needed(); \
|
||||
} while (0) |
||||
|
||||
#define TCP_RMV(pcbs, npcb) \ |
||||
do { \
|
||||
if(*(pcbs) == (npcb)) { \
|
||||
(*(pcbs)) = (*pcbs)->next; \
|
||||
} \
|
||||
else { \
|
||||
for(tcp_tmp_pcb = *pcbs; \
|
||||
tcp_tmp_pcb != NULL; \
|
||||
tcp_tmp_pcb = tcp_tmp_pcb->next) { \
|
||||
if(tcp_tmp_pcb->next == (npcb)) { \
|
||||
tcp_tmp_pcb->next = (npcb)->next; \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
(npcb)->next = NULL; \
|
||||
} while(0) |
||||
|
||||
#endif /* LWIP_DEBUG */ |
||||
|
||||
|
||||
/* Internal functions: */ |
||||
struct tcp_pcb *tcp_pcb_copy(struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
void tcp_pcb_purge(struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
void tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
|
||||
void tcp_segs_free(struct tcp_seg *seg)ICACHE_FLASH_ATTR; |
||||
void tcp_seg_free(struct tcp_seg *seg)ICACHE_FLASH_ATTR; |
||||
struct tcp_seg *tcp_seg_copy(struct tcp_seg *seg)ICACHE_FLASH_ATTR; |
||||
|
||||
#define tcp_ack(pcb) \ |
||||
do { \
|
||||
if((pcb)->flags & TF_ACK_DELAY) { \
|
||||
(pcb)->flags &= ~TF_ACK_DELAY; \
|
||||
(pcb)->flags |= TF_ACK_NOW; \
|
||||
} \
|
||||
else { \
|
||||
(pcb)->flags |= TF_ACK_DELAY; \
|
||||
} \
|
||||
} while (0) |
||||
|
||||
#define tcp_ack_now(pcb) \ |
||||
do { \
|
||||
(pcb)->flags |= TF_ACK_NOW; \
|
||||
} while (0) |
||||
|
||||
err_t tcp_send_fin(struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
err_t tcp_enqueue_flags(struct tcp_pcb *pcb, u8_t flags)ICACHE_FLASH_ATTR; |
||||
|
||||
void tcp_rexmit_seg(struct tcp_pcb *pcb, struct tcp_seg *seg)ICACHE_FLASH_ATTR; |
||||
|
||||
void tcp_rst(u32_t seqno, u32_t ackno, |
||||
ip_addr_t *local_ip, ip_addr_t *remote_ip, |
||||
u16_t local_port, u16_t remote_port)ICACHE_FLASH_ATTR; |
||||
|
||||
u32_t tcp_next_iss(void)ICACHE_FLASH_ATTR; |
||||
|
||||
void tcp_keepalive(struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
void tcp_zero_window_probe(struct tcp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
|
||||
#if TCP_CALCULATE_EFF_SEND_MSS |
||||
u16_t tcp_eff_send_mss(u16_t sendmss, ip_addr_t *addr)ICACHE_FLASH_ATTR; |
||||
#endif /* TCP_CALCULATE_EFF_SEND_MSS */ |
||||
|
||||
#if LWIP_CALLBACK_API |
||||
err_t tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)ICACHE_FLASH_ATTR; |
||||
#endif /* LWIP_CALLBACK_API */ |
||||
|
||||
#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG |
||||
void tcp_debug_print(struct tcp_hdr *tcphdr)ICACHE_FLASH_ATTR; |
||||
void tcp_debug_print_flags(u8_t flags)ICACHE_FLASH_ATTR; |
||||
void tcp_debug_print_state(enum tcp_state s)ICACHE_FLASH_ATTR; |
||||
void tcp_debug_print_pcbs(void)ICACHE_FLASH_ATTR; |
||||
s16_t tcp_pcbs_sane(void)ICACHE_FLASH_ATTR; |
||||
#else |
||||
# define tcp_debug_print(tcphdr) |
||||
# define tcp_debug_print_flags(flags) |
||||
# define tcp_debug_print_state(s) |
||||
# define tcp_debug_print_pcbs() |
||||
# define tcp_pcbs_sane() 1 |
||||
#endif /* TCP_DEBUG */ |
||||
|
||||
/** External function (implemented in timers.c), called when TCP detects
|
||||
* that a timer is needed (i.e. active- or time-wait-pcb found). */ |
||||
void tcp_timer_needed(void)ICACHE_FLASH_ATTR; |
||||
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_TCP */ |
||||
|
||||
#endif /* __LWIP_TCP_H__ */ |
@ -1,159 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_TCPIP_H__ |
||||
#define __LWIP_TCPIP_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if !NO_SYS /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include "lwip/api_msg.h" |
||||
#include "lwip/netifapi.h" |
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/api.h" |
||||
#include "lwip/sys.h" |
||||
#include "lwip/timers.h" |
||||
#include "lwip/netif.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
/** Define this to something that triggers a watchdog. This is called from
|
||||
* tcpip_thread after processing a message. */ |
||||
#ifndef LWIP_TCPIP_THREAD_ALIVE |
||||
#define LWIP_TCPIP_THREAD_ALIVE() |
||||
#endif |
||||
|
||||
#if LWIP_TCPIP_CORE_LOCKING |
||||
/** The global semaphore to lock the stack. */ |
||||
extern sys_mutex_t lock_tcpip_core; |
||||
#define LOCK_TCPIP_CORE() sys_mutex_lock(&lock_tcpip_core) |
||||
#define UNLOCK_TCPIP_CORE() sys_mutex_unlock(&lock_tcpip_core) |
||||
#define TCPIP_APIMSG(m) tcpip_apimsg_lock(m) |
||||
#define TCPIP_APIMSG_ACK(m) |
||||
#define TCPIP_NETIFAPI(m) tcpip_netifapi_lock(m) |
||||
#define TCPIP_NETIFAPI_ACK(m) |
||||
#else /* LWIP_TCPIP_CORE_LOCKING */ |
||||
#define LOCK_TCPIP_CORE() |
||||
#define UNLOCK_TCPIP_CORE() |
||||
#define TCPIP_APIMSG(m) tcpip_apimsg(m) |
||||
#define TCPIP_APIMSG_ACK(m) sys_sem_signal(&m->conn->op_completed) |
||||
#define TCPIP_NETIFAPI(m) tcpip_netifapi(m) |
||||
#define TCPIP_NETIFAPI_ACK(m) sys_sem_signal(&m->sem) |
||||
#endif /* LWIP_TCPIP_CORE_LOCKING */ |
||||
|
||||
/** Function prototype for the init_done function passed to tcpip_init */ |
||||
typedef void (*tcpip_init_done_fn)(void *arg); |
||||
/** Function prototype for functions passed to tcpip_callback() */ |
||||
typedef void (*tcpip_callback_fn)(void *ctx); |
||||
|
||||
void tcpip_init(tcpip_init_done_fn tcpip_init_done, void *arg); |
||||
|
||||
#if LWIP_NETCONN |
||||
err_t tcpip_apimsg(struct api_msg *apimsg); |
||||
#if LWIP_TCPIP_CORE_LOCKING |
||||
err_t tcpip_apimsg_lock(struct api_msg *apimsg); |
||||
#endif /* LWIP_TCPIP_CORE_LOCKING */ |
||||
#endif /* LWIP_NETCONN */ |
||||
|
||||
err_t tcpip_input(struct pbuf *p, struct netif *inp); |
||||
|
||||
#if LWIP_NETIF_API |
||||
err_t tcpip_netifapi(struct netifapi_msg *netifapimsg); |
||||
#if LWIP_TCPIP_CORE_LOCKING |
||||
err_t tcpip_netifapi_lock(struct netifapi_msg *netifapimsg); |
||||
#endif /* LWIP_TCPIP_CORE_LOCKING */ |
||||
#endif /* LWIP_NETIF_API */ |
||||
|
||||
err_t tcpip_callback_with_block(tcpip_callback_fn function, void *ctx, u8_t block); |
||||
#define tcpip_callback(f, ctx) tcpip_callback_with_block(f, ctx, 1) |
||||
|
||||
/* free pbufs or heap memory from another context without blocking */ |
||||
err_t pbuf_free_callback(struct pbuf *p); |
||||
err_t mem_free_callback(void *m); |
||||
|
||||
#if LWIP_TCPIP_TIMEOUT |
||||
err_t tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg); |
||||
err_t tcpip_untimeout(sys_timeout_handler h, void *arg); |
||||
#endif /* LWIP_TCPIP_TIMEOUT */ |
||||
|
||||
enum tcpip_msg_type { |
||||
#if LWIP_NETCONN |
||||
TCPIP_MSG_API, |
||||
#endif /* LWIP_NETCONN */ |
||||
TCPIP_MSG_INPKT, |
||||
#if LWIP_NETIF_API |
||||
TCPIP_MSG_NETIFAPI, |
||||
#endif /* LWIP_NETIF_API */ |
||||
#if LWIP_TCPIP_TIMEOUT |
||||
TCPIP_MSG_TIMEOUT, |
||||
TCPIP_MSG_UNTIMEOUT, |
||||
#endif /* LWIP_TCPIP_TIMEOUT */ |
||||
TCPIP_MSG_CALLBACK |
||||
}; |
||||
|
||||
struct tcpip_msg { |
||||
enum tcpip_msg_type type; |
||||
sys_sem_t *sem; |
||||
union { |
||||
#if LWIP_NETCONN |
||||
struct api_msg *apimsg; |
||||
#endif /* LWIP_NETCONN */ |
||||
#if LWIP_NETIF_API |
||||
struct netifapi_msg *netifapimsg; |
||||
#endif /* LWIP_NETIF_API */ |
||||
struct { |
||||
struct pbuf *p; |
||||
struct netif *netif; |
||||
} inp; |
||||
struct { |
||||
tcpip_callback_fn function; |
||||
void *ctx; |
||||
} cb; |
||||
#if LWIP_TCPIP_TIMEOUT |
||||
struct { |
||||
u32_t msecs; |
||||
sys_timeout_handler h; |
||||
void *arg; |
||||
} tmo; |
||||
#endif /* LWIP_TCPIP_TIMEOUT */ |
||||
} msg; |
||||
}; |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* !NO_SYS */ |
||||
|
||||
#endif /* __LWIP_TCPIP_H__ */ |
@ -1,98 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* Simon Goldschmidt |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_TIMERS_H__ |
||||
#define __LWIP_TIMERS_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
/* Timers are not supported when NO_SYS==1 and NO_SYS_NO_TIMERS==1 */ |
||||
#define LWIP_TIMERS (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS)) |
||||
|
||||
#if LWIP_TIMERS |
||||
|
||||
#include "lwip/err.h" |
||||
#include "lwip/sys.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#ifndef LWIP_DEBUG_TIMERNAMES |
||||
#ifdef LWIP_DEBUG |
||||
#define LWIP_DEBUG_TIMERNAMES SYS_DEBUG |
||||
#else /* LWIP_DEBUG */ |
||||
#define LWIP_DEBUG_TIMERNAMES 0 |
||||
#endif /* LWIP_DEBUG*/ |
||||
#endif |
||||
|
||||
/** Function prototype for a timeout callback function. Register such a function
|
||||
* using sys_timeout(). |
||||
* |
||||
* @param arg Additional argument to pass to the function - set up by sys_timeout() |
||||
*/ |
||||
typedef void (* sys_timeout_handler)(void *arg); |
||||
|
||||
struct sys_timeo { |
||||
struct sys_timeo *next; |
||||
u32_t time; |
||||
sys_timeout_handler h; |
||||
void *arg; |
||||
#if LWIP_DEBUG_TIMERNAMES |
||||
const char* handler_name; |
||||
#endif /* LWIP_DEBUG_TIMERNAMES */ |
||||
}; |
||||
|
||||
void sys_timeouts_init(void)ICACHE_FLASH_ATTR; |
||||
|
||||
#if LWIP_DEBUG_TIMERNAMES |
||||
void sys_timeout_debug(u32_t msecs, sys_timeout_handler handler, void *arg, const char* handler_name)ICACHE_FLASH_ATTR; |
||||
#define sys_timeout(msecs, handler, arg) sys_timeout_debug(msecs, handler, arg, #handler) |
||||
#else /* LWIP_DEBUG_TIMERNAMES */ |
||||
void sys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg)ICACHE_FLASH_ATTR; |
||||
#endif /* LWIP_DEBUG_TIMERNAMES */ |
||||
|
||||
void sys_untimeout(sys_timeout_handler handler, void *arg)ICACHE_FLASH_ATTR; |
||||
#if NO_SYS |
||||
void sys_check_timeouts(void)ICACHE_FLASH_ATTR; |
||||
void sys_restart_timeouts(void)ICACHE_FLASH_ATTR; |
||||
#else /* NO_SYS */ |
||||
void sys_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg); |
||||
#endif /* NO_SYS */ |
||||
|
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_TIMERS */ |
||||
#endif /* __LWIP_TIMERS_H__ */ |
@ -1,171 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
#ifndef __LWIP_UDP_H__ |
||||
#define __LWIP_UDP_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/netif.h" |
||||
#include "lwip/ip_addr.h" |
||||
#include "lwip/ip.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#define UDP_HLEN 8 |
||||
|
||||
/* Fields are (of course) in network byte order. */ |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
struct udp_hdr { |
||||
PACK_STRUCT_FIELD(u16_t src); |
||||
PACK_STRUCT_FIELD(u16_t dest); /* src/dest UDP ports */ |
||||
PACK_STRUCT_FIELD(u16_t len); |
||||
PACK_STRUCT_FIELD(u16_t chksum); |
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
#define UDP_FLAGS_NOCHKSUM 0x01U |
||||
#define UDP_FLAGS_UDPLITE 0x02U |
||||
#define UDP_FLAGS_CONNECTED 0x04U |
||||
#define UDP_FLAGS_MULTICAST_LOOP 0x08U |
||||
|
||||
struct udp_pcb; |
||||
|
||||
/** Function prototype for udp pcb receive callback functions
|
||||
* addr and port are in same byte order as in the pcb |
||||
* The callback is responsible for freeing the pbuf |
||||
* if it's not used any more. |
||||
* |
||||
* ATTENTION: Be aware that 'addr' points into the pbuf 'p' so freeing this pbuf |
||||
* makes 'addr' invalid, too. |
||||
* |
||||
* @param arg user supplied argument (udp_pcb.recv_arg) |
||||
* @param pcb the udp_pcb which received data |
||||
* @param p the packet buffer that was received |
||||
* @param addr the remote IP address from which the packet was received |
||||
* @param port the remote port from which the packet was received |
||||
*/ |
||||
typedef void (*udp_recv_fn)(void *arg, struct udp_pcb *pcb, struct pbuf *p, |
||||
ip_addr_t *addr, u16_t port); |
||||
|
||||
|
||||
struct udp_pcb { |
||||
/* Common members of all PCB types */ |
||||
IP_PCB; |
||||
|
||||
/* Protocol specific PCB members */ |
||||
|
||||
struct udp_pcb *next; |
||||
|
||||
u8_t flags; |
||||
/** ports are in host byte order */ |
||||
u16_t local_port, remote_port; |
||||
|
||||
#if LWIP_IGMP |
||||
/** outgoing network interface for multicast packets */ |
||||
ip_addr_t multicast_ip; |
||||
#endif /* LWIP_IGMP */ |
||||
|
||||
#if LWIP_UDPLITE |
||||
/** used for UDP_LITE only */ |
||||
u16_t chksum_len_rx, chksum_len_tx; |
||||
#endif /* LWIP_UDPLITE */ |
||||
|
||||
/** receive callback function */ |
||||
udp_recv_fn recv; |
||||
/** user-supplied argument for the recv callback */ |
||||
void *recv_arg;
|
||||
}; |
||||
/* udp_pcbs export for exernal reference (e.g. SNMP agent) */ |
||||
extern struct udp_pcb *udp_pcbs; |
||||
|
||||
/* The following functions is the application layer interface to the
|
||||
UDP code. */ |
||||
struct udp_pcb * udp_new (void)ICACHE_FLASH_ATTR; |
||||
void udp_remove (struct udp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
err_t udp_bind (struct udp_pcb *pcb, ip_addr_t *ipaddr, |
||||
u16_t port)ICACHE_FLASH_ATTR; |
||||
err_t udp_connect (struct udp_pcb *pcb, ip_addr_t *ipaddr, |
||||
u16_t port)ICACHE_FLASH_ATTR; |
||||
void udp_disconnect (struct udp_pcb *pcb)ICACHE_FLASH_ATTR; |
||||
void udp_recv (struct udp_pcb *pcb, udp_recv_fn recv, |
||||
void *recv_arg)ICACHE_FLASH_ATTR; |
||||
err_t udp_sendto_if (struct udp_pcb *pcb, struct pbuf *p, |
||||
ip_addr_t *dst_ip, u16_t dst_port, |
||||
struct netif *netif)ICACHE_FLASH_ATTR; |
||||
err_t udp_sendto (struct udp_pcb *pcb, struct pbuf *p, |
||||
ip_addr_t *dst_ip, u16_t dst_port)ICACHE_FLASH_ATTR; |
||||
err_t udp_send (struct udp_pcb *pcb, struct pbuf *p)ICACHE_FLASH_ATTR; |
||||
|
||||
#if LWIP_CHECKSUM_ON_COPY |
||||
err_t udp_sendto_if_chksum(struct udp_pcb *pcb, struct pbuf *p, |
||||
ip_addr_t *dst_ip, u16_t dst_port, |
||||
struct netif *netif, u8_t have_chksum, |
||||
u16_t chksum)ICACHE_FLASH_ATTR; |
||||
err_t udp_sendto_chksum(struct udp_pcb *pcb, struct pbuf *p, |
||||
ip_addr_t *dst_ip, u16_t dst_port, |
||||
u8_t have_chksum, u16_t chksum)ICACHE_FLASH_ATTR; |
||||
err_t udp_send_chksum(struct udp_pcb *pcb, struct pbuf *p, |
||||
u8_t have_chksum, u16_t chksum)ICACHE_FLASH_ATTR; |
||||
#endif /* LWIP_CHECKSUM_ON_COPY */ |
||||
|
||||
#define udp_flags(pcb) ((pcb)->flags) |
||||
#define udp_setflags(pcb, f) ((pcb)->flags = (f)) |
||||
|
||||
/* The following functions are the lower layer interface to UDP. */ |
||||
void udp_input (struct pbuf *p, struct netif *inp)ICACHE_FLASH_ATTR; |
||||
|
||||
#define udp_init() /* Compatibility define, not init needed. */ |
||||
|
||||
#if UDP_DEBUG |
||||
void udp_debug_print(struct udp_hdr *udphdr)ICACHE_FLASH_ATTR; |
||||
#else |
||||
#define udp_debug_print(udphdr) |
||||
#endif |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* LWIP_UDP */ |
||||
|
||||
#endif /* __LWIP_UDP_H__ */ |
@ -1,254 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2001-2003 Swedish Institute of Computer Science. |
||||
* Copyright (c) 2003-2004 Leon Woestenberg <leon.woestenberg@axon.tv> |
||||
* Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. |
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, |
||||
* this list of conditions and the following disclaimer in the documentation |
||||
* and/or other materials provided with the distribution. |
||||
* 3. The name of the author may not be used to endorse or promote products |
||||
* derived from this software without specific prior written permission.
|
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE. |
||||
* |
||||
* This file is part of the lwIP TCP/IP stack. |
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se> |
||||
* |
||||
*/ |
||||
|
||||
#ifndef __NETIF_ETHARP_H__ |
||||
#define __NETIF_ETHARP_H__ |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if LWIP_ARP || LWIP_ETHERNET /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
#include "lwip/pbuf.h" |
||||
#include "lwip/ip_addr.h" |
||||
#include "lwip/netif.h" |
||||
#include "lwip/ip.h" |
||||
|
||||
#ifdef __cplusplus |
||||
extern "C" { |
||||
#endif |
||||
|
||||
#ifndef ETHARP_HWADDR_LEN |
||||
#define ETHARP_HWADDR_LEN 6 |
||||
#endif |
||||
|
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
struct eth_addr { |
||||
PACK_STRUCT_FIELD(u8_t addr[ETHARP_HWADDR_LEN]); |
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
/** Ethernet header */ |
||||
struct eth_hdr { |
||||
#if ETH_PAD_SIZE |
||||
PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]); |
||||
#endif |
||||
PACK_STRUCT_FIELD(struct eth_addr dest); |
||||
PACK_STRUCT_FIELD(struct eth_addr src); |
||||
PACK_STRUCT_FIELD(u16_t type); |
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
#define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE) |
||||
|
||||
#if ETHARP_SUPPORT_VLAN |
||||
|
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
/** VLAN header inserted between ethernet header and payload
|
||||
* if 'type' in ethernet header is ETHTYPE_VLAN. |
||||
* See IEEE802.Q */ |
||||
struct eth_vlan_hdr { |
||||
PACK_STRUCT_FIELD(u16_t tpid); |
||||
PACK_STRUCT_FIELD(u16_t prio_vid); |
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
#define SIZEOF_VLAN_HDR 4 |
||||
#define VLAN_ID(vlan_hdr) (htons((vlan_hdr)->prio_vid) & 0xFFF) |
||||
|
||||
#endif /* ETHARP_SUPPORT_VLAN */ |
||||
|
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
/** the ARP message, see RFC 826 ("Packet format") */ |
||||
struct etharp_hdr { |
||||
PACK_STRUCT_FIELD(u16_t hwtype); |
||||
PACK_STRUCT_FIELD(u16_t proto); |
||||
PACK_STRUCT_FIELD(u8_t hwlen); |
||||
PACK_STRUCT_FIELD(u8_t protolen); |
||||
PACK_STRUCT_FIELD(u16_t opcode); |
||||
PACK_STRUCT_FIELD(struct eth_addr shwaddr); |
||||
PACK_STRUCT_FIELD(struct ip_addr2 sipaddr); |
||||
PACK_STRUCT_FIELD(struct eth_addr dhwaddr); |
||||
PACK_STRUCT_FIELD(struct ip_addr2 dipaddr); |
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
#define SIZEOF_ETHARP_HDR 28 |
||||
#define SIZEOF_ETHARP_MINSIZE 46 |
||||
#define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR) |
||||
#define SIZEOF_ETHARP_WITHPAD (SIZEOF_ETH_HDR + SIZEOF_ETHARP_MINSIZE) |
||||
|
||||
/** 5 seconds period */ |
||||
#define ARP_TMR_INTERVAL 5000 |
||||
|
||||
#define ETHTYPE_ARP 0x0806 |
||||
#define ETHTYPE_IP 0x0800 |
||||
#define ETHTYPE_VLAN 0x8100 |
||||
#define ETHTYPE_PPPOEDISC 0x8863 /* PPP Over Ethernet Discovery Stage */ |
||||
#define ETHTYPE_PPPOE 0x8864 /* PPP Over Ethernet Session Stage */ |
||||
#define ETHTYPE_PAE 0x888e |
||||
|
||||
/** MEMCPY-like macro to copy to/from struct eth_addr's that are local variables
|
||||
* or known to be 32-bit aligned within the protocol header. */ |
||||
#ifndef ETHADDR32_COPY |
||||
#define ETHADDR32_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) |
||||
#endif |
||||
|
||||
/** MEMCPY-like macro to copy to/from struct eth_addr's that are no local
|
||||
* variables and known to be 16-bit aligned within the protocol header. */ |
||||
#ifndef ETHADDR16_COPY |
||||
#define ETHADDR16_COPY(src, dst) SMEMCPY(src, dst, ETHARP_HWADDR_LEN) |
||||
#endif |
||||
|
||||
#if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ |
||||
|
||||
/** ARP message types (opcodes) */ |
||||
#define ARP_REQUEST 1 |
||||
#define ARP_REPLY 2 |
||||
|
||||
/** Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type)
|
||||
* to a filter function that returns the correct netif when using multiple |
||||
* netifs on one hardware interface where the netif's low-level receive |
||||
* routine cannot decide for the correct netif (e.g. when mapping multiple |
||||
* IP addresses to one hardware interface). |
||||
*/ |
||||
#ifndef LWIP_ARP_FILTER_NETIF |
||||
#define LWIP_ARP_FILTER_NETIF 0 |
||||
#endif |
||||
|
||||
#if ARP_QUEUEING |
||||
/** struct for queueing outgoing packets for unknown address
|
||||
* defined here to be accessed by memp.h |
||||
*/ |
||||
struct etharp_q_entry { |
||||
struct etharp_q_entry *next; |
||||
struct pbuf *p; |
||||
}; |
||||
#endif /* ARP_QUEUEING */ |
||||
|
||||
#define etharp_init() /* Compatibility define, not init needed. */ |
||||
void etharp_tmr(void)ICACHE_FLASH_ATTR; |
||||
s8_t etharp_find_addr(struct netif *netif, ip_addr_t *ipaddr, |
||||
struct eth_addr **eth_ret, ip_addr_t **ip_ret)ICACHE_FLASH_ATTR; |
||||
err_t etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr)ICACHE_FLASH_ATTR; |
||||
err_t etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q)ICACHE_FLASH_ATTR; |
||||
err_t etharp_request(struct netif *netif, ip_addr_t *ipaddr)ICACHE_FLASH_ATTR; |
||||
/** For Ethernet network interfaces, we might want to send "gratuitous ARP";
|
||||
* this is an ARP packet sent by a node in order to spontaneously cause other |
||||
* nodes to update an entry in their ARP cache. |
||||
* From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */ |
||||
#define etharp_gratuitous(netif) etharp_request((netif), &(netif)->ip_addr) |
||||
void etharp_cleanup_netif(struct netif *netif); |
||||
|
||||
#if ETHARP_SUPPORT_STATIC_ENTRIES |
||||
err_t etharp_add_static_entry(ip_addr_t *ipaddr, struct eth_addr *ethaddr)ICACHE_FLASH_ATTR; |
||||
err_t etharp_remove_static_entry(ip_addr_t *ipaddr)ICACHE_FLASH_ATTR; |
||||
#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */ |
||||
|
||||
#if LWIP_AUTOIP |
||||
err_t etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, |
||||
const struct eth_addr *ethdst_addr, |
||||
const struct eth_addr *hwsrc_addr, const ip_addr_t *ipsrc_addr, |
||||
const struct eth_addr *hwdst_addr, const ip_addr_t *ipdst_addr, |
||||
const u16_t opcode)ICACHE_FLASH_ATTR; |
||||
#endif /* LWIP_AUTOIP */ |
||||
|
||||
#endif /* LWIP_ARP */ |
||||
|
||||
err_t ethernet_input(struct pbuf *p, struct netif *netif)ICACHE_FLASH_ATTR; |
||||
|
||||
#define eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETHARP_HWADDR_LEN) == 0) |
||||
|
||||
extern const struct eth_addr ethbroadcast, ethzero; |
||||
|
||||
#endif /* LWIP_ARP || LWIP_ETHERNET */ |
||||
|
||||
#if 0 |
||||
/** Ethernet header */ |
||||
#ifndef ETHARP_HWADDR_LEN |
||||
#define ETHARP_HWADDR_LEN 6 |
||||
#endif |
||||
|
||||
|
||||
struct eth_addr { |
||||
PACK_STRUCT_FIELD(u8_t addr[ETHARP_HWADDR_LEN]); |
||||
} PACK_STRUCT_STRUCT; |
||||
|
||||
|
||||
struct eth_hdr { |
||||
#if ETH_PAD_SIZE |
||||
PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]); |
||||
#endif |
||||
PACK_STRUCT_FIELD(struct eth_addr dest); |
||||
PACK_STRUCT_FIELD(struct eth_addr src); |
||||
PACK_STRUCT_FIELD(u16_t type); |
||||
} PACK_STRUCT_STRUCT; |
||||
|
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
#define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE) |
||||
|
||||
#endif |
||||
|
||||
#ifdef __cplusplus |
||||
} |
||||
#endif |
||||
|
||||
#endif /* __NETIF_ARP_H__ */ |
@ -1,173 +0,0 @@ |
||||
/* $NetBSD: if_llc.h,v 1.12 1999/11/19 20:41:19 thorpej Exp $ */ |
||||
|
||||
/*-
|
||||
* Copyright (c) 1988, 1993 |
||||
* The Regents of the University of California. All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions |
||||
* are met: |
||||
* 1. Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* 4. Neither the name of the University nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
||||
* SUCH DAMAGE. |
||||
* |
||||
* @(#)if_llc.h 8.1 (Berkeley) 6/10/93 |
||||
* $FreeBSD$ |
||||
*/ |
||||
|
||||
#ifndef _NET_IF_LLC_H_ |
||||
#define _NET_IF_LLC_H_ |
||||
|
||||
/*
|
||||
* IEEE 802.2 Link Level Control headers, for use in conjunction with |
||||
* 802.{3,4,5} media access control methods. |
||||
* |
||||
* Headers here do not use bit fields due to shortcommings in many |
||||
* compilers. |
||||
*/ |
||||
|
||||
struct llc { |
||||
uint8_t llc_dsap; |
||||
uint8_t llc_ssap; |
||||
union { |
||||
struct { |
||||
uint8_t control; |
||||
uint8_t format_id; |
||||
uint8_t class; |
||||
uint8_t window_x2; |
||||
} __packed type_u; |
||||
struct { |
||||
uint8_t num_snd_x2; |
||||
uint8_t num_rcv_x2; |
||||
} __packed type_i; |
||||
struct { |
||||
uint8_t control; |
||||
uint8_t num_rcv_x2; |
||||
} __packed type_s; |
||||
struct { |
||||
uint8_t control; |
||||
/*
|
||||
* We cannot put the following fields in a structure because |
||||
* the structure rounding might cause padding. |
||||
*/ |
||||
uint8_t frmr_rej_pdu0; |
||||
uint8_t frmr_rej_pdu1; |
||||
uint8_t frmr_control; |
||||
uint8_t frmr_control_ext; |
||||
uint8_t frmr_cause; |
||||
} __packed type_frmr; |
||||
struct { |
||||
uint8_t control; |
||||
uint8_t org_code[3]; |
||||
uint16_t ether_type; |
||||
} __packed type_snap; |
||||
struct { |
||||
uint8_t control; |
||||
uint8_t control_ext; |
||||
} __packed type_raw; |
||||
} __packed llc_un; |
||||
} __packed; |
||||
|
||||
struct frmrinfo { |
||||
uint8_t frmr_rej_pdu0; |
||||
uint8_t frmr_rej_pdu1; |
||||
uint8_t frmr_control; |
||||
uint8_t frmr_control_ext; |
||||
uint8_t frmr_cause; |
||||
} __packed; |
||||
|
||||
#define llc_control llc_un.type_u.control |
||||
#define llc_control_ext llc_un.type_raw.control_ext |
||||
#define llc_fid llc_un.type_u.format_id |
||||
#define llc_class llc_un.type_u.class |
||||
#define llc_window llc_un.type_u.window_x2 |
||||
#define llc_frmrinfo llc_un.type_frmr.frmr_rej_pdu0 |
||||
#define llc_frmr_pdu0 llc_un.type_frmr.frmr_rej_pdu0 |
||||
#define llc_frmr_pdu1 llc_un.type_frmr.frmr_rej_pdu1 |
||||
#define llc_frmr_control llc_un.type_frmr.frmr_control |
||||
#define llc_frmr_control_ext llc_un.type_frmr.frmr_control_ext |
||||
#define llc_frmr_cause llc_un.type_frmr.frmr_cause |
||||
#define llc_snap llc_un.type_snap |
||||
|
||||
/*
|
||||
* Don't use sizeof(struct llc_un) for LLC header sizes |
||||
*/ |
||||
#define LLC_ISFRAMELEN 4 |
||||
#define LLC_UFRAMELEN 3 |
||||
#define LLC_FRMRLEN 7 |
||||
#define LLC_SNAPFRAMELEN 8 |
||||
|
||||
#ifdef CTASSERT |
||||
CTASSERT(sizeof (struct llc) == LLC_SNAPFRAMELEN); |
||||
#endif |
||||
|
||||
/*
|
||||
* Unnumbered LLC format commands |
||||
*/ |
||||
#define LLC_UI 0x3 |
||||
#define LLC_UI_P 0x13 |
||||
#define LLC_DISC 0x43 |
||||
#define LLC_DISC_P 0x53 |
||||
#define LLC_UA 0x63 |
||||
#define LLC_UA_P 0x73 |
||||
#define LLC_TEST 0xe3 |
||||
#define LLC_TEST_P 0xf3 |
||||
#define LLC_FRMR 0x87 |
||||
#define LLC_FRMR_P 0x97 |
||||
#define LLC_DM 0x0f |
||||
#define LLC_DM_P 0x1f |
||||
#define LLC_XID 0xaf |
||||
#define LLC_XID_P 0xbf |
||||
#define LLC_SABME 0x6f |
||||
#define LLC_SABME_P 0x7f |
||||
|
||||
/*
|
||||
* Supervisory LLC commands |
||||
*/ |
||||
#define LLC_RR 0x01 |
||||
#define LLC_RNR 0x05 |
||||
#define LLC_REJ 0x09 |
||||
|
||||
/*
|
||||
* Info format - dummy only |
||||
*/ |
||||
#define LLC_INFO 0x00 |
||||
|
||||
/*
|
||||
* ISO PDTR 10178 contains among others |
||||
*/ |
||||
#define LLC_8021D_LSAP 0x42 |
||||
#define LLC_X25_LSAP 0x7e |
||||
#define LLC_SNAP_LSAP 0xaa |
||||
#define LLC_ISO_LSAP 0xfe |
||||
|
||||
#define RFC1042_LEN 6 |
||||
#define RFC1042 {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00} |
||||
#define ETHERNET_TUNNEL {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8} |
||||
|
||||
/*
|
||||
* copied from sys/net/ethernet.h |
||||
*/ |
||||
#define ETHERTYPE_AARP 0x80F3 /* AppleTalk AARP */ |
||||
#define ETHERTYPE_IPX 0x8137 /* Novell (old) NetWare IPX (ECONFIG E option) */ |
||||
|
||||
|
||||
|
||||
#endif /* _NET_IF_LLC_H_ */ |
@ -1,190 +0,0 @@ |
||||
/*****************************************************************************
|
||||
* ppp_oe.h - PPP Over Ethernet implementation for lwIP. |
||||
* |
||||
* Copyright (c) 2006 by Marc Boucher, Services Informatiques (MBSI) inc. |
||||
* |
||||
* The authors hereby grant permission to use, copy, modify, distribute, |
||||
* and license this software and its documentation for any purpose, provided |
||||
* that existing copyright notices are retained in all copies and that this |
||||
* notice and the following disclaimer are included verbatim in any
|
||||
* distributions. No written agreement, license, or royalty fee is required |
||||
* for any of the authorized uses. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR |
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
****************************************************************************** |
||||
* REVISION HISTORY |
||||
* |
||||
* 06-01-01 Marc Boucher <marc@mbsi.ca> |
||||
* Ported to lwIP. |
||||
*****************************************************************************/ |
||||
|
||||
|
||||
|
||||
/* based on NetBSD: if_pppoe.c,v 1.64 2006/01/31 23:50:15 martin Exp */ |
||||
|
||||
/*-
|
||||
* Copyright (c) 2002 The NetBSD Foundation, Inc. |
||||
* All rights reserved. |
||||
* |
||||
* This code is derived from software contributed to The NetBSD Foundation |
||||
* by Martin Husemann <martin@NetBSD.org>. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions |
||||
* are met: |
||||
* 1. Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* 3. All advertising materials mentioning features or use of this software |
||||
* must display the following acknowledgement: |
||||
* This product includes software developed by the NetBSD |
||||
* Foundation, Inc. and its contributors. |
||||
* 4. Neither the name of The NetBSD Foundation nor the names of its |
||||
* contributors may be used to endorse or promote products derived |
||||
* from this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
*/ |
||||
#ifndef PPP_OE_H |
||||
#define PPP_OE_H |
||||
|
||||
#include "lwip/opt.h" |
||||
|
||||
#if PPPOE_SUPPORT > 0 |
||||
|
||||
#include "netif/etharp.h" |
||||
|
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
struct pppoehdr { |
||||
PACK_STRUCT_FIELD(u8_t vertype); |
||||
PACK_STRUCT_FIELD(u8_t code); |
||||
PACK_STRUCT_FIELD(u16_t session); |
||||
PACK_STRUCT_FIELD(u16_t plen); |
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/bpstruct.h" |
||||
#endif |
||||
PACK_STRUCT_BEGIN |
||||
struct pppoetag { |
||||
PACK_STRUCT_FIELD(u16_t tag); |
||||
PACK_STRUCT_FIELD(u16_t len); |
||||
} PACK_STRUCT_STRUCT; |
||||
PACK_STRUCT_END |
||||
#ifdef PACK_STRUCT_USE_INCLUDES |
||||
# include "arch/epstruct.h" |
||||
#endif |
||||
|
||||
|
||||
#define PPPOE_STATE_INITIAL 0 |
||||
#define PPPOE_STATE_PADI_SENT 1 |
||||
#define PPPOE_STATE_PADR_SENT 2 |
||||
#define PPPOE_STATE_SESSION 3 |
||||
#define PPPOE_STATE_CLOSING 4 |
||||
/* passive */ |
||||
#define PPPOE_STATE_PADO_SENT 1 |
||||
|
||||
#define PPPOE_HEADERLEN sizeof(struct pppoehdr) |
||||
#define PPPOE_VERTYPE 0x11 /* VER=1, TYPE = 1 */ |
||||
|
||||
#define PPPOE_TAG_EOL 0x0000 /* end of list */ |
||||
#define PPPOE_TAG_SNAME 0x0101 /* service name */ |
||||
#define PPPOE_TAG_ACNAME 0x0102 /* access concentrator name */ |
||||
#define PPPOE_TAG_HUNIQUE 0x0103 /* host unique */ |
||||
#define PPPOE_TAG_ACCOOKIE 0x0104 /* AC cookie */ |
||||
#define PPPOE_TAG_VENDOR 0x0105 /* vendor specific */ |
||||
#define PPPOE_TAG_RELAYSID 0x0110 /* relay session id */ |
||||
#define PPPOE_TAG_SNAME_ERR 0x0201 /* service name error */ |
||||
#define PPPOE_TAG_ACSYS_ERR 0x0202 /* AC system error */ |
||||
#define PPPOE_TAG_GENERIC_ERR 0x0203 /* gerneric error */ |
||||
|
||||
#define PPPOE_CODE_PADI 0x09 /* Active Discovery Initiation */ |
||||
#define PPPOE_CODE_PADO 0x07 /* Active Discovery Offer */ |
||||
#define PPPOE_CODE_PADR 0x19 /* Active Discovery Request */ |
||||
#define PPPOE_CODE_PADS 0x65 /* Active Discovery Session confirmation */ |
||||
#define PPPOE_CODE_PADT 0xA7 /* Active Discovery Terminate */ |
||||
|
||||
#ifndef ETHERMTU |
||||
#define ETHERMTU 1500 |
||||
#endif |
||||
|
||||
/* two byte PPP protocol discriminator, then IP data */ |
||||
#define PPPOE_MAXMTU (ETHERMTU-PPPOE_HEADERLEN-2) |
||||
|
||||
#ifndef PPPOE_MAX_AC_COOKIE_LEN |
||||
#define PPPOE_MAX_AC_COOKIE_LEN 64 |
||||
#endif |
||||
|
||||
struct pppoe_softc { |
||||
struct pppoe_softc *next; |
||||
struct netif *sc_ethif; /* ethernet interface we are using */ |
||||
int sc_pd; /* ppp unit number */ |
||||
void (*sc_linkStatusCB)(int pd, int up); |
||||
|
||||
int sc_state; /* discovery phase or session connected */ |
||||
struct eth_addr sc_dest; /* hardware address of concentrator */ |
||||
u16_t sc_session; /* PPPoE session id */ |
||||
|
||||
#ifdef PPPOE_TODO |
||||
char *sc_service_name; /* if != NULL: requested name of service */ |
||||
char *sc_concentrator_name; /* if != NULL: requested concentrator id */ |
||||
#endif /* PPPOE_TODO */ |
||||
u8_t sc_ac_cookie[PPPOE_MAX_AC_COOKIE_LEN]; /* content of AC cookie we must echo back */ |
||||
size_t sc_ac_cookie_len; /* length of cookie data */ |
||||
#ifdef PPPOE_SERVER |
||||
u8_t *sc_hunique; /* content of host unique we must echo back */ |
||||
size_t sc_hunique_len; /* length of host unique */ |
||||
#endif |
||||
int sc_padi_retried; /* number of PADI retries already done */ |
||||
int sc_padr_retried; /* number of PADR retries already done */ |
||||
}; |
||||
|
||||
|
||||
#define pppoe_init() /* compatibility define, no initialization needed */ |
||||
|
||||
err_t pppoe_create(struct netif *ethif, int pd, void (*linkStatusCB)(int pd, int up), struct pppoe_softc **scptr); |
||||
err_t pppoe_destroy(struct netif *ifp); |
||||
|
||||
int pppoe_connect(struct pppoe_softc *sc); |
||||
void pppoe_disconnect(struct pppoe_softc *sc); |
||||
|
||||
void pppoe_disc_input(struct netif *netif, struct pbuf *p); |
||||
void pppoe_data_input(struct netif *netif, struct pbuf *p); |
||||
|
||||
err_t pppoe_xmit(struct pppoe_softc *sc, struct pbuf *pb); |
||||
|
||||
/** used in ppp.c */ |
||||
#define PPPOE_HDRLEN (sizeof(struct eth_hdr) + PPPOE_HEADERLEN) |
||||
|
||||
#endif /* PPPOE_SUPPORT */ |
||||
|
||||
#endif /* PPP_OE_H */ |
@ -1,25 +0,0 @@ |
||||
/*
|
||||
* Copyright (c) 2010-2011 Espressif System |
||||
*
|
||||
*/ |
||||
|
||||
#ifndef _WLAN_LWIP_IF_H_ |
||||
#define _WLAN_LWIP_IF_H_ |
||||
|
||||
#define LWIP_IF0_PRIO 28 |
||||
#define LWIP_IF1_PRIO 29 |
||||
|
||||
enum { |
||||
SIG_LWIP_RX = 0,
|
||||
}; |
||||
|
||||
struct netif * eagle_lwip_if_alloc(struct ieee80211_conn *conn, const uint8 *macaddr, struct ip_info *info); |
||||
struct netif * eagle_lwip_getif(uint8 index); |
||||
|
||||
#ifndef IOT_SIP_MODE |
||||
sint8 ieee80211_output_pbuf(struct netif *ifp, struct pbuf* pb); |
||||
#else |
||||
sint8 ieee80211_output_pbuf(struct ieee80211_conn *conn, esf_buf *eb); |
||||
#endif |
||||
|
||||
#endif /* _WLAN_LWIP_IF_H_ */ |
@ -1,253 +0,0 @@ |
||||
/*
|
||||
* Copyright (C) 2013 -2014 Espressif System |
||||
* |
||||
*/ |
||||
|
||||
#ifndef __USER_INTERFACE_H__ |
||||
#define __USER_INTERFACE_H__ |
||||
|
||||
#include "os_type.h" |
||||
#ifdef LWIP_OPEN_SRC |
||||
#include "lwip/ip_addr.h" |
||||
#else |
||||
#include "ip_addr.h" |
||||
#endif |
||||
|
||||
#include "queue.h" |
||||
#include "user_config.h" |
||||
#include "spi_flash.h" |
||||
|
||||
#ifndef MAC2STR |
||||
#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] |
||||
#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" |
||||
#endif |
||||
|
||||
enum rst_reason { |
||||
DEFAULT_RST_FLAG = 0, |
||||
WDT_RST_FLAG = 1, |
||||
EXP_RST_FLAG = 2 |
||||
}; |
||||
|
||||
struct rst_info{ |
||||
uint32 flag; |
||||
uint32 exccause; |
||||
uint32 epc1; |
||||
uint32 epc2; |
||||
uint32 epc3; |
||||
uint32 excvaddr; |
||||
uint32 depc; |
||||
}; |
||||
|
||||
#define UPGRADE_FW_BIN1 0x00 |
||||
#define UPGRADE_FW_BIN2 0x01 |
||||
|
||||
typedef void (*upgrade_states_check_callback)(void * arg); |
||||
|
||||
struct upgrade_server_info { |
||||
uint8 ip[4]; |
||||
uint16 port; |
||||
|
||||
uint8 upgrade_flag; |
||||
|
||||
uint8 pre_version[8]; |
||||
uint8 upgrade_version[8]; |
||||
|
||||
uint32 check_times; |
||||
uint8 *url; |
||||
|
||||
upgrade_states_check_callback check_cb; |
||||
struct espconn *pespconn; |
||||
}; |
||||
|
||||
bool system_upgrade_start(struct upgrade_server_info *server); |
||||
bool system_upgrade_start_ssl(struct upgrade_server_info *server); |
||||
uint8 system_upgrade_userbin_check(void); |
||||
void system_upgrade_reboot(void); |
||||
|
||||
void system_restore(void); |
||||
void system_restart(void); |
||||
void system_deep_sleep(uint32 time_in_us); |
||||
|
||||
void system_timer_reinit(void); |
||||
uint32 system_get_time(void); |
||||
|
||||
/* user task's prio must be 0/1/2 !!!*/ |
||||
enum { |
||||
USER_TASK_PRIO_0 = 0, |
||||
USER_TASK_PRIO_1, |
||||
USER_TASK_PRIO_2, |
||||
USER_TASK_PRIO_MAX |
||||
}; |
||||
|
||||
void system_os_task(os_task_t task, uint8 prio, os_event_t *queue, uint8 qlen); |
||||
void system_os_post(uint8 prio, os_signal_t sig, os_param_t par); |
||||
|
||||
void system_print_meminfo(void); |
||||
uint32 system_get_free_heap_size(void); |
||||
|
||||
void system_set_os_print(uint8 onoff); |
||||
|
||||
uint64 system_mktime(uint32 year, uint32 mon, uint32 day, uint32 hour, uint32 min, uint32 sec); |
||||
|
||||
uint32 system_get_chip_id(void); |
||||
|
||||
typedef void (* init_done_cb_t)(void); |
||||
|
||||
void system_init_done_cb(init_done_cb_t cb); |
||||
|
||||
uint32 system_rtc_clock_cali_proc(void); |
||||
uint32 system_get_rtc_time(void); |
||||
|
||||
bool system_rtc_mem_read(uint8 src_addr, void *des_addr, uint16 load_size); |
||||
bool system_rtc_mem_write(uint8 des_addr, const void *src_addr, uint16 save_size); |
||||
|
||||
void system_uart_swap(void); |
||||
|
||||
uint16 system_adc_read(void); |
||||
|
||||
#define NULL_MODE 0x00 |
||||
#define STATION_MODE 0x01 |
||||
#define SOFTAP_MODE 0x02 |
||||
#define STATIONAP_MODE 0x03 |
||||
|
||||
uint8 wifi_get_opmode(void); |
||||
bool wifi_set_opmode(uint8 opmode); |
||||
|
||||
struct bss_info { |
||||
STAILQ_ENTRY(bss_info) next; |
||||
|
||||
uint8 bssid[6]; |
||||
uint8 ssid[32]; |
||||
uint8 channel; |
||||
sint8 rssi; |
||||
uint8 authmode; |
||||
uint8 is_hidden; |
||||
}; |
||||
|
||||
typedef struct _scaninfo { |
||||
STAILQ_HEAD(, bss_info) *pbss; |
||||
struct espconn *pespconn; |
||||
uint8 totalpage; |
||||
uint8 pagenum; |
||||
uint8 page_sn; |
||||
uint8 data_cnt; |
||||
} scaninfo; |
||||
|
||||
typedef void (* scan_done_cb_t)(void *arg, STATUS status); |
||||
|
||||
struct station_config { |
||||
uint8 ssid[32]; |
||||
uint8 password[64]; |
||||
uint8 bssid_set; |
||||
uint8 bssid[6]; |
||||
}; |
||||
|
||||
bool wifi_station_get_config(struct station_config *config); |
||||
bool wifi_station_set_config(struct station_config *config); |
||||
|
||||
bool wifi_station_connect(void); |
||||
bool wifi_station_disconnect(void); |
||||
|
||||
struct scan_config { |
||||
uint8 *ssid; |
||||
uint8 *bssid; |
||||
uint8 channel; |
||||
uint8 show_hidden; |
||||
}; |
||||
|
||||
bool wifi_station_scan(struct scan_config *config, scan_done_cb_t cb); |
||||
|
||||
uint8 wifi_station_get_auto_connect(void); |
||||
bool wifi_station_set_auto_connect(uint8 set); |
||||
|
||||
enum { |
||||
STATION_IDLE = 0, |
||||
STATION_CONNECTING, |
||||
STATION_WRONG_PASSWORD, |
||||
STATION_NO_AP_FOUND, |
||||
STATION_CONNECT_FAIL, |
||||
STATION_GOT_IP |
||||
}; |
||||
|
||||
uint8 wifi_station_get_connect_status(void); |
||||
|
||||
uint8 wifi_station_get_current_ap_id(void); |
||||
bool wifi_station_ap_change(uint8 current_ap_id); |
||||
bool wifi_station_ap_number_set(uint8 ap_number); |
||||
|
||||
bool wifi_station_dhcpc_start(void); |
||||
bool wifi_station_dhcpc_stop(void); |
||||
|
||||
typedef enum _auth_mode { |
||||
AUTH_OPEN = 0, |
||||
AUTH_WEP, |
||||
AUTH_WPA_PSK, |
||||
AUTH_WPA2_PSK, |
||||
AUTH_WPA_WPA2_PSK |
||||
} AUTH_MODE; |
||||
|
||||
struct softap_config { |
||||
uint8 ssid[32]; |
||||
uint8 password[64]; |
||||
uint8 ssid_len; |
||||
uint8 channel; |
||||
uint8 authmode; |
||||
uint8 ssid_hidden; |
||||
uint8 max_connection; |
||||
}; |
||||
|
||||
bool wifi_softap_get_config(struct softap_config *config); |
||||
bool wifi_softap_set_config(struct softap_config *config); |
||||
|
||||
struct station_info { |
||||
STAILQ_ENTRY(station_info) next; |
||||
|
||||
uint8 bssid[6]; |
||||
struct ip_addr ip; |
||||
}; |
||||
|
||||
struct dhcps_lease { |
||||
uint32 start_ip; |
||||
uint32 end_ip; |
||||
}; |
||||
|
||||
struct station_info * wifi_softap_get_station_info(void); |
||||
void wifi_softap_free_station_info(void); |
||||
|
||||
bool wifi_softap_dhcps_start(void); |
||||
bool wifi_softap_dhcps_stop(void); |
||||
bool wifi_softap_set_dhcps_lease(struct dhcps_lease *please); |
||||
|
||||
#define STATION_IF 0x00 |
||||
#define SOFTAP_IF 0x01 |
||||
|
||||
bool wifi_get_ip_info(uint8 if_index, struct ip_info *info); |
||||
bool wifi_set_ip_info(uint8 if_index, struct ip_info *info); |
||||
bool wifi_get_macaddr(uint8 if_index, uint8 *macaddr); |
||||
bool wifi_set_macaddr(uint8 if_index, uint8 *macaddr); |
||||
|
||||
uint8 wifi_get_channel(void); |
||||
bool wifi_set_channel(uint8 channel); |
||||
|
||||
void wifi_status_led_install(uint8 gpio_id, uint32 gpio_name, uint8 gpio_func); |
||||
|
||||
/** Get the absolute difference between 2 u32_t values (correcting overflows)
|
||||
* 'a' is expected to be 'higher' (without overflow) than 'b'. */ |
||||
#define ESP_U32_DIFF(a, b) (((a) >= (b)) ? ((a) - (b)) : (((a) + ((b) ^ 0xFFFFFFFF) + 1))) |
||||
|
||||
void wifi_promiscuous_enable(uint8 promiscuous); |
||||
|
||||
typedef void (* wifi_promiscuous_cb_t)(uint8 *buf, uint16 len); |
||||
|
||||
void wifi_set_promiscuous_rx_cb(wifi_promiscuous_cb_t cb); |
||||
|
||||
enum phy_mode { |
||||
PHY_MODE_11B = 1, |
||||
PHY_MODE_11G = 2, |
||||
PHY_MODE_11N = 3 |
||||
}; |
||||
|
||||
enum phy_mode wifi_get_phy_mode(void); |
||||
bool wifi_set_phy_mode(enum phy_mode mode); |
||||
|
||||
#endif |
Loading…
Reference in new issue