mirror of
https://git.savannah.nongnu.org/git/lwip.git
synced 2026-08-09 17:13:49 +08:00
Merge branch 'master' into ppp-new
This commit is contained in:
@@ -203,7 +203,7 @@ struct netconn {
|
||||
/** 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;
|
||||
int recv_avail;
|
||||
#endif /* LWIP_SO_RCVBUF */
|
||||
/** flags holding more netconn-internal state, see NETCONN_FLAG_* defines */
|
||||
u8_t flags;
|
||||
|
||||
@@ -48,6 +48,12 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if LWIP_MPU_COMPATIBLE
|
||||
#define API_MSG_M_DEF(m) m
|
||||
#else /* LWIP_MPU_COMPATIBLE */
|
||||
#define API_MSG_M_DEF(m) *m
|
||||
#endif /* LWIP_MPU_COMPATIBLE */
|
||||
|
||||
/* For the netconn API, these values are use as a bitmask! */
|
||||
#define NETCONN_SHUT_RD 1
|
||||
#define NETCONN_SHUT_WR 2
|
||||
@@ -75,13 +81,13 @@ struct api_msg_msg {
|
||||
} n;
|
||||
/** used for lwip_netconn_do_bind and lwip_netconn_do_connect */
|
||||
struct {
|
||||
ip_addr_t *ipaddr;
|
||||
ip_addr_t API_MSG_M_DEF(ipaddr);
|
||||
u16_t port;
|
||||
} bc;
|
||||
/** used for lwip_netconn_do_getaddr */
|
||||
struct {
|
||||
ipX_addr_t *ipaddr;
|
||||
u16_t *port;
|
||||
ipX_addr_t API_MSG_M_DEF(ipaddr);
|
||||
u16_t API_MSG_M_DEF(port);
|
||||
u8_t local;
|
||||
} ad;
|
||||
/** used for lwip_netconn_do_write */
|
||||
@@ -104,8 +110,8 @@ struct api_msg_msg {
|
||||
#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD)
|
||||
/** used for lwip_netconn_do_join_leave_group */
|
||||
struct {
|
||||
ipX_addr_t *multiaddr;
|
||||
ipX_addr_t *netif_addr;
|
||||
ipX_addr_t API_MSG_M_DEF(multiaddr);
|
||||
ipX_addr_t API_MSG_M_DEF(netif_addr);
|
||||
enum netconn_igmp join_or_leave;
|
||||
} jl;
|
||||
#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */
|
||||
@@ -136,12 +142,12 @@ 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;
|
||||
ip_addr_t API_MSG_M_DEF(addr);
|
||||
/** This semaphore is posted when the name is resolved, the application thread
|
||||
should wait on it. */
|
||||
sys_sem_t *sem;
|
||||
sys_sem_t API_MSG_M_DEF(sem);
|
||||
/** Errors are given back here */
|
||||
err_t *err;
|
||||
err_t API_MSG_M_DEF(err);
|
||||
};
|
||||
#endif /* LWIP_DNS */
|
||||
|
||||
|
||||
@@ -58,6 +58,18 @@ LWIP_MEMPOOL(NETCONN, MEMP_NUM_NETCONN, sizeof(struct netconn),
|
||||
|
||||
#if NO_SYS==0
|
||||
LWIP_MEMPOOL(TCPIP_MSG_API, MEMP_NUM_TCPIP_MSG_API, sizeof(struct tcpip_msg), "TCPIP_MSG_API")
|
||||
#if LWIP_MPU_COMPATIBLE
|
||||
LWIP_MEMPOOL(API_MSG, MEMP_NUM_API_MSG, sizeof(struct api_msg), "API_MSG")
|
||||
#if LWIP_DNS
|
||||
LWIP_MEMPOOL(DNS_API_MSG, MEMP_NUM_DNS_API_MSG, sizeof(struct dns_api_msg), "DNS_API_MSG")
|
||||
#endif
|
||||
#if LWIP_SOCKET
|
||||
LWIP_MEMPOOL(SOCKET_SETGETSOCKOPT_DATA, MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA, sizeof(struct lwip_setgetsockopt_data), "SOCKET_SETGETSOCKOPT_DATA")
|
||||
#endif
|
||||
#if LWIP_NETIF_API
|
||||
LWIP_MEMPOOL(NETIFAPI_MSG, MEMP_NUM_NETIFAPI_MSG, sizeof(struct netifapi_msg), "NETIFAPI_MSG")
|
||||
#endif
|
||||
#endif /* LWIP_MPU_COMPATIBLE */
|
||||
#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 */
|
||||
|
||||
@@ -123,7 +123,7 @@ typedef err_t (*netif_output_fn)(struct netif *netif, struct pbuf *p,
|
||||
ip_addr_t *ipaddr);
|
||||
#if LWIP_IPV6
|
||||
/** Function prototype for netif->output_ip6 functions. Called by lwIP when a packet
|
||||
* shall be sent. For ethernet netif, set this to 'nd_output' and set
|
||||
* shall be sent. For ethernet netif, set this to 'ethip6_output' and set
|
||||
* 'linkoutput'.
|
||||
*
|
||||
* @param netif The netif which shall send a packet
|
||||
|
||||
@@ -41,6 +41,12 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if LWIP_MPU_COMPATIBLE
|
||||
#define NETIFAPI_IPADDR_DEF(m) m
|
||||
#else /* LWIP_MPU_COMPATIBLE */
|
||||
#define NETIFAPI_IPADDR_DEF(m) *m
|
||||
#endif /* LWIP_MPU_COMPATIBLE */
|
||||
|
||||
typedef void (*netifapi_void_fn)(struct netif *netif);
|
||||
typedef err_t (*netifapi_errt_fn)(struct netif *netif);
|
||||
|
||||
@@ -52,9 +58,9 @@ struct netifapi_msg_msg {
|
||||
struct netif *netif;
|
||||
union {
|
||||
struct {
|
||||
ip_addr_t *ipaddr;
|
||||
ip_addr_t *netmask;
|
||||
ip_addr_t *gw;
|
||||
ip_addr_t NETIFAPI_IPADDR_DEF(ipaddr);
|
||||
ip_addr_t NETIFAPI_IPADDR_DEF(netmask);
|
||||
ip_addr_t NETIFAPI_IPADDR_DEF(gw);
|
||||
void *state;
|
||||
netif_init_fn init;
|
||||
netif_input_fn input;
|
||||
|
||||
@@ -92,6 +92,16 @@
|
||||
#define SMEMCPY(dst,src,len) memcpy(dst,src,len)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* LWIP_MPU_COMPATIBLE: enables special memory management mechanism
|
||||
* which makes lwip able to work on MPU (Memory Protection Unit) system
|
||||
* by not passing stack-pointers to other threads
|
||||
* (this decreases performance)
|
||||
*/
|
||||
#ifndef LWIP_MPU_COMPATIBLE
|
||||
#define LWIP_MPU_COMPATIBLE 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
------------------------------------
|
||||
---------- Memory options ----------
|
||||
@@ -430,6 +440,33 @@
|
||||
#define PBUF_POOL_SIZE 16
|
||||
#endif
|
||||
|
||||
/** MEMP_NUM_API_MSG: the number of concurrently active calls to various
|
||||
* socket, netconn, and tcpip functions
|
||||
*/
|
||||
#ifndef MEMP_NUM_API_MSG
|
||||
#define MEMP_NUM_API_MSG MEMP_NUM_TCPIP_MSG_API
|
||||
#endif
|
||||
|
||||
/** MEMP_NUM_DNS_API_MSG: the number of concurrently active calls to netconn_gethostbyname
|
||||
*/
|
||||
#ifndef MEMP_NUM_DNS_API_MSG
|
||||
#define MEMP_NUM_DNS_API_MSG MEMP_NUM_TCPIP_MSG_API
|
||||
#endif
|
||||
|
||||
/** MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA: the number of concurrently active calls
|
||||
* to getsockopt/setsockopt
|
||||
*/
|
||||
#ifndef MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA
|
||||
#define MEMP_NUM_SOCKET_SETGETSOCKOPT_DATA MEMP_NUM_TCPIP_MSG_API
|
||||
#endif
|
||||
|
||||
/** MEMP_NUM_NETIFAPI_MSG: the number of concurrently active calls to the
|
||||
* netifapi functions
|
||||
*/
|
||||
#ifndef MEMP_NUM_NETIFAPI_MSG
|
||||
#define MEMP_NUM_NETIFAPI_MSG MEMP_NUM_TCPIP_MSG_API
|
||||
#endif
|
||||
|
||||
/*
|
||||
---------------------------------
|
||||
---------- ARP options ----------
|
||||
@@ -475,7 +512,9 @@
|
||||
#endif
|
||||
|
||||
/**
|
||||
* ETHARP_SUPPORT_VLAN==1: support receiving ethernet packets with VLAN header.
|
||||
* ETHARP_SUPPORT_VLAN==1: support receiving and sending ethernet packets with
|
||||
* VLAN header. See the description of LWIP_HOOK_VLAN_CHECK and
|
||||
* LWIP_HOOK_VLAN_SET hooks to check/set VLAN headers.
|
||||
* Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check.
|
||||
* If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted.
|
||||
* If ETHARP_VLAN_CHECK is not defined, all traffic is accepted.
|
||||
@@ -1124,7 +1163,11 @@
|
||||
* Ethernet.
|
||||
*/
|
||||
#ifndef PBUF_LINK_HLEN
|
||||
#ifdef LWIP_HOOK_VLAN_SET
|
||||
#define PBUF_LINK_HLEN (18 + ETH_PAD_SIZE)
|
||||
#else /* LWIP_HOOK_VLAN_SET */
|
||||
#define PBUF_LINK_HLEN (14 + ETH_PAD_SIZE)
|
||||
#endif /* LWIP_HOOK_VLAN_SET */
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -1243,7 +1286,7 @@
|
||||
------------------------------------
|
||||
*/
|
||||
/**
|
||||
* LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c
|
||||
* LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1)
|
||||
*/
|
||||
#ifndef LWIP_HAVE_LOOPIF
|
||||
#define LWIP_HAVE_LOOPIF 0
|
||||
@@ -2324,6 +2367,29 @@
|
||||
* that case, ip_route() continues as normal.
|
||||
*/
|
||||
|
||||
/**
|
||||
* LWIP_HOOK_VLAN_CHECK(netif, eth_hdr, vlan_hdr):
|
||||
* - called from ethernet_input() if VLAN support is enabled
|
||||
* - netif: struct netif on which the packet has been received
|
||||
* - eth_hdr: struct eth_hdr of the packet
|
||||
* - vlan_hdr: struct eth_vlan_hdr of the packet
|
||||
* Return values:
|
||||
* - 0: Packet must be dropped.
|
||||
* - != 0: Packet must be accepted.
|
||||
*/
|
||||
|
||||
/**
|
||||
* LWIP_HOOK_VLAN_SET(netif, eth_hdr, vlan_hdr):
|
||||
* - called from etharp_raw() and etharp_send_ip() if VLAN support is enabled
|
||||
* - netif: struct netif that the packet will be sent through
|
||||
* - eth_hdr: struct eth_hdr of the packet
|
||||
* - vlan_hdr: struct eth_vlan_hdr of the packet
|
||||
* Return values:
|
||||
* - 0: Packet shall not contain VLAN header.
|
||||
* - != 0: Packet shall contain VLAN header.
|
||||
* Hook can be used to set prio_vid field of vlan_hdr.
|
||||
*/
|
||||
|
||||
/*
|
||||
---------------------------------------
|
||||
---------- Debugging options ----------
|
||||
|
||||
@@ -172,6 +172,9 @@ struct pbuf *pbuf_coalesce(struct pbuf *p, pbuf_layer layer);
|
||||
err_t pbuf_fill_chksum(struct pbuf *p, u16_t start_offset, const void *dataptr,
|
||||
u16_t len, u16_t *chksum);
|
||||
#endif /* LWIP_CHECKSUM_ON_COPY */
|
||||
#if LWIP_TCP && TCP_QUEUE_OOSEQ && LWIP_WND_SCALE
|
||||
void pbuf_split_64k(struct pbuf *p, struct pbuf **rest);
|
||||
#endif /* LWIP_TCP && TCP_QUEUE_OOSEQ && LWIP_WND_SCALE */
|
||||
|
||||
u8_t pbuf_get_at(struct pbuf* p, u16_t offset);
|
||||
u16_t pbuf_memcmp(struct pbuf* p, u16_t offset, const void* s2, u16_t n);
|
||||
|
||||
@@ -97,6 +97,11 @@ struct raw_pcb {
|
||||
} recv;
|
||||
/* user-supplied argument for the recv callback */
|
||||
void *recv_arg;
|
||||
#if LWIP_IPV6
|
||||
/* fields for handling checksum computations as per RFC3542. */
|
||||
u16_t chksum_offset;
|
||||
u8_t chksum_reqd;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* The following functions is the application layer interface to the
|
||||
|
||||
@@ -99,8 +99,8 @@ struct snmp_obj_id
|
||||
|
||||
/* system */
|
||||
void snmp_set_sysdescr(const u8_t* str, const u8_t* len);
|
||||
void snmp_set_sysobjid(struct snmp_obj_id *oid);
|
||||
void snmp_get_sysobjid_ptr(struct snmp_obj_id **oid);
|
||||
void snmp_set_sysobjid(const struct snmp_obj_id *oid);
|
||||
void snmp_get_sysobjid_ptr(const struct snmp_obj_id **oid);
|
||||
void snmp_inc_sysuptime(void);
|
||||
void snmp_add_sysuptime(u32_t value);
|
||||
void snmp_get_sysuptime(u32_t *value);
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <stddef.h> /* for size_t */
|
||||
|
||||
#include "lwip/ip_addr.h"
|
||||
#include "lwip/err.h"
|
||||
#include "lwip/inet.h"
|
||||
#include "lwip/inet6.h"
|
||||
|
||||
@@ -105,6 +106,30 @@ struct sockaddr_storage {
|
||||
typedef u32_t socklen_t;
|
||||
#endif
|
||||
|
||||
struct lwip_sock;
|
||||
|
||||
/** This struct is used to pass data to the set/getsockopt_internal
|
||||
* functions running in tcpip_thread context (only a void* is allowed) */
|
||||
struct lwip_setgetsockopt_data {
|
||||
/** socket struct for which to change options */
|
||||
struct lwip_sock *sock;
|
||||
#ifdef LWIP_DEBUG
|
||||
/** socket index for which to change options */
|
||||
int s;
|
||||
#endif /* LWIP_DEBUG */
|
||||
/** level of the option to process */
|
||||
int level;
|
||||
/** name of the option to process */
|
||||
int optname;
|
||||
/** set: value to set the option to
|
||||
* get: value of the option is stored here */
|
||||
void *optval;
|
||||
/** size of *optval */
|
||||
socklen_t *optlen;
|
||||
/** if an error occures, it is temporarily stored here */
|
||||
err_t err;
|
||||
};
|
||||
|
||||
/* Socket protocol types (TCP/UDP/RAW) */
|
||||
#define SOCK_STREAM 1
|
||||
#define SOCK_DGRAM 2
|
||||
@@ -167,7 +192,7 @@ struct linger {
|
||||
#define PF_UNSPEC AF_UNSPEC
|
||||
|
||||
#define IPPROTO_IP 0
|
||||
#define IPPROTO_ICMP 1
|
||||
#define IPPROTO_ICMP 1
|
||||
#define IPPROTO_TCP 6
|
||||
#define IPPROTO_UDP 17
|
||||
#if LWIP_IPV6
|
||||
@@ -175,6 +200,7 @@ struct linger {
|
||||
#define IPPROTO_ICMPV6 58
|
||||
#endif /* LWIP_IPV6 */
|
||||
#define IPPROTO_UDPLITE 136
|
||||
#define IPPROTO_RAW 255
|
||||
|
||||
/* Flags we can use with send and recv. */
|
||||
#define MSG_PEEK 0x01 /* Peeks at an incoming message */
|
||||
@@ -205,7 +231,8 @@ struct linger {
|
||||
/*
|
||||
* Options for level IPPROTO_IPV6
|
||||
*/
|
||||
#define IPV6_V6ONLY 27 /* RFC3493: boolean control to restrict AF_INET6 sockets to IPv6 communications only. */
|
||||
#define IPV6_CHECKSUM 7 /* RFC3542: calculate and insert the ICMPv6 checksum for raw sockets. */
|
||||
#define IPV6_V6ONLY 27 /* RFC3493: boolean control to restrict AF_INET6 sockets to IPv6 communications only. */
|
||||
#endif /* LWIP_IPV6 */
|
||||
|
||||
#if LWIP_UDP && LWIP_UDPLITE
|
||||
@@ -423,6 +450,20 @@ int lwip_fcntl(int s, int cmd, int val);
|
||||
#define fcntl(a,b,c) lwip_fcntl(a,b,c)
|
||||
#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */
|
||||
|
||||
#if LWIP_IPV6
|
||||
#define inet_ntop(af,src,dst,size) \
|
||||
(((af) == AF_INET6) ? ip6addr_ntoa_r((src),(dst),(size)) \
|
||||
: (((af) == AF_INET) ? ipaddr_ntoa_r((src),(dst),(size)) : NULL))
|
||||
#define inet_pton(af,src,dst) \
|
||||
(((af) == AF_INET6) ? inet6_aton((src),(dst)) \
|
||||
: (((af) == AF_INET) ? inet_aton((src),(dst)) : 0))
|
||||
#else /* LWIP_IPV6 */
|
||||
#define inet_ntop(af,src,dst,size) \
|
||||
(((af) == AF_INET) ? ipaddr_ntoa_r((src),(dst),(size)) : NULL)
|
||||
#define inet_pton(af,src,dst) \
|
||||
(((af) == AF_INET) ? inet_aton((src),(dst)) : 0)
|
||||
#endif /* LWIP_IPV6 */
|
||||
|
||||
#endif /* LWIP_COMPAT_SOCKETS */
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -92,6 +92,35 @@ extern sys_mutex_t lock_tcpip_core;
|
||||
#define TCPIP_PPPAPI_ACK(m) sys_sem_signal(&m->sem)
|
||||
#endif /* LWIP_TCPIP_CORE_LOCKING */
|
||||
|
||||
|
||||
#if LWIP_MPU_COMPATIBLE
|
||||
#define API_VAR_REF(name) (*(name))
|
||||
#define API_VAR_DECLARE(type, name) type * name
|
||||
#define API_VAR_ALLOC(type, pool, name) do { \
|
||||
name = (type *)memp_malloc(pool); \
|
||||
if (name == NULL) { \
|
||||
return ERR_MEM; \
|
||||
} \
|
||||
} while(0)
|
||||
#define API_VAR_ALLOC_DONTFAIL(type, pool, name) do { \
|
||||
name = (type *)memp_malloc(pool); \
|
||||
LWIP_ASSERT("pool empty", name != NULL); \
|
||||
} while(0)
|
||||
#define API_VAR_FREE(pool, name) memp_free(pool, name)
|
||||
#define API_EXPR_REF(expr) &(expr)
|
||||
#define API_EXPR_DEREF(expr) expr
|
||||
#else /* LWIP_MPU_COMPATIBLE */
|
||||
#define API_VAR_REF(name) name
|
||||
#define API_VAR_DECLARE(type, name) type name
|
||||
#define API_VAR_ALLOC(type, pool, name)
|
||||
#define API_VAR_ALLOC_DONTFAIL(type, pool, name)
|
||||
#define API_VAR_FREE(pool, name)
|
||||
#define API_EXPR_REF(expr) expr
|
||||
#define API_EXPR_DEREF(expr) *(expr)
|
||||
#endif /* LWIP_MPU_COMPATIBLE */
|
||||
|
||||
|
||||
|
||||
/** 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() */
|
||||
|
||||
@@ -129,7 +129,13 @@ PACK_STRUCT_END
|
||||
#endif
|
||||
|
||||
#define SIZEOF_ETHARP_HDR 28
|
||||
#define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR)
|
||||
|
||||
#define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR)
|
||||
#if ETHARP_SUPPORT_VLAN && defined(LWIP_HOOK_VLAN_SET)
|
||||
#define SIZEOF_ETHARP_PACKET_TX (SIZEOF_ETHARP_PACKET + SIZEOF_VLAN_HDR)
|
||||
#else /* ETHARP_SUPPORT_VLAN && defined(LWIP_HOOK_VLAN_SET) */
|
||||
#define SIZEOF_ETHARP_PACKET_TX SIZEOF_ETHARP_PACKET
|
||||
#endif /* ETHARP_SUPPORT_VLAN && defined(LWIP_HOOK_VLAN_SET) */
|
||||
|
||||
/** 5 seconds period */
|
||||
#define ARP_TMR_INTERVAL 5000
|
||||
|
||||
Reference in New Issue
Block a user