summaryrefslogtreecommitdiff
path: root/src/ipcpd
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@intec.ugent.be>2016-07-06 18:58:56 +0200
committerSander Vrijders <sander.vrijders@intec.ugent.be>2016-07-06 18:58:56 +0200
commit4a3e3f1b9eef457f3f216d2b2a4ccf0a32eb9599 (patch)
tree67fe25649a0258596bbbe122c19fe3a09ae2a203 /src/ipcpd
parent6c799af1b4cf86a32979d98034c560fb976a9caf (diff)
downloadouroboros-4a3e3f1b9eef457f3f216d2b2a4ccf0a32eb9599.tar.gz
ouroboros-4a3e3f1b9eef457f3f216d2b2a4ccf0a32eb9599.zip
lib, irmd, ipcpd: Provide the feature to write to logs
Writing output to log files is now enabled by default. Logs are written to <INSTALL_PREFIX>/var/log/ouroboros, which is created on install. There is a log file for the irmd and one per IPCP. To still get (colored) output on stdout, provide the --stdout switch when starting the irmd. Fixes #17
Diffstat (limited to 'src/ipcpd')
-rw-r--r--src/ipcpd/ipcp.c39
-rw-r--r--src/ipcpd/ipcp.h2
-rw-r--r--src/ipcpd/local/main.c6
-rw-r--r--src/ipcpd/shim-eth-llc/main.c4
-rw-r--r--src/ipcpd/shim-udp/main.c6
5 files changed, 43 insertions, 14 deletions
diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c
index 579203c2..28004a92 100644
--- a/src/ipcpd/ipcp.c
+++ b/src/ipcpd/ipcp.c
@@ -22,13 +22,15 @@
#include <ouroboros/config.h>
#include <ouroboros/ipcp.h>
-#include <sys/socket.h>
-#include <stdlib.h>
-#include "ipcp.h"
#define OUROBOROS_PREFIX "ipcpd/ipcp"
#include <ouroboros/logs.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <stdlib.h>
+#include "ipcp.h"
+
struct ipcp * ipcp_instance_create()
{
struct ipcp * i = malloc(sizeof *i);
@@ -45,15 +47,42 @@ struct ipcp * ipcp_instance_create()
return i;
}
-int ipcp_arg_check(int argc, char * argv[])
+int ipcp_parse_arg(int argc, char * argv[])
{
- if (argc != 2)
+ char * log_file;
+ size_t len = 0;
+
+ if (!(argc == 3 || argc == 2))
return -1;
/* argument 1: api of irmd */
if (atoi(argv[1]) == 0)
return -1;
+ if (argv[2] == NULL)
+ return 0;
+
+ len += strlen(INSTALL_PREFIX);
+ len += strlen(LOG_DIR);
+ len += strlen(argv[2]);
+
+ log_file = malloc(len + 1);
+ if (log_file == NULL) {
+ LOG_ERR("Failed to malloc");
+ return -1;
+ }
+
+ strcpy(log_file, INSTALL_PREFIX);
+ strcat(log_file, LOG_DIR);
+ strcat(log_file, argv[2]);
+ log_file[len] = '\0';
+
+ if (set_logfile(log_file))
+ LOG_ERR("Cannot open %s, falling back to stdout for logs.",
+ log_file);
+
+ free(log_file);
+
return 0;
}
diff --git a/src/ipcpd/ipcp.h b/src/ipcpd/ipcp.h
index 27c3cf8e..bbf1d1f7 100644
--- a/src/ipcpd/ipcp.h
+++ b/src/ipcpd/ipcp.h
@@ -50,6 +50,6 @@ struct ipcp {
struct ipcp * ipcp_instance_create();
void * ipcp_main_loop(void * o);
void * ipcp_sdu_loop(void * o);
-int ipcp_arg_check(int argc, char * argv[]);
+int ipcp_parse_arg(int argc, char * argv[]);
#endif
diff --git a/src/ipcpd/local/main.c b/src/ipcpd/local/main.c
index 4802a161..c705f74c 100644
--- a/src/ipcpd/local/main.c
+++ b/src/ipcpd/local/main.c
@@ -573,7 +573,7 @@ static struct ipcp * ipcp_local_create()
#ifndef MAKE_CHECK
-int main (int argc, char * argv[])
+int main(int argc, char * argv[])
{
struct sigaction sig_act;
sigset_t sigset;
@@ -583,8 +583,8 @@ int main (int argc, char * argv[])
sigaddset(&sigset, SIGHUP);
sigaddset(&sigset, SIGPIPE);
- if (ipcp_arg_check(argc, argv)) {
- LOG_ERR("Wrong arguments.");
+ if (ipcp_parse_arg(argc, argv)) {
+ LOG_ERR("Failed to parse arguments.");
exit(1);
}
diff --git a/src/ipcpd/shim-eth-llc/main.c b/src/ipcpd/shim-eth-llc/main.c
index 68e7e933..ba912829 100644
--- a/src/ipcpd/shim-eth-llc/main.c
+++ b/src/ipcpd/shim-eth-llc/main.c
@@ -1245,8 +1245,8 @@ int main(int argc, char * argv[])
sigaddset(&sigset, SIGHUP);
sigaddset(&sigset, SIGPIPE);
- if (ipcp_arg_check(argc, argv)) {
- LOG_ERR("Wrong arguments.");
+ if (ipcp_parse_arg(argc, argv)) {
+ LOG_ERR("Failed to parse arguments.");
exit(1);
}
diff --git a/src/ipcpd/shim-udp/main.c b/src/ipcpd/shim-udp/main.c
index 9354ec2f..b0fe1c11 100644
--- a/src/ipcpd/shim-udp/main.c
+++ b/src/ipcpd/shim-udp/main.c
@@ -1557,7 +1557,7 @@ static struct ipcp * ipcp_udp_create()
#ifndef MAKE_CHECK
-int main (int argc, char * argv[])
+int main(int argc, char * argv[])
{
struct sigaction sig_act;
sigset_t sigset;
@@ -1567,8 +1567,8 @@ int main (int argc, char * argv[])
sigaddset(&sigset, SIGHUP);
sigaddset(&sigset, SIGPIPE);
- if (ipcp_arg_check(argc, argv)) {
- LOG_ERR("Wrong arguments.");
+ if (ipcp_parse_arg(argc, argv)) {
+ LOG_ERR("Failed to parse arguments.");
exit(1);
}