VPP-307: Documentation for vnet/vnet/vxlan-gpe 06/2506/4
authorKeith Burns (alagalah) <alagalah@gmail.com>
Thu, 25 Aug 2016 18:21:39 +0000 (11:21 -0700)
committerDave Barach <openvpp@barachs.net>
Mon, 29 Aug 2016 11:53:04 +0000 (11:53 +0000)
Change-Id: Iaab6f4b63ed0d986be1ac0636c692b46098ad54d
Signed-off-by: Keith Burns (alagalah) <alagalah@gmail.com>
vnet/vnet/vxlan-gpe/decap.c
vnet/vnet/vxlan-gpe/dir.dox [new file with mode: 0644]
vnet/vnet/vxlan-gpe/encap.c
vnet/vnet/vxlan-gpe/vxlan_gpe.c
vnet/vnet/vxlan-gpe/vxlan_gpe.h
vnet/vnet/vxlan-gpe/vxlan_gpe_packet.h

index 7f32cbd..70cf08e 100644 (file)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+/**
+ *  @file
+ *  @brief Functions for decapsulating VXLAN GPE tunnels
+ *
+*/
 
 #include <vlib/vlib.h>
 #include <vnet/pg/pg.h>
 
 vlib_node_registration_t vxlan_gpe_input_node;
 
+/**
+ * @brief Struct for VXLAN GPE decap packet tracing
+ *
+ */
 typedef struct {
   u32 next_index;
   u32 tunnel_index;
   u32 error;
 } vxlan_gpe_rx_trace_t;
 
+/**
+ * @brief Tracing function for VXLAN GPE packet decapsulation
+ *
+ * @param *s
+ * @param *args
+ *
+ * @return *s
+ *
+ */
 static u8 * format_vxlan_gpe_rx_trace (u8 * s, va_list * args)
 {
   CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *);
@@ -46,7 +64,15 @@ static u8 * format_vxlan_gpe_rx_trace (u8 * s, va_list * args)
   return s;
 }
 
-
+/**
+ * @brief Tracing function for VXLAN GPE packet decapsulation including length
+ *
+ * @param *s
+ * @param *args
+ *
+ * @return *s
+ *
+ */
 static u8 * format_vxlan_gpe_with_length (u8 * s, va_list * args)
 {
   CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *);
@@ -56,6 +82,25 @@ static u8 * format_vxlan_gpe_with_length (u8 * s, va_list * args)
   return s;
 }
 
