am 72f3126f: DO NOT MERGE: Remove unused variables

* commit '72f3126f6499cd9017b367f5c7e61cab1d99d080':
  DO NOT MERGE: Remove unused variables
diff --git a/Android.mk b/Android.mk
index b0d19d9..240b25b 100644
--- a/Android.mk
+++ b/Android.mk
@@ -3,6 +3,7 @@
 
 LOCAL_SRC_FILES:=clatd.c dump.c checksum.c translate.c icmp.c ipv4.c ipv6.c config.c dns64.c logging.c getaddr.c getroute.c netlink_callbacks.c netlink_msg.c setif.c setroute.c mtu.c
 
+LOCAL_CFLAGS := -Wall -Werror
 LOCAL_C_INCLUDES := external/libnl-headers
 LOCAL_STATIC_LIBRARIES := libnl_2
 LOCAL_SHARED_LIBRARIES := libcutils liblog
diff --git a/clatd.c b/clatd.c
index 43fb5c6..a0ee07d 100644
--- a/clatd.c
+++ b/clatd.c
@@ -82,7 +82,7 @@
 /* function: stop_loop
  * signal handler: stop the event loop
  */
-void stop_loop(int signal) {
+void stop_loop() {
   running = 0;
 }
 
diff --git a/clatd.conf b/clatd.conf
index 578da59..0d4b79e 100644
--- a/clatd.conf
+++ b/clatd.conf
@@ -11,7 +11,7 @@
 # get the plat_subnet from dns lookups (requires DNS64)
 plat_from_dns64 yes
 # hostname to use to lookup plat subnet. must contain only A records
-plat_from_dns64_hostname ipv4.google.com
+plat_from_dns64_hostname ipv4only.arpa
 
 # plat subnet to send ipv4 traffic to. This is a /96 subnet.
 # This setting only makes sense with: plat_from_dns64 no
diff --git a/ipv4.c b/ipv4.c
index 47f2422..b5cbf80 100644
--- a/ipv4.c
+++ b/ipv4.c
@@ -123,12 +123,14 @@
   // Calculate the pseudo-header checksum.
   checksum = ipv6_pseudo_header_checksum(0, ip6_targ, len_left);
 
-  if(nxthdr == IPPROTO_ICMPV6) {
+  if (nxthdr == IPPROTO_ICMPV6) {
     iov_len = icmp_packet(out, pos + 1, (const struct icmphdr *) next_header, checksum, len_left);
-  } else if(nxthdr == IPPROTO_TCP) {
+  } else if (nxthdr == IPPROTO_TCP) {
     iov_len = tcp_packet(out, pos + 1, (const struct tcphdr *) next_header, checksum, len_left);
-  } else if(nxthdr == IPPROTO_UDP) {
+  } else if (nxthdr == IPPROTO_UDP) {
     iov_len = udp_packet(out, pos + 1, (const struct udphdr *) next_header, checksum, len_left);
+  } else if (nxthdr == IPPROTO_GRE) {
+    iov_len = generic_packet(out, pos + 1, next_header, len_left);
   } else {
 #if CLAT_DEBUG
     logmsg_dbg(ANDROID_LOG_ERROR, "ip_packet/unknown protocol: %x",header->protocol);
diff --git a/ipv6.c b/ipv6.c
index d9dcc09..79303ec 100644
--- a/ipv6.c
+++ b/ipv6.c
@@ -42,8 +42,7 @@
  * len      - size of ip payload
  * returns: the highest position in the output clat_packet that's filled in
  */
-int icmp6_packet(clat_packet out, int pos, const struct icmp6_hdr *icmp6, uint32_t checksum,
-                 size_t len) {
+int icmp6_packet(clat_packet out, int pos, const struct icmp6_hdr *icmp6, size_t len) {
   const char *payload;
   size_t payload_size;
 
@@ -55,7 +54,7 @@
   payload = (const char *) (icmp6 + 1);
   payload_size = len - sizeof(struct icmp6_hdr);
 
-  return icmp6_to_icmp(out, pos, icmp6, checksum, payload, payload_size);
+  return icmp6_to_icmp(out, pos, icmp6, payload, payload_size);
 }
 
 /* function: log_bad_address
@@ -63,16 +62,18 @@
  * fmt     - printf-style format, use %s to place the address
  * badaddr - the bad address in question
  */
-void log_bad_address(const char *fmt, const struct in6_addr *src, const struct in6_addr *dst) {
 #if CLAT_DEBUG
+void log_bad_address(const char *fmt, const struct in6_addr *src, const struct in6_addr *dst) {
   char srcstr[INET6_ADDRSTRLEN];
   char dststr[INET6_ADDRSTRLEN];
 
   inet_ntop(AF_INET6, src, srcstr, sizeof(srcstr));
   inet_ntop(AF_INET6, dst, dststr, sizeof(dststr));
   logmsg_dbg(ANDROID_LOG_ERROR, fmt, srcstr, dststr);
-#endif
 }
+#else
+#define log_bad_address(fmt, src, dst)
+#endif
 
 /* function: ipv6_packet
  * takes an ipv6 packet and hands it off to the layer 4 protocol function
@@ -135,15 +136,16 @@
   checksum = ipv4_pseudo_header_checksum(0, ip_targ, len_left);
 
   // does not support IPv6 extension headers, this will drop any packet with them
-  if(protocol == IPPROTO_ICMP) {
-    iov_len = icmp6_packet(out, pos + 1, (const struct icmp6_hdr *) next_header, checksum,
-                           len_left);
-  } else if(ip6->ip6_nxt == IPPROTO_TCP) {
+  if (protocol == IPPROTO_ICMP) {
+    iov_len = icmp6_packet(out, pos + 1, (const struct icmp6_hdr *) next_header, len_left);
+  } else if (ip6->ip6_nxt == IPPROTO_TCP) {
     iov_len = tcp_packet(out, pos + 1, (const struct tcphdr *) next_header, checksum,
                          len_left);
-  } else if(ip6->ip6_nxt == IPPROTO_UDP) {
+  } else if (ip6->ip6_nxt == IPPROTO_UDP) {
     iov_len = udp_packet(out, pos + 1, (const struct udphdr *) next_header, checksum,
                          len_left);
+  } else if (ip6->ip6_nxt == IPPROTO_GRE) {
+    iov_len = generic_packet(out, pos + 1, next_header, len_left);
   } else {
 #if CLAT_DEBUG
     logmsg(ANDROID_LOG_ERROR, "ipv6_packet/unknown next header type: %x", ip6->ip6_nxt);
diff --git a/translate.c b/translate.c
index 71263fa..00ea0b9 100644
--- a/translate.c
+++ b/translate.c
@@ -149,7 +149,7 @@
   // Third-party ICMPv6 message. This may have been originated by an native IPv6 address.
   // In that case, the source IPv6 address can't be translated and we need to make up an IPv4
   // source address. For now, use 255.0.0.<ttl>, which at least looks useful in traceroute.
-  if (ip->saddr == (uint32_t) INADDR_NONE) {
+  if ((uint32_t) ip->saddr == INADDR_NONE) {
     ttl_guess = icmp_guess_ttl(old_header->ip6_hlim);
     ip->saddr = htonl((0xff << 24) + ttl_guess);
   }
@@ -236,12 +236,11 @@
  * translate ipv6 icmp to ipv4 icmp
  * out          - output packet
  * icmp6        - source packet icmp6 header
- * checksum     - pseudo-header checksum (unused)
  * payload      - icmp6 payload
  * payload_size - size of payload
  * returns: the highest position in the output clat_packet that's filled in
  */
-int icmp6_to_icmp(clat_packet out, int pos, const struct icmp6_hdr *icmp6, uint32_t checksum,
+int icmp6_to_icmp(clat_packet out, int pos, const struct icmp6_hdr *icmp6,
                   const char *payload, size_t payload_size) {
   struct icmphdr *icmp_targ = out[pos].iov_base;
   uint8_t icmp_type;
@@ -279,6 +278,22 @@
   return clat_packet_len;
 }
 
+/* function: generic_packet
+ * takes a generic IP packet and sets it up for translation
+ * out      - output packet
+ * pos      - position in the output packet of the transport header
+ * payload  - pointer to IP payload
+ * len      - size of ip payload
+ * returns: the highest position in the output clat_packet that's filled in
+ */
+int generic_packet(clat_packet out, int pos, const char *payload, size_t len) {
+  out[pos].iov_len = 0;
+  out[CLAT_POS_PAYLOAD].iov_base = (char *) payload;
+  out[CLAT_POS_PAYLOAD].iov_len = len;
+
+  return CLAT_POS_PAYLOAD + 1;
+}
+
 /* function: udp_packet
  * takes a udp packet and sets it up for translation
  * out      - output packet
diff --git a/translate.h b/translate.h
index 356050f..9f1ac15 100644
--- a/translate.h
+++ b/translate.h
@@ -54,9 +54,12 @@
 // Translate ICMP packets.
 int icmp_to_icmp6(clat_packet out, int pos, const struct icmphdr *icmp, uint32_t checksum,
                   const char *payload, size_t payload_size);
-int icmp6_to_icmp(clat_packet out, int pos, const struct icmp6_hdr *icmp6, uint32_t checksum,
+int icmp6_to_icmp(clat_packet out, int pos, const struct icmp6_hdr *icmp6,
                   const char *payload, size_t payload_size);
 
+// Translate generic IP packets.
+int generic_packet(clat_packet out, int pos, const char *payload, size_t len);
+
 // Translate TCP and UDP packets.
 int tcp_packet(clat_packet out, int pos, const struct tcphdr *tcp, uint32_t checksum, size_t len);
 int udp_packet(clat_packet out, int pos, const struct udphdr *udp, uint32_t checksum, size_t len);