Fix on the packet generator for cicn and added packet generator script 36/8636/3
authorAlberto Compagno <[email protected]>
Tue, 3 Oct 2017 14:23:11 +0000 (16:23 +0200)
committerAlberto Compagno <[email protected]>
Tue, 3 Oct 2017 14:29:47 +0000 (16:29 +0200)
Change-Id: Ic75f65e733727317600dcdbfb662452b7f91e93b
Signed-off-by: Alberto Compagno <[email protected]>
cicn-plugin/CMakeLists.txt
cicn-plugin/cicn/cicn_pg.c
cicn-plugin/test/README [new file with mode: 0644]
cicn-plugin/test/icn_pg [new file with mode: 0644]

index 2836a04..7a7e8f4 100755 (executable)
@@ -93,6 +93,7 @@ include_directories(SYSTEM)
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 include_directories(./)
 include_directories(cicn/test)
+include_directories(${VPP_INCLUDE_DIR})
 
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -march=native -O3")
 add_library(cicn_api_test_plugin SHARED
index 91bf175..f150fde 100644 (file)
@@ -348,7 +348,7 @@ icnpg_client_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node,
 
                  /* Stuff the counter value into the last name-comp */
                  C_PUTINT64 ((name0 + namelen0 - 8), namecounter);
-                 namecounter += 1LL;
+                 namecounter += 1ULL;
 
                  /* Rewrite and send */
                  ip0->src_address.as_u32 = sm->pgen_clt_src_addr;
@@ -593,7 +593,7 @@ icnpg_node_server_fn (vlib_main_t * vm,
 
                  /* Change message and packet from Interest to Content */
                  *(body0 + 1) = CICN_PKT_TYPE_CONTENT;
-                 C_PUTINT16 (body0 + 8, CICN_MSG_TYPE_CONTENT);
+                 C_PUTINT16 (body0 + 14, CICN_MSG_TYPE_CONTENT);
 
                  vlib_buffer_t *rb = NULL;
                  rb = vlib_get_buffer (vm, sm->pgen_svr_buffer_idx);
@@ -624,10 +624,13 @@ icnpg_node_server_fn (vlib_main_t * vm,
                  b0 = vlib_get_buffer (vm, index);
                  body0 = vlib_buffer_get_current (b0);
 
+                  // Update interest lifetime to cache time
+                  C_PUTINT16 (body0 + 8, CICN_HDR_TLV_CACHE_TIME);
+
                  // Update the length of the message
                  uint16_t msg_len;
-                 C_GETINT16 (msg_len, body0 + 10);
-                 C_PUTINT16 (body0 + 10, msg_len + bytes_to_copy);
+                 C_GETINT16 (msg_len, body0 + 16);
+                 C_PUTINT16 (body0 + 16, msg_len + bytes_to_copy);
 
                  // Update the length of the packet
                  C_PUTINT16 (body0 + 2, pkt_len + bytes_to_copy);
@@ -671,7 +674,7 @@ icnpg_node_server_fn (vlib_main_t * vm,
 
                  /* Change message and packet types from Interest to Content */
                  *(body1 + 1) = CICN_PKT_TYPE_CONTENT;
-                 C_PUTINT16 (body1 + 8, CICN_MSG_TYPE_CONTENT);
+                 C_PUTINT16 (body1 + 14, CICN_MSG_TYPE_CONTENT);
 
                  vlib_buffer_t *rb = NULL;
                  rb = vlib_get_buffer (vm, sm->pgen_svr_buffer_idx);
@@ -702,10 +705,13 @@ icnpg_node_server_fn (vlib_main_t * vm,
                  b1 = vlib_get_buffer (vm, index);
                  body1 = vlib_buffer_get_current (b1);
 
+                  // Update interest lifetime to cache time
+                  C_PUTINT16 (body1 + 8, CICN_HDR_TLV_CACHE_TIME);
+
                  // Update the length of the message
                  uint16_t msg_len;
-                 C_GETINT16 (msg_len, body1 + 10);
-                 C_PUTINT16 (body1 + 10, msg_len + bytes_to_copy);
+                 C_GETINT16 (msg_len, body1 + 16);
+                 C_PUTINT16 (body1 + 16, msg_len + bytes_to_copy);
 
                  // Update the length of the packet
                  C_PUTINT16 (body1 + 2, pkt_len + bytes_to_copy);
diff --git a/cicn-plugin/test/README b/cicn-plugin/test/README
new file mode 100644 (file)
index 0000000..2a33598
--- /dev/null
@@ -0,0 +1,48 @@
+Packet generator for ICN
+
+The packet generator for ICN requires at least 3 vpp nodes: an icn packet generator
+client, an icn packet generator server and a third vpp node running the
+cicn-plugin. Both icn packet generator client and server are are part of the
+cicn-plugin for vpp. The topology should be similar to the following:
+
+vpp1 (PG client) <--> vpp2 (cicn-plugin) <--> vpp3 (PG server)
+
+vpp2 is the node that we are going to benchmark.
+
+The current packet generator client requests subsequent content to the packet
+generator server. Interest and content name is the following:
+
+ccnx:/ccnxpg/<Chunk_number>
+
+The Chunk number (u64) is iteratively incremented after an interest is issued.
+
+
+CONFIGURATION
+Vpp1 must contain a pg interface (e.g., pg0) configured
+with the IP address 192.168.128.245 and be able to forward packet to
+192.168.128.1. The following configuration takes care of setting the pg
+interface, setting 192.168.128.1 reachable through the pg interface and the icn
+pg client. It assume that the next cicn hop answer to the ip 192.168.128.2 and
+it is reachable through a local interface with the ip address
+192.168.128.3. There ip addresses can be set arbitrarily, modifications must be
+done in both vpp1 and vpp2. IMPORTANT: In the following example, the port 33301
+is used to pass packets to the icn pg client plugin. Modification to such port 
+requires to change the packet definition on the icn-pg file.
+
+vpp# exec <path-to>/icn-pg
+vpp# set int ip addr pg0 192.168.128.245/24
+vpp# cicn pgen client port 33301 src 192.168.128.3:33301 dest 192.168.128.2:6363
+
+To run the icn_pg packet generator script configure vpp as follows.
+
+vpp# packet-generator enable
+
+Following the example, Vpp2 must be set to be reachable to the ip address
+192.168.128.2 and have a face
+192.168.128.2:6363<-->192.168.128.3:33301. Moreover vpp2 must be able to forward
+packets (and interest) to the packet generator server.
+
+Vpp3 configuration is simple. It must be configured to accept packets from
+vpp2. The cicn packet generator plugin can be configured in this way:
+
+vpp# cicn pgen server port 6363 size 1200
\ No newline at end of file
diff --git a/cicn-plugin/test/icn_pg b/cicn-plugin/test/icn_pg
new file mode 100644 (file)
index 0000000..043b25a
--- /dev/null
@@ -0,0 +1,11 @@
+packet-generator new {
+    name icn-pg
+    limit 1
+    size 72-72
+    node ip4-input
+    no-recycle
+    data {
+        UDP: 192.168.128.1 -> 192.168.128.245
+        hex 0x18db821500341b930100002cff00000e0001000203e90001001a000000160001000663636e787067001000088000000000000000
+ }
+}
\ No newline at end of file