diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..aeac9e8
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,183 @@
+#
+#    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
+
+PackageRoot				:= .
+
+PackageName				:= lwip
+
+PackageSourceDir			:= $(LwipSrcPath)/$(PackageName)
+
+GeneratePackagePaths			= $(addprefix $(call Slashify,$(PackageSourceDir)),$(1))
+
+LicenseSourceFile			:= $(PackageSourceDir)/COPYING
+
+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: build | $(ResultDirectory)
+
+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/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
+
+ifeq ($(BuildConfig),unittest)
+lwip_TEST_PATHS	= test/nlunittest/src/test_pbuf.cpp
+endif
+
+lwip_SOURCE_PATHS		= $(lwip_API_PATHS) 	\
+				  $(lwip_CORE_PATHS)			\
+				  $(lwip_NETIF_PATHS)			\
+				  $(lwip_TEST_PATHS)
+
+lwip_INCLUDE	= src/include
+lwip_IPV4_INCLUDE	= src/include/ipv4
+lwip_IPV6_INCLUDE	= src/include/ipv6
+
+ifeq ($(BuildConfig),unittest)
+lwip_TEST_INCLUDE_DIRS = test/nlunittest/include
+endif
+
+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)))
+
+ifneq ($(BUILD_PRODUCT),pinnasim) # Only copy headers for pinnasim, don't build lwip library
+ARCHIVES			= lwip
+endif
+
+lwip_SOURCES			= $(notdir $(lwip_PACKAGE_SOURCE_PATHS))
+
+lwip_INCLUDES		   =  $(LwIPIncludePaths)		\
+						   os/$(TargetOS)		\
+						   $(FreeRTOSIncludePaths) \
+						   $(NlPlatformIncludePaths) \
+						   $(TestFrameworkIncludePaths) \
+						   $(NLERIncludePaths)
+
+# While LwIP uses the nlbuild build system because it has no 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)
+
+# Use header_source:header_dest format to move header files to their appropriate locations
+LwIPIncludeSourcePaths		= $(wildcard $(addsuffix /*/*.h,$(call GeneratePackagePaths, $(lwip_INCLUDE))))
+LwIPIncludeTranslationPaths = $(foreach headerfile,$(LwIPIncludeSourcePaths),$(headerfile):$(subst $(PackageSourceDir)/src/include,,$(headerfile)))
+
+LwIPIPV4IncludeSourcePaths		= $(wildcard $(addsuffix /*/*.h,$(call GeneratePackagePaths, $(lwip_IPV4_INCLUDE))))
+LwIPIPV4IncludeTranslationPaths = $(foreach headerfile,$(LwIPIPV4IncludeSourcePaths),$(headerfile):$(subst $(PackageSourceDir)/src/include,,$(headerfile)))
+
+LwIPIPV6IncludeSourcePaths		= $(wildcard $(addsuffix /*/*.h,$(call GeneratePackagePaths, $(lwip_IPV6_INCLUDE))))
+LwIPIPV6IncludeTranslationPaths = $(foreach headerfile,$(LwIPIPV6IncludeSourcePaths),$(headerfile):$(subst $(PackageSourceDir)/src/include,,$(headerfile)))
+
+LwIPTestIncludeSourcePaths		= $(wildcard $(addsuffix /*.h,$(call GeneratePackagePaths, $(lwip_TEST_INCLUDE_DIRS))))
+LwIPTestIncludeTranslationPaths = $(foreach headerfile,$(LwIPTestIncludeSourcePaths),$(headerfile):$(subst $(PackageSourceDir)/test/nlunittest/include,,$(headerfile)))
+
+LwIPOptionHeaderNames		= common_lwipopts.h lwipopts.h lwippools.h
+
+LwIPArchHeaderNames		= cc.h perf.h sys_arch.h
+LwIPArchHeaderSourcePaths	= $(addprefix os/$(TargetOS)/arch/,$(LwIPArchHeaderNames))
+LwIPArchTranslationPaths	= $(foreach headerfile,$(LwIPArchHeaderSourcePaths),$(headerfile):$(subst os/$(TargetOS)/,,$(headerfile)))
+
+lwip_HEADERS			= $(LwIPIncludeTranslationPaths) \
+						  $(LwIPIPV4IncludeTranslationPaths) \
+						  $(LwIPIPV6IncludeTranslationPaths) \
+						  $(LwIPOptionHeaderNames)	\
+						  $(LwIPArchTranslationPaths) \
+						  $(LwIPTestIncludeTranslationPaths)
+
+include post.mak
+
diff --git a/common_lwipopts.h b/common_lwipopts.h
new file mode 100644
index 0000000..4f4d42e
--- /dev/null
+++ b/common_lwipopts.h
@@ -0,0 +1,353 @@
+/*
+ *
+ *    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:
+ *
+ *   2 @  120 bytes for outstanding transport header
+ *   5 @    9 bytes for LwIP heap structure
+ *
+ *   288 bytes after 16 byte alignment
+ */
+#define MEM_SIZE                        288
+
+/** Define LWIP_COMPAT_MUTEX if the port has no mutexes and binary semaphores
+ *  should be used instead
+ */
+#define LWIP_COMPAT_MUTEX              (0)
+
+/**
+ * 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)
+
+/**
+ * Enable automatic IPv4 link-local address assignment.
+ */
+#define LWIP_AUTOIP                    (0)
+
+/**
+ * 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: no errno
+ */
+#undef ERRNO
+
+/**
+ * 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)
+ */
+#ifndef MEMP_NUM_UDP_PCB
+#define MEMP_NUM_UDP_PCB                (7 + (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               (0)
+
+/**
+ * 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==0: Turn off IGMP module.
+ */
+#ifndef LWIP_IGMP
+#define LWIP_IGMP                      (0)
+#endif
+
+/**
+ * LWIP_ARP==0: Disable ARP functionality.
+ */
+
+#ifndef LWIP_ARP
+#define LWIP_ARP                      (0)
+#endif
+
+
+/**
+ * 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.
+ */
+#ifndef LWIP_DNS
+#define LWIP_DNS                        (0)
+#endif
+
+/**
+ * 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)
+
+/**
+ * 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_REASS -- disable reassembly, already performed by 6lowpan layer.
+ */
+#define LWIP_IPV6_REASS                 (0)
+
+/**
+ * LWIP_IPV6_MLD==1: enable multicast listener discovery protocol.
+ */
+#define LWIP_IPV6_MLD                   (1)
+
+/**
+ * 
+ */
+
+/**
+ * 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.
+ * See DOLO-738 as to why buffering of out of order
+ * segments has been disabled (in short, device runs out of
+ * pbufs during prolonged download, slowing down a lot.)
+ */
+#define TCP_QUEUE_OOSEQ        0
+
+/**
+ * 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.
+ */
+#define LWIP_DEBUG
+#define MEMP_OVERFLOW_CHECK            ( 0 )
+#define MEMP_SANITY_CHECK              ( 0 )
+#define MEM_DEBUG                      (LWIP_DBG_OFF)
+#define MEMP_DEBUG                     (LWIP_DBG_ON)
+#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_ON | LWIP_DBG_TRACE)   /* (LWIP_DBG_ON|LWIP_DBG_TRACE|LWIP_DBG_STATE|LWIP_DBG_FRESH|LWIP_DBG_HALT) */
+
+/**
+ * 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
+
+
+#endif /* __COMMON_LWIPOPTS_H__ */
diff --git a/lwipopts.h b/lwipopts.h
new file mode 100644
index 0000000..167321a
--- /dev/null
+++ b/lwipopts.h
@@ -0,0 +1,323 @@
+/*
+ *
+ *    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 __LWIPOPTS_H__
+#define __LWIPOPTS_H__
+
+#include <stdlib.h>
+
+/**
+ * Override values in common/lwipopts.h.
+ */
+#define LWIP_DNS                        (0)
+#define LWIP_ICMP                       (0)
+#define LWIP_IGMP                       (0)
+
+#define LWIP_ND6_NUM_NEIGHBORS          (0)
+#define LWIP_ND6_NUM_DESTINATIONS       (0)
+#define LWIP_ND6_NUM_PREFIXES           (0)
+#define LWIP_ND6_NUM_ROUTERS            (0)
+#define LWIP_ND6_MAX_MULTICAST_SOLICIT  (0)
+#define LWIP_ND6_MAX_UNICAST_SOLICIT    (0)
+#define LWIP_ND6_MAX_NEIGHBOR_ADVERTISEMENT  (0)
+#define LWIP_ND6_TCP_REACHABILITY_HINTS (0)
+/**
+ * LWIP_DHCP==0: Disable DHCP module.
+ */
+#ifdef BUILD_FEATURE_NETWORK_MANAGER_DHCP_V4_CLIENT
+#define LWIP_DHCP                      (1)
+#else
+#define LWIP_DHCP                      (0)
+#endif
+
+
+#include "common_lwipopts.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 default pbuf pool.
+ * Set to 0 here because we are using LWIP_PBUF_FROM_CUSTOM_POOLS.
+ */
+#ifndef PBUF_POOL_SIZE
+#define PBUF_POOL_SIZE                 (0)
+#endif
+
+/**
+ * PBUF_POOL_SIZE_LARGE: the number of buffers in the pool for large sized pbufs
+ */
+#define PBUF_POOL_SIZE_LARGE            (3)
+
+/**
+ * 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            (5)
+
+
+/*
+ * 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!
+ *
+ */
+#define IP_REASS_MAX_PBUFS              0
+#define IP_REASSEMBLY                   0
+
+/**
+ * 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_LARGE: the size of each pbuf in the pool for large pbufs
+ */
+#define PBUF_POOL_BUFSIZE_LARGE       (1280)
+
+/**
+ * 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_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.
+ */
+#define PBUF_POOL_BUFSIZE              (PBUF_POOL_BUFSIZE_LARGE)
+
+/**
+ * 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)
+
+
+/**
+ * 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                    (2 * 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)
+
+/* TODO */
+#define SUB_ETHERNET_HEADER_SPACE      (0)
+
+
+/**
+ * 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.
+ */
+/* TODO */
+#define PBUF_LINK_HLEN                 (0)
+
+
+/**
+ * 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         (1024)
+
+/**
+ * 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.
+ */
+#define TCPIP_THREAD_PRIO              (2)
+
+#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
+
+/**
+ * LWIP_IPV6_NUM_ADDRESSES: Number of IPv6 addresses per netif.
+ * Currently:
+ *    Link-Local, Mesh-Local, Weave Legacy ULA, Weave Thread ULA
+ *
+ *    TODO: If we ever need mesh local address added back,
+ *    increase the number of IPV6 and unmap
+ *    NL_WPAN_ADDR_THREAD_MESH to NL_WPAN_ADDR_INVALID
+                                         */
+#ifndef LWIP_IPV6_NUM_ADDRESSES
+#define LWIP_IPV6_NUM_ADDRESSES         3
+#endif
+
+#define LWIP_NOASSERT 1
+
+/**
+ * Disable 6LoWPAN/Thread debugging in LwIP
+ * TODO: move this into a more SiLabs centric location
+ */
+#define ZIP_DEBUG                      (LWIP_DBG_OFF)
+
+#endif /* ifdef CUSTOM_LWIPOPTS */
+
+#endif /* __LWIPOPTS_H__ */
diff --git a/lwippools.h b/lwippools.h
new file mode 100644
index 0000000..b9e9f3b
--- /dev/null
+++ b/lwippools.h
@@ -0,0 +1,14 @@
+/* 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 */
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..7fe50ee
--- /dev/null
+++ b/os/darwin/arch/perf.h
@@ -0,0 +1,31 @@
+/*
+ *
+ *    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)
+
+#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_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..3f6132e
--- /dev/null
+++ b/os/darwin/arch/sys_arch.h
@@ -0,0 +1,42 @@
+/*
+ *
+ *    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;
+#define sys_mutex_t 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..e13d55a
--- /dev/null
+++ b/os/freertos/arch/cc.h
@@ -0,0 +1,80 @@
+/*
+ *
+ *    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 <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#include <sys/time.h>
+
+// TODO: We really shouldn't be including a Nesty file in a product/platform agnostic file like this. 
+// What we really need is a lwipopts.h like file that allows us to shim away platform specific information.
+#include <nlerlog.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(...)  NL_LOG_DEBUG(lrLWIP, __VA_ARGS__);
+
+#define LWIP_PLATFORM_DIAG(x)			\
+	do {								\
+		_LWIP_PLATFORM_DIAG x			\
+	} while (0);
+
+#endif /* NL_LWIP_FREERTOS_ARCH_CC_H */
diff --git a/os/freertos/arch/lwip-logregions.h b/os/freertos/arch/lwip-logregions.h
new file mode 100644
index 0000000..8487509
--- /dev/null
+++ b/os/freertos/arch/lwip-logregions.h
@@ -0,0 +1,13 @@
+/* guard against multiple inclusion is deliberately left out */
+
+#ifdef NLER_SET_LOG_REGION_DEFAULTS
+    #ifndef NLER_LWIP_LOG_REGION_DEFAULT_SET
+    #define NLER_LWIP_LOG_REGION_DEFAULT_SET
+        nlLPDEBG,   /* lrLWIP */
+    #endif
+#else
+    #ifndef NLER_LWIP_LOG_REGION_DEFINED
+    #define NLER_LWIP_LOG_REGION_DEFINED
+        lrLWIP,
+    #endif
+#endif
diff --git a/os/freertos/arch/perf.h b/os/freertos/arch/perf.h
new file mode 100644
index 0000000..83ef38d
--- /dev/null
+++ b/os/freertos/arch/perf.h
@@ -0,0 +1,48 @@
+/*
+ *
+ *    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)
+
+#if defined(BUILD_FEATURE_NL_PROFILE)
+
+// Record the pbuf high watermark for this interval
+void nl_profile_interval_set_pbuf_highwatermark(uint32_t pbuf_count, uint32_t pool_idx);
+#define sys_profile_interval_set_pbuf_highwatermark(x,y) nl_profile_interval_set_pbuf_highwatermark(x,y)
+struct pbuf;
+void nl_profile_product_pbuf_allocate(const struct pbuf *pbuf);
+void nl_profile_product_pbuf_free(const struct pbuf *pbuf);
+#define sys_profile_pbuf_allocate(pbuf) nl_profile_product_pbuf_allocate(pbuf)
+#define sys_profile_pbuf_free(pbuf) nl_profile_product_pbuf_free(pbuf)
+void nl_profile_product_pbuf_transfer(const struct pbuf *new_pbuf, const struct pbuf *old_pbuf);
+#define sys_profile_pbuf_transfer(x, y) nl_profile_product_pbuf_transfer(x, y)
+
+#else /* defined(BUILD_FEATURE_NL_PROFILE) */
+
+#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 /* defined(BUILD_FEATURE_NL_PROFILE) */
+
+#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..5a8d16b
--- /dev/null
+++ b/os/linux/arch/cc.h
@@ -0,0 +1,74 @@
+/*
+ *
+ *    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__)
+#define BYTE_ORDER LITTLE_ENDIAN
+#elif defined(__BIG_ENDIAN__)
+#define BYTE_ORDER 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_LINUX_ARCH_CC_H */
diff --git a/os/linux/arch/perf.h b/os/linux/arch/perf.h
new file mode 100644
index 0000000..d6bf440
--- /dev/null
+++ b/os/linux/arch/perf.h
@@ -0,0 +1,31 @@
+/*
+ *
+ *    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)
+#define sys_profile_pbuf_allocate(pbuf)
+#define sys_profile_pbuf_free(pbuf)
+#define sys_profile_pbuf_transfer(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..43ac590
--- /dev/null
+++ b/os/linux/arch/sys_arch.h
@@ -0,0 +1,42 @@
+/*
+ *
+ *    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;
+#define sys_mutex_t sys_sem_t
+typedef struct sys_thread *sys_thread_t;
+
+
+#endif /* NL_LWIP_LINUX_ARCH_SYS_ARCH_H */
