diff --git a/src/vnet/ip/ip4_packet.h b/src/vnet/ip/ip4_packet.h
index c41a802..fa86229 100644
--- a/src/vnet/ip/ip4_packet.h
+++ b/src/vnet/ip/ip4_packet.h
@@ -64,8 +64,8 @@
 } ip4_address_fib_t;
 
 always_inline void
-ip4_addr_fib_init (ip4_address_fib_t * addr_fib, ip4_address_t * address,
-		   u32 fib_index)
+ip4_addr_fib_init (ip4_address_fib_t * addr_fib,
+		   const ip4_address_t * address, u32 fib_index)
 {
   clib_memcpy (&addr_fib->ip4_addr, address, sizeof (addr_fib->ip4_addr));
   addr_fib->fib_index = fib_index;
@@ -84,7 +84,7 @@
 
 /* If address is a valid netmask, return length of mask. */
 always_inline uword
-ip4_address_netmask_length (ip4_address_t * a)
+ip4_address_netmask_length (const ip4_address_t * a)
 {
   uword result = 0;
   uword i;
@@ -196,27 +196,27 @@
 #define IP4_ROUTER_ALERT_OPTION 20
 
 always_inline int
-ip4_get_fragment_offset (ip4_header_t * i)
+ip4_get_fragment_offset (const ip4_header_t * i)
 {
   return clib_net_to_host_u16 (i->flags_and_fragment_offset) & 0x1fff;
 }
 
 always_inline int
-ip4_get_fragment_more (ip4_header_t * i)
+ip4_get_fragment_more (const ip4_header_t * i)
 {
   return clib_net_to_host_u16 (i->flags_and_fragment_offset) &
     IP4_HEADER_FLAG_MORE_FRAGMENTS;
 }
 
 always_inline int
-ip4_is_fragment (ip4_header_t * i)
+ip4_is_fragment (const ip4_header_t * i)
 {
   return (i->flags_and_fragment_offset &
 	  clib_net_to_host_u16 (0x1fff | IP4_HEADER_FLAG_MORE_FRAGMENTS));
 }
 
 always_inline int
-ip4_is_first_fragment (ip4_header_t * i)
+ip4_is_first_fragment (const ip4_header_t * i)
 {
   return (i->flags_and_fragment_offset &
 	  clib_net_to_host_u16 (0x1fff | IP4_HEADER_FLAG_MORE_FRAGMENTS)) ==
@@ -225,13 +225,13 @@
 
 /* Fragment offset in bytes. */
 always_inline int
-ip4_get_fragment_offset_bytes (ip4_header_t * i)
+ip4_get_fragment_offset_bytes (const ip4_header_t * i)
 {
   return 8 * ip4_get_fragment_offset (i);
 }
 
 always_inline int
-ip4_header_bytes (ip4_header_t * i)
+ip4_header_bytes (const ip4_header_t * i)
 {
   return sizeof (u32) * (i->ip_version_and_header_length & 0xf);
 }
@@ -314,7 +314,7 @@
 } while (0)
 
 always_inline uword
-ip4_address_is_multicast (ip4_address_t * a)
+ip4_address_is_multicast (const ip4_address_t * a)
 {
   return (a->data[0] & 0xf0) == 0xe0;
 }
@@ -328,9 +328,10 @@
 }
 
 always_inline void
-ip4_multicast_ethernet_address (u8 * ethernet_address, ip4_address_t * a)
+ip4_multicast_ethernet_address (u8 * ethernet_address,
+				const ip4_address_t * a)
 {
-  u8 *d = a->as_u8;
+  const u8 *d = a->as_u8;
 
   ethernet_address[0] = 0x01;
   ethernet_address[1] = 0x00;
diff --git a/src/vnet/ip/ip6_packet.h b/src/vnet/ip/ip6_packet.h
index ceaa7ec..b1c9be4 100644
--- a/src/vnet/ip/ip6_packet.h
+++ b/src/vnet/ip/ip6_packet.h
@@ -108,8 +108,8 @@
 
 
 always_inline void
-ip6_addr_fib_init (ip6_address_fib_t * addr_fib, ip6_address_t * address,
-		   u32 fib_index)
+ip6_addr_fib_init (ip6_address_fib_t * addr_fib,
+		   const ip6_address_t * address, u32 fib_index)
 {
   addr_fib->ip6_addr = *address;
   addr_fib->fib_index = fib_index;
@@ -155,13 +155,13 @@
 } ip6_multicast_link_local_group_id_t;
 
 always_inline uword
-ip6_address_is_multicast (ip6_address_t * a)
+ip6_address_is_multicast (const ip6_address_t * a)
 {
   return a->as_u8[0] == 0xff;
 }
 
 always_inline uword
-ip46_address_is_multicast (ip46_address_t * a)
+ip46_address_is_multicast (const ip46_address_t * a)
 {
   return ip46_address_is_ip4 (a) ? ip4_address_is_multicast (&a->ip4) :
     ip6_address_is_multicast (&a->ip6);
@@ -191,7 +191,7 @@
 
 always_inline void
 ip6_link_local_address_from_ethernet_address (ip6_address_t * a,
-					      u8 * ethernet_address)
+					      const u8 * ethernet_address)
 {
   a->as_u64[0] = a->as_u64[1] = 0;
   a->as_u16[0] = clib_host_to_net_u16 (0xfe80);
@@ -218,7 +218,7 @@
 }
 
 always_inline uword
-ip6_address_is_equal (ip6_address_t * a, ip6_address_t * b)
+ip6_address_is_equal (const ip6_address_t * a, const ip6_address_t * b)
 {
   int i;
   for (i = 0; i < ARRAY_LEN (a->as_uword); i++)
@@ -228,8 +228,9 @@
 }
 
 always_inline uword
-ip6_address_is_equal_masked (ip6_address_t * a, ip6_address_t * b,
-			     ip6_address_t * mask)
+ip6_address_is_equal_masked (const ip6_address_t * a,
+			     const ip6_address_t * b,
+			     const ip6_address_t * mask)
 {
   int i;
   for (i = 0; i < ARRAY_LEN (a->as_uword); i++)
@@ -245,7 +246,7 @@
 }
 
 always_inline void
-ip6_address_mask (ip6_address_t * a, ip6_address_t * mask)
+ip6_address_mask (ip6_address_t * a, const ip6_address_t * mask)
 {
   int i;
   for (i = 0; i < ARRAY_LEN (a->as_uword); i++)
@@ -276,7 +277,7 @@
 }
 
 always_inline uword
-ip6_address_is_zero (ip6_address_t * a)
+ip6_address_is_zero (const ip6_address_t * a)
 {
   int i;
   for (i = 0; i < ARRAY_LEN (a->as_uword); i++)
@@ -287,21 +288,18 @@
 
 /* Check for unspecified address ::0 */
 always_inline uword
-ip6_address_is_unspecified (ip6_address_t * a)
+ip6_address_is_unspecified (const ip6_address_t * a)
 {
   return ip6_address_is_zero (a);
 }
 
 /* Check for loopback address ::1 */
 always_inline uword
-ip6_address_is_loopback (ip6_address_t * a)
+ip6_address_is_loopback (const ip6_address_t * a)
 {
-  uword is_loopback;
-  u8 save = a->as_u8[15];
-  a->as_u8[15] = save ^ 1;
-  is_loopback = ip6_address_is_zero (a);
-  a->as_u8[15] = save;
-  return is_loopback;
+  return (a->as_u64[0] == 0 &&
+	  a->as_u32[2] == 0 &&
+	  a->as_u16[6] == 0 && a->as_u8[14] == 0 && a->as_u8[15] == 1);
 }
 
 /* Check for link local unicast fe80::/10. */
@@ -313,21 +311,21 @@
 
 /* Check for unique local unicast fc00::/7. */
 always_inline uword
-ip6_address_is_local_unicast (ip6_address_t * a)
+ip6_address_is_local_unicast (const ip6_address_t * a)
 {
   return (a->as_u8[0] & 0xfe) == 0xfc;
 }
 
 /* Check for unique global unicast 2000::/3. */
 always_inline uword
-ip6_address_is_global_unicast (ip6_address_t * a)
+ip6_address_is_global_unicast (const ip6_address_t * a)
 {
   return (a->as_u8[0] & 0xe0) == 0x20;
 }
 
 /* Check for solicited node multicast 0xff02::1:ff00:0/104 */
 always_inline uword
-ip6_is_solicited_node_multicast_address (ip6_address_t * a)
+ip6_is_solicited_node_multicast_address (const ip6_address_t * a)
 {
   return (a->as_u32[0] == clib_host_to_net_u32 (0xff020000)
 	  && a->as_u32[1] == 0
