IPv4/6 reassembly
[vpp.git] / src / vnet / ip / ip6_packet.h
index 9bf19ed..6b72437 100644 (file)
@@ -82,21 +82,23 @@ typedef CLIB_PACKED (union {
 #define ip46_address_is_equal(a1, a2)  (((a1)->as_u64[0] == (a2)->as_u64[0]) \
                                          && ((a1)->as_u64[1] == (a2)->as_u64[1]))
 
-always_inline void
-ip46_from_addr_buf (u32 is_ipv6, u8 * buf, ip46_address_t * ip)
+always_inline ip46_address_t
+to_ip46 (u32 is_ipv6, u8 * buf)
 {
+  ip46_address_t ip;
   if (is_ipv6)
-    ip->ip6 = *((ip6_address_t *) buf);
+    ip.ip6 = *((ip6_address_t *) buf);
   else
-    ip46_address_set_ip4 (ip, (ip4_address_t *) buf);
+    ip46_address_set_ip4 (&ip, (ip4_address_t *) buf);
+  return ip;
 }
 
+
 always_inline void
 ip6_addr_fib_init (ip6_address_fib_t * addr_fib, ip6_address_t * address,
                   u32 fib_index)
 {
-  addr_fib->ip6_addr.as_u64[0] = address->as_u64[0];
-  addr_fib->ip6_addr.as_u64[1] = address->as_u64[1];
+  addr_fib->ip6_addr = *address;
   addr_fib->fib_index = fib_index;
 }
 
@@ -339,6 +341,12 @@ typedef struct
   ip6_address_t src_address, dst_address;
 } ip6_header_t;
 
+always_inline u8
+ip6_traffic_class (ip6_header_t * i)
+{
+  return (i->ip_version_traffic_class_and_flow_label & 0x0FF00000) >> 20;
+}
+
 always_inline void *
 ip6_next_header (ip6_header_t * i)
 {
@@ -484,7 +492,7 @@ else                                                    \
   {                                                     \
     (p) = ip6_ext_next_header((p));                     \
   }                                                     \
-  if ( ip6_ext_hdr((p)->next_hdr) == (t))               \
+  if ( ((p)->next_hdr) == (t))                          \
   {                                                     \
     (m) = (void *)(ip6_ext_next_header((p)));           \
   }                                                     \
@@ -511,6 +519,9 @@ typedef CLIB_PACKED (struct {
 #define ip6_frag_hdr_offset(hdr) \
   (clib_net_to_host_u16((hdr)->fragment_offset_and_more) >> 3)
 
+#define ip6_frag_hdr_offset_bytes(hdr) \
+  (8 * ip6_frag_hdr_offset(hdr))
+
 #define ip6_frag_hdr_more(hdr) \
   (clib_net_to_host_u16((hdr)->fragment_offset_and_more) & 0x1)