mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-04-16 08:43:17 +00:00
Merge branch 'master' of git.sv.gnu.org:/srv/git/lwip
This commit is contained in:
commit
52d41d19d3
@ -329,7 +329,7 @@ netconn_accept(struct netconn *conn, struct netconn **new_conn)
|
|||||||
/* Let the stack know that we have accepted the connection. */
|
/* Let the stack know that we have accepted the connection. */
|
||||||
msg.msg.conn = conn;
|
msg.msg.conn = conn;
|
||||||
/* don't care for the return value of do_recv */
|
/* don't care for the return value of do_recv */
|
||||||
TCPIP_APIMSG(&msg, do_recv, err);
|
TCPIP_APIMSG_NOERR(&msg, do_recv);
|
||||||
#endif /* TCP_LISTEN_BACKLOG */
|
#endif /* TCP_LISTEN_BACKLOG */
|
||||||
|
|
||||||
*new_conn = newconn;
|
*new_conn = newconn;
|
||||||
@ -400,7 +400,7 @@ netconn_recv_data(struct netconn *conn, void **new_buf)
|
|||||||
msg.msg.msg.r.len = 1;
|
msg.msg.msg.r.len = 1;
|
||||||
}
|
}
|
||||||
/* don't care for the return value of do_recv */
|
/* don't care for the return value of do_recv */
|
||||||
TCPIP_APIMSG(&msg, do_recv, err);
|
TCPIP_APIMSG_NOERR(&msg, do_recv);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we are closed, we indicate that we no longer wish to use the socket */
|
/* If we are closed, we indicate that we no longer wish to use the socket */
|
||||||
@ -532,14 +532,13 @@ netconn_recved(struct netconn *conn, u32_t length)
|
|||||||
if ((conn != NULL) && (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP) &&
|
if ((conn != NULL) && (NETCONNTYPE_GROUP(conn->type) == NETCONN_TCP) &&
|
||||||
(netconn_get_noautorecved(conn))) {
|
(netconn_get_noautorecved(conn))) {
|
||||||
struct api_msg msg;
|
struct api_msg msg;
|
||||||
err_t err;
|
|
||||||
/* Let the stack know that we have taken the data. */
|
/* Let the stack know that we have taken the data. */
|
||||||
/* TODO: Speedup: Don't block and wait for the answer here
|
/* TODO: Speedup: Don't block and wait for the answer here
|
||||||
(to prevent multiple thread-switches). */
|
(to prevent multiple thread-switches). */
|
||||||
msg.msg.conn = conn;
|
msg.msg.conn = conn;
|
||||||
msg.msg.msg.r.len = length;
|
msg.msg.msg.r.len = length;
|
||||||
/* don't care for the return value of do_recv */
|
/* don't care for the return value of do_recv */
|
||||||
TCPIP_APIMSG(&msg, do_recv, err);
|
TCPIP_APIMSG_NOERR(&msg, do_recv);
|
||||||
}
|
}
|
||||||
#else /* LWIP_TCP */
|
#else /* LWIP_TCP */
|
||||||
LWIP_UNUSED_ARG(conn);
|
LWIP_UNUSED_ARG(conn);
|
||||||
|
@ -395,6 +395,9 @@ ip6_input(struct pbuf *p, struct netif *inp)
|
|||||||
/* current header pointer. */
|
/* current header pointer. */
|
||||||
ip_data.current_ip6_header = ip6hdr;
|
ip_data.current_ip6_header = ip6hdr;
|
||||||
|
|
||||||
|
/* In netif, used in case we need to send ICMPv6 packets back. */
|
||||||
|
ip_data.current_netif = inp;
|
||||||
|
|
||||||
/* match packet against an interface, i.e. is this packet for us? */
|
/* match packet against an interface, i.e. is this packet for us? */
|
||||||
if (ip6_addr_ismulticast(ip6_current_dest_addr())) {
|
if (ip6_addr_ismulticast(ip6_current_dest_addr())) {
|
||||||
/* Always joined to multicast if-local and link-local all-nodes group. */
|
/* Always joined to multicast if-local and link-local all-nodes group. */
|
||||||
@ -477,7 +480,7 @@ netif_found:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* current netif pointer. */
|
/* current netif pointer. */
|
||||||
ip_data.current_netif = inp;
|
ip_data.current_netif = netif;
|
||||||
|
|
||||||
/* Save next header type. */
|
/* Save next header type. */
|
||||||
nexth = IP6H_NEXTH(ip6hdr);
|
nexth = IP6H_NEXTH(ip6hdr);
|
||||||
@ -498,7 +501,7 @@ netif_found:
|
|||||||
nexth = *((u8_t *)p->payload);
|
nexth = *((u8_t *)p->payload);
|
||||||
|
|
||||||
/* Get the header length. */
|
/* Get the header length. */
|
||||||
hlen = 8 * (1 + *((u8_t *)p->payload) + 1);
|
hlen = 8 * (1 + *((u8_t *)p->payload + 1));
|
||||||
ip_data.current_ip_header_tot_len += hlen;
|
ip_data.current_ip_header_tot_len += hlen;
|
||||||
|
|
||||||
/* Skip over this header. */
|
/* Skip over this header. */
|
||||||
@ -521,7 +524,7 @@ netif_found:
|
|||||||
nexth = *((u8_t *)p->payload);
|
nexth = *((u8_t *)p->payload);
|
||||||
|
|
||||||
/* Get the header length. */
|
/* Get the header length. */
|
||||||
hlen = 8 * (1 + *((u8_t *)p->payload) + 1);
|
hlen = 8 * (1 + *((u8_t *)p->payload + 1));
|
||||||
ip_data.current_ip_header_tot_len += hlen;
|
ip_data.current_ip_header_tot_len += hlen;
|
||||||
|
|
||||||
/* Skip over this header. */
|
/* Skip over this header. */
|
||||||
@ -544,7 +547,7 @@ netif_found:
|
|||||||
nexth = *((u8_t *)p->payload);
|
nexth = *((u8_t *)p->payload);
|
||||||
|
|
||||||
/* Get the header length. */
|
/* Get the header length. */
|
||||||
hlen = 8 * (1 + *((u8_t *)p->payload) + 1);
|
hlen = 8 * (1 + *((u8_t *)p->payload + 1));
|
||||||
ip_data.current_ip_header_tot_len += hlen;
|
ip_data.current_ip_header_tot_len += hlen;
|
||||||
|
|
||||||
/* Skip over this header. */
|
/* Skip over this header. */
|
||||||
@ -824,12 +827,24 @@ ip6_output(struct pbuf *p, ip6_addr_t *src, ip6_addr_t *dest,
|
|||||||
u8_t hl, u8_t tc, u8_t nexth)
|
u8_t hl, u8_t tc, u8_t nexth)
|
||||||
{
|
{
|
||||||
struct netif *netif;
|
struct netif *netif;
|
||||||
|
struct ip6_hdr *ip6hdr;
|
||||||
|
ip6_addr_t src_addr, dest_addr;
|
||||||
|
|
||||||
/* pbufs passed to IPv6 must have a ref-count of 1 as their payload pointer
|
/* pbufs passed to IPv6 must have a ref-count of 1 as their payload pointer
|
||||||
gets altered as the packet is passed down the stack */
|
gets altered as the packet is passed down the stack */
|
||||||
LWIP_ASSERT("p->ref == 1", p->ref == 1);
|
LWIP_ASSERT("p->ref == 1", p->ref == 1);
|
||||||
|
|
||||||
if ((netif = ip6_route(src, dest)) == NULL) {
|
if (dest != IP_HDRINCL) {
|
||||||
|
netif = ip6_route(src, dest);
|
||||||
|
} else {
|
||||||
|
/* IP header included in p, read addresses. */
|
||||||
|
ip6hdr = (struct ip6_hdr *)p->payload;
|
||||||
|
ip6_addr_copy(src_addr, ip6hdr->src);
|
||||||
|
ip6_addr_copy(dest_addr, ip6hdr->dest);
|
||||||
|
netif = ip6_route(&src_addr, &dest_addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (netif == NULL) {
|
||||||
LWIP_DEBUGF(IP6_DEBUG, ("ip6_output: no route for %"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F"\n",
|
LWIP_DEBUGF(IP6_DEBUG, ("ip6_output: no route for %"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F"\n",
|
||||||
IP6_ADDR_BLOCK1(dest),
|
IP6_ADDR_BLOCK1(dest),
|
||||||
IP6_ADDR_BLOCK2(dest),
|
IP6_ADDR_BLOCK2(dest),
|
||||||
@ -872,13 +887,25 @@ ip6_output_hinted(struct pbuf *p, ip6_addr_t *src, ip6_addr_t *dest,
|
|||||||
u8_t hl, u8_t tc, u8_t nexth, u8_t *addr_hint)
|
u8_t hl, u8_t tc, u8_t nexth, u8_t *addr_hint)
|
||||||
{
|
{
|
||||||
struct netif *netif;
|
struct netif *netif;
|
||||||
|
struct ip6_hdr *ip6hdr;
|
||||||
|
ip6_addr_t src_addr, dest_addr;
|
||||||
err_t err;
|
err_t err;
|
||||||
|
|
||||||
/* pbufs passed to IP must have a ref-count of 1 as their payload pointer
|
/* pbufs passed to IP must have a ref-count of 1 as their payload pointer
|
||||||
gets altered as the packet is passed down the stack */
|
gets altered as the packet is passed down the stack */
|
||||||
LWIP_ASSERT("p->ref == 1", p->ref == 1);
|
LWIP_ASSERT("p->ref == 1", p->ref == 1);
|
||||||
|
|
||||||
if ((netif = ip6_route(src, dest)) == NULL) {
|
if (dest != IP_HDRINCL) {
|
||||||
|
netif = ip6_route(src, dest);
|
||||||
|
} else {
|
||||||
|
/* IP header included in p, read addresses. */
|
||||||
|
ip6hdr = (struct ip6_hdr *)p->payload;
|
||||||
|
ip6_addr_copy(src_addr, ip6hdr->src);
|
||||||
|
ip6_addr_copy(dest_addr, ip6hdr->dest);
|
||||||
|
netif = ip6_route(&src_addr, &dest_addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (netif == NULL) {
|
||||||
LWIP_DEBUGF(IP6_DEBUG, ("ip6_output: no route for %"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F"\n",
|
LWIP_DEBUGF(IP6_DEBUG, ("ip6_output: no route for %"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F":%"X16_F"\n",
|
||||||
IP6_ADDR_BLOCK1(dest),
|
IP6_ADDR_BLOCK1(dest),
|
||||||
IP6_ADDR_BLOCK2(dest),
|
IP6_ADDR_BLOCK2(dest),
|
||||||
|
@ -149,8 +149,12 @@ ip6_reass_free_complete_datagram(struct ip6_reassdata *ipr)
|
|||||||
p = ipr->p;
|
p = ipr->p;
|
||||||
ipr->p = iprh->next_pbuf;
|
ipr->p = iprh->next_pbuf;
|
||||||
/* Then, move back to the original header (we are now pointing to Fragment header). */
|
/* Then, move back to the original header (we are now pointing to Fragment header). */
|
||||||
pbuf_header(p, (u8_t*)p->payload - (u8_t*)ipr->iphdr);
|
if (pbuf_header(p, (u8_t*)p->payload - (u8_t*)ipr->iphdr)) {
|
||||||
icmp6_time_exceeded(p, ICMP6_TE_FRAG);
|
LWIP_ASSERT("ip6_reass_free: moving p->payload to ip6 header failed\n", 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
icmp6_time_exceeded(p, ICMP6_TE_FRAG);
|
||||||
|
}
|
||||||
clen = pbuf_clen(p);
|
clen = pbuf_clen(p);
|
||||||
LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff);
|
LWIP_ASSERT("pbufs_freed + clen <= 0xffff", pbufs_freed + clen <= 0xffff);
|
||||||
pbufs_freed += clen;
|
pbufs_freed += clen;
|
||||||
@ -439,7 +443,7 @@ ip6_reass(struct pbuf *p)
|
|||||||
/* Final validity test: no gaps between current and last fragment. */
|
/* Final validity test: no gaps between current and last fragment. */
|
||||||
iprh_prev = iprh;
|
iprh_prev = iprh;
|
||||||
q = iprh->next_pbuf;
|
q = iprh->next_pbuf;
|
||||||
while (q != NULL) {
|
while ((q != NULL) && valid) {
|
||||||
iprh = (struct ip6_reass_helper*)q->payload;
|
iprh = (struct ip6_reass_helper*)q->payload;
|
||||||
if (iprh_prev->end != iprh->start) {
|
if (iprh_prev->end != iprh->start) {
|
||||||
valid = 0;
|
valid = 0;
|
||||||
@ -490,9 +494,6 @@ ip6_reass(struct pbuf *p)
|
|||||||
frag_hdr->_fragment_offset = 0;
|
frag_hdr->_fragment_offset = 0;
|
||||||
frag_hdr->_identification = 0;
|
frag_hdr->_identification = 0;
|
||||||
|
|
||||||
/* Move pbuf back to IPv6 header. */
|
|
||||||
pbuf_header(p, (u8_t*)p->payload - (u8_t*)ipr->iphdr);
|
|
||||||
|
|
||||||
/* release the sources allocate for the fragment queue entry */
|
/* release the sources allocate for the fragment queue entry */
|
||||||
if (reassdatagrams == ipr) {
|
if (reassdatagrams == ipr) {
|
||||||
/* it was the first in the list */
|
/* it was the first in the list */
|
||||||
@ -504,9 +505,16 @@ ip6_reass(struct pbuf *p)
|
|||||||
}
|
}
|
||||||
memp_free(MEMP_IP6_REASSDATA, ipr);
|
memp_free(MEMP_IP6_REASSDATA, ipr);
|
||||||
|
|
||||||
/* and adjust the number of pbufs currently queued for reassembly. */
|
/* adjust the number of pbufs currently queued for reassembly. */
|
||||||
ip6_reass_pbufcount -= pbuf_clen(p);
|
ip6_reass_pbufcount -= pbuf_clen(p);
|
||||||
|
|
||||||
|
/* Move pbuf back to IPv6 header. */
|
||||||
|
if (pbuf_header(p, (u8_t*)p->payload - (u8_t*)ipr->iphdr)) {
|
||||||
|
LWIP_ASSERT("ip6_reass: moving p->payload to ip6 header failed\n", 0);
|
||||||
|
pbuf_free(p);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Return the pbuf chain */
|
/* Return the pbuf chain */
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
@ -375,9 +375,7 @@ nd6_input(struct pbuf *p, struct netif *inp)
|
|||||||
|
|
||||||
/* If we are sending RS messages, stop. */
|
/* If we are sending RS messages, stop. */
|
||||||
#if LWIP_IPV6_SEND_ROUTER_SOLICIT
|
#if LWIP_IPV6_SEND_ROUTER_SOLICIT
|
||||||
if (inp->rs_count > 0) {
|
inp->rs_count = 0;
|
||||||
inp->rs_count = 0;
|
|
||||||
}
|
|
||||||
#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */
|
#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */
|
||||||
|
|
||||||
/* Get the matching default router entry. */
|
/* Get the matching default router entry. */
|
||||||
@ -885,7 +883,7 @@ nd6_send_na(struct netif * netif, ip6_addr_t * target_addr, u8_t flags)
|
|||||||
|
|
||||||
/* Set fields. */
|
/* Set fields. */
|
||||||
na_hdr = (struct na_header *)p->payload;
|
na_hdr = (struct na_header *)p->payload;
|
||||||
lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct ns_header));
|
lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct na_header));
|
||||||
|
|
||||||
na_hdr->type = ICMP6_TYPE_NA;
|
na_hdr->type = ICMP6_TYPE_NA;
|
||||||
na_hdr->code = 0;
|
na_hdr->code = 0;
|
||||||
@ -1133,6 +1131,10 @@ nd6_new_neighbor_cache_entry(void)
|
|||||||
static void
|
static void
|
||||||
nd6_free_neighbor_cache_entry(s8_t i)
|
nd6_free_neighbor_cache_entry(s8_t i)
|
||||||
{
|
{
|
||||||
|
if ((i < 0) || (i >= LWIP_ND6_NUM_NEIGHBORS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#if LWIP_ND6_QUEUEING
|
#if LWIP_ND6_QUEUEING
|
||||||
/* Free any queued packets. */
|
/* Free any queued packets. */
|
||||||
if (neighbor_cache[i].q != NULL) {
|
if (neighbor_cache[i].q != NULL) {
|
||||||
@ -1463,14 +1465,14 @@ nd6_get_next_hop_entry(ip6_addr_t * ip6addr, struct netif * netif)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Copy dest address to destination cache. */
|
/* Copy dest address to destination cache. */
|
||||||
ip6_addr_set(&(destination_cache[i].destination_addr), ip6addr);
|
ip6_addr_set(&(destination_cache[nd6_cached_destination_index].destination_addr), ip6addr);
|
||||||
|
|
||||||
/* Now find the next hop. is it a neighbor? */
|
/* Now find the next hop. is it a neighbor? */
|
||||||
if (ip6_addr_islinklocal(ip6addr) ||
|
if (ip6_addr_islinklocal(ip6addr) ||
|
||||||
nd6_is_prefix_in_netif(ip6addr, netif)) {
|
nd6_is_prefix_in_netif(ip6addr, netif)) {
|
||||||
/* Destination in local link. */
|
/* Destination in local link. */
|
||||||
destination_cache[i].pmtu = netif->mtu;
|
destination_cache[nd6_cached_destination_index].pmtu = netif->mtu;
|
||||||
ip6_addr_copy(destination_cache[i].next_hop_addr, destination_cache[nd6_cached_destination_index].destination_addr);
|
ip6_addr_copy(destination_cache[nd6_cached_destination_index].next_hop_addr, destination_cache[nd6_cached_destination_index].destination_addr);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* We need to select a router. */
|
/* We need to select a router. */
|
||||||
@ -1549,6 +1551,10 @@ nd6_queue_packet(s8_t neighbor_index, struct pbuf * q)
|
|||||||
int copy_needed = 0;
|
int copy_needed = 0;
|
||||||
struct nd6_q_entry *new_entry, *r;
|
struct nd6_q_entry *new_entry, *r;
|
||||||
|
|
||||||
|
if ((neighbor_index < 0) || (neighbor_index >= LWIP_ND6_NUM_NEIGHBORS)) {
|
||||||
|
return ERR_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
/* IF q includes a PBUF_REF, PBUF_POOL or PBUF_RAM, we have no choice but
|
/* IF q includes a PBUF_REF, PBUF_POOL or PBUF_RAM, we have no choice but
|
||||||
* to copy the whole queue into a new PBUF_RAM (see bug #11400)
|
* to copy the whole queue into a new PBUF_RAM (see bug #11400)
|
||||||
* PBUF_ROMs can be left as they are, since ROM must not get changed. */
|
* PBUF_ROMs can be left as they are, since ROM must not get changed. */
|
||||||
@ -1656,6 +1662,10 @@ nd6_send_q(s8_t i)
|
|||||||
struct ip6_hdr *ip6hdr;
|
struct ip6_hdr *ip6hdr;
|
||||||
struct nd6_q_entry *q;
|
struct nd6_q_entry *q;
|
||||||
|
|
||||||
|
if ((i < 0) || (i >= LWIP_ND6_NUM_NEIGHBORS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
while (neighbor_cache[i].q != NULL) {
|
while (neighbor_cache[i].q != NULL) {
|
||||||
/* remember first in queue */
|
/* remember first in queue */
|
||||||
q = neighbor_cache[i].q;
|
q = neighbor_cache[i].q;
|
||||||
|
@ -99,8 +99,8 @@ stats_display_igmp(struct stats_igmp *igmp, const char *name)
|
|||||||
LWIP_PLATFORM_DIAG(("memerr: %"STAT_COUNTER_F"\n\t", igmp->memerr));
|
LWIP_PLATFORM_DIAG(("memerr: %"STAT_COUNTER_F"\n\t", igmp->memerr));
|
||||||
LWIP_PLATFORM_DIAG(("proterr: %"STAT_COUNTER_F"\n\t", igmp->proterr));
|
LWIP_PLATFORM_DIAG(("proterr: %"STAT_COUNTER_F"\n\t", igmp->proterr));
|
||||||
LWIP_PLATFORM_DIAG(("rx_v1: %"STAT_COUNTER_F"\n\t", igmp->rx_v1));
|
LWIP_PLATFORM_DIAG(("rx_v1: %"STAT_COUNTER_F"\n\t", igmp->rx_v1));
|
||||||
LWIP_PLATFORM_DIAG(("rx_group: %"STAT_COUNTER_F"\n", igmp->rx_group));
|
LWIP_PLATFORM_DIAG(("rx_group: %"STAT_COUNTER_F"\n\t", igmp->rx_group));
|
||||||
LWIP_PLATFORM_DIAG(("rx_general: %"STAT_COUNTER_F"\n", igmp->rx_general));
|
LWIP_PLATFORM_DIAG(("rx_general: %"STAT_COUNTER_F"\n\t", igmp->rx_general));
|
||||||
LWIP_PLATFORM_DIAG(("rx_report: %"STAT_COUNTER_F"\n\t", igmp->rx_report));
|
LWIP_PLATFORM_DIAG(("rx_report: %"STAT_COUNTER_F"\n\t", igmp->rx_report));
|
||||||
LWIP_PLATFORM_DIAG(("tx_join: %"STAT_COUNTER_F"\n\t", igmp->tx_join));
|
LWIP_PLATFORM_DIAG(("tx_join: %"STAT_COUNTER_F"\n\t", igmp->tx_join));
|
||||||
LWIP_PLATFORM_DIAG(("tx_leave: %"STAT_COUNTER_F"\n\t", igmp->tx_leave));
|
LWIP_PLATFORM_DIAG(("tx_leave: %"STAT_COUNTER_F"\n\t", igmp->tx_leave));
|
||||||
|
@ -64,11 +64,14 @@ extern sys_mutex_t lock_tcpip_core;
|
|||||||
#else
|
#else
|
||||||
#define TCIP_APIMSG_SET_ERR(m, e)
|
#define TCIP_APIMSG_SET_ERR(m, e)
|
||||||
#endif
|
#endif
|
||||||
#define TCPIP_APIMSG(m,f,e) do { \
|
#define TCPIP_APIMSG_NOERR(m,f) do { \
|
||||||
TCIP_APIMSG_SET_ERR(m, ERR_VAL); \
|
TCIP_APIMSG_SET_ERR(m, ERR_VAL); \
|
||||||
LOCK_TCPIP_CORE(); \
|
LOCK_TCPIP_CORE(); \
|
||||||
f(&((m)->msg)); \
|
f(&((m)->msg)); \
|
||||||
UNLOCK_TCPIP_CORE(); \
|
UNLOCK_TCPIP_CORE(); \
|
||||||
|
} while(0)
|
||||||
|
#define TCPIP_APIMSG(m,f,e) do { \
|
||||||
|
TCPIP_APIMSG_NOERR(m,f); \
|
||||||
(e) = (m)->msg.err; \
|
(e) = (m)->msg.err; \
|
||||||
} while(0)
|
} while(0)
|
||||||
#define TCPIP_APIMSG_ACK(m)
|
#define TCPIP_APIMSG_ACK(m)
|
||||||
@ -77,6 +80,7 @@ extern sys_mutex_t lock_tcpip_core;
|
|||||||
#else /* LWIP_TCPIP_CORE_LOCKING */
|
#else /* LWIP_TCPIP_CORE_LOCKING */
|
||||||
#define LOCK_TCPIP_CORE()
|
#define LOCK_TCPIP_CORE()
|
||||||
#define UNLOCK_TCPIP_CORE()
|
#define UNLOCK_TCPIP_CORE()
|
||||||
|
#define TCPIP_APIMSG_NOERR(m,f) do { (m)->function = f; tcpip_apimsg(m); } while(0)
|
||||||
#define TCPIP_APIMSG(m,f,e) do { (m)->function = f; (e) = tcpip_apimsg(m); } while(0)
|
#define TCPIP_APIMSG(m,f,e) do { (m)->function = f; (e) = tcpip_apimsg(m); } while(0)
|
||||||
#define TCPIP_APIMSG_ACK(m) sys_sem_signal(&m->conn->op_completed)
|
#define TCPIP_APIMSG_ACK(m) sys_sem_signal(&m->conn->op_completed)
|
||||||
#define TCPIP_NETIFAPI(m) tcpip_netifapi(m)
|
#define TCPIP_NETIFAPI(m) tcpip_netifapi(m)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user