*/
typedef uint32_t sys_thread_t;
+/* Mailbox expansion flags */
+#define MBOX_NO_EXPAND 0
+#define MBOX_AUTO_EXPAND 1
+
+/* Netconn thread semaphore */
+sys_sem_t* sys_arch_netconn_sem_get(void);
+#define LWIP_NETCONN_THREAD_SEM_GET() sys_arch_netconn_sem_get()
+
#ifdef __cplusplus
}
#endif
#define LWIP_SOCKET_SELECT_FUNC
#define LWIP_SOCKET_POLL_FUNC
+//多线程安全支持
+#define LWIP_NETCONN_SEM_PER_THREAD 1
+
// Options for old lwipopts.h
#define MEM_SIZE (512*1024) //(4*1024*1024) // (512*1024)
#define IP_FRAG_MAX_MTU 1500
}
LWIP_LOGGER(buf);
}
+
+/**
+ * Netconn thread semaphore
+ */
+static sys_sem_t netconn_sem = 0;
+
+sys_sem_t* sys_arch_netconn_sem_get(void)
+{
+ if (netconn_sem == 0) {
+ UINT32 ret = LOS_SemCreate(0, &netconn_sem);
+ if (ret != LOS_OK) {
+ return NULL;
+ }
+ }
+ return &netconn_sem;
+}
}
}
- total_size = sizeof(struct addrinfo) + sizeof(struct sockaddr_storage);
+ total_size = sizeof(struct addrinfo) + sizeof(struct sockaddr_storage) + LWIP_SOCKET_ADDR_ALIGNMENT;
if (nodename != NULL) {
namelen = strlen(nodename);
if (namelen > DNS_MAX_NAME_LENGTH) {
memset(ai, 0, total_size);
/* cast through void* to get rid of alignment warnings */
sa = (struct sockaddr_storage *)(void *)((u8_t *)ai + sizeof(struct addrinfo));
+ sa = LWIP_SOCKET_ADDR_ALIGN(sa);
if (IP_IS_V6_VAL(addr)) {
#if LWIP_IPV6
struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)sa;
sa6->sin6_port = lwip_htons((u16_t)port_nr);
sa6->sin6_scope_id = ip6_addr_zone(ip_2_ip6(&addr));
ai->ai_family = AF_INET6;
- ai->ai_addrlen = sizeof(struct sockaddr_in6);
#endif /* LWIP_IPV6 */
} else {
#if LWIP_IPV4
sa4->sin_len = sizeof(struct sockaddr_in);
sa4->sin_port = lwip_htons((u16_t)port_nr);
ai->ai_family = AF_INET;
- ai->ai_addrlen = sizeof(struct sockaddr_in);
#endif /* LWIP_IPV4 */
}
MEMCPY(ai->ai_canonname, nodename, namelen);
ai->ai_canonname[namelen] = 0;
}
+ ai->ai_addrlen = sizeof(struct sockaddr_storage);
ai->ai_addr = (struct sockaddr *)sa;
*res = ai;
#include "lwip/pbuf.h"
#include "lwip/etharp.h"
#include "netif/ethernet.h"
-#include "custom_utils.h"
#define TCPIP_MSG_VAR_REF(name) API_VAR_REF(name)
#define TCPIP_MSG_VAR_DECLARE(name) API_VAR_DECLARE(struct tcpip_msg, name)
sys_mutex_t lock_tcpip_core;
#endif /* LWIP_TCPIP_CORE_LOCKING */
-
-static app_task_definition_t taskcfg={0};
-
static void tcpip_thread_handle_msg(struct tcpip_msg *msg);
#if !LWIP_TIMERS
* @param initfunc a function to call when tcpip_thread is running and finished initializing
* @param arg argument to pass to initfunc
*/
+ #include "custom_utils.h"
+ static app_task_definition_t taskcfg={0};
void
tcpip_init(tcpip_init_done_fn initfunc, void *arg)
{
}
#if LWIP_TCP_TIMESTAMPS
pcb->ts_lastacksent = pcb->rcv_nxt;
-0
+
if (seg->flags & TF_SEG_OPTS_TS) {
tcp_build_timestamp_option(pcb, opts);
opts += 3;
};
#endif /* LWIP_DNS_API_DECLARE_STRUCTS */
-#define NETDB_ELEM_SIZE (sizeof(struct addrinfo) + sizeof(struct sockaddr_storage) + DNS_MAX_NAME_LENGTH + 1)
+#define LWIP_SOCKET_ADDR_ALIGNMENT 4
+#ifndef LWIP_SOCKET_ADDR_ALIGN
+#define LWIP_SOCKET_ADDR_ALIGN(addr) \
+ ((void *)(((uintptr_t)(addr) + LWIP_SOCKET_ADDR_ALIGNMENT - 1) & ~(uintptr_t)(LWIP_SOCKET_ADDR_ALIGNMENT - 1)))
+#endif
+
+#define NETDB_ELEM_SIZE \
+ (sizeof(struct addrinfo) + sizeof(struct sockaddr_storage) + DNS_MAX_NAME_LENGTH + LWIP_SOCKET_ADDR_ALIGNMENT + 1)
#if LWIP_DNS_API_DECLARE_H_ERRNO
/* application accessible error code set by the DNS API functions */