[HICN-180] Updating plugin to run on vpp 19.04 65/19065/8
authorAlberto Compagno <acompagn+fdio@cisco.com>
Fri, 19 Apr 2019 09:38:49 +0000 (11:38 +0200)
committerAlberto Compagno <acompagn+fdio@cisco.com>
Fri, 3 May 2019 10:07:41 +0000 (12:07 +0200)
Change-Id: I23d44747edf65b9cbf1cd7cb174541dce55152aa
Signed-off-by: Alberto Compagno <acompagn+fdio@cisco.com>
cmake/Modules/FindVpp.cmake
hicn-plugin/README.md
hicn-plugin/src/data_fwd.h
hicn-plugin/src/data_fwd_node.c
hicn-plugin/src/interest_hitcs_node.c
hicn-plugin/src/pg.c
libtransport/CMakeLists.txt
scripts/build-packages.sh

index ae11c80..7d8d16d 100644 (file)
@@ -60,8 +60,15 @@ find_library(VPP_LIBRARY_VLIB
   DOC "Find the Vpp vlib library"
 )
 
+find_library(VPP_LIBRARY_VPPAPICLIENT
+  NAMES vppapiclient
+  HINTS ${VPP_SEARCH_PATH_LIST}
+  PATH_SUFFIXES lib lib64
+  DOC "Find the Vpp vlib library"
+)
+
 set(VPP_LIBRARIES ${VPP_LIBRARY_MEMORYCLIENT} ${VPP_LIBRARY_SVM} ${VPP_LIBRARY_INFRA} ${VPP_LIBRARY_VATPLUGIN} ${VPP_LIBRARY_VLIB})
 set(VPP_INCLUDE_DIRS ${VPP_INCLUDE_DIR} ${VPP_INCLUDE_DIR}/vpp_plugins)
 
 include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(Vpp DEFAULT_MSG VPP_LIBRARIES VPP_INCLUDE_DIRS)
\ No newline at end of file
+find_package_handle_standard_args(Vpp DEFAULT_MSG VPP_LIBRARIES VPP_INCLUDE_DIRS)
index e0e0580..22e38a0 100644 (file)
@@ -65,7 +65,7 @@ hICN-plugin has been tested in:
 
 Build dependencies:
 
-- VPP 19.01
+- VPP 19.04
   - DEB packages:
   - vpp
   - vpp-lib
index 4e37e60..742bb28 100644 (file)
 
 #include "pcs.h"
 
-/*
- * Node context data; we think this is per-thread/instance
- */
-typedef struct hicn_data_fwd_runtime_s
-{
-  vlib_combined_counter_main_t repm_counters;
-
-  /* per-cpu vector of cloned packets */
-  u32 **clones;
-} hicn_data_fwd_runtime_t;
-
 /* Trace context struct */
 typedef struct
 {
@@ -86,9 +75,8 @@ vlib_buffer_clone_256_2 (vlib_main_t * vm, u32 src_buffer, u32 * buffers,
        }
       return n_buffers;
     }
