diff --git a/client/Android.mk b/client/Android.mk
index 0332dea..e202534 100644
--- a/client/Android.mk
+++ b/client/Android.mk
@@ -17,6 +17,8 @@
 include $(CLEAR_VARS)
 
 LOCAL_C_INCLUDES := bionic/libc/dns/include system/netd/include
+LOCAL_CLANG := true
+LOCAL_CPPFLAGS := -std=c++11 -Wall -Werror
 LOCAL_MODULE := libnetd_client
 LOCAL_SRC_FILES := FwmarkClient.cpp NetdClient.cpp
 
diff --git a/server/Android.mk b/server/Android.mk
index f2c9c4b..83184d3 100644
--- a/server/Android.mk
+++ b/server/Android.mk
@@ -1,64 +1,81 @@
-LOCAL_PATH:= $(call my-dir)
+# Copyright (C) 2014 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
 
 include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES:=                                      \
-                  BandwidthController.cpp              \
-                  ClatdController.cpp                  \
-                  CommandListener.cpp                  \
-                  DnsProxyListener.cpp                 \
-                  FirewallController.cpp               \
-                  FwmarkServer.cpp                     \
-                  IdletimerController.cpp              \
-                  InterfaceController.cpp              \
-                  MDnsSdListener.cpp                   \
-                  NatController.cpp                    \
-                  NetdCommand.cpp                      \
-                  NetdConstants.cpp                    \
-                  NetlinkHandler.cpp                   \
-                  NetlinkManager.cpp                   \
-                  NetworkController.cpp                \
-                  Permission.cpp                       \
-                  PermissionsController.cpp            \
-                  PppController.cpp                    \
-                  ResolverController.cpp               \
-                  RouteController.cpp                  \
-                  SecondaryTableController.cpp         \
-                  SoftapController.cpp                 \
-                  TetherController.cpp                 \
-                  oem_iptables_hook.cpp                \
-                  main.cpp                             \
-
-
-LOCAL_MODULE:= netd
-
 LOCAL_C_INCLUDES := \
-                    external/mdnsresponder/mDNSShared \
-                    external/openssl/include \
-                    external/stlport/stlport \
-                    bionic \
-                    bionic/libc/dns/include \
-                    system/netd/include \
-                    $(call include-path-for, libhardware_legacy)/hardware_legacy
+        $(call include-path-for, libhardware_legacy)/hardware_legacy \
+        bionic \
+        bionic/libc/dns/include \
+        external/libcxx/include \
+        external/mdnsresponder/mDNSShared \
+        external/openssl/include \
+        system/netd/include \
 
-LOCAL_CFLAGS := -Werror=format
+LOCAL_CLANG := true
+LOCAL_CPPFLAGS := -std=c++11 -Wall -Werror
+LOCAL_MODULE := netd
 
-LOCAL_SHARED_LIBRARIES := libstlport libsysutils liblog libcutils libnetutils \
-                          libcrypto libhardware_legacy libmdnssd libdl \
-                          liblogwrap
+LOCAL_SHARED_LIBRARIES := \
+        libcrypto \
+        libcutils \
+        libdl \
+        libhardware_legacy \
+        liblog \
+        liblogwrap \
+        libmdnssd \
+        libnetutils \
+        libstlport \
+        libsysutils \
+
+LOCAL_SRC_FILES := \
+        BandwidthController.cpp \
+        ClatdController.cpp \
+        CommandListener.cpp \
+        DnsProxyListener.cpp \
+        FirewallController.cpp \
+        FwmarkServer.cpp \
+        IdletimerController.cpp \
+        InterfaceController.cpp \
+        MDnsSdListener.cpp \
+        NatController.cpp \
+        NetdCommand.cpp \
+        NetdConstants.cpp \
+        NetlinkHandler.cpp \
+        NetlinkManager.cpp \
+        NetworkController.cpp \
+        Permission.cpp \
+        PermissionsController.cpp \
+        PppController.cpp \
+        ResolverController.cpp \
+        RouteController.cpp \
+        SecondaryTableController.cpp \
+        SoftapController.cpp \
+        TetherController.cpp \
+        main.cpp \
+        oem_iptables_hook.cpp \
 
 include $(BUILD_EXECUTABLE)
 
 include $(CLEAR_VARS)
-LOCAL_SRC_FILES:=          \
-                  ndc.c \
 