+/**
+ * @brief Common processing for IPv4 and IPv6 VXLAN GPE decap dispatch functions
+ *
+ * It is worth noting that other than trivial UDP forwarding (transit), VXLAN GPE
+ * tunnels are "terminate local". This means that there is no "TX" interface for this
+ * decap case, so that field in the buffer_metadata can be "used for something else".
+ * The something else in this case is, for the IPv4/IPv6 inner-packet type case, the
+ * FIB index used to look up the inner-packet's adjacency.
+ *
+ *      vnet_buffer(b0)->sw_if_index[VLIB_TX] = t0->decap_fib_index;
+ *
+ * @param *vm
+ * @param *node
+ * @param *from_frame
+ * @param ip_ip4
+ *
+ * @return from_frame->n_vectors
+ *
+ */
 always_inline uword
 vxlan_gpe_input (vlib_main_t * vm,
                      vlib_node_runtime_t * node,
@@ -250,7 +295,7 @@ vxlan_gpe_input (vlib_main_t * vm,
       /* Required to make the l2 tag push / pop code work on l2 subifs */
       vnet_update_l2_len (b0);
 
-      /*
+      /**
        * ip[46] lookup in the configured FIB
        */
       vnet_buffer(b0)->sw_if_index[VLIB_TX] = t0->decap_fib_index;
@@ -545,6 +590,17 @@ vxlan_gpe_input (vlib_main_t * vm,
   return from_frame->n_vectors;
 }
 
+/**
+ * @brief Graph processing dispatch function for IPv4 VXLAN GPE
+ *
+ * @node vxlan4-gpe-input
+ * @param *vm
+ * @param *node
+ * @param *from_frame
+ *
+ * @return from_frame->n_vectors
+ *
+ */
 static uword
 vxlan4_gpe_input (vlib_main_t * vm, vlib_node_runtime_t * node,
                   vlib_frame_t * from_frame)
@@ -552,6 +608,17 @@ vxlan4_gpe_input (vlib_main_t * vm, vlib_node_runtime_t * node,
   return vxlan_gpe_input (vm, node, from_frame, /* is_ip4 */1);
 }
 
+/**
+ * @brief Graph processing dispatch function for IPv6 VXLAN GPE
+ *
+ * @node vxlan6-gpe-input
+ * @param *vm
+ * @param *node
+ * @param *from_frame
+ *
+ * @return from_frame->n_vectors - uword
+ *
+ */
 static uword
 vxlan6_gpe_input (vlib_main_t * vm, vlib_node_runtime_t * node,
                   vlib_frame_t * from_frame)
@@ -559,6 +626,9 @@ vxlan6_gpe_input (vlib_main_t * vm, vlib_node_runtime_t * node,
   return vxlan_gpe_input (vm, node, from_frame, /* is_ip4 */0);
 }
 
+/**
+ * @brief VXLAN GPE error strings
+ */
 static char * vxlan_gpe_error_strings[] = {
 #define vxlan_gpe_error(n,s) s,
 #include <vnet/vxlan-gpe/vxlan_gpe_error.def>
@@ -587,7 +657,7 @@ VLIB_REGISTER_NODE (vxlan4_gpe_input_node) = {
   // $$$$ .unformat_buffer = unformat_vxlan_gpe_header,
 };
 
-VLIB_NODE_FUNCTION_MULTIARCH (vxlan4_gpe_input_node, vxlan4_gpe_input)
+VLIB_NODE_FUNCTION_MULTIARCH (vxlan4_gpe_input_node, vxlan4_gpe_input);
 
 VLIB_REGISTER_NODE (vxlan6_gpe_input_node) = {
   .function = vxlan6_gpe_input,
@@ -610,4 +680,4 @@ VLIB_REGISTER_NODE (vxlan6_gpe_input_node) = {
   // $$$$ .unformat_buffer = unformat_vxlan_gpe_header,
 };
 
-VLIB_NODE_FUNCTION_MULTIARCH (vxlan6_gpe_input_node, vxlan6_gpe_input)
+VLIB_NODE_FUNCTION_MULTIARCH (vxlan6_gpe_input_node, vxlan6_gpe_input);
diff --git a/vnet/vnet/vxlan-gpe/dir.dox b/vnet/vnet/vxlan-gpe/dir.dox
new file mode 100644 (file)
index 0000000..c154733
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright (c) 2013 Cisco and/or its affiliates.
+ * 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.
+ */
+/**
+ @dir
+ @brief VXLAN GPE 
+
+ Based on IETF: draft-quinn-vxlan-gpe-03.txt
+
+Abstract
+
+   This draft describes extending Virtual eXtensible Local Area Network
+   (VXLAN), via changes to the VXLAN header, with three new
+   capabilities: support for multi-protocol encapsulation, operations,
+   administration and management (OAM) signaling and explicit
+   versioning.
+
+ See file: vxlan-gpe-rfc.txt 
+*/
\ No newline at end of file
index ba0eca2..3f6f43c 100644 (file)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+/**
+ *  @file
+ *  @brief Functions for encapsulating VXLAN GPE tunnels
+ *
+*/
 #include <vppinfra/error.h>
 #include <vppinfra/hash.h>
 #include <vnet/vnet.h>
 #include <vnet/ethernet/ethernet.h>
 #include <vnet/vxlan-gpe/vxlan_gpe.h>
 
-/* Statistics (not really errors) */
+/** Statistics (not really errors) */
 #define foreach_vxlan_gpe_encap_error    \
 _(ENCAPSULATED, "good packets encapsulated")
 
+/**
+ * @brief VXLAN GPE encap error strings
+ */
 static char * vxlan_gpe_encap_error_strings[] = {
 #define _(sym,string) string,
   foreach_vxlan_gpe_encap_error
 #undef _
 };
 
+/**
+ * @brief Struct for VXLAN GPE errors/counters
+ */
 typedef enum {
 #define _(sym,str) VXLAN_GPE_ENCAP_ERROR_##sym,
     foreach_vxlan_gpe_encap_error
@@ -36,6 +47,9 @@ typedef enum {
     VXLAN_GPE_ENCAP_N_ERROR,
 } vxlan_gpe_encap_error_t;
 
+/**
+ * @brief Struct for defining VXLAN GPE next nodes
+ */
 typedef enum {
   VXLAN_GPE_ENCAP_NEXT_IP4_LOOKUP,
   VXLAN_GPE_ENCAP_NEXT_IP6_LOOKUP,
@@ -43,22 +57,43 @@ typedef enum {
   VXLAN_GPE_ENCAP_N_NEXT
 } vxlan_gpe_encap_next_t;
 
+/**
+ * @brief Struct for tracing VXLAN GPE encapsulated packets
+ */
 typedef struct {
   u32 tunnel_index;
 } vxlan_gpe_encap_trace_t;
 
-
+/**
+ * @brief Trace of packets encapsulated in VXLAN GPE
+ *
+ * @param *s
+ * @param *args
+ *
+ * @return *s
+ *
+ */
 u8 * format_vxlan_gpe_encap_trace (u8 * s, va_list * args)
 {
   CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *);
   CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *);
-  vxlan_gpe_encap_trace_t * t 
+  vxlan_gpe_encap_trace_t * t
       = va_arg (*args, vxlan_gpe_encap_trace_t *);
 
   s = format (s, "VXLAN-GPE-ENCAP: tunnel %d", t->tunnel_index);
   return s;
 }
 
+/**
+ * @brief Instantiates UDP + VXLAN-GPE header then set next node to IP4|6 lookup
+ *
+ * @param *ngm
+ * @param *b0
+ * @param *t0 contains rewrite header
+ * @param *next0 relative index of next dispatch function (next node)
+ * @param is_v4 Is this IPv4? (or IPv6)
+ *
+ */
 always_inline void
 vxlan_gpe_encap_one_inline (vxlan_gpe_main_t * ngm, vlib_buffer_t * b0,
                             vxlan_gpe_tunnel_t * t0, u32 * next0, u8 is_v4)
@@ -79,6 +114,19 @@ vxlan_gpe_encap_one_inline (vxlan_gpe_main_t * ngm, vlib_buffer_t * b0,
     }
 }
 
+/**
+ * @brief Instantiates UDP + VXLAN-GPE header then set next node to IP4|6 lookup for two packets
+ *
+ * @param *ngm
+ * @param *b0 Packet0
+ * @param *b1 Packet1
+ * @param *t0 contains rewrite header for Packet0
+ * @param *t1 contains rewrite header for Packet1
+ * @param *next0 relative index of next dispatch function (next node) for Packet0
+ * @param *next1 relative index of next dispatch function (next node) for Packet1
+ * @param is_v4 Is this IPv4? (or IPv6)
+ *
+ */
 always_inline void
 vxlan_gpe_encap_two_inline (vxlan_gpe_main_t * ngm, vlib_buffer_t * b0, vlib_buffer_t * b1,
                             vxlan_gpe_tunnel_t * t0, vxlan_gpe_tunnel_t * t1, u32 * next0,
@@ -101,6 +149,24 @@ vxlan_gpe_encap_two_inline (vxlan_gpe_main_t * ngm, vlib_buffer_t * b0, vlib_buf
     }
 }
 
+/**
+ * @brief Common processing for IPv4 and IPv6 VXLAN GPE encap dispatch functions
+ *
+ * It is worth noting that other than trivial UDP forwarding (transit), VXLAN GPE
+ * tunnels are "establish local". This means that we don't have a TX interface as yet
+ * as we need to look up where the outer-header dest is. By setting the TX index in the
+ * buffer metadata to the encap FIB, we can do a lookup to get the adjacency and real TX.
+ *
+ *      vnet_buffer(b0)->sw_if_index[VLIB_TX] = t0->encap_fib_index;
+ *
+ * @node vxlan-gpe-input
+ * @param *vm
+ * @param *node
+ * @param *from_frame
+ *
+ * @return from_frame->n_vectors
+ *
+ */
 static uword
 vxlan_gpe_encap (vlib_main_t * vm,
                vlib_node_runtime_t * node,
index e032d56..a2b8978 100644 (file)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+/**
+ *  @file
+ *  @brief Common utility functions for IPv4 and IPv6 VXLAN GPE tunnels
+ *
+*/
 #include <vnet/vxlan-gpe/vxlan_gpe.h>
 #include <vnet/ip/format.h>
 
 vxlan_gpe_main_t vxlan_gpe_main;
 
+/**
+ * @brief Tracing function for VXLAN GPE tunnel packets
+ *
+ * @param *s formatting string
+ * @param *args
+ *
+ * @return *s formatted string
+ *
+ */
 u8 * format_vxlan_gpe_tunnel (u8 * s, va_list * args)
 {
   vxlan_gpe_tunnel_t * t = va_arg (*args, vxlan_gpe_tunnel_t *);
@@ -54,13 +68,21 @@ u8 * format_vxlan_gpe_tunnel (u8 * s, va_list * args)
   return s;
 }
 
+/**
+ * @brief Naming for VXLAN GPE tunnel
+ *
+ * @param *s formatting string
+ * @param *args
+ *
+ * @return *s formatted string
+ *
+ */
 static u8 * format_vxlan_gpe_name (u8 * s, va_list * args)
 {
   u32 dev_instance = va_arg (*args, u32);
   return format (s, "vxlan_gpe_tunnel%d", dev_instance);
 }
 
-
 static uword dummy_interface_tx (vlib_main_t * vm,
                                  vlib_node_runtime_t * node,
                                  vlib_frame_t * frame)
@@ -68,6 +90,17 @@ static uword dummy_interface_tx (vlib_main_t * vm,
   clib_warning ("you shouldn't be here, leaking buffers...");
   return frame->n_vectors;
 }
+
+/**
+ * @brief CLI function for VXLAN GPE admin up/down
+ *
+ * @param *vnm
+ * @param hw_if_index
+ * @param flag
+ *
+ * @return *rc
+ *
+ */
 static clib_error_t *
 vxlan_gpe_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags)
 {
@@ -98,6 +131,15 @@ static uword dummy_set_rewrite (vnet_main_t * vnm,
 }
 
 
+/**
+ * @brief Formatting function for tracing VXLAN GPE with length
+ *
+ * @param *s
+ * @param *args
+ *
+ * @return *s
+ *
+ */
 static u8 * format_vxlan_gpe_header_with_length (u8 * s, va_list * args)
 {
   u32 dev_instance = va_arg (*args, u32);
@@ -131,6 +173,14 @@ _(decap_fib_index)
 }
 
 
+/**
+ * @brief Calculate IPv4 VXLAN GPE rewrite header
+ *
+ * @param *t
+ *
+ * @return rc
+ *
+ */
 static int vxlan4_gpe_rewrite (vxlan_gpe_tunnel_t * t)
 {
   u8 *rw = 0;
@@ -169,6 +219,14 @@ static int vxlan4_gpe_rewrite (vxlan_gpe_tunnel_t * t)
   return (0);
 }
 
+/**
+ * @brief Calculate IPv6 VXLAN GPE rewrite header
+ *
+ * @param *t
+ *
+ * @return rc
+ *
+ */
 static int vxlan6_gpe_rewrite (vxlan_gpe_tunnel_t * t)
 {
   u8 *rw = 0;
@@ -207,6 +265,15 @@ static int vxlan6_gpe_rewrite (vxlan_gpe_tunnel_t * t)
   return (0);
 }
 
+/**
+ * @brief Add or Del a VXLAN GPE tunnel
+ *
+ * @param *a
+ * @param *sw_if_index
+ *
+ * @return rc
+ *
+ */
 int vnet_vxlan_gpe_add_del_tunnel
 (vnet_vxlan_gpe_add_del_tunnel_args_t *a, u32 * sw_if_indexp)
 {
@@ -352,6 +419,14 @@ int vnet_vxlan_gpe_add_del_tunnel
   return 0;
 }
 
+/**
+ * @brief Find the IPv4 FIB index from the FIB ID
+ *
+ * @param fib_id
+ *
+ * @return fib_index
+ *
+ */
 static u32 fib4_index_from_fib_id (u32 fib_id)
 {
   ip4_main_t * im = &ip4_main;
@@ -364,6 +439,14 @@ static u32 fib4_index_from_fib_id (u32 fib_id)
   return p[0];
 }
 
+/**
+ * @brief Find the IPv4 FIB index from the FIB ID
+ *
+ * @param fib_id
+ *
+ * @return fib_index
+ *
+ */
 static u32 fib6_index_from_fib_id (u32 fib_id)
 {
   ip6_main_t * im = &ip6_main;
@@ -376,6 +459,16 @@ static u32 fib6_index_from_fib_id (u32 fib_id)
   return p[0];
 }
 
+/**
+ * @brief CLI function for Add/Del of IPv4/IPv6 VXLAN GPE tunnel
+ *
+ * @param *vm
+ * @param *input
+ * @param *cmd
+ *
+ * @return error
+ *
+ */
 static clib_error_t *
 vxlan_gpe_add_del_tunnel_command_fn (vlib_main_t * vm,
                                    unformat_input_t * input,
@@ -528,6 +621,16 @@ VLIB_CLI_COMMAND (create_vxlan_gpe_tunnel_command, static) = {
   .function = vxlan_gpe_add_del_tunnel_command_fn,
 };
 
+/**
+ * @brief CLI function for showing VXLAN GPE tunnels
+ *
+ * @param *vm
+ * @param *input
+ * @param *cmd
+ *
+ * @return error
+ *
+ */
 static clib_error_t *
 show_vxlan_gpe_tunnel_command_fn (vlib_main_t * vm,
                                 unformat_input_t * input,
@@ -552,6 +655,14 @@ VLIB_CLI_COMMAND (show_vxlan_gpe_tunnel_command, static) = {
     .function = show_vxlan_gpe_tunnel_command_fn,
 };
 
+/**
+ * @brief Feature init function for VXLAN GPE
+ *
+ * @param *vm
+ *
+ * @return error
+ *
+ */
 clib_error_t *vxlan_gpe_init (vlib_main_t *vm)
 {
   vxlan_gpe_main_t *gm = &vxlan_gpe_main;
index f7cfba9..e33725f 100644 (file)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+/**
+ *  @file
+ *  @brief VXLAN GPE definitions
+ *
+*/
 #ifndef included_vnet_vxlan_gpe_h
 #define included_vnet_vxlan_gpe_h
 
 #include <vnet/ip/ip6_packet.h>
 #include <vnet/ip/udp.h>
 
-
+/**
+ * @brief VXLAN GPE header struct
+ *
+ */
 typedef CLIB_PACKED (struct {
-  ip4_header_t ip4;             /* 20 bytes */
-  udp_header_t udp;             /* 8 bytes */
-  vxlan_gpe_header_t vxlan;     /* 8 bytes */
+  /** 20 bytes */
+  ip4_header_t ip4;
+  /** 8 bytes */
+  udp_header_t udp;
+  /** 8 bytes */
+  vxlan_gpe_header_t vxlan;
 }) ip4_vxlan_gpe_header_t;
 
 typedef CLIB_PACKED (struct {
-  ip6_header_t ip6;             /* 40 bytes */
-  udp_header_t udp;             /* 8 bytes */
-  vxlan_gpe_header_t vxlan;     /* 8 bytes */
+  /** 40 bytes */
+  ip6_header_t ip6;
+  /** 8 bytes */
+  udp_header_t udp;
+  /** 8 bytes */
+  vxlan_gpe_header_t vxlan;
 }) ip6_vxlan_gpe_header_t;
 
+/**
+ * @brief Key struct for IPv4 VXLAN GPE tunnel.
+ * Key fields: local remote, vni
+ * all fields in NET byte order
+ * VNI shifted 8 bits
+ */
 typedef CLIB_PACKED(struct {
-  /*
-   * Key fields: local remote, vni
-   * all fields in NET byte order
-   */
   union {
     struct {
       u32 local;
       u32 remote;
-      u32 vni;                      /* shifted 8 bits */
+
+      u32 vni;
       u32 pad;
     };
     u64 as_u64[2];
   };
 }) vxlan4_gpe_tunnel_key_t;
 
+/**
+ * @brief Key struct for IPv6 VXLAN GPE tunnel.
+ * Key fields: local remote, vni
+ * all fields in NET byte order
+ * VNI shifted 8 bits
+ */
 typedef CLIB_PACKED(struct {
-  /*
-   * Key fields: local remote, vni
-   * all fields in NET byte order
-   */
   ip6_address_t local;
   ip6_address_t remote;
-  u32 vni;                      /* shifted 8 bits */
+  u32 vni;
 }) vxlan6_gpe_tunnel_key_t;
 
+/**
+ * @brief Struct for VXLAN GPE tunnel
+ */
 typedef struct {
-  /* Rewrite string. $$$$ embed vnet_rewrite header */
+  /** Rewrite string. $$$$ embed vnet_rewrite header */
   u8 * rewrite;
 
-  /* encapsulated protocol */
+  /** encapsulated protocol */
   u8 protocol;
 
-  /* tunnel src and dst addresses */
+  /** tunnel local address */
   ip46_address_t local;
+  /** tunnel remote address */
   ip46_address_t remote;
 
-  /* FIB indices */
-  u32 encap_fib_index;          /* tunnel partner lookup here */
-  u32 decap_fib_index;          /* inner IP lookup here */
+  /** FIB indices - tunnel partner lookup here */
+  u32 encap_fib_index;
+  /** FIB indices - inner IP packet lookup here */
+  u32 decap_fib_index;
 
-  /* vxlan VNI in HOST byte order, shifted left 8 bits */
+  /** VXLAN GPE VNI in HOST byte order, shifted left 8 bits */
   u32 vni;
 
-  /* vnet intfc hw/sw_if_index */
+  /** vnet intfc hw_if_index */
   u32 hw_if_index;
+  /** vnet intfc sw_if_index */
   u32 sw_if_index;
 
-  /* flags */
+  /** flags */
   u32 flags;
 } vxlan_gpe_tunnel_t;
 
-/* Flags for vxlan_gpe_tunnel_t.flags */
+/** Flags for vxlan_gpe_tunnel_t */
 #define VXLAN_GPE_TUNNEL_IS_IPV4       1
 
+/** next nodes for VXLAN GPE input */
 #define foreach_vxlan_gpe_input_next        \
 _(DROP, "error-drop")                           \
 _(IP4_INPUT, "ip4-input")                       \
 _(IP6_INPUT, "ip6-input")                       \
 _(ETHERNET_INPUT, "ethernet-input")
 
+/** struct for next nodes for VXLAN GPE input */
 typedef enum {
 #define _(s,n) VXLAN_GPE_INPUT_NEXT_##s,
   foreach_vxlan_gpe_input_next
@@ -107,6 +134,7 @@ typedef enum {
   VXLAN_GPE_INPUT_N_NEXT,
 } vxlan_gpe_input_next_t;
 
+/** struct for VXLAN GPE errors */
 typedef enum {
 #define vxlan_gpe_error(n,s) VXLAN_GPE_ERROR_##n,
 #include <vnet/vxlan-gpe/vxlan_gpe_error.def>
@@ -114,22 +142,25 @@ typedef enum {
   VXLAN_GPE_N_ERROR,
 } vxlan_gpe_input_error_t;
 
+/** Struct for VXLAN GPE node state */
 typedef struct {
-  /* vector of encap tunnel instances */
+  /** vector of encap tunnel instances */
   vxlan_gpe_tunnel_t *tunnels;
 
-  /* lookup tunnel by key */
+  /** lookup IPv4 VXLAN GPE tunnel by key */
   uword * vxlan4_gpe_tunnel_by_key;
+  /** lookup IPv6 VXLAN GPE tunnel by key */
   uword * vxlan6_gpe_tunnel_by_key;
 
-  /* Free vlib hw_if_indices */
+  /** Free vlib hw_if_indices */
   u32 * free_vxlan_gpe_tunnel_hw_if_indices;
 
-  /* Mapping from sw_if_index to tunnel index */
+  /** Mapping from sw_if_index to tunnel index */
   u32 * tunnel_index_by_sw_if_index;
 
-  /* convenience */
+  /** State convenience vlib_main_t */
   vlib_main_t * vlib_main;
+  /** State convenience vnet_main_t */
   vnet_main_t * vnet_main;
 } vxlan_gpe_main_t;
 
@@ -141,6 +172,7 @@ extern vlib_node_registration_t vxlan6_gpe_input_node;
 
 u8 * format_vxlan_gpe_encap_trace (u8 * s, va_list * args);
 
+/** Struct for VXLAN GPE add/del args */
 typedef struct {
   u8 is_add;
   u8 is_ip6;
index 3403cc9..e5501b9 100644 (file)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+/**
+ *  @file
+ *  @brief VXLAN GPE packet header structure
+ *
+*/
 #ifndef included_vxlan_gpe_packet_h
 #define included_vxlan_gpe_packet_h
 
-/*
+/**
  *   From draft-quinn-vxlan-gpe-03.txt
  *
  *    0                   1                   2                   3
  *      0x4 : Network Service Header [NSH]
  */
 
-#define foreach_vxlan_gpe_protocol   \
+/**
+ * @brief VXLAN GPE support inner protocol definition.
+ * 1 - IP4
+ * 2 - IP6
+ * 3 - ETHERNET
+ * 4 - NSH
+ */
+#define foreach_vxlan_gpe_protocol \
 _ (0x01, IP4)                         \
 _ (0x02, IP6)                         \
 _ (0x03, ETHERNET)                  \
-_ (0x04, NSH)                                          
+_ (0x04, NSH)
 
 
+/**
+ * @brief Struct for VXLAN GPE support inner protocol definition.
+ * 1 - IP4
+ * 2 - IP6
+ * 3 - ETHERNET
+ * 4 - NSH
+ */
 typedef enum {
 #define _(n,f) VXLAN_GPE_PROTOCOL_##f = n,
   foreach_vxlan_gpe_protocol
 #undef _
 } vxlan_gpe_protocol_t;
 
+/**
+ * @brief VXLAN GPE Header definition
+ */
 typedef struct {
   u8 flags;
+  /** Version and Reserved */
   u8 ver_res;
+  /** Reserved */
   u8 res;
-  /* see vxlan_gpe_protocol_t */
+  /** see vxlan_gpe_protocol_t */
   u8 protocol;
+  /** VNI and Reserved */
   u32 vni_res;
 } vxlan_gpe_header_t;