svm: minimal initial fifo
[vpp.git] / src / plugins / unittest / util_test.c
index d2f2715..67fe009 100644 (file)
@@ -14,6 +14,7 @@
  */
 
 #include <vlib/vlib.h>
+#include <sys/mman.h>
 
 static clib_error_t *
 test_crash_command_fn (vlib_main_t * vm,
@@ -45,6 +46,67 @@ VLIB_CLI_COMMAND (test_crash_command, static) =
 };
 /* *INDENT-ON* */
 
+static clib_error_t *
+test_hash_command_fn (vlib_main_t * vm,
+                     unformat_input_t * input, vlib_cli_command_t * cmd)
+{
+  uword hash1, hash2;
+  u8 *baseaddr;
+  u8 *key_loc;
+
+  baseaddr = mmap (NULL, 8192, PROT_READ | PROT_WRITE,
+                  MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 /* offset */ );
+
+  if (baseaddr == 0)
+    {
+      clib_unix_warning ("mmap");
+      return 0;
+    }
+
+  if (mprotect (baseaddr + (4 << 10), (4 << 10), PROT_NONE) < 0)
+    {
+      clib_unix_warning ("mprotect");
+      return 0;
+    }
+
+  key_loc = baseaddr + (4 << 10) - 4;
+  key_loc[0] = 0xde;
+  key_loc[1] = 0xad;
+  key_loc[2] = 0xbe;
+  key_loc[3] = 0xef;
+
+  hash1 = hash_memory (key_loc, 4, 0ULL);
+
+  vlib_cli_output (vm, "hash1 is %llx", hash1);
+
+  key_loc = baseaddr;
+
+  key_loc[0] = 0xde;
+  key_loc[1] = 0xad;
+  key_loc[2] = 0xbe;
+  key_loc[3] = 0xef;
+
+  hash2 = hash_memory (key_loc, 4, 0ULL);
+
+  vlib_cli_output (vm, "hash2 is %llx", hash2);
+
+  if (hash1 == hash2)
+    vlib_cli_output (vm, "PASS...");
+  else
+    vlib_cli_output (vm, "FAIL...");
+
+  return 0;
+}
+
+/* *INDENT-OFF* */
+VLIB_CLI_COMMAND (test_hash_command, static) =
+{
+  .path = "test hash_memory",
+  .short_help = "page boundary crossing test",
+  .function = test_hash_command_fn,
+};
+/* *INDENT-ON* */
+
 /*
  * fd.io coding-style-patch-verification: ON
  *