jsoninfo: add the possibility of loading a UUID from a file specified in olsrd.conf
authorHans-Christoph Steiner <hans@eds.org>
Tue, 5 Jun 2012 23:59:52 +0000 (19:59 -0400)
committerHans-Christoph Steiner <hans@eds.org>
Tue, 5 Jun 2012 23:59:52 +0000 (19:59 -0400)
files/olsrd.conf.default.full
lib/jsoninfo/README_JSONINFO
lib/jsoninfo/src/olsrd_jsoninfo.c
lib/jsoninfo/src/olsrd_jsoninfo.h
lib/jsoninfo/src/olsrd_plugin.c

index f56fa0f..077d718 100644 (file)
@@ -426,6 +426,9 @@ LoadPlugin "olsrd_jsoninfo.so.0.0"
     #PlParam      "accept" "172.29.44.23"
     # if you set it to 0.0.0.0, it will accept all connections
     #PlParam      "accept" "0.0.0.0"
+
+    # specify a UUID for this node to track it for debugging
+    #PlParam      "UUIDFile" "/etc/olsrd/olsrd.uuid"
 }
 
 #LoadPlugin "olsrd_secure.so.0.3"
index 6343fc2..32b31aa 100644 (file)
@@ -47,7 +47,7 @@ The plugin accepts two parameters: "port" and "accept". There are no
 futher parameters.  Here's an example configuration for UNIX systems
 (for Windows, change the plugin to end in .dll):
 
-LoadPlugin "olsrd_jsoninfo.so.0.1"
+LoadPlugin "olsrd_jsoninfo.so.0.0"
 {
     # the default port is 9090 but you can change it like this:
     #PlParam     "port"   "8080"
@@ -61,4 +61,7 @@ LoadPlugin "olsrd_jsoninfo.so.0.1"
     #PlParam      "accept" "172.29.44.23"
     # if you set it to 0.0.0.0, it will accept all connections
     #PlParam      "accept" "0.0.0.0"
+
+    # specify a UUID for this node to track it for debugging
+    #PlParam      "UUIDFile" "/etc/olsrd/olsrd.uuid"
 }
index 9faee23..a421f69 100644 (file)
@@ -97,6 +97,8 @@ static int ipc_socket;
 /* IPC initialization function */
 static int plugin_ipc_init(void);
 
+static int read_uuid_from_file(const char *file);
+
 static void abuf_json_open_object(struct autobuf *abuf, const char* header);
 static void abuf_json_close_object(struct autobuf *abuf);
 static void abuf_json_open_array(struct autobuf *abuf, const char* header);
@@ -154,6 +156,9 @@ static size_t outbuffer_written[MAX_CLIENTS];
 static int outbuffer_socket[MAX_CLIENTS];
 static int outbuffer_count;
 
+char uuid[UUIDLEN];
+char uuidfile[FILENAME_MAX];
+
 static struct timeval start_time;
 static struct timer_entry *writetimer_entry;
 
@@ -314,6 +319,10 @@ olsrd_plugin_init(void)
   /* Get start time */
   gettimeofday(&start_time, NULL);
 
+  if (!strlen(uuidfile))
+    strscpy(uuidfile, "uuid.txt", sizeof(uuidfile));
+  read_uuid_from_file(uuidfile);
+
   plugin_ipc_init();
   return 1;
 }
@@ -402,6 +411,38 @@ plugin_ipc_init(void)
   return 1;
 }
 
+static int
+read_uuid_from_file(const char *file)
+{
+  FILE *f;
+  char* end;
+
+  *uuid = 0;
+
+  f = fopen(file, "r");
+  olsr_printf(1, "[jsoninfo] Reading UUID from '%s'\n", file);
+  if (f == NULL ) {
+    olsr_printf(1, "[jsoninfo] Could not open '%s': %s\n",
+                file, strerror(errno));
+    return -1;
+  }
+  if (fread(uuid, 1, UUIDLEN, f) > 0) {
+    fclose(f);
+    /* we only use the first line of the file */
+    end = strchr(uuid, '\n');
+    if(end)
+      *end = 0;
+    return 0;
+  } else {
+    olsr_printf(1, "[jsoninfo] Could not read UUID from '%s': %s\n",
+                file, strerror(errno));
+    return -1;
+  }
+
+  fclose(f);
+  return 1;
+}
+
 static void
 ipc_action(int fd, void *data __attribute__ ((unused)), unsigned int flags __attribute__ ((unused)))
 {
@@ -1158,6 +1199,8 @@ send_info(unsigned int send_what, int the_socket)
   /* output overarching meta data last so we can use abuf_json_* functions, they add a comma at the beginning */
   if (send_what & SIW_ALL) {
     abuf_json_int(&abuf, "systemTime", time(NULL));
+    if(*uuid != 0)
+      abuf_json_string(&abuf, "uuid", uuid);
     abuf_puts(&abuf, "}\n");
   }
 
index a254ba4..6251991 100644 (file)
 /* uncomment this to allow connections from 127.0.0.1 regardless of olsrd.conf (useful to allow externel ip/network + localhost) (ipv4 only)*/
 /* #define JSONINFO_ALLOW_LOCALHOST */
 
+#define UUIDLEN 256
+extern char uuid[UUIDLEN];
+extern char uuidfile[FILENAME_MAX];
+
 extern union olsr_ip_addr jsoninfo_accept_ip;
 extern union olsr_ip_addr jsoninfo_listen_ip;
 extern int ipc_port;
index 3eb1b78..36550a8 100644 (file)
@@ -112,10 +112,19 @@ olsrd_plugin_interface_version(void)
   return PLUGIN_INTERFACE_VERSION;
 }
 
+static int
+store_string(const char *value, void *data, set_plugin_parameter_addon addon __attribute__ ((unused)))
+{
+  char *str = data;
+  snprintf(str, FILENAME_MAX, "%s", value);
+  return 0;
+}
+
 static const struct olsrd_plugin_parameters plugin_parameters[] = {
   {.name = "port",.set_plugin_parameter = &set_plugin_port,.data = &ipc_port},
   {.name = "accept",.set_plugin_parameter = &set_plugin_ipaddress,.data = &jsoninfo_accept_ip},
   {.name = "listen",.set_plugin_parameter = &set_plugin_ipaddress,.data = &jsoninfo_listen_ip},
+  {.name = "uuidfile",.set_plugin_parameter = &store_string,.data = uuidfile},
 };
 
 void
@@ -129,7 +138,7 @@ olsrd_get_plugin_parameters(const struct olsrd_plugin_parameters **params, int *
  * Local Variables:
  * mode: c
  * style: linux
- * c-basic-offset: 4
+ * c-basic-offset: 2
  * indent-tabs-mode: nil
  * End:
  */