-LOCAL_MODULE:= ndc
-
-LOCAL_C_INCLUDES :=
-
-LOCAL_CFLAGS :=
-
+LOCAL_CFLAGS := -Wall -Werror
+LOCAL_CLANG := true
+LOCAL_MODULE := ndc
 LOCAL_SHARED_LIBRARIES := libcutils
+LOCAL_SRC_FILES := ndc.c
 
 include $(BUILD_EXECUTABLE)
diff --git a/server/BandwidthController.cpp b/server/BandwidthController.cpp
index a7c2c2c..4f9344c 100644
--- a/server/BandwidthController.cpp
+++ b/server/BandwidthController.cpp
@@ -405,7 +405,6 @@
                                                std::list<int /*appUid*/> &specialAppUids,
                                                IptJumpOp jumpHandling, SpecialAppOp appOp) {
 
-    char cmd[MAX_CMD_LEN];
     int uidNum;
     const char *failLogTemplate;
     IptOp op;
@@ -595,7 +594,6 @@
 }
 
 int BandwidthController::setInterfaceSharedQuota(const char *iface, int64_t maxBytes) {
-    char cmd[MAX_CMD_LEN];
     char ifn[MAX_IFACENAME_LEN];
     int res = 0;
     std::string quotaCmd;
@@ -1266,7 +1264,6 @@
     int res;
     std::string fullCmd;
     FILE *iptOutput;
-    const char *cmd;
 
     /*
      * Why not use some kind of lib to talk to iptables?
@@ -1292,10 +1289,8 @@
 }
 
 void BandwidthController::flushExistingCostlyTables(bool doClean) {
-    int res;
     std::string fullCmd;
     FILE *iptOutput;
-    const char *cmd;
 
     /* Only lookup ip4 table names as ip6 will have the same tables ... */
     fullCmd = IPTABLES_PATH;
diff --git a/server/CommandListener.cpp b/server/CommandListener.cpp
index 72ff411..154050e 100644
--- a/server/CommandListener.cpp
+++ b/server/CommandListener.cpp
@@ -546,7 +546,6 @@
             ALOGD("Setting iface cfg");
 
             struct in_addr addr;
-            unsigned flags = 0;
             int index = 5;
 
             ifc_init();
@@ -686,7 +685,7 @@
 }
 
 int CommandListener::ListTtysCmd::runCommand(SocketClient *cli,
-                                             int argc, char **argv) {
+                                             int /* argc */, char ** /* argv */) {
     TtyCollection *tlist = sPppCtrl->getTtyList();
     TtyCollection::iterator it;
 
@@ -933,7 +932,6 @@
 int CommandListener::SoftapCmd::runCommand(SocketClient *cli,
                                         int argc, char **argv) {
     int rc = ResponseCode::SoftapStatusResult;
-    int flag = 0;
     char *retbuf = NULL;
 
     if (sSoftapCtrl == NULL) {
@@ -979,7 +977,6 @@
 
 int CommandListener::ResolverCmd::runCommand(SocketClient *cli, int argc, char **margv) {
     int rc = 0;
-    struct in_addr addr;
     const char **argv = const_cast<const char **>(margv);
 
     if (argc < 2) {
diff --git a/server/Fwmark.h b/server/Fwmark.h
index f2a0f57..768219d 100644
--- a/server/Fwmark.h
+++ b/server/Fwmark.h
@@ -18,7 +18,6 @@
 #define NETD_SERVER_FWMARK_H
 
 #include "Permission.h"
-#include "utils/Debug.h"
 
 #include <stdint.h>
 
@@ -35,11 +34,6 @@
 
 static const unsigned FWMARK_NET_ID_MASK = 0xffff;
 
-namespace android {
-
-// Ensure that all the fwmark fields fit into 32 bits.
-COMPILE_TIME_ASSERT(sizeof(Fwmark) == sizeof(uint32_t));
-
-}  // namespace android
+static_assert(sizeof(Fwmark) == sizeof(uint32_t), "The entire fwmark must fit into 32 bits");
 
 #endif  // NETD_SERVER_FWMARK_H
diff --git a/server/MDnsSdListener.cpp b/server/MDnsSdListener.cpp
index 7160028..7e16a6c 100644
--- a/server/MDnsSdListener.cpp
+++ b/server/MDnsSdListener.cpp
@@ -93,8 +93,8 @@
     return;
 }
 
-void MDnsSdListenerDiscoverCallback(DNSServiceRef sdRef, DNSServiceFlags flags,
-        uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *serviceName,
+void MDnsSdListenerDiscoverCallback(DNSServiceRef /* sdRef */, DNSServiceFlags flags,
+        uint32_t /* interfaceIndex */, DNSServiceErrorType errorCode, const char *serviceName,
         const char *regType, const char *replyDomain, void *inContext) {
     MDnsSdListener::Context *context = reinterpret_cast<MDnsSdListener::Context *>(inContext);
     char *msg;
@@ -186,9 +186,9 @@
     return;
 }
 
-void MDnsSdListenerRegisterCallback(DNSServiceRef sdRef, DNSServiceFlags flags,
-        DNSServiceErrorType errorCode, const char *serviceName, const char *regType,
-        const char *domain, void *inContext) {
+void MDnsSdListenerRegisterCallback(DNSServiceRef /* sdRef */, DNSServiceFlags /* flags */,
+        DNSServiceErrorType errorCode, const char *serviceName, const char * /* regType */,
+        const char * /* domain */, void *inContext) {
     MDnsSdListener::Context *context = reinterpret_cast<MDnsSdListener::Context *>(inContext);
     char *msg;
     int refNumber = context->mRefNumber;
@@ -240,9 +240,10 @@
     return;
 }
 
-void MDnsSdListenerResolveCallback(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interface,
-        DNSServiceErrorType errorCode, const char *fullname, const char *hosttarget, uint16_t port,
-        uint16_t txtLen, const unsigned char *txtRecord, void *inContext) {
+void MDnsSdListenerResolveCallback(DNSServiceRef /* sdRef */, DNSServiceFlags /* flags */,
+        uint32_t /* interface */, DNSServiceErrorType errorCode, const char *fullname,
+        const char *hosttarget, uint16_t port, uint16_t txtLen,
+        const unsigned char * /* txtRecord */, void *inContext) {
     MDnsSdListener::Context *context = reinterpret_cast<MDnsSdListener::Context *>(inContext);
     char *msg;
     int refNumber = context->mRefNumber;
@@ -295,8 +296,8 @@
     return;
 }
 
-void MDnsSdListenerGetAddrInfoCallback(DNSServiceRef sdRef, DNSServiceFlags flags,
-        uint32_t interface, DNSServiceErrorType errorCode, const char *hostname,
+void MDnsSdListenerGetAddrInfoCallback(DNSServiceRef /* sdRef */, DNSServiceFlags /* flags */,
+        uint32_t /* interface */, DNSServiceErrorType errorCode, const char *hostname,
         const struct sockaddr *const sa, uint32_t ttl, void *inContext) {
     MDnsSdListener::Context *context = reinterpret_cast<MDnsSdListener::Context *>(inContext);
     int refNumber = context->mRefNumber;
@@ -353,7 +354,7 @@
     return;
 }
 
-void MDnsSdListenerSetHostnameCallback(DNSServiceRef sdRef, DNSServiceFlags flags,
+void MDnsSdListenerSetHostnameCallback(DNSServiceRef /* sdRef */, DNSServiceFlags /* flags */,
         DNSServiceErrorType errorCode, const char *hostname, void *inContext) {
     MDnsSdListener::Context *context = reinterpret_cast<MDnsSdListener::Context *>(inContext);
     char *msg;
@@ -373,19 +374,19 @@
 }
 
 
-int MDnsSdListener::Handler::ifaceNameToI(const char *iface) {
+int MDnsSdListener::Handler::ifaceNameToI(const char * /* iface */) {
     return 0;
 }
 
-const char *MDnsSdListener::Handler::iToIfaceName(int i) {
+const char *MDnsSdListener::Handler::iToIfaceName(int /* i */) {
     return NULL;
 }
 
-DNSServiceFlags MDnsSdListener::Handler::iToFlags(int i) {
+DNSServiceFlags MDnsSdListener::Handler::iToFlags(int /* i */) {
     return 0;
 }
 
-int MDnsSdListener::Handler::flagsToI(DNSServiceFlags flags) {
+int MDnsSdListener::Handler::flagsToI(DNSServiceFlags /* flags */) {
     return 0;
 }
 
@@ -527,6 +528,27 @@
     return NULL;
 }
 
+#define NAP_TIME 200  // 200 ms between polls
+static int wait_for_property(const char *name, const char *desired_value, int maxwait)
+{
+    char value[PROPERTY_VALUE_MAX] = {'\0'};
+    int maxnaps = (maxwait * 1000) / NAP_TIME;
+
+    if (maxnaps < 1) {
+        maxnaps = 1;
+    }
+
+    while (maxnaps-- > 0) {
+        usleep(NAP_TIME * 1000);
+        if (property_get(name, value, NULL)) {
+            if (desired_value == NULL || strcmp(value, desired_value) == 0) {
+                return 0;
+            }
+        }
+    }
+    return -1; /* failure */
+}
+
 int MDnsSdListener::Monitor::startService() {
     int result = 0;
     char property_value[PROPERTY_VALUE_MAX];
@@ -614,7 +636,6 @@
     if (VDBG) {
         ALOGD("MDnsSdListener::Monitor poll rescanning - size=%d, live=%d", mPollSize, mLiveCount);
     }
-    int count = 0;
     pthread_mutex_lock(&mHeadMutex);
     Element **prevPtr = &mHead;
     int i = 1;
@@ -707,27 +728,6 @@
     pthread_mutex_unlock(&mHeadMutex);
 }
 
-#define NAP_TIME 200  // 200 ms between polls
-static int wait_for_property(const char *name, const char *desired_value, int maxwait)
-{
-    char value[PROPERTY_VALUE_MAX] = {'\0'};
-    int maxnaps = (maxwait * 1000) / NAP_TIME;
-
-    if (maxnaps < 1) {
-        maxnaps = 1;
-    }
-
-    while (maxnaps-- > 0) {
-        usleep(NAP_TIME * 1000);
-        if (property_get(name, value, NULL)) {
-            if (desired_value == NULL || strcmp(value, desired_value) == 0) {
-                return 0;
-            }
-        }
-    }
-    return -1; /* failure */
-}
-
 void MDnsSdListener::Monitor::freeServiceRef(int id) {
     if (VDBG) ALOGD("freeServiceRef %d", id);
     pthread_mutex_lock(&mHeadMutex);
diff --git a/server/MDnsSdListener.h b/server/MDnsSdListener.h
index a3b14ad..e9c6066 100644
--- a/server/MDnsSdListener.h
+++ b/server/MDnsSdListener.h
@@ -135,6 +135,4 @@
     };
 };
 
-static int wait_for_property(const char *name, const char *desired_value, int maxwait);
-
 #endif
diff --git a/server/NatController.cpp b/server/NatController.cpp
index fbf5f8a..8391ad7 100644
--- a/server/NatController.cpp
+++ b/server/NatController.cpp
@@ -165,11 +165,9 @@
 //  0    1       2       3       4            5
 // nat enable intface extface addrcnt nated-ipaddr/prelength
 int NatController::enableNat(const int argc, char **argv) {
-    int i;
     int addrCount = atoi(argv[4]);
     const char *intIface = argv[2];
     const char *extIface = argv[3];
-    int tableNumber;
 
     ALOGV("enableNat(intIface=<%s>, extIface=<%s>)",intIface, extIface);
 
@@ -271,8 +269,7 @@
     if (!add) {
         return 0;
     }
-    char *pair_name, *proc_path;
-    int quota_fd;
+    char *pair_name;
     asprintf(&pair_name, "%s_%s", intIface, extIface);
 
     if (checkTetherCountingRuleExist(pair_name)) {
@@ -408,11 +405,9 @@
 //  0    1       2       3       4            5
 // nat enable intface extface addrcnt nated-ipaddr/prelength
 int NatController::disableNat(const int argc, char **argv) {
-    int i;
     int addrCount = atoi(argv[4]);
     const char *intIface = argv[2];
     const char *extIface = argv[3];
-    int tableNumber;
 
     if (!checkInterface(intIface) || !checkInterface(extIface)) {
         ALOGE("Invalid interface specified");
diff --git a/server/NetlinkHandler.cpp b/server/NetlinkHandler.cpp
index 9c2984f..4f421c5 100644
--- a/server/NetlinkHandler.cpp
+++ b/server/NetlinkHandler.cpp
@@ -90,7 +90,6 @@
         notifyQuotaLimitReached(alertName, iface);
 
     } else if (!strcmp(subsys, "xt_idletimer")) {
-        int action = evt->getAction();
         const char *label = evt->findParam("INTERFACE");
         const char *state = evt->findParam("STATE");
         const char *timestamp = evt->findParam("TIME_NS");
diff --git a/server/NetlinkManager.h b/server/NetlinkManager.h
index b7f011e..5187a59 100644
--- a/server/NetlinkManager.h
+++ b/server/NetlinkManager.h
@@ -32,7 +32,6 @@
     NetlinkHandler       *mUeventHandler;
     NetlinkHandler       *mRouteHandler;
     NetlinkHandler       *mQuotaHandler;
-    NetlinkHandler       *mIfaceIdleTimerHandler;
     int                  mUeventSock;
     int                  mRouteSock;
     int                  mQuotaSock;
diff --git a/server/RouteController.cpp b/server/RouteController.cpp
index 36773d7..592dc35 100644
--- a/server/RouteController.cpp
+++ b/server/RouteController.cpp
@@ -32,7 +32,10 @@
 const uint32_t RULE_PRIORITY_PER_NETWORK_NORMAL    = 17000;
 const uint32_t RULE_PRIORITY_DEFAULT_NETWORK       = 19000;
 const uint32_t RULE_PRIORITY_MAIN                  = 20000;
+// TODO: Uncomment once we are sure everything works.
+#if 0
 const uint32_t RULE_PRIORITY_UNREACHABLE           = 21000;
+#endif
 
 // TODO: These should be turned into per-UID tables once the kernel supports UID-based routing.
 const int ROUTE_TABLE_PRIVILEGED_LEGACY = RouteController::ROUTE_TABLE_OFFSET_FROM_INDEX - 901;
diff --git a/server/SoftapController.cpp b/server/SoftapController.cpp
index 7d5da95..3129513 100644
--- a/server/SoftapController.cpp
+++ b/server/SoftapController.cpp
@@ -114,7 +114,6 @@
 int SoftapController::setSoftap(int argc, char *argv[]) {
     char psk_str[2*SHA256_DIGEST_LENGTH+1];
     int ret = ResponseCode::SoftapStatusResult;
-    int i = 0;
     int fd;
     int hidden = 0;
     int channel = AP_CHANNEL_DEFAULT;
@@ -201,7 +200,6 @@
  */
 int SoftapController::fwReloadSoftap(int argc, char *argv[])
 {
-    int i = 0;
     char *fwpath = NULL;
 
     if (argc < 4) {
diff --git a/server/TetherController.cpp b/server/TetherController.cpp
index 32a0b43..93110e0 100644
--- a/server/TetherController.cpp
+++ b/server/TetherController.cpp
@@ -242,7 +242,6 @@
 }
 
 int TetherController::applyDnsInterfaces() {
-    int i;
     char daemonCmd[MAX_CMD_SIZE];
 
     strcpy(daemonCmd, "update_ifaces");
diff --git a/server/main.cpp b/server/main.cpp
index e09019d..11d4d40 100644
--- a/server/main.cpp
+++ b/server/main.cpp
@@ -36,8 +36,6 @@
 #include "MDnsSdListener.h"
 #include "FwmarkServer.h"
 
-static void coldboot(const char *path);
-static void sigchld_handler(int sig);
 static void blockSigpipe();
 
 int main() {
@@ -50,7 +48,6 @@
 
     ALOGI("Netd 1.0 starting");
 
-//    signal(SIGCHLD, sigchld_handler);
     blockSigpipe();
 
     if (!(nm = NetlinkManager::Instance())) {
@@ -105,56 +102,6 @@
     exit(0);
 }
 
-static void do_coldboot(DIR *d, int lvl)
-{
-    struct dirent *de;
-    int dfd, fd;
-
-    dfd = dirfd(d);
-
-    fd = openat(dfd, "uevent", O_WRONLY);
-    if(fd >= 0) {
-        write(fd, "add\n", 4);
-        close(fd);
-    }
-
-    while((de = readdir(d))) {
-        DIR *d2;
-
-        if (de->d_name[0] == '.')
-            continue;
-
-        if (de->d_type != DT_DIR && lvl > 0)
-            continue;
-
-        fd = openat(dfd, de->d_name, O_RDONLY | O_DIRECTORY);
-        if(fd < 0)
-            continue;
-
-        d2 = fdopendir(fd);
-        if(d2 == 0)
-            close(fd);
-        else {
-            do_coldboot(d2, lvl + 1);
-            closedir(d2);
-        }
-    }
-}
-
-static void coldboot(const char *path)
-{
-    DIR *d = opendir(path);
-    if(d) {
-        do_coldboot(d, 0);
-        closedir(d);
-    }
-}
-
-static void sigchld_handler(int sig) {
-    pid_t pid = wait(NULL);
-    ALOGD("Child process %d exited", pid);
-}
-
 static void blockSigpipe()
 {
     sigset_t mask;
