dpdk: Add support for Mellanox ConnectX-4 devices
[vpp.git] / svm / svmdbtool.c
index 829df4e..a0af15f 100644 (file)
@@ -49,8 +49,8 @@ typedef struct
 
 svmdbtool_main_t svmdbtool_main;
 
-static inline 
-svmdb_map_args_t * map_arg_setup (char *chroot_path)
+static inline svmdb_map_args_t *
+map_arg_setup (char *chroot_path)
 {
   svmdbtool_main_t *sm = &svmdbtool_main;
   svmdb_map_args_t *ma = &sm->map_args;
@@ -120,6 +120,32 @@ dump_strings (char *chroot_path)
   svmdb_unmap (c);
 }
 
+static void
+serialize_strings (char *chroot_path, char *filename)
+{
+  svmdb_client_t *c;
+  svmdb_map_args_t *ma;
+
+  ma = map_arg_setup (chroot_path);
+
+  c = svmdb_map (ma);
+  (void) svmdb_local_serialize_strings (c, filename);
+  svmdb_unmap (c);
+}
+
+static void
+unserialize_strings (char *chroot_path, char *filename)
+{
+  svmdb_client_t *c;
+  svmdb_map_args_t *ma;
+
+  ma = map_arg_setup (chroot_path);
+
+  c = svmdb_map (ma);
+  (void) svmdb_local_unserialize_strings (c, filename);
+  svmdb_unmap (c);
+}
+
 static void
 test_vlib_vec_rate (char *chroot_path, f64 vr)
 {
@@ -344,6 +370,7 @@ main (int argc, char **argv)
   u8 *vbl = 0, *value = 0;
   char *chroot_path = 0;
   u8 *chroot_path_u8;
+  u8 *filename;
   uword size;
   f64 vr;
   int uid, gid, rv;
@@ -351,8 +378,8 @@ main (int argc, char **argv)
   struct group _grp, *grp;
   char *s, buf[128];
 
-  svmdbtool_main.uid = geteuid();
-  svmdbtool_main.gid = getegid();
+  svmdbtool_main.uid = geteuid ();
+  svmdbtool_main.gid = getegid ();
 
   unformat_init_command_line (&input, argv);
 
@@ -428,45 +455,57 @@ main (int argc, char **argv)
          parsed++;
        }
       else if (unformat (&input, "uid %d", &uid))
-        svmdbtool_main.uid = uid;
+       svmdbtool_main.uid = uid;
       else if (unformat (&input, "gid %d", &gid))
-        svmdbtool_main.gid = gid;
+       svmdbtool_main.gid = gid;
       else if (unformat (&input, "uid %s", &s))
-        {
-          /* lookup the username */
-          pw = NULL;
-          rv = getpwnam_r(s, &_pw, buf, sizeof(buf), &pw);
-          if (rv < 0)
-            {
-              fformat (stderr, "cannot fetch username %s", s);
-              exit (1);
-            }
-          if (pw == NULL)
-            {
-              fformat (stderr, "username %s does not exist", s);
-              exit (1);
-            }
-          vec_free (s);
-          svmdbtool_main.uid = pw->pw_uid;
-        }
+       {
+         /* lookup the username */
+         pw = NULL;
+         rv = getpwnam_r (s, &_pw, buf, sizeof (buf), &pw);
+         if (rv < 0)
+           {
+             fformat (stderr, "cannot fetch username %s", s);
+             exit (1);
+           }
+         if (pw == NULL)
+           {
+             fformat (stderr, "username %s does not exist", s);
+             exit (1);
+           }
+         vec_free (s);
+         svmdbtool_main.uid = pw->pw_uid;
+       }
       else if (unformat (&input, "gid %s", &s))
-        {
-          /* lookup the group name */
-          grp = NULL;
-          rv = getgrnam_r(s, &_grp, buf, sizeof(buf), &grp);
-          if (rv != 0)
-            {
-              fformat (stderr, "cannot fetch group %s", s);
-              exit (1);
-            }
-          if (grp == NULL)
-            {
-              fformat (stderr, "group %s does not exist", s);
-              exit (1);
-            }
-          vec_free (s);
-          svmdbtool_main.gid = grp->gr_gid;
-        }
+       {
+         /* lookup the group name */
+         grp = NULL;
+         rv = getgrnam_r (s, &_grp, buf, sizeof (buf), &grp);
+         if (rv != 0)
+           {
+             fformat (stderr, "cannot fetch group %s", s);
+             exit (1);
+           }
+         if (grp == NULL)
+           {
+             fformat (stderr, "group %s does not exist", s);
+             exit (1);
+           }
+         vec_free (s);
+         svmdbtool_main.gid = grp->gr_gid;
+       }
+      else if (unformat (&input, "serialize-strings %s", &filename))
+       {
+         vec_add1 (filename, 0);
+         serialize_strings (chroot_path, (char *) filename);
+         parsed++;
+       }
+      else if (unformat (&input, "unserialize-strings %s", &filename))
+       {
+         vec_add1 (filename, 0);
+         unserialize_strings (chroot_path, (char *) filename);
+         parsed++;
+       }
       else
        {
          break;