Project import
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..1e6129b
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,214 @@
+#
+# Copyright (c) 2012 Nest Labs, Inc.
+# All rights reserved.
+#
+# This document is the property of Nest. It is considered
+# confidential and proprietary information.
+#
+# This document may not be reproduced or transmitted in any form,
+# in whole or in part, without the express written permission of
+# Nest.
+#
+# Description:
+# This file is the make file for LwIP, a Lightweight IPv4-
+# and IPv6 TCP/IP stack.
+#
+
+BuildConfigSpecialized := Yes
+BuildProductSpecialized := Yes
+
+include pre.mak
+
+ifeq ($(BUILD_FEATURE_LWIP),1)
+
+PackageRoot := .
+
+PackageName := lwip
+
+PackageSourceDir := $(LwipSrcPath)/$(PackageName)
+
+GeneratePackagePaths = $(addprefix $(call Slashify,$(PackageSourceDir)),$(1))
+
+LicenseSourceFile := $(PackageSourceDir)/COPYING
+
+# Turn off warnings for missing protos
+CCFLAGS += $(call ToolDeassertWarningFlag,$(WarnMissingProtos))
+
+all: $(PackageDefaultGoal)
+
+# Generate the package license contents.
+
+$(LicenseSourceFile): source
+
+$(PackageLicenseFile): $(LicenseSourceFile)
+ $(copy-result)
+
+# We are building this package from version-controlled source, so
+# there is nothing to do for this target goal.
+
+$(PackageSourceDir):
+
+# Prepare the sources.
+
+.PHONY: source
+source: | $(PackageSourceDir)
+
+# Patch the sources, if necessary.
+
+.PHONY: patch
+patch: source
+
+# Configure the source for building.
+
+.PHONY: configure
+configure: source
+
+# Build the source.
+
+.PHONY: build
+build: configure
+
+.PHONY: stage stage-headers
+stage: build | $(ResultDirectory)
+stage: stage-headers
+
+lwip_API_PATHS = src/api/api_lib.c \
+ src/api/api_msg.c \
+ src/api/err.c \
+ src/api/netbuf.c \
+ src/api/netdb.c \
+ src/api/netifapi.c \
+ src/api/sockets.c \
+ src/api/tcpip.c
+
+lwip_CORE_PATHS = src/core/def.c \
+ src/core/dhcp.c \
+ src/core/dns.c \
+ src/core/inet_chksum.c \
+ src/core/init.c \
+ src/core/ipv4/autoip.c \
+ src/core/ipv4/icmp.c \
+ src/core/ipv4/igmp.c \
+ src/core/ipv4/ip4.c \
+ src/core/ipv4/ip4_addr.c \
+ src/core/ipv4/ip_frag.c \
+ src/core/ipv6/dhcp6.c \
+ src/core/ipv6/ethip6.c \
+ src/core/ipv6/icmp6.c \
+ src/core/ipv6/inet6.c \
+ src/core/ipv6/ip6.c \
+ src/core/ipv6/ip6_addr.c \
+ src/core/ipv6/ip6_frag.c \
+ src/core/ipv6/ip6_route_table.c \
+ src/core/ipv6/mld6.c \
+ src/core/ipv6/nd6.c \
+ src/core/mem.c \
+ src/core/memp.c \
+ src/core/netif.c \
+ src/core/pbuf.c \
+ src/core/raw.c \
+ src/core/stats.c \
+ src/core/sys.c \
+ src/core/tcp.c \
+ src/core/tcp_in.c \
+ src/core/tcp_out.c \
+ src/core/timers.c \
+ src/core/udp.c
+
+lwip_NETIF_PATHS = src/netif/etharp.c
+
+lwip_SOURCE_PATHS = $(lwip_API_PATHS) \
+ $(lwip_CORE_PATHS) \
+ $(lwip_NETIF_PATHS)
+
+lwip_INCLUDE_DIRS = src/include \
+ src/include/ipv4 \
+ src/include/ipv6
+
+lwip_INCLUDE_PATHS = $(call GeneratePackagePaths,$(lwip_INCLUDE_DIRS))
+
+lwip_PACKAGE_SOURCE_PATHS = $(call GeneratePackagePaths,$(lwip_SOURCE_PATHS))
+
+# Tell make where to search for the sources, cleaning up the leading
+# ./ strictly for cosmetic display purposes in the process.
+
+VPATH = $(subst ./,,$(dir $(lwip_PACKAGE_SOURCE_PATHS)))
+
+
+ARCHIVES = lwip
+
+lwip_SOURCES = $(notdir $(lwip_PACKAGE_SOURCE_PATHS))
+
+ifdef BUILD_FEATURE_WEAVE_TEST
+lwip_INCLUDES = $(lwip_INCLUDE_PATHS) \
+ os/freertos \
+ $(NlERIncludePaths) \
+ products \
+ products/$(BuildProduct)
+else
+lwip_INCLUDES = $(lwip_INCLUDE_PATHS) \
+ os/$(TargetOS) \
+ $(NlERIncludePaths) \
+ products \
+ products/$(BuildProduct)
+endif
+
+lwip_CPPFLAGS = -Wno-error=implicit-function-declaration \
+ -Wno-error=strict-prototypes \
+
+-include ./products/$(BuildProduct)/lwip.mak
+
+LwIPHeaderSourcePaths = $(wildcard $(addsuffix /*/*.h,$(lwip_INCLUDE_PATHS)))
+LwIPHeaderSourceStems = $(subst $(PackageSourceDir)/src/include,,$(LwIPHeaderSourcePaths))
+LwIPHeaderSourcePattern = $(call GeneratePackagePaths,src/include/%)
+LwIPHeaderResultPaths = $(call GenerateResultPaths,,$(LwIPHeaderSourceStems))
+LwIPHeaderResultPattern = $(call GenerateResultPaths,,%)
+
+LwIPOptionHeaderName = lwipopts.h
+LwIPPoolHeaderName = lwippools.h
+LwIPOptionHeaderStems = $(LwIPOptionHeaderName) $(LwIPPoolHeaderName) common/$(LwIPOptionHeaderName) $(BuildProduct)/$(LwIPOptionHeaderName)
+LwIPOptionHeaderSourceDirectory = products
+LwIPOptionHeaderSourcePaths = $(addprefix $(call Slashify,$(LwIPOptionHeaderSourceDirectory)),$(LwIPOptionHeaderStems))
+LwIPOptionHeaderResultDirectory = $(ResultDirectory)
+LwIPOptionHeaderResultPaths = $(call GenerateResultPaths,,$(LwIPOptionHeaderStems))
+
+LwIPArchHeaderNames = cc.h perf.h sys_arch.h
+ifdef BUILD_FEATURE_WEAVE_TEST
+LwIPArchHeaderSourcePaths = $(addprefix os/freertos/arch/,$(LwIPArchHeaderNames))
+LwIPArchHeaderSourceStems = $(subst os/freertos/,,$(LwIPArchHeaderSourcePaths))
+LwIPArchHeaderSourcePattern = os/freertos/%
+else
+LwIPArchHeaderSourcePaths = $(addprefix os/$(TargetOS)/arch/,$(LwIPArchHeaderNames))
+LwIPArchHeaderSourceStems = $(subst os/$(TargetOS)/,,$(LwIPArchHeaderSourcePaths))
+LwIPArchHeaderSourcePattern = os/$(TargetOS)/%
+endif
+LwIPArchHeaderResultPaths = $(call GenerateResultPaths,,$(LwIPArchHeaderSourceStems))
+LwIPArchHeaderResultPattern = $(call GenerateResultPaths,,%)
+
+ResultPaths += $(LwIPHeaderResultPaths) \
+ $(LwIPOptionHeaderResultPaths) \
+ $(LwIPArchHeaderResultPaths)
+
+stage-headers: $(LwIPHeaderResultPaths) $(LwIPOptionHeaderResultPaths) $(LwIPArchHeaderResultPaths)
+
+prepare: stage-headers
+
+$(LwIPHeaderResultPaths): $(LwIPHeaderResultPattern): $(LwIPHeaderSourcePattern)
+ $(install-result)
+
+$(LwIPOptionHeaderResultPaths): $(LwIPOptionHeaderResultDirectory)/%: $(LwIPOptionHeaderSourceDirectory)/% | $(LwIPOptionHeaderResultDirectory)
+ $(install-result)
+
+$(LwIPArchHeaderResultPaths): $(LwIPArchHeaderResultPattern): $(LwIPArchHeaderSourcePattern)
+ $(install-result)
+
+endif #ifeq ($(BUILD_FEATURE_LWIP),1)
+
+# While the LwIP library uses the nlbuild build system because it has no
+# make- compatible build system of its own, it is still third-party
+# software and we do not want to enforce style semantics on it.
+# Consequently, set PrettyPaths to empty.
+
+PrettyPaths := $(NULL)
+
+include post.mak
diff --git a/lwip.url b/lwip.url
new file mode 100644
index 0000000..979c7ee
--- /dev/null
+++ b/lwip.url
@@ -0,0 +1 @@
+git://git.sv.gnu.org/lwip.git
diff --git a/lwip.version b/lwip.version
new file mode 100644
index 0000000..4ea59fb
--- /dev/null
+++ b/lwip.version
@@ -0,0 +1 @@
+a4a41b9023ef5b3a7c4a1cd82fb167fc63e706df
diff --git a/os/darwin/arch/cc.h b/os/darwin/arch/cc.h
new file mode 100644
index 0000000..3a80e53
--- /dev/null
+++ b/os/darwin/arch/cc.h
@@ -0,0 +1,85 @@
+/*
+ *
+ * Copyright (c) 2012-2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ * Description:
+ * This file defines processor-architecture- and toolchain-
+ * specific constants and types required for building
+ * LwIP against DARWIN.
+ *
+ */
+
+#ifndef NL_LWIP_DARWIN_ARCH_CC_H
+#define NL_LWIP_DARWIN_ARCH_CC_H
+
+#include <errno.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#include <sys/time.h>
+#include <sys/types.h>
+
+typedef int8_t s8_t;
+typedef uint8_t u8_t;
+typedef int16_t s16_t;
+typedef uint16_t u16_t;
+typedef int32_t s32_t;
+typedef uint32_t u32_t;
+
+typedef ptrdiff_t mem_ptr_t;
+
+typedef u32_t sys_prot_t;
+
+#ifndef LWIP_NOASSERT
+#define LWIP_PLATFORM_ASSERT(message) do { puts(message); } while (0)
+#else
+#define LWIP_PLATFORM_ASSERT(message)
+#endif
+
+/* Darwin defines BYTE_ORDER to definitions that should be identical
+ * to those LwIP has defined for LITTLE_ENDIAN and BIG_ENDIAN. Ensure
+ * that's the case.
+ */
+#if !defined(BYTE_ORDER)
+# if defined(__LITTLE_ENDIAN__)
+# define BYTE_ORDER LITTLE_ENDIAN
+# elif defined(__BIG_ENDIAN__)
+# define BYTE_ORDER BIG_ENDIAN
+# endif
+#else
+# if defined(__LITTLE_ENDIAN__) && (BYTE_ORDER != LITTLE_ENDIAN)
+# error "Darwin's BYTE_ORDER is inconsistent with LwIP's LITTLE_ENDIAN."
+# elif defined(__BIG_ENDIAN__) && (BYTE_ORDER != BIG_ENDIAN)
+# error "Darwin's BYTE_ORDER is inconsistent with LwIP's BIG_ENDIAN."
+# endif
+#endif
+
+/* LwIP Debug Output Formatting and Function Calls */
+
+#define U16_F "hu"
+#define S16_F "hd"
+#define X16_F "hx"
+#define U32_F "u"
+#define S32_F "d"
+#define X32_F "x"
+#define SZT_F "zu"
+
+#define PACK_STRUCT_STRUCT __attribute__ ((__packed__))
+#define PACK_STRUCT_FIELD(x) x
+
+#define LWIP_PLATFORM_DIAG(x) \
+ do { \
+ printf x; \
+ } while (0)
+
+#endif /* NL_LWIP_DARWIN_ARCH_CC_H */
diff --git a/os/darwin/arch/perf.h b/os/darwin/arch/perf.h
new file mode 100644
index 0000000..9d6011d
--- /dev/null
+++ b/os/darwin/arch/perf.h
@@ -0,0 +1,26 @@
+/*
+ *
+ * Copyright (c) 2012-2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ * Description:
+ * This file defines processor-architecture-specific constants,
+ * interfaces and types required for LwIP performance
+ * measurement.
+ *
+ */
+
+#ifndef NL_LWIP_DARWIN_ARCH_PERF_H
+#define NL_LWIP_DARWIN_ARCH_PERF_H
+
+#define PERF_START
+#define PERF_STOP(s)
+
+#endif /* NL_LWIP_DARWIN_ARCH_PERF_H */
diff --git a/os/darwin/arch/sys_arch.h b/os/darwin/arch/sys_arch.h
new file mode 100644
index 0000000..c268a5b
--- /dev/null
+++ b/os/darwin/arch/sys_arch.h
@@ -0,0 +1,41 @@
+/*
+ *
+ * Copyright (c) 2012-2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ * Description:
+ * This file defines processor-architecture- and operating
+ * system- specific constants and types required for building
+ * LwIP against DARWIN.
+ *
+ */
+
+#ifndef NL_LWIP_DARWIN_ARCH_SYS_ARCH_H
+#define NL_LWIP_DARWIN_ARCH_SYS_ARCH_H
+
+/* Preprocessor Macros */
+
+#define SYS_MBOX_NULL NULL
+#define SYS_SEM_NULL NULL
+
+/* Forward Declarations */
+
+struct sys_mbox;
+struct sys_sem;
+struct sys_thread;
+
+/* Type Definitions */
+
+typedef struct sys_mbox *sys_mbox_t;
+typedef struct sys_sem *sys_sem_t;
+typedef struct sys_thread *sys_thread_t;
+
+
+#endif /* NL_LWIP_DARWIN_ARCH_SYS_ARCH_H */
diff --git a/os/freertos/arch/cc.h b/os/freertos/arch/cc.h
new file mode 100644
index 0000000..4c78b15
--- /dev/null
+++ b/os/freertos/arch/cc.h
@@ -0,0 +1,76 @@
+/*
+ *
+ * Copyright (c) 2012 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ * Description:
+ * This file defines processor-architecture- and toolchain-
+ * specific constants and types required for building
+ * LwIP against FreeRTOS.
+ *
+ */
+
+#ifndef NL_LWIP_FREERTOS_ARCH_CC_H
+#define NL_LWIP_FREERTOS_ARCH_CC_H
+
+#include <errno.h>
+#include <malloc.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#include <sys/time.h>
+
+typedef int8_t s8_t;
+typedef uint8_t u8_t;
+typedef int16_t s16_t;
+typedef uint16_t u16_t;
+typedef int32_t s32_t;
+typedef uint32_t u32_t;
+
+typedef ptrdiff_t mem_ptr_t;
+
+typedef int sys_prot_t;
+
+#ifndef LWIP_NOASSERT
+#define LWIP_PLATFORM_ASSERT(message) do { puts(message); } while (0)
+#else
+#define LWIP_PLATFORM_ASSERT(message)
+#endif
+
+#ifndef BYTE_ORDER
+#if defined(__LITTLE_ENDIAN__)
+#define BYTE_ORDER LITTLE_ENDIAN
+#elif defined(__BIG_ENDIAN__)
+#define BYTE_ORDER BIG_ENDIAN
+#elif defined(__BYTE_ORDER__)
+#define BYTE_ORDER __BYTE_ORDER__
+#endif
+#endif
+
+/* LwIP Debug Output Formatting and Function Calls */
+
+#define U16_F "u"
+#define S16_F "d"
+#define X16_F "x"
+#define U32_F "lu"
+#define S32_F "ld"
+#define X32_F "lx"
+#define SZT_F "u"
+
+#define PACK_STRUCT_STRUCT __attribute__ ((__packed__))
+#define PACK_STRUCT_FIELD(x) x
+
+#define LWIP_PLATFORM_DIAG(x) \
+ do { \
+ printf x; \
+ } while (0)
+
+#endif /* NL_LWIP_FREERTOS_ARCH_CC_H */
diff --git a/os/freertos/arch/perf.h b/os/freertos/arch/perf.h
new file mode 100644
index 0000000..e781d1e
--- /dev/null
+++ b/os/freertos/arch/perf.h
@@ -0,0 +1,31 @@
+/*
+ *
+ * Copyright (c) 2012 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ * Description:
+ * This file defines processor-architecture-specific constants,
+ * interfaces and types required for LwIP performance
+ * measurement.
+ *
+ */
+
+#ifndef NL_LWIP_FREERTOS_ARCH_PERF_H
+#define NL_LWIP_FREERTOS_ARCH_PERF_H
+
+#define PERF_START
+#define PERF_STOP(s)
+
+#define sys_profile_interval_set_pbuf_highwatermark(x,y)
+#define sys_profile_pbuf_allocate(pbuf)
+#define sys_profile_pbuf_free(pbuf)
+#define sys_profile_pbuf_transfer(x, y)
+
+#endif /* NL_LWIP_FREERTOS_ARCH_PERF_H */
diff --git a/os/freertos/arch/sys_arch.h b/os/freertos/arch/sys_arch.h
new file mode 100644
index 0000000..8b5b3f8
--- /dev/null
+++ b/os/freertos/arch/sys_arch.h
@@ -0,0 +1,33 @@
+/*
+ *
+ * Copyright (c) 2012 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ * Description:
+ * This file defines processor-architecture- and operating
+ * system- specific constants and types required for building
+ * LwIP against FreeRTOS.
+ *
+ */
+
+#ifndef NL_LWIP_FREERTOS_ARCH_SYS_ARCH_H
+#define NL_LWIP_FREERTOS_ARCH_SYS_ARCH_H
+
+#include "FreeRTOS.h"
+#include "queue.h"
+#include "semphr.h"
+#include "task.h"
+
+typedef xQueueHandle sys_mbox_t;
+typedef xSemaphoreHandle sys_mutex_t;
+typedef xSemaphoreHandle sys_sem_t;
+typedef xTaskHandle sys_thread_t;
+
+#endif /* NL_LWIP_FREERTOS_ARCH_SYS_ARCH_H */
diff --git a/os/linux/arch/cc.h b/os/linux/arch/cc.h
new file mode 100644
index 0000000..562b386
--- /dev/null
+++ b/os/linux/arch/cc.h
@@ -0,0 +1,76 @@
+/*
+ *
+ * Copyright (c) 2012-2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ * Description:
+ * This file defines processor-architecture- and toolchain-
+ * specific constants and types required for building
+ * LwIP against Linux.
+ *
+ */
+
+#ifndef NL_LWIP_LINUX_ARCH_CC_H
+#define NL_LWIP_LINUX_ARCH_CC_H
+
+#include <errno.h>
+#include <malloc.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#include <sys/time.h>
+
+typedef int8_t s8_t;
+typedef uint8_t u8_t;
+typedef int16_t s16_t;
+typedef uint16_t u16_t;
+typedef int32_t s32_t;
+typedef uint32_t u32_t;
+
+typedef ptrdiff_t mem_ptr_t;
+
+typedef u32_t sys_prot_t;
+
+#ifndef LWIP_NOASSERT
+#define LWIP_PLATFORM_ASSERT(message) do { puts(message); } while (0)
+#else
+#define LWIP_PLATFORM_ASSERT(message)
+#endif
+
+#ifndef BYTE_ORDER
+#if defined(__LITTLE_ENDIAN__) || defined(__ORDER_LITTLE_ENDIAN__)
+#define BYTE_ORDER LITTLE_ENDIAN
+#elif defined(__BIG_ENDIAN__) || defined (__ORDER_BIG_ENDIAN__)
+#define BYTE_ORDER BIG_ENDIAN
+#elif defined(__BYTE_ORDER__)
+#define BYTE_ORDER __BYTE_ORDER__
+#endif
+#endif
+
+/* LwIP Debug Output Formatting and Function Calls */
+
+#define U16_F "hu"
+#define S16_F "hd"
+#define X16_F "hx"
+#define U32_F "u"
+#define S32_F "d"
+#define X32_F "x"
+#define SZT_F "zu"
+
+#define PACK_STRUCT_STRUCT __attribute__ ((__packed__))
+#define PACK_STRUCT_FIELD(x) x
+
+#define LWIP_PLATFORM_DIAG(x) \
+ do { \
+ printf x; \
+ } while (0)
+
+#endif /* NL_LWIP_LINUX_ARCH_CC_H */
diff --git a/os/linux/arch/perf.h b/os/linux/arch/perf.h
new file mode 100644
index 0000000..606bf64
--- /dev/null
+++ b/os/linux/arch/perf.h
@@ -0,0 +1,28 @@
+/*
+ *
+ * Copyright (c) 2012-2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ * Description:
+ * This file defines processor-architecture-specific constants,
+ * interfaces and types required for LwIP performance
+ * measurement.
+ *
+ */
+
+#ifndef NL_LWIP_LINUX_ARCH_PERF_H
+#define NL_LWIP_LINUX_ARCH_PERF_H
+
+#define PERF_START
+#define PERF_STOP(s)
+
+#define sys_profile_interval_set_pbuf_highwatermark(x,y)
+
+#endif /* NL_LWIP_LINUX_ARCH_PERF_H */
diff --git a/os/linux/arch/sys_arch.h b/os/linux/arch/sys_arch.h
new file mode 100644
index 0000000..fe27495
--- /dev/null
+++ b/os/linux/arch/sys_arch.h
@@ -0,0 +1,41 @@
+/*
+ *
+ * Copyright (c) 2012-2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ * Description:
+ * This file defines processor-architecture- and operating
+ * system- specific constants and types required for building
+ * LwIP against Linux.
+ *
+ */
+
+#ifndef NL_LWIP_LINUX_ARCH_SYS_ARCH_H
+#define NL_LWIP_LINUX_ARCH_SYS_ARCH_H
+
+/* Preprocessor Macros */
+
+#define SYS_MBOX_NULL NULL
+#define SYS_SEM_NULL NULL
+
+/* Forward Declarations */
+
+struct sys_mbox;
+struct sys_sem;
+struct sys_thread;
+
+/* Type Definitions */
+
+typedef struct sys_mbox *sys_mbox_t;
+typedef struct sys_sem *sys_sem_t;
+typedef struct sys_thread *sys_thread_t;
+
+
+#endif /* NL_LWIP_LINUX_ARCH_SYS_ARCH_H */
diff --git a/products/antigua/lwip.mak b/products/antigua/lwip.mak
new file mode 100644
index 0000000..87a7ec1
--- /dev/null
+++ b/products/antigua/lwip.mak
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2012 Nest Labs, Inc.
+# All rights reserved.
+#
+# This document is the property of Nest. It is considered
+# confidential and proprietary information.
+#
+# This document may not be reproduced or transmitted in any form,
+# in whole or in part, without the express written permission of
+# Nest.
+#
+# Description:
+# This file adds product-specific header search paths to LwIP.
+#
+
+lwip_INCLUDES += $(FreeRTOSConfigDir) \
+ $(FreeRTOSIncludePaths) \
+ $(NewLibCIncludePaths) \
+ $(WicedIncludePaths)
+
diff --git a/products/antigua/lwipopts.h b/products/antigua/lwipopts.h
new file mode 100644
index 0000000..034dae3
--- /dev/null
+++ b/products/antigua/lwipopts.h
@@ -0,0 +1,326 @@
+/*
+ *
+ * Copyright (c) 2012-2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * Description:
+ * This file describes compile-time constants used for
+ * configuring LwIP.
+ *
+ */
+
+/*
+ * Copyright 2012, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Broadcom Corporation.
+ */
+
+/*
+ * Copyright (c) 2001-2003 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 __ANTIGUA_LWIPOPTS_H__
+#define __ANTIGUA_LWIPOPTS_H__
+
+#include <stdlib.h>
+
+#include <network/wwd_network_constants.h>
+
+#include "common/lwipopts.h"
+#include "nlertaskpriority.h"
+
+#ifdef CUSTOM_LWIPOPTS
+#include "custom_lwipopts.h"
+#else /* ifdef CUSTOM_LWIPOPTS */
+
+/**
+ * MEM_ALIGNMENT: should be set to the alignment of the CPU
+ * 4 byte alignment -> #define MEM_ALIGNMENT 4
+ * 2 byte alignment -> #define MEM_ALIGNMENT 2
+ */
+#define MEM_ALIGNMENT (4)
+
+/**
+ * MEMP_NUM_NETBUF: the number of struct netbufs.
+ * (only needed if you use the sequential API, like api_lib.c)
+ */
+#define MEMP_NUM_NETBUF (PBUF_POOL_SIZE_LARGE)
+
+
+/**
+ * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments.
+ * (requires the LWIP_TCP option)
+ */
+#define MEMP_NUM_TCP_SEG (TCP_SND_QUEUELEN+1)
+
+/**
+ * MEMP_SEPARATE_POOLS: if defined to 1, each pool is placed in its own array.
+ * This can be used to individually change the location of each pool.
+ * Default is one big array for all pools
+ *
+ * Nest has enabled this flag to support pbuf allocation tracking.
+ */
+#define MEMP_SEPARATE_POOLS (1)
+
+/**
+ * LWIP_PBUF_FROM_CUSTOM_POOLS: Declare a set of custom mempools immediately following
+ * MEMP_PBUF_POOL. When allocating a pbuf, scan the custom pbuf pools and find the
+ * smallest free pbuf that will hold the requested payload and allocate from that pool.
+ * When using, set PBUF_POOL_SIZE and PBUF_POOL_BUFSIZE to 0 - they are not used.
+ */
+#define LWIP_PBUF_FROM_CUSTOM_POOLS (1)
+
+/**
+ * Include custom mempools from lwippools.h. Required for use with
+ * LWIP_PBUF_FROM_CUSTOM_POOLS
+ */
+#define MEMP_USE_CUSTOM_POOLS (1)
+
+/**
+ * PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
+ *
+ * This is just a default designed to be overriden by the FreeRTOS.mk makefile
+ * To perform this override, define the makefile variable LWIP_NUM_PACKET_BUFFERS_IN_POOL
+ */
+#ifndef PBUF_POOL_SIZE
+#define PBUF_POOL_SIZE (0)
+#endif
+
+//TODO: ANT-220: Adjust pbuf pool sizes
+/**
+ * PBUF_POOL_SIZE_LARGE: the number of buffers in the pool for large sized pbufs
+ */
+#define PBUF_POOL_SIZE_LARGE (10)
+
+/**
+ * PBUF_POOL_SIZE_MEDIUM: the number of buffers in the pool for medium sized pbufs
+ */
+#define PBUF_POOL_SIZE_MEDIUM (4)
+
+/**
+ * PBUF_POOL_SIZE_SMALL: the number of buffers in the pool for small sized pbufs
+ */
+#define PBUF_POOL_SIZE_SMALL (8)
+
+/*
+ * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled.
+ * Since the received pbufs are enqueued, be sure to configure
+ * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive
+ * packets even if the maximum amount of fragments is enqueued for reassembly!
+ *
+ */
+#if PBUF_POOL_SIZE_LARGE > 2
+#ifndef IP_REASS_MAX_PBUFS
+#define IP_REASS_MAX_PBUFS (PBUF_POOL_SIZE_LARGE - 2)
+#endif
+#else
+#define IP_REASS_MAX_PBUFS 0
+#define IP_REASSEMBLY 0
+#endif
+
+/**
+ * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for
+ * reassembly (whole packets, not fragments!)
+ */
+#if IP_REASS_MAX_PBUFS > 1
+#ifndef MEMP_NUM_REASSDATA
+#define MEMP_NUM_REASSDATA (IP_REASS_MAX_PBUFS - 1)
+#endif
+#else
+#define MEMP_NUM_REASSDATA 0
+#endif
+
+/**
+ * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is
+ * designed to accomodate single full size TCP frame in one pbuf, including
+ * TCP_MSS, IP header, and link header.
+ */
+// Make a bigger pbuf, wifi passthru wants a 0x624
+#define PBUF_SIZE 0x640
+//#define PBUF_POOL_BUFSIZE (LWIP_MEM_ALIGN_SIZE(WICED_LINK_MTU) + LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + 1)
+#define PBUF_POOL_BUFSIZE (LWIP_MEM_ALIGN_SIZE(PBUF_SIZE) + LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + 1)
+
+//TODO: ANT-220: Adjust pbuf pool sizes
+/**
+ * PBUF_POOL_BUFSIZE_LARGE: the size of each pbuf in the pool for large pbufs
+ */
+#define PBUF_POOL_BUFSIZE_LARGE (PBUF_POOL_BUFSIZE)
+
+/**
+ * PBUF_POOL_BUFSIZE_MEDIUM: the size of each pbuf in the pool for medium pbufs
+ */
+#define PBUF_POOL_BUFSIZE_MEDIUM (640)
+
+/**
+ * PBUF_POOL_BUFSIZE_MEDIUM: the size of each pbuf in the pool for small pbufs
+ */
+#define PBUF_POOL_BUFSIZE_SMALL (256)
+
+/**
+ * PBUF_CUSTOM_POOL_IDX_START: the pbuf pool index at which we start scanning when
+ * searching variable sized pbuf pools for one we can use. Scanning begins at
+ * PBUF_CUSTOM_POOL_IDX_START and stops when we reach PBUF_VARIABLE_POOL_END. Pools should be
+ * placed in descending order by size, immediately following the MEMP_PBUF_POOL.
+ *
+ * ie,
+ * MEMP_PBUF_POOL <---- default pool of pbufs, defined to be zero size
+ * CUSTOM_PBUF_POOL_0 <---- pool containing largest pbufs
+ * CUSTOM_PBUF_POOL_1 <---- pool containing second largest pbufs
+ * ...
+ * CUSTOM_PBUF_POOL_N-1 <---- pool containing second smallest pbufs
+ * CUSTOM_PBUF_POOL_N <---- pool containing smallest pbufs.
+ *
+ * PBUF_CUSTOM_POOL_IDX_START would be defined to CUSTOM_PBUF_POOL_N
+ * PBUF_CUSTOM_POOL_IDX_END would be defined to CUSTOM_PBUF_POOL_0
+ */
+#define PBUF_CUSTOM_POOL_IDX_START (MEMP_PBUF_POOL_SMALL)
+#define PBUF_CUSTOM_POOL_IDX_END (MEMP_PBUF_POOL_LARGE)
+
+/**
+ * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
+ * per active UDP "connection".
+ * (requires the LWIP_UDP option)
+ * LWIP_DHCP and LWIP_DNS are used by LWIP, and the 6 are used by UDP endpoints in InetLayer.
+ *
+ * See #INET_CONFIG_NUM_UDP_ENDPOINTS for InetLayer configuration.
+ */
+#ifdef MEMP_NUM_UDP_PCB
+#undef MEMP_NUM_UDP_PCB
+#define MEMP_NUM_UDP_PCB (6 + (LWIP_DHCP) + (LWIP_DNS))
+#endif
+
+/**
+ * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default,
+ * you might want to increase this.)
+ * For the receive side, this MSS is advertised to the remote side
+ * when opening a connection. For the transmit size, this MSS sets
+ * an upper limit on the MSS advertised by the remote host.
+ */
+/* *** IMPORTANT ***
+ *
+ * DO NOT increase this beyond the point at which a TCP segement will fit within a single PBUF, otherwise
+ * the code in the WICED netif output function (host_hardware_output() in wiced-network.cpp) will fail.
+ *
+ * The limit is effectively WICED_LINK_MTU - (WICED_LINK_OVERHEAD_BELOW_ETHERNET_FRAME + WICED_ETHERNET_SIZE + 60)
+ */
+#define TCP_MSS (1152)
+
+
+/**
+ * TCP_SND_BUF: TCP sender buffer space (bytes).
+ * must be at least as much as (2 * TCP_MSS) for things to work smoothly
+ */
+#define TCP_SND_BUF (6 * TCP_MSS)
+
+/**
+ * ETH_PAD_SIZE: the header space required preceeding the of each pbuf in the pbuf pool. The default is
+ * designed to accomodate single full size TCP frame in one pbuf, including
+ * TCP_MSS, IP header, and link header.
+ *
+ * This is zero since the role has been taken over by SUB_ETHERNET_HEADER_SPACE as ETH_PAD_SIZE was not always obeyed
+ */
+#define ETH_PAD_SIZE (0)
+
+#define SUB_ETHERNET_HEADER_SPACE (WICED_LINK_OVERHEAD_BELOW_ETHERNET_FRAME)
+
+
+/**
+ * PBUF_LINK_HLEN: the number of bytes that should be allocated for a
+ * link level header. The default is 14, the standard value for
+ * Ethernet.
+ */
+#define PBUF_LINK_HLEN (WICED_PHYSICAL_HEADER)
+
+
+/**
+ * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread.
+ * The stack size value itself is platform-dependent, but is passed to
+ * sys_thread_new() when the thread is created.
+ */
+#define TCPIP_THREAD_STACKSIZE (1300)
+
+
+/**
+ * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread.
+ * The priority value itself is platform-dependent, but is passed to
+ * sys_thread_new() when the thread is created.
+ * Note: If this task priority is modified, please update the comment in nlenvironment-common.h
+ */
+#define TCPIP_THREAD_PRIO ((NLER_TASK_PRIORITY_HIGHEST)-4) //5
+
+#define TCP_LISTEN_BACKLOG (1)
+
+
+/**
+ * The WICED definition of PBUF_POOL_BUFSIZE includes a number of
+ * sizeof() instantiations which causes the C preprocessor to
+ * fail. Disable TCP configuration constant sanity checks to work
+ * around this.
+ */
+#define LWIP_DISABLE_TCP_SANITY_CHECKS (1)
+
+/**
+ * The maximum of all used hardware address lengths across all types
+ * of interfaces in use:
+ *
+ * - 802.11 : 6
+ * - 802.15.4 : 8
+ */
+#define NETIF_MAX_HWADDR_LEN 8U
+
+#define LWIP_NOASSERT 1
+
+/**
+ * LWIP_IPV6_FORWARD==1: Forward IPv6 packets across netifs
+ */
+#define LWIP_IPV6_FORWARD 1
+
+#endif /* ifdef CUSTOM_LWIPOPTS */
+
+/*
+ * LWIP_IPV6_FORWARD==1: Enable IPv6 forwarding.
+ */
+#ifndef LWIP_IPV6_FORWARD
+#define LWIP_IPV6_FORWARD 1
+#endif
+
+/**
+ * LWIP_IPV6_ROUTE_TABLE_SUPPORT==1: Enable support for a static routing table and refering
+ * these during forwarding.
+ */
+#ifndef LWIP_IPV6_ROUTE_TABLE_SUPPORT
+#define LWIP_IPV6_ROUTE_TABLE_SUPPORT 1
+#endif
+
+#endif /* __ANTIGUA_LWIPOPTS_H__ */
diff --git a/products/antiguasim/lwip.mak b/products/antiguasim/lwip.mak
new file mode 100644
index 0000000..f6ecd78
--- /dev/null
+++ b/products/antiguasim/lwip.mak
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2017 Nest Labs, Inc.
+# All rights reserved.
+#
+# This document is the property of Nest. It is considered
+# confidential and proprietary information.
+#
+# This document may not be reproduced or transmitted in any form,
+# in whole or in part, without the express written permission of
+# Nest.
+#
+# Description:
+# This file adds product-specific header search paths to LwIP.
+#
+
+lwip_INCLUDES += $(FreeRTOSConfigDir) \
+ $(FreeRTOSIncludePaths) \
+ $(NewLibCIncludeDir)
+
diff --git a/products/antiguasim/lwipopts.h b/products/antiguasim/lwipopts.h
new file mode 100644
index 0000000..5cdb1f5
--- /dev/null
+++ b/products/antiguasim/lwipopts.h
@@ -0,0 +1,224 @@
+/*
+ *
+ * Copyright (c) 2012-2017 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ */
+
+/**
+ * @file
+ * This file describes compile-time constants used for
+ * configuring LwIP.
+ *
+ */
+
+/*
+ * Copyright 2012, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Broadcom Corporation.
+ */
+
+/*
+ * Copyright (c) 2001-2003 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 __ANTIGUASIM_LWIPOPTS_H__
+#define __ANTIGUASIM_LWIPOPTS_H__
+
+#include <stdlib.h>
+
+#include "common/lwipopts.h"
+#include "nlertaskpriority.h"
+
+#ifdef CUSTOM_LWIPOPTS
+#include "custom_lwipopts.h"
+#else /* ifdef CUSTOM_LWIPOPTS */
+
+
+/**
+ * MEM_ALIGNMENT: should be set to the alignment of the CPU
+ * 4 byte alignment -> #define MEM_ALIGNMENT 4
+ * 2 byte alignment -> #define MEM_ALIGNMENT 2
+ */
+#define MEM_ALIGNMENT (4)
+
+/**
+ * MEMP_NUM_NETBUF: the number of struct netbufs.
+ * (only needed if you use the sequential API, like api_lib.c)
+ */
+#define MEMP_NUM_NETBUF (PBUF_POOL_SIZE)
+
+
+/**
+ * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments.
+ * (requires the LWIP_TCP option)
+ */
+#define MEMP_NUM_TCP_SEG (TCP_SND_QUEUELEN+1)
+
+/**
+ * PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
+ *
+ * This is just a default designed to be overriden by the FreeRTOS.mk makefile
+ * To perform this override, define the makefile variable LWIP_NUM_PACKET_BUFFERS_IN_POOL
+ */
+#ifndef PBUF_POOL_SIZE
+#define PBUF_POOL_SIZE (12)
+#endif
+
+/*
+ * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled.
+ * Since the received pbufs are enqueued, be sure to configure
+ * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive
+ * packets even if the maximum amount of fragments is enqueued for reassembly!
+ *
+ */
+#if PBUF_POOL_SIZE > 2
+#ifndef IP_REASS_MAX_PBUFS
+#define IP_REASS_MAX_PBUFS (PBUF_POOL_SIZE - 2)
+#endif
+#else
+#define IP_REASS_MAX_PBUFS 0
+#define IP_REASSEMBLY 0
+#endif
+
+/**
+ * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for
+ * reassembly (whole packets, not fragments!)
+ */
+#if IP_REASS_MAX_PBUFS > 1
+#ifndef MEMP_NUM_REASSDATA
+#define MEMP_NUM_REASSDATA (IP_REASS_MAX_PBUFS - 1)
+#endif
+#else
+#define MEMP_NUM_REASSDATA 0
+#endif
+
+
+/**
+ * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is
+ * designed to accomodate single full size TCP frame in one pbuf, including
+ * TCP_MSS, IP header, and link header.
+ */
+// Make a bigger pbuf, wifi passthru wants a 0x624
+#define PBUF_SIZE 0x640
+//#define PBUF_POOL_BUFSIZE (LWIP_MEM_ALIGN_SIZE(WICED_LINK_MTU) + LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + 1)
+#define PBUF_POOL_BUFSIZE (LWIP_MEM_ALIGN_SIZE(PBUF_SIZE) + LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + 1)
+
+
+/**
+ * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default,
+ * you might want to increase this.)
+ * For the receive side, this MSS is advertised to the remote side
+ * when opening a connection. For the transmit size, this MSS sets
+ * an upper limit on the MSS advertised by the remote host.
+ */
+/* *** IMPORTANT ***
+ *
+ * DO NOT increase this beyond the point at which a TCP segement will fit within a single PBUF, otherwise
+ * the code in the WICED netif output function (host_hardware_output() in wiced-network.cpp) will fail.
+ *
+ * The limit is effectively WICED_LINK_MTU - (WICED_LINK_OVERHEAD_BELOW_ETHERNET_FRAME + WICED_ETHERNET_SIZE + 60)
+ */
+#define TCP_MSS (1152)
+
+
+/**
+ * TCP_SND_BUF: TCP sender buffer space (bytes).
+ * must be at least as much as (2 * TCP_MSS) for things to work smoothly
+ */
+#define TCP_SND_BUF (6 * TCP_MSS)
+
+/**
+ * ETH_PAD_SIZE: the header space required preceeding the of each pbuf in the pbuf pool. The default is
+ * designed to accomodate single full size TCP frame in one pbuf, including
+ * TCP_MSS, IP header, and link header.
+ *
+ * This is zero since the role has been taken over by SUB_ETHERNET_HEADER_SPACE as ETH_PAD_SIZE was not always obeyed
+ */
+#define ETH_PAD_SIZE (0)
+
+#define SUB_ETHERNET_HEADER_SPACE (8 + 12 + 4 + 2)
+
+
+/**
+ * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread.
+ * The stack size value itself is platform-dependent, but is passed to
+ * sys_thread_new() when the thread is created.
+ */
+#define TCPIP_THREAD_STACKSIZE (1300)
+
+
+/**
+ * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread.
+ * The priority value itself is platform-dependent, but is passed to
+ * sys_thread_new() when the thread is created.
+ * Note: If this task priority is modified, please update the comment in nlenvironment-common.h
+ */
+#define TCPIP_THREAD_PRIO ((NLER_TASK_PRIORITY_HIGHEST)-4) //5
+
+#define TCP_LISTEN_BACKLOG (1)
+
+
+/**
+ * The WICED definition of PBUF_POOL_BUFSIZE includes a number of
+ * sizeof() instantiations which causes the C preprocessor to
+ * fail. Disable TCP configuration constant sanity checks to work
+ * around this.
+ */
+#define LWIP_DISABLE_TCP_SANITY_CHECKS (1)
+
+/**
+ * The maximum of all used hardware address lengths across all types
+ * of interfaces in use:
+ *
+ * - 802.11 : 6
+ * - 802.15.4 : 8
+ */
+#define NETIF_MAX_HWADDR_LEN 8U
+
+#define LWIP_NOASSERT 1
+
+#undef LWIP_TEST_CODE
+#define LWIP_TEST_CODE 1
+
+#endif /* ifdef CUSTOM_LWIPOPTS */
+
+#endif /* __ANTIGUASIM_LWIPOPTS_H__ */
diff --git a/products/common/lwipopts.h b/products/common/lwipopts.h
new file mode 100644
index 0000000..0c7fde1
--- /dev/null
+++ b/products/common/lwipopts.h
@@ -0,0 +1,374 @@
+/*
+ *
+ * Copyright (c) 2012-2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * Description:
+ * This file describes common compile-time constants used for
+ * configuring LwIP, shared across all products and platforms.
+ *
+ */
+
+#ifndef __COMMON_LWIPOPTS_H__
+#define __COMMON_LWIPOPTS_H__
+
+/** 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
+ */
+#define LWIP_TIMEVAL_PRIVATE (0)
+
+/**
+ * LwIP has three memory models it can work with for general memory
+ * allocation:
+ *
+ * 1) Standard C Library APIs and default platform heap.
+ *
+ * - Enabled by asserting MEM_LIBC_MALLOC
+ *
+ * 2) LwIP APIs and LwIP-internal heap (from BSS data).
+ *
+ * - Enabled by deasserting MEM_LIBC_MALLOC
+ *
+ * 3) Pre-allocated binned memory and object pools (from BSS data).
+ *
+ * - Enabled by deasserting MEM_LIBC_MALLOC and asserting
+ * MEM_USE_POOLS.
+ *
+ */
+
+/**
+ * Do use the Standard C Library heap and associated APIs.
+ */
+#define MEM_LIBC_MALLOC (0)
+
+/**
+ * Do not use memory pools to create fixed, statically allocated pools of
+ * memory in lieu of the Standard C Library heap and APIs.
+ */
+#define MEM_USE_POOLS (0)
+
+/**
+ * Do not use custom memory pools for specific, named LwIP objects, sourced
+ * from lwippools.h.
+ */
+#define MEM_USE_CUSTOM_POOLS (MEM_USE_POOLS)
+
+/**
+ * MEM_SIZE: The size of the built-in LwIP heap memory.
+ *
+ * We size this for:
+ *
+ * 1 @ 1500 bytes for maximally-sized MTU
+ * 2 @ 120 bytes for outstanding transport header
+ * 2 @ 132 bytes for outstanding IPv6 NDP packets
+ * 5 @ 9 bytes for LwIP heap structure
+ *
+ * 2409 + 16 byte alignment -> 2064
+ */
+#define MEM_SIZE 2064
+
+/** Define LWIP_COMPAT_MUTEX if the port has no mutexes and binary semaphores
+ * should be used instead
+ */
+#define LWIP_COMPAT_MUTEX (1)
+
+/**
+ * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
+ * critical regions during buffer allocation, deallocation and memory
+ * allocation and deallocation.
+ */
+#define SYS_LIGHTWEIGHT_PROT (1)
+
+/**
+ * LWIP_DHCP==1: Enable DHCP module.
+ */
+#define LWIP_DHCP (1)
+
+/**
+ * Enable automatic IPv4 link-local address assignment.
+ */
+#define LWIP_AUTOIP (1)
+
+/**
+ * Allow DHCP and automatic IPv4 link-local address assignment to
+ * work cooperatively.
+ */
+#define LWIP_DHCP_AUTOIP_COOP (0)
+
+/**
+ * LWIP_PROVIDE_ERRNO: errno definitions from the Standard C Library.
+ */
+#undef LWIP_PROVIDE_ERRNO
+
+/**
+ * ERRNO: set errno on interface invocation failures
+ */
+#define ERRNO (1)
+
+/**
+ * MEMP_NUM_RAW_PCB: Number of raw connection PCBs
+ * (requires the LWIP_RAW option)
+ */
+#ifndef MEMP_NUM_RAW_PCB
+#define MEMP_NUM_RAW_PCB (5)
+#endif
+
+/**
+ * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
+ * per active UDP "connection".
+ * (requires the LWIP_UDP option)
+ * LWIP_DHCP and LWIP_DNS are used by LWIP, and the 5 are used by UDP endpoints in InetLayer.
+ *
+ * See #INET_CONFIG_NUM_UDP_ENDPOINTS for InetLayer configuration.
+ */
+#ifndef MEMP_NUM_UDP_PCB
+#define MEMP_NUM_UDP_PCB (5 + (LWIP_DHCP) + (LWIP_DNS))
+#endif
+
+/* ARP before DHCP causes multi-second delay - turn it off */
+#define DHCP_DOES_ARP_CHECK (0)
+
+/**
+ * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c
+ */
+#define LWIP_HAVE_LOOPIF (1)
+
+/**
+ * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP
+ * address equal to the netif IP address, looping them back up the stack.
+ */
+#define LWIP_NETIF_LOOPBACK (0)
+
+/**
+ * MEMP_NUM_NETCONN: the number of struct netconns.
+ * (only needed if you use the sequential API, like api_lib.c)
+ */
+#define MEMP_NUM_NETCONN (1)
+
+/**
+ * LWIP_SO_RCVTIMEO==1: Enable SO_RCVTIMEO processing.
+ */
+#define LWIP_SO_RCVTIMEO (1)
+
+
+/**
+ * LWIP_IGMP==1: Turn on IGMP module.
+ */
+#define LWIP_IGMP (1)
+
+
+/**
+ * SO_REUSE==1: Enable SO_REUSEADDR option.
+ * Required by IGMP for reuse of multicast address and port by other sockets
+ */
+#define SO_REUSE (1)
+
+/**
+ * When using IGMP, LWIP_RAND() needs to be defined to a random-function returning an u32_t random value
+ */
+#define LWIP_RAND() (u32_t)lrand48()
+
+/**
+ * LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS==1: Randomize the local port
+ * for the first local TCP/UDP PCB. This can prevent creating
+ * predictable port numbers after booting a system (see RFC-6065).
+ */
+#define LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS (1)
+
+/**
+ * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS
+ * transport.
+ */
+#define LWIP_DNS (1)
+#define LWIP_DNS_RAND_ID (1)
+
+/**
+ * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names.
+ * Disable this option if you use a POSIX operating system that uses the same
+ * names (read, write & close). (only used if you use sockets.c)
+ *
+ * We disable this because this otherwise collides with the Standard C
+ * Library where both LWIP and its headers are included.
+ */
+#define LWIP_POSIX_SOCKETS_IO_NAMES (0)
+
+#ifdef LWIP_SO_RCVBUF
+#if ( LWIP_SO_RCVBUF == 1 )
+#include <limits.h> /* Needed because RECV_BUFSIZE_DEFAULT is defined as INT_MAX */
+#endif /* if ( LWIP_SO_RCVBUF == 1 ) */
+#endif /* ifdef LWIP_SO_RCVBUF */
+
+/**
+ * LWIP_STATS : Turn off statistics gathering
+ */
+#define LWIP_STATS (0)
+
+#ifdef BUILD_FEATURE_NETWORK_STATS
+#undef LWIP_STATS
+#define LWIP_STATS 1
+#define LWIP_STATS_DISPLAY 1
+#undef MEMP_STATS
+#define MEMP_STATS 1
+#endif
+
+
+/**
+ * LWIP_IPV6==1: Enable IPv6
+ */
+#define LWIP_IPV6 1
+
+/**
+ * LWIP_IPV6_AUTOCONFIG==0: Disable stateless address
+ * autoconfiguration (SLAAC).
+ */
+#define LWIP_IPV6_AUTOCONFIG (0)
+
+
+/**
+ * LWIP_IPV6_NUM_ADDRESSES: Number of IPv6 addresses per netif.
+ * Currently:
+ * Link-Local, Mesh-Local, Weave Legacy ULA, Weave Thread ULA
+ *
+ * TODO: We actually don't use the Mesh-Local address, so we can reuse this slot and retain 3 addresses
+ */
+#define LWIP_IPV6_NUM_ADDRESSES 4
+
+/**
+ * LWIP_IPV6_DHCP6==0: Disable DHCPv6 stateful address autoconfiguration.
+ */
+#ifndef LWIP_IPV6_DHCP6
+#define LWIP_IPV6_DHCP6 1
+#endif
+
+/**
+ * Enable locking in the lwip (tcpip) thread.
+ */
+#ifndef LWIP_TCPIP_CORE_LOCKING
+#define LWIP_TCPIP_CORE_LOCKING 1
+#endif
+
+/**
+ * Controls if TCP should queue segments that arrive out of
+ * order. Define to 0 if your device is low on memory.
+ * This had been disabled for DOLO-738 (pbuf scarcity apparently
+ * had a bad effect on download times).
+ * We are enabling it again for TOPAZ-3661 (OTA downloads are
+ * timing out because our CDN now requires the devices to
+ * store out-of-sequence segments; otherwise the F-RTO Recovery
+ * algorithm on the sender side does not work and the download stalls).
+ * We don't see the problem mentioned in DOLO-738 anymore.
+ */
+#define TCP_QUEUE_OOSEQ 1
+
+/**
+ * ARP_QUEUEING==1: Multiple outgoing packets are queued during
+ * hardware address resolution. By default, only the most recent
+ * packet is queued per IP address. This is sufficient for most
+ * protocols and mainly reduces TCP connection startup time. Set this
+ * to 1 if you know your application sends more than one packet in a
+ * row to an IP address that is not in the ARP cache.
+ */
+#define ARP_QUEUEING (0)
+
+/**
+ * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing
+ * packets (pbufs) that are waiting for an ARP request (to resolve
+ * their destination address) to finish. (requires the ARP_QUEUEING
+ * option)
+ */
+#define MEMP_NUM_ARP_QUEUE (PBUF_POOL_SIZE)
+
+/**
+ * LWIP_ND6_QUEUEING==1: queue outgoing IPv6 packets while MAC address
+ * is being resolved.
+ */
+#define LWIP_ND6_QUEUEING (LWIP_IPV6)
+
+/**
+ * MEMP_NUM_ND6_QUEUE: Max number of IPv6 packets to queue during MAC
+ * resolution.
+ */
+#define MEMP_NUM_ND6_QUEUE (PBUF_POOL_SIZE)
+
+/**
+ * LWIP_MULTICAST_PING: respond to multicast pings (default is unicast only)
+ */
+#define LWIP_MULTICAST_PING (1)
+
+/**
+ * Debug printing
+ * By default enable debug printing for debug build, but set level to off
+ * This allows user to change any desired debug level to on.
+ */
+#ifdef DEBUG
+#undef LWIP_DEBUG
+#define MEMP_OVERFLOW_CHECK ( 0 )
+#define MEMP_SANITY_CHECK ( 0 )
+#define MEM_DEBUG (LWIP_DBG_OFF)
+#define MEMP_DEBUG (LWIP_DBG_OFF)
+#define PBUF_DEBUG (LWIP_DBG_OFF)
+#define API_LIB_DEBUG (LWIP_DBG_OFF)
+#define API_MSG_DEBUG (LWIP_DBG_OFF)
+#define TCPIP_DEBUG (LWIP_DBG_OFF)
+#define NETIF_DEBUG (LWIP_DBG_OFF)
+#define SOCKETS_DEBUG (LWIP_DBG_OFF)
+#define DEMO_DEBUG (LWIP_DBG_OFF)
+#define DHCP_DEBUG (LWIP_DBG_OFF)
+#define AUTOIP_DEBUG (LWIP_DBG_OFF)
+#define ETHARP_DEBUG (LWIP_DBG_OFF)
+#define IP_DEBUG (LWIP_DBG_OFF)
+#define IP_REASS_DEBUG (LWIP_DBG_OFF)
+#define IP6_DEBUG (LWIP_DBG_OFF)
+#define RAW_DEBUG (LWIP_DBG_OFF)
+#define ICMP_DEBUG (LWIP_DBG_OFF)
+#define UDP_DEBUG (LWIP_DBG_OFF)
+#define TCP_DEBUG (LWIP_DBG_OFF)
+#define TCP_INPUT_DEBUG (LWIP_DBG_OFF)
+#define TCP_OUTPUT_DEBUG (LWIP_DBG_OFF)
+#define TCP_RTO_DEBUG (LWIP_DBG_OFF)
+#define TCP_CWND_DEBUG (LWIP_DBG_OFF)
+#define TCP_WND_DEBUG (LWIP_DBG_OFF)
+#define TCP_FR_DEBUG (LWIP_DBG_OFF)
+#define TCP_QLEN_DEBUG (LWIP_DBG_OFF)
+#define TCP_RST_DEBUG (LWIP_DBG_OFF)
+#define PPP_DEBUG (LWIP_DBG_OFF)
+
+#define LWIP_DBG_TYPES_ON (LWIP_DBG_OFF) /* (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT) */
+#endif
+
+/**
+ * LwIP defaults the size of most mailboxes (i.e. message queues) to
+ * zero (0). That generally makes RTOSes such as FreeRTOS very
+ * unhappy. Specify reasonable defaults instead.
+ */
+#define TCPIP_MBOX_SIZE 6
+
+#define DEFAULT_RAW_RECVMBOX_SIZE 6
+
+#define DEFAULT_UDP_RECVMBOX_SIZE 6
+
+#define DEFAULT_TCP_RECVMBOX_SIZE 6
+
+/**
+ * Disable processing of incoming Router Advertisements.
+ */
+#define LWIP_ND6_LISTEN_RA 0
+
+/**
+ * Disable IPV6 router discovery.
+ */
+#define LWIP_IPV6_ROUTER_SUPPORT 0
+
+/**
+ * Enable TCP keepalives, for Weave WDM subscriptions
+ */
+#define LWIP_TCP_KEEPALIVE 1
+
+/**
+ * Limit the DNS TTL to 15 minutes.
+ * The value is in seconds.
+ */
+
+#define DNS_MAX_TTL (60 * 15)
+
+#endif /* __COMMON_LWIPOPTS_H__ */
diff --git a/products/lwipopts.h b/products/lwipopts.h
new file mode 100644
index 0000000..8b8fdc8
--- /dev/null
+++ b/products/lwipopts.h
@@ -0,0 +1,40 @@
+/*
+ *
+ * Copyright (c) 2012-2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * Description:
+ * This file describes compile-time constants used for
+ * configuring LwIP.
+ *
+ */
+
+#ifndef __LWIPOPTS_H__
+#define __LWIPOPTS_H__
+
+#if defined(BUILD_PRODUCT_SIMULATOR)
+#include <simulator/lwipopts.h>
+
+#elif defined(BUILD_PRODUCT_TOPAZ)
+#include <topaz/lwipopts.h>
+
+#elif defined(BUILD_PRODUCT_TOWER)
+#include <tower/lwipopts.h>
+
+#elif defined(BUILD_PRODUCT_T2)
+#include <t2/lwipopts.h>
+
+#elif defined(BUILD_PRODUCT_T2SIM)
+#include <t2sim/lwipopts.h>
+
+#elif defined(BUILD_PRODUCT_ANTIGUA)
+#include <antigua/lwipopts.h>
+
+#elif defined(BUILD_PRODUCT_ANTIGUASIM)
+#include <antiguasim/lwipopts.h>
+
+#else
+#error lwipopts.h must define a BUILD_PRODUCT
+#endif
+
+#endif /* __LWIPOPTS_H__ */
diff --git a/products/lwippools.h b/products/lwippools.h
new file mode 100644
index 0000000..b2e42cb
--- /dev/null
+++ b/products/lwippools.h
@@ -0,0 +1,56 @@
+/* -*- Mode: C++; tab-width: 4 indent-tabs-mode: nil -*-
+ *
+ * Copyright (c) 2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ * Description:
+ * This file defines statically-allocated pools of memory that
+ * are used by LwIP in lieu of the Standard C Library heap.
+ *
+ * In lwipopts.h, define MEM_USE_POOLS to use the standard set
+ * of size-based pools and define MEMP_USE_CUSTOM_POOLS to use
+ * custom, named pools.
+ *
+ */
+
+/* Define pools in increasing order according to the pool element
+ * size.
+ *
+ * LWIP_MALLOC_MEMPOOL(number_elements, element_size)
+ */
+
+#if MEM_USE_POOLS
+
+#endif /* MEM_USE_POOLS */
+
+/* Define pools in increasing order according to the pool element
+ * size.
+ *
+ * LWIP_MEMPOOL(name, number_elements, element_size, description)
+ */
+
+#if MEMP_USE_CUSTOM_POOLS
+
+/* Custom PBUF pools must be defined starting with the pool containing the largest PBUF,
+ * and must be allocated in descending order by PBUF size.
+ *
+ * pbuf_alloc will start at the smallest pool (PBUF_VARIABLE_POOL_START in lwipopts.h)
+ * and try to allocate from pbuf pools of progressively larger pbuf size until it
+ * successfully finds a pbuf from one of the pools or until it passes PBUF_VARIABLE_POOL_END*/
+
+#if LWIP_PBUF_FROM_CUSTOM_POOLS
+LWIP_PBUF_MEMPOOL(PBUF_POOL_LARGE, PBUF_POOL_SIZE_LARGE, PBUF_POOL_BUFSIZE_LARGE, "PBUF_POOL_LARGE")
+LWIP_PBUF_MEMPOOL(PBUF_POOL_MEDIUM, PBUF_POOL_SIZE_MEDIUM, PBUF_POOL_BUFSIZE_MEDIUM, "PBUF_POOL_MEDIUM")
+LWIP_PBUF_MEMPOOL(PBUF_POOL_SMALL, PBUF_POOL_SIZE_SMALL, PBUF_POOL_BUFSIZE_SMALL, "PBUF_POOL_SMALL")
+#endif
+
+/* Place other custom LWIP mem pools below this line */
+
+#endif /* MEMP_USE_CUSTOM_POOLS */
diff --git a/products/t2/lwip.mak b/products/t2/lwip.mak
new file mode 100644
index 0000000..87a7ec1
--- /dev/null
+++ b/products/t2/lwip.mak
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2012 Nest Labs, Inc.
+# All rights reserved.
+#
+# This document is the property of Nest. It is considered
+# confidential and proprietary information.
+#
+# This document may not be reproduced or transmitted in any form,
+# in whole or in part, without the express written permission of
+# Nest.
+#
+# Description:
+# This file adds product-specific header search paths to LwIP.
+#
+
+lwip_INCLUDES += $(FreeRTOSConfigDir) \
+ $(FreeRTOSIncludePaths) \
+ $(NewLibCIncludePaths) \
+ $(WicedIncludePaths)
+
diff --git a/products/t2/lwipopts.h b/products/t2/lwipopts.h
new file mode 100644
index 0000000..9548bb0
--- /dev/null
+++ b/products/t2/lwipopts.h
@@ -0,0 +1,253 @@
+/*
+ *
+ * Copyright (c) 2012-2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * Description:
+ * This file describes compile-time constants used for
+ * configuring LwIP.
+ *
+ */
+
+/*
+ * Copyright 2012, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Broadcom Corporation.
+ */
+
+/*
+ * Copyright (c) 2001-2003 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 __T2_LWIPOPTS_H__
+#define __T2_LWIPOPTS_H__
+
+#include <stdlib.h>
+
+#include <network/wwd_network_constants.h>
+
+#include "common/lwipopts.h"
+#include "nlertaskpriority.h"
+
+#ifdef CUSTOM_LWIPOPTS
+#include "custom_lwipopts.h"
+#else /* ifdef CUSTOM_LWIPOPTS */
+
+/**
+ * MEM_ALIGNMENT: should be set to the alignment of the CPU
+ * 4 byte alignment -> #define MEM_ALIGNMENT 4
+ * 2 byte alignment -> #define MEM_ALIGNMENT 2
+ */
+#define MEM_ALIGNMENT (4)
+
+/**
+ * MEMP_NUM_NETBUF: the number of struct netbufs.
+ * (only needed if you use the sequential API, like api_lib.c)
+ */
+#define MEMP_NUM_NETBUF (PBUF_POOL_SIZE)
+
+
+/**
+ * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments.
+ * (requires the LWIP_TCP option)
+ */
+#define MEMP_NUM_TCP_SEG (TCP_SND_QUEUELEN+1)
+
+/**
+ * PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
+ *
+ * This is just a default designed to be overriden by the FreeRTOS.mk makefile
+ * To perform this override, define the makefile variable LWIP_NUM_PACKET_BUFFERS_IN_POOL
+ */
+#ifndef PBUF_POOL_SIZE
+#define PBUF_POOL_SIZE (12)
+#endif
+
+/*
+ * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled.
+ * Since the received pbufs are enqueued, be sure to configure
+ * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive
+ * packets even if the maximum amount of fragments is enqueued for reassembly!
+ *
+ */
+#if PBUF_POOL_SIZE > 2
+#ifndef IP_REASS_MAX_PBUFS
+#define IP_REASS_MAX_PBUFS (PBUF_POOL_SIZE - 2)
+#endif
+#else
+#define IP_REASS_MAX_PBUFS 0
+#define IP_REASSEMBLY 0
+#endif
+
+/**
+ * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for
+ * reassembly (whole packets, not fragments!)
+ */
+#if IP_REASS_MAX_PBUFS > 1
+#ifndef MEMP_NUM_REASSDATA
+#define MEMP_NUM_REASSDATA (IP_REASS_MAX_PBUFS - 1)
+#endif
+#else
+#define MEMP_NUM_REASSDATA 0
+#endif
+
+
+/**
+ * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is
+ * designed to accomodate single full size TCP frame in one pbuf, including
+ * TCP_MSS, IP header, and link header.
+ */
+// Make a bigger pbuf, wifi passthru wants a 0x624
+#define PBUF_SIZE 0x640
+//#define PBUF_POOL_BUFSIZE (LWIP_MEM_ALIGN_SIZE(WICED_LINK_MTU) + LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + 1)
+#define PBUF_POOL_BUFSIZE (LWIP_MEM_ALIGN_SIZE(PBUF_SIZE) + LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + 1)
+
+
+/**
+ * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
+ * per active UDP "connection".
+ * (requires the LWIP_UDP option)
+ * LWIP_DHCP and LWIP_DNS are used by LWIP, and the 6 are used by UDP endpoints in InetLayer.
+ *
+ * See #INET_CONFIG_NUM_UDP_ENDPOINTS for InetLayer configuration.
+ */
+#ifdef MEMP_NUM_UDP_PCB
+#undef MEMP_NUM_UDP_PCB
+#define MEMP_NUM_UDP_PCB (6 + (LWIP_DHCP) + (LWIP_DNS))
+#endif
+
+/**
+ * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default,
+ * you might want to increase this.)
+ * For the receive side, this MSS is advertised to the remote side
+ * when opening a connection. For the transmit size, this MSS sets
+ * an upper limit on the MSS advertised by the remote host.
+ */
+/* *** IMPORTANT ***
+ *
+ * DO NOT increase this beyond the point at which a TCP segement will fit within a single PBUF, otherwise
+ * the code in the WICED netif output function (host_hardware_output() in wiced-network.cpp) will fail.
+ *
+ * The limit is effectively WICED_LINK_MTU - (WICED_LINK_OVERHEAD_BELOW_ETHERNET_FRAME + WICED_ETHERNET_SIZE + 60)
+ */
+#define TCP_MSS (1152)
+
+
+/**
+ * TCP_SND_BUF: TCP sender buffer space (bytes).
+ * must be at least as much as (2 * TCP_MSS) for things to work smoothly
+ */
+#define TCP_SND_BUF (6 * TCP_MSS)
+
+/**
+ * ETH_PAD_SIZE: the header space required preceeding the of each pbuf in the pbuf pool. The default is
+ * designed to accomodate single full size TCP frame in one pbuf, including
+ * TCP_MSS, IP header, and link header.
+ *
+ * This is zero since the role has been taken over by SUB_ETHERNET_HEADER_SPACE as ETH_PAD_SIZE was not always obeyed
+ */
+#define ETH_PAD_SIZE (0)
+
+#define SUB_ETHERNET_HEADER_SPACE (WICED_LINK_OVERHEAD_BELOW_ETHERNET_FRAME)
+
+
+/**
+ * PBUF_LINK_HLEN: the number of bytes that should be allocated for a
+ * link level header. The default is 14, the standard value for
+ * Ethernet.
+ */
+#define PBUF_LINK_HLEN (WICED_PHYSICAL_HEADER)
+
+
+/**
+ * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread.
+ * The stack size value itself is platform-dependent, but is passed to
+ * sys_thread_new() when the thread is created.
+ */
+#define TCPIP_THREAD_STACKSIZE (1300)
+
+
+/**
+ * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread.
+ * The priority value itself is platform-dependent, but is passed to
+ * sys_thread_new() when the thread is created.
+ * Note: If this task priority is modified, please update the comment in nlenvironment-common.h
+ */
+#define TCPIP_THREAD_PRIO ((NLER_TASK_PRIORITY_HIGHEST)-4) //5
+
+#define TCP_LISTEN_BACKLOG (1)
+
+
+/**
+ * The WICED definition of PBUF_POOL_BUFSIZE includes a number of
+ * sizeof() instantiations which causes the C preprocessor to
+ * fail. Disable TCP configuration constant sanity checks to work
+ * around this.
+ */
+#define LWIP_DISABLE_TCP_SANITY_CHECKS (1)
+
+/**
+ * The maximum of all used hardware address lengths across all types
+ * of interfaces in use:
+ *
+ * - 802.11 : 6
+ * - 802.15.4 : 8
+ */
+#define NETIF_MAX_HWADDR_LEN 8U
+
+#define LWIP_NOASSERT 1
+
+/**
+ * LWIP_IPV6_FORWARD==1: Forward IPv6 packets across netifs
+ */
+#define LWIP_IPV6_FORWARD 1
+
+#endif /* ifdef CUSTOM_LWIPOPTS */
+
+/*
+ * LWIP_IPV6_FORWARD==1: Enable IPv6 forwarding.
+ */
+#ifndef LWIP_IPV6_FORWARD
+#define LWIP_IPV6_FORWARD 1
+#endif
+
+/**
+ * LWIP_IPV6_ROUTE_TABLE_SUPPORT==1: Enable support for a static routing table and refering
+ * these during forwarding.
+ */
+#ifndef LWIP_IPV6_ROUTE_TABLE_SUPPORT
+#define LWIP_IPV6_ROUTE_TABLE_SUPPORT 1
+#endif
+
+#endif /* __T2_LWIPOPTS_H__ */
diff --git a/products/t2sim/lwip.mak b/products/t2sim/lwip.mak
new file mode 100644
index 0000000..8ec684f
--- /dev/null
+++ b/products/t2sim/lwip.mak
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2012 Nest Labs, Inc.
+# All rights reserved.
+#
+# This document is the property of Nest. It is considered
+# confidential and proprietary information.
+#
+# This document may not be reproduced or transmitted in any form,
+# in whole or in part, without the express written permission of
+# Nest.
+#
+# Description:
+# This file adds product-specific header search paths to LwIP.
+#
+
+lwip_INCLUDES += $(FreeRTOSConfigDir) \
+ $(FreeRTOSIncludePaths) \
+ $(NewLibCIncludeDir)
+
diff --git a/products/t2sim/lwipopts.h b/products/t2sim/lwipopts.h
new file mode 100644
index 0000000..5af7be5
--- /dev/null
+++ b/products/t2sim/lwipopts.h
@@ -0,0 +1,224 @@
+/*
+ *
+ * Copyright (c) 2012-2014 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * This document is the property of Nest. It is considered
+ * confidential and proprietary information.
+ *
+ * This document may not be reproduced or transmitted in any form,
+ * in whole or in part, without the express written permission of
+ * Nest.
+ *
+ */
+
+/**
+ * @file
+ * This file describes compile-time constants used for
+ * configuring LwIP.
+ *
+ */
+
+/*
+ * Copyright 2012, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Broadcom Corporation.
+ */
+
+/*
+ * Copyright (c) 2001-2003 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 __T2SIM_LWIPOPTS_H__
+#define __T2SIM_LWIPOPTS_H__
+
+#include <stdlib.h>
+
+#include "common/lwipopts.h"
+#include "nlertaskpriority.h"
+
+#ifdef CUSTOM_LWIPOPTS
+#include "custom_lwipopts.h"
+#else /* ifdef CUSTOM_LWIPOPTS */
+
+
+/**
+ * MEM_ALIGNMENT: should be set to the alignment of the CPU
+ * 4 byte alignment -> #define MEM_ALIGNMENT 4
+ * 2 byte alignment -> #define MEM_ALIGNMENT 2
+ */
+#define MEM_ALIGNMENT (4)
+
+/**
+ * MEMP_NUM_NETBUF: the number of struct netbufs.
+ * (only needed if you use the sequential API, like api_lib.c)
+ */
+#define MEMP_NUM_NETBUF (PBUF_POOL_SIZE)
+
+
+/**
+ * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments.
+ * (requires the LWIP_TCP option)
+ */
+#define MEMP_NUM_TCP_SEG (TCP_SND_QUEUELEN+1)
+
+/**
+ * PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
+ *
+ * This is just a default designed to be overriden by the FreeRTOS.mk makefile
+ * To perform this override, define the makefile variable LWIP_NUM_PACKET_BUFFERS_IN_POOL
+ */
+#ifndef PBUF_POOL_SIZE
+#define PBUF_POOL_SIZE (12)
+#endif
+
+/*
+ * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled.
+ * Since the received pbufs are enqueued, be sure to configure
+ * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive
+ * packets even if the maximum amount of fragments is enqueued for reassembly!
+ *
+ */
+#if PBUF_POOL_SIZE > 2
+#ifndef IP_REASS_MAX_PBUFS
+#define IP_REASS_MAX_PBUFS (PBUF_POOL_SIZE - 2)
+#endif
+#else
+#define IP_REASS_MAX_PBUFS 0
+#define IP_REASSEMBLY 0
+#endif
+
+/**
+ * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for
+ * reassembly (whole packets, not fragments!)
+ */
+#if IP_REASS_MAX_PBUFS > 1
+#ifndef MEMP_NUM_REASSDATA
+#define MEMP_NUM_REASSDATA (IP_REASS_MAX_PBUFS - 1)
+#endif
+#else
+#define MEMP_NUM_REASSDATA 0
+#endif
+
+
+/**
+ * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is
+ * designed to accomodate single full size TCP frame in one pbuf, including
+ * TCP_MSS, IP header, and link header.
+ */
+// Make a bigger pbuf, wifi passthru wants a 0x624
+#define PBUF_SIZE 0x640
+//#define PBUF_POOL_BUFSIZE (LWIP_MEM_ALIGN_SIZE(WICED_LINK_MTU) + LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + 1)
+#define PBUF_POOL_BUFSIZE (LWIP_MEM_ALIGN_SIZE(PBUF_SIZE) + LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + 1)
+
+
+/**
+ * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default,
+ * you might want to increase this.)
+ * For the receive side, this MSS is advertised to the remote side
+ * when opening a connection. For the transmit size, this MSS sets
+ * an upper limit on the MSS advertised by the remote host.
+ */
+/* *** IMPORTANT ***
+ *
+ * DO NOT increase this beyond the point at which a TCP segement will fit within a single PBUF, otherwise
+ * the code in the WICED netif output function (host_hardware_output() in wiced-network.cpp) will fail.
+ *
+ * The limit is effectively WICED_LINK_MTU - (WICED_LINK_OVERHEAD_BELOW_ETHERNET_FRAME + WICED_ETHERNET_SIZE + 60)
+ */
+#define TCP_MSS (1152)
+
+
+/**
+ * TCP_SND_BUF: TCP sender buffer space (bytes).
+ * must be at least as much as (2 * TCP_MSS) for things to work smoothly
+ */
+#define TCP_SND_BUF (6 * TCP_MSS)
+
+/**
+ * ETH_PAD_SIZE: the header space required preceeding the of each pbuf in the pbuf pool. The default is
+ * designed to accomodate single full size TCP frame in one pbuf, including
+ * TCP_MSS, IP header, and link header.
+ *
+ * This is zero since the role has been taken over by SUB_ETHERNET_HEADER_SPACE as ETH_PAD_SIZE was not always obeyed
+ */
+#define ETH_PAD_SIZE (0)
+
+#define SUB_ETHERNET_HEADER_SPACE (8 + 12 + 4 + 2)
+
+
+/**
+ * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread.
+ * The stack size value itself is platform-dependent, but is passed to
+ * sys_thread_new() when the thread is created.
+ */
+#define TCPIP_THREAD_STACKSIZE (1300)
+
+
+/**
+ * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread.
+ * The priority value itself is platform-dependent, but is passed to
+ * sys_thread_new() when the thread is created.
+ * Note: If this task priority is modified, please update the comment in nlenvironment-common.h
+ */
+#define TCPIP_THREAD_PRIO ((NLER_TASK_PRIORITY_HIGHEST)-4) //5
+
+#define TCP_LISTEN_BACKLOG (1)
+
+
+/**
+ * The WICED definition of PBUF_POOL_BUFSIZE includes a number of
+ * sizeof() instantiations which causes the C preprocessor to
+ * fail. Disable TCP configuration constant sanity checks to work
+ * around this.
+ */
+#define LWIP_DISABLE_TCP_SANITY_CHECKS (1)
+
+/**
+ * The maximum of all used hardware address lengths across all types
+ * of interfaces in use:
+ *
+ * - 802.11 : 6
+ * - 802.15.4 : 8
+ */
+#define NETIF_MAX_HWADDR_LEN 8U
+
+#define LWIP_NOASSERT 1
+
+#undef LWIP_TEST_CODE
+#define LWIP_TEST_CODE 1
+
+#endif /* ifdef CUSTOM_LWIPOPTS */
+
+#endif /* __T2SIM_LWIPOPTS_H__ */
diff --git a/products/topaz/lwip.mak b/products/topaz/lwip.mak
new file mode 100644
index 0000000..87a7ec1
--- /dev/null
+++ b/products/topaz/lwip.mak
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2012 Nest Labs, Inc.
+# All rights reserved.
+#
+# This document is the property of Nest. It is considered
+# confidential and proprietary information.
+#
+# This document may not be reproduced or transmitted in any form,
+# in whole or in part, without the express written permission of
+# Nest.
+#
+# Description:
+# This file adds product-specific header search paths to LwIP.
+#
+
+lwip_INCLUDES += $(FreeRTOSConfigDir) \
+ $(FreeRTOSIncludePaths) \
+ $(NewLibCIncludePaths) \
+ $(WicedIncludePaths)
+
diff --git a/products/topaz/lwipopts.h b/products/topaz/lwipopts.h
new file mode 100644
index 0000000..2af5a1b
--- /dev/null
+++ b/products/topaz/lwipopts.h
@@ -0,0 +1,220 @@
+/*
+ *
+ * Copyright (c) 2012-2013 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * Description:
+ * This file describes compile-time constants used for
+ * configuring LwIP.
+ *
+ */
+
+/*
+ * Copyright 2012, Broadcom Corporation
+ * All Rights Reserved.
+ *
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Broadcom Corporation.
+ */
+
+/*
+ * Copyright (c) 2001-2003 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 __TOPAZ_LWIPOPTS_H__
+#define __TOPAZ_LWIPOPTS_H__
+
+#include <stdlib.h>
+
+#include <network/wwd_network_constants.h>
+
+#include "common/lwipopts.h"
+#include "nlertaskpriority.h"
+
+#ifdef CUSTOM_LWIPOPTS
+#include "custom_lwipopts.h"
+#else /* ifdef CUSTOM_LWIPOPTS */
+
+/**
+ * MEM_ALIGNMENT: should be set to the alignment of the CPU
+ * 4 byte alignment -> #define MEM_ALIGNMENT 4
+ * 2 byte alignment -> #define MEM_ALIGNMENT 2
+ */
+#define MEM_ALIGNMENT (4)
+
+/**
+ * MEMP_NUM_NETBUF: the number of struct netbufs.
+ * (only needed if you use the sequential API, like api_lib.c)
+ */
+#define MEMP_NUM_NETBUF (PBUF_POOL_SIZE)
+
+
+/**
+ * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments.
+ * (requires the LWIP_TCP option)
+ */
+#define MEMP_NUM_TCP_SEG (TCP_SND_QUEUELEN+1)
+
+/**
+ * PBUF_POOL_SIZE: the number of buffers in the pbuf pool.
+ *
+ * This is just a default designed to be overriden by the FreeRTOS.mk makefile
+ * To perform this override, define the makefile variable LWIP_NUM_PACKET_BUFFERS_IN_POOL
+ */
+#ifndef PBUF_POOL_SIZE
+#define PBUF_POOL_SIZE (12)
+#endif
+
+/*
+ * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled.
+ * Since the received pbufs are enqueued, be sure to configure
+ * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive
+ * packets even if the maximum amount of fragments is enqueued for reassembly!
+ *
+ */
+#if PBUF_POOL_SIZE > 2
+#ifndef IP_REASS_MAX_PBUFS
+#define IP_REASS_MAX_PBUFS (PBUF_POOL_SIZE - 2)
+#endif
+#else
+#define IP_REASS_MAX_PBUFS 0
+#define IP_REASSEMBLY 0
+#endif
+
+/**
+ * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for
+ * reassembly (whole packets, not fragments!)
+ */
+#if IP_REASS_MAX_PBUFS > 1
+#ifndef MEMP_NUM_REASSDATA
+#define MEMP_NUM_REASSDATA (IP_REASS_MAX_PBUFS - 1)
+#endif
+#else
+#define MEMP_NUM_REASSDATA 0
+#endif
+
+
+/**
+ * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is
+ * designed to accomodate single full size TCP frame in one pbuf, including
+ * TCP_MSS, IP header, and link header.
+ */
+// Make a bigger pbuf, wifi passthru wants a 0x624
+#define PBUF_SIZE 0x640
+//#define PBUF_POOL_BUFSIZE (LWIP_MEM_ALIGN_SIZE(WICED_LINK_MTU) + LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + 1)
+#define PBUF_POOL_BUFSIZE (LWIP_MEM_ALIGN_SIZE(PBUF_SIZE) + LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) + 1)
+
+
+/**
+ * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default,
+ * you might want to increase this.)
+ * For the receive side, this MSS is advertised to the remote side
+ * when opening a connection. For the transmit size, this MSS sets
+ * an upper limit on the MSS advertised by the remote host.
+ */
+/* *** IMPORTANT ***
+ *
+ * DO NOT increase this beyond the point at which a TCP segement will fit within a single PBUF, otherwise
+ * the code in the WICED netif output function (host_hardware_output() in wiced-network.cpp) will fail.
+ *
+ * The limit is effectively WICED_LINK_MTU - (WICED_LINK_OVERHEAD_BELOW_ETHERNET_FRAME + WICED_ETHERNET_SIZE + 60)
+ */
+#define TCP_MSS (1152)
+
+
+/**
+ * TCP_SND_BUF: TCP sender buffer space (bytes).
+ * must be at least as much as (2 * TCP_MSS) for things to work smoothly
+ */
+#define TCP_SND_BUF (6 * TCP_MSS)
+
+/**
+ * ETH_PAD_SIZE: the header space required preceeding the of each pbuf in the pbuf pool. The default is
+ * designed to accomodate single full size TCP frame in one pbuf, including
+ * TCP_MSS, IP header, and link header.
+ *
+ * This is zero since the role has been taken over by SUB_ETHERNET_HEADER_SPACE as ETH_PAD_SIZE was not always obeyed
+ */
+#define ETH_PAD_SIZE (0)
+
+#define SUB_ETHERNET_HEADER_SPACE (WICED_LINK_OVERHEAD_BELOW_ETHERNET_FRAME)
+
+
+/**
+ * PBUF_LINK_HLEN: the number of bytes that should be allocated for a
+ * link level header. The default is 14, the standard value for
+ * Ethernet.
+ */
+#define PBUF_LINK_HLEN (WICED_PHYSICAL_HEADER)
+
+
+/**
+ * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread.
+ * The stack size value itself is platform-dependent, but is passed to
+ * sys_thread_new() when the thread is created.
+ */
+#define TCPIP_THREAD_STACKSIZE (1300)
+
+
+/**
+ * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread.
+ * The priority value itself is platform-dependent, but is passed to
+ * sys_thread_new() when the thread is created.
+ * Note: If this task priority is modified, please update the comment in nlenvironment-common.h
+ */
+#define TCPIP_THREAD_PRIO ((NLER_TASK_PRIORITY_HIGHEST)-4) //5
+
+#define TCP_LISTEN_BACKLOG (1)
+
+
+/**
+ * The WICED definition of PBUF_POOL_BUFSIZE includes a number of
+ * sizeof() instantiations which causes the C preprocessor to
+ * fail. Disable TCP configuration constant sanity checks to work
+ * around this.
+ */
+#define LWIP_DISABLE_TCP_SANITY_CHECKS (1)
+
+/**
+ * The maximum of all used hardware address lengths across all types
+ * of interfaces in use:
+ *
+ * - 802.11 : 6
+ * - 802.15.4 : 8
+ */
+#define NETIF_MAX_HWADDR_LEN 8U
+
+#define LWIP_NOASSERT 1
+
+#endif /* ifdef CUSTOM_LWIPOPTS */
+
+#endif /* __TOPAZ_LWIPOPTS_H__ */