-  n_buffers = vlib_buffer_alloc_from_free_list (vm, buffers, n_buffers,
-                                               vlib_buffer_get_free_list_index
-                                               (s));
+  n_buffers = vlib_buffer_alloc_from_pool (vm, buffers, n_buffers,
+                                          s->buffer_pool_index);
 
   for (i = 0; i < n_buffers; i++)
     {
@@ -96,8 +84,6 @@ vlib_buffer_clone_256_2 (vlib_main_t * vm, u32 src_buffer, u32 * buffers,
       d->current_data = s->current_data;
       d->current_length = head_end_offset;
       d->trace_index = s->trace_index;
-      vlib_buffer_set_free_list_index (d,
-                                      vlib_buffer_get_free_list_index (s));
 
       d->total_length_not_including_first_buffer = s->current_length -
        head_end_offset;
@@ -116,11 +102,11 @@ vlib_buffer_clone_256_2 (vlib_main_t * vm, u32 src_buffer, u32 * buffers,
       d->next_buffer = src_buffer;
     }
   vlib_buffer_advance (s, head_end_offset);
-  s->n_add_refs = n_buffers - 1;
+  s->ref_count = n_buffers - 1;
   while (s->flags & VLIB_BUFFER_NEXT_PRESENT)
     {
       s = vlib_get_buffer (vm, s->next_buffer);
-      s->n_add_refs = n_buffers - 1;
+      s->ref_count = n_buffers - 1;
     }
 
   return n_buffers;
@@ -129,7 +115,7 @@ vlib_buffer_clone_256_2 (vlib_main_t * vm, u32 src_buffer, u32 * buffers,
 /**
  * @brief Create multiple clones of buffer and store them
  *  in the supplied array. Unlike the function in the vlib library,
- *   we allow src_buffer to have n_add_refs != 0.
+ *   we allow src_buffer to have ref_count != 0.
  *
  * @param vm - (vlib_main_t *) vlib main data structure pointer
  * @param src_buffer - (u32) source buffer index
@@ -154,13 +140,13 @@ vlib_buffer_clone2 (vlib_main_t * vm, u32 src_buffer, u32 * buffers,
     s->total_length_not_including_first_buffer = 0;
 
   u16 n_cloned = 0;
-  u8 n_clone_src = 255 - s->n_add_refs;
+  u8 n_clone_src = 255 - s->ref_count;
 
   /*
    * We need to copy src for all the clones that cannot be chained in
    * the src_buffer
    */
-  /* MAX(n_add_refs) = 256 */
+  /* MAX(ref_count) = 256 */
   if (n_buffers > n_clone_src)
     {
       vlib_buffer_t *copy;
@@ -174,25 +160,25 @@ vlib_buffer_clone2 (vlib_main_t * vm, u32 src_buffer, u32 * buffers,
       n_buffers -= n_cloned;
     }
   /*
-   * vlib_buffer_clone_256 check if n_add_refs is 0. We force it to be
+   * vlib_buffer_clone_256 check if ref_count is 0. We force it to be
    * 0 before calling the function and we retore it to the right value
    * after the function has been called
    */
-  u8 tmp_n_add_refs = s->n_add_refs;
+  u8 tmp_ref_count = s->ref_count;
 
-  s->n_add_refs = 0;
+  s->ref_count = 0;
   /*
    * The regular vlib_buffer_clone_256 does copy if we need to clone
    * only one packet. While this is not a problem per se, it adds
    * complexity to the code, especially because we need to add 1 to
-   * n_add_refs when the packet is cloned.
+   * ref_count when the packet is cloned.
    */
   n_cloned += vlib_buffer_clone_256_2 (vm,
                                       src_buffer,
                                       (buffers + n_cloned),
                                       n_buffers, head_end_offset);
 
-  s->n_add_refs += tmp_n_add_refs;
+  s->ref_count += tmp_ref_count;
 
   return n_cloned;
 }
index efb9816..0b8685f 100644 (file)
@@ -271,7 +271,7 @@ hicn_data_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
                       * longer in any frame. The vlib_buffer will be freed when
                       * all its cloned vlib_buffer will be freed.
                       */
-                     b0->n_add_refs--;
+                     b0->ref_count--;
                    }
 
                  /* Delete the PIT entry */
@@ -294,7 +294,7 @@ hicn_data_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
                   * longer in any frame. The vlib_buffer will be freed when
                   * all its cloned vlib_buffer will be freed.
                   */
-                 b0->n_add_refs--;
+                 b0->ref_count--;
                }
 
              /* Delete the PIT entry */
@@ -403,12 +403,12 @@ hicn_satisfy_faces (vlib_main_t * vm, u32 bi0,
   else
     {
       /* Add one reference to maintain the buffer in the CS.
-       * b0->n_add_refs == 0 has two meaning: it has 1 buffer or no buffer chained to it.
+       * b0->ref_count == 0 has two meaning: it has 1 buffer or no buffer chained to it.
        * vlib_buffer_clone2 add a number of reference equalt to pitp->u.pit.faces.n_faces - 1
        * as vlib_buffer_clone does. So after all the packet are forwarded the buffer stored in
-       * the CS will have n_add_refs == 0;
+       * the CS will have ref_count == 0;
        */
-      b0->n_add_refs++;
+      b0->ref_count++;
     }
 
   found = n_left_from =
@@ -621,7 +621,6 @@ VLIB_REGISTER_NODE(hicn_data_fwd_node) =
   .function = hicn_data_node_fn,
   .name = "hicn-data-fwd",
   .vector_size = sizeof(u32),
-  .runtime_data_bytes = sizeof(hicn_data_fwd_runtime_t),
   .format_trace = hicn_data_fwd_format_trace,
   .type = VLIB_NODE_TYPE_INTERNAL,
   .n_errors = ARRAY_LEN(hicn_data_fwd_error_strings),
index 8ddd4f5..aad7ed7 100644 (file)
@@ -60,12 +60,12 @@ clone_from_cs (vlib_main_t * vm, u32 * bi0_cs, vlib_buffer_t * dest, u8 isv6)
   else
     {
       vlib_buffer_advance (cs_buf, -buffer_advance);
-      if (PREDICT_FALSE (cs_buf->n_add_refs == 255))
+      if (PREDICT_FALSE (cs_buf->ref_count == 255))
        {
          vlib_buffer_t *cs_buf2 = vlib_buffer_copy (vm, cs_buf);
          vlib_buffer_advance (cs_buf, buffer_advance);
          *bi0_cs = vlib_get_buffer_index (vm, cs_buf2);
-         cs_buf->n_add_refs--;
+         cs_buf->ref_count--;
          cs_buf = cs_buf2;
        }
 
index 643aff2..8181d86 100644 (file)
@@ -1056,9 +1056,7 @@ convert_interest_to_data_v4 (vlib_main_t * vm, vlib_buffer_t * b0,
       bytes_to_copy = 1500 - pkt_len;
     }
   /* Add content to the data packet */
-  vlib_buffer_add_data (vm,
-                       VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX, &bi0,
-                       rb->data, bytes_to_copy);
+  vlib_buffer_add_data (vm, &bi0, rb->data, bytes_to_copy);
 
   b0 = vlib_get_buffer (vm, bi0);
 
@@ -1094,9 +1092,7 @@ convert_interest_to_data_v6 (vlib_main_t * vm, vlib_buffer_t * b0,
       bytes_to_copy = 1500 - pkt_len;
     }
   /* Add content to the data packet */
-  vlib_buffer_add_data (vm,
-                       VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX, &bi0,
-                       rb->data, bytes_to_copy);
+  vlib_buffer_add_data (vm, &bi0, rb->data, bytes_to_copy);
 
   b0 = vlib_get_buffer (vm, bi0);
 
index 1cc4c35..5cd33cf 100644 (file)
@@ -111,7 +111,7 @@ list(APPEND LIBRARIES
   ${LIBPARC_LIBRARIES}
   ${CMAKE_THREAD_LIBS_INIT}
   ${HICN_LIBRARIES}
-  ${VPP_LIBRARIES}
+  ${VPP_LIBRARY_VPPAPICLIENT}
   ${ANDROID_LIBRARIES}
   ${OPENSSL_LIBRARIES}
   ${WINDOWS_LIBRARIES}
index 70c41d1..4ff49b0 100644 (file)
@@ -22,17 +22,18 @@ PACKAGECLOUD_RELEASE_REPO_DEB="https://packagecloud.io/install/repositories/fdio
 PACKAGECLOUD_RELEASE_REPO_RPM="https://packagecloud.io/install/repositories/fdio/release/script.rpm.sh"
 
 VPP_GIT_REPO="https://git.fd.io/vpp"
-VPP_BRANCH="stable/1901"
+VPP_BRANCH="stable/1904"
 
-VPP_VERSION_DEB="19.01.1-release"
-VPP_VERSION_RPM="19.01.1-release.x86_64"
+VPP_VERSION_DEB="19.04-release"
+VPP_VERSION_RPM="19.04-release.x86_64"
 
 BUILD_TOOLS_UBUNTU="build-essential doxygen"
 LIBSSL_LIBEVENT_UBUNTU="libevent-dev libssl-dev"
-DEPS_UBUNTU="libparc-dev libasio-dev libcurl4-openssl-dev vpp-dev=${VPP_VERSION_DEB} vpp-lib=${VPP_VERSION_DEB}"
+DEPS_UBUNTU="libparc-dev libasio-dev libcurl4-openssl-dev vpp-dev=${VPP_VERSION_DEB} libvppinfra=${VPP_VERSION_DEB} libvppinfra-dev=${VPP_VERSION_DEB} vpp-plugin-core=${VPP_VERSION_DEB}"
 
 # BUILD_TOOLS_GROUP_CENTOS="'Development Tools'"
 DEPS_CENTOS="vpp-devel-${VPP_VERSION_RPM} vpp-lib-${VPP_VERSION_RPM} libparc-devel libcurl-devel asio-devel centos-release-scl devtoolset-7"
+DEPS_CENTOS_NOVERSION="vpp-devel vpp-lib libparc-devel libcurl-devel asio-devel centos-release-scl devtoolset-7"
 LATEST_EPEL_REPO="http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm"
 
 install_cmake() {
@@ -41,7 +42,7 @@ install_cmake() {
     fi
 
     cat /etc/resolv.conf
-
+``
     CMAKE_INSTALL_SCRIPT_URL="https://cmake.org/files/v3.8/cmake-3.8.0-Linux-x86_64.sh"
     CMAKE_INSTALL_SCRIPT="/tmp/install_cmake.sh"
     curl ${CMAKE_INSTALL_SCRIPT_URL} > ${CMAKE_INSTALL_SCRIPT}
@@ -59,6 +60,7 @@ setup_fdio_repo() {
     DISTRIB_ID=${1}
 
     if [ "${DISTRIB_ID}" == "ubuntu" ]; then
+    rm -r /etc/apt/sources.list.d/*
         curl -s ${PACKAGECLOUD_RELEASE_REPO_DEB} | sudo bash
     elif [ "${DISTRIB_ID}" == "centos" ]; then
         curl -s ${PACKAGECLOUD_RELEASE_REPO_RPM} | sudo bash
@@ -122,10 +124,10 @@ setup() {
         ${CC_COMPILER} --version
 
         export CC=${CC_COMPILER} CXX=${CXX_COMPILER}
-
-        build_libmemif_static
     fi
 
+    build_libmemif_static
+
     # do nothing but check compiler version
     c++ --version
 }