summaryrefslogtreecommitdiff
path: root/cleopatre/application/managerd
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre/application/managerd')
-rw-r--r--cleopatre/application/managerd/Module2
-rw-r--r--cleopatre/application/managerd/inc/bridge.h1
-rw-r--r--cleopatre/application/managerd/inc/managerd.h1
-rw-r--r--cleopatre/application/managerd/inc/vs_mme.h2
-rw-r--r--cleopatre/application/managerd/src/managerd.c19
-rw-r--r--cleopatre/application/managerd/src/mme_nl.c7
-rw-r--r--cleopatre/application/managerd/src/vs_mme.c10
7 files changed, 29 insertions, 13 deletions
diff --git a/cleopatre/application/managerd/Module b/cleopatre/application/managerd/Module
new file mode 100644
index 0000000000..83fda265da
--- /dev/null
+++ b/cleopatre/application/managerd/Module
@@ -0,0 +1,2 @@
+SOURCES := bridge.c gpio_event.c managerd.c mme_nl.c vs_mme.c \
+ js_eoc_mme.c vs_eoc_mme.c
diff --git a/cleopatre/application/managerd/inc/bridge.h b/cleopatre/application/managerd/inc/bridge.h
index 17ebeb0443..5b9599e848 100644
--- a/cleopatre/application/managerd/inc/bridge.h
+++ b/cleopatre/application/managerd/inc/bridge.h
@@ -24,6 +24,7 @@
#include "libmme.h"
#include "mme_nl.h"
#include "managerd.h"
+#include "vs_mme.h"
/** Interfaces name */
#define BR_IFNAME "br0"
diff --git a/cleopatre/application/managerd/inc/managerd.h b/cleopatre/application/managerd/inc/managerd.h
index 024876b26c..181700e2b4 100644
--- a/cleopatre/application/managerd/inc/managerd.h
+++ b/cleopatre/application/managerd/inc/managerd.h
@@ -27,6 +27,7 @@
#include <linux/if_ether.h>
#include <linux/netlink.h>
#include <sys/time.h>
+#include <stdio.h> /* for FILE */
#include "../../linux/gpio.h"
#include "libspid.h"
diff --git a/cleopatre/application/managerd/inc/vs_mme.h b/cleopatre/application/managerd/inc/vs_mme.h
index 7b121b0e24..021a8908c8 100644
--- a/cleopatre/application/managerd/inc/vs_mme.h
+++ b/cleopatre/application/managerd/inc/vs_mme.h
@@ -182,7 +182,7 @@ typedef struct {
extern enum bridge_status vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request, MME_t * confirm, int len);
extern enum bridge_status vs_mme_eth_stats (struct managerd_ctx *ctx, MME_t *request, MME_t * confirm, int len);
-extern enum bridge_status vs_mme_reset (struct managerd_ctx *ctx, MME_t *request, MME_t * confirm, int len);
+extern enum bridge_status vs_mme_reset (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len);
extern enum bridge_status vs_mme_reset_handler (struct managerd_ctx *ctx, MME_t *request, MME_t * confirm, int len);
extern enum bridge_status vs_mme_update_start (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len);
extern enum bridge_status vs_mme_update_transfer (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len);
diff --git a/cleopatre/application/managerd/src/managerd.c b/cleopatre/application/managerd/src/managerd.c
index 5c21b8f938..ed912618b6 100644
--- a/cleopatre/application/managerd/src/managerd.c
+++ b/cleopatre/application/managerd/src/managerd.c
@@ -37,19 +37,26 @@
* and has now to be processed. */
volatile sig_atomic_t is_process_signal_needed;
+/* Global variable indicating if a SIGTERM signal occurred, should exit. */
+volatile sig_atomic_t exit_requested;
+
/**
- * Handle SIGHUP reception.
+ * Handle signal reception.
*
* \param signal_nb signal identifier
*/
void
managerd_signal_handler (int signal_nb)
{
- /* check that we received a SIGHUP signal (other signals must be ignored) */
+ /* Check received signal. */
if (SIGHUP == signal_nb)
{
is_process_signal_needed = 1;
}
+ else if (SIGTERM == signal_nb)
+ {
+ exit_requested = 1;
+ }
}
/**
@@ -145,7 +152,7 @@ managerd_process (struct managerd_ctx *ctx)
return -1;
}
- while (1)
+ while(!exit_requested)
{
fd_set readfds, exceptfds;
struct timeval timeout;
@@ -357,6 +364,9 @@ managerd_init (struct managerd_ctx *ctx)
return -1;
}
+ /* Catch SIGTERM. */
+ signal (SIGTERM, managerd_signal_handler);
+
return 0;
}
@@ -385,6 +395,9 @@ managerd_uninit (struct managerd_ctx *ctx)
//Uninitialize simple connect part (close "/dev/gpio")
simple_connect_uninit (ctx);
+
+ /* Unregister to file update. */
+ libspid_system_file_update_unregister (getpid (), LIBSPID_HPAV_INFO_PATH);
}
/**
diff --git a/cleopatre/application/managerd/src/mme_nl.c b/cleopatre/application/managerd/src/mme_nl.c
index 5eeff85d1a..ac4288bc0f 100644
--- a/cleopatre/application/managerd/src/mme_nl.c
+++ b/cleopatre/application/managerd/src/mme_nl.c
@@ -101,7 +101,7 @@ mme_nl_receive (struct managerd_ctx *ctx, uint8_t *buffer, int len)
struct nlmsghdr *nlh;
struct sockaddr_nl kernel_addr;
struct iovec iov;
- int msg_len, result;
+ int msg_len;
/* create message from MME netlink */
nlh = (struct nlmsghdr *)malloc (sizeof (struct nlmsghdr) + len);
@@ -130,9 +130,8 @@ mme_nl_receive (struct managerd_ctx *ctx, uint8_t *buffer, int len)
}
memcpy (buffer, NLMSG_DATA (nlh), msg_len);
- result = msg_len;
free (nlh);
- return result;
+ return msg_len;
}
/**
@@ -148,7 +147,7 @@ mme_nl_send (struct managerd_ctx *ctx, uint8_t *buffer, int len)
{
struct sockaddr_nl kernel_addr;
struct nlmsghdr *nlh;
- int msg_len, result;
+ int msg_len;
struct iovec iov;
struct msghdr msg;
diff --git a/cleopatre/application/managerd/src/vs_mme.c b/cleopatre/application/managerd/src/vs_mme.c
index ba11902712..115b63521d 100644
--- a/cleopatre/application/managerd/src/vs_mme.c
+++ b/cleopatre/application/managerd/src/vs_mme.c
@@ -20,11 +20,11 @@
*/
#include <stdio.h>
-#include <stdlib.h>
#include <string.h>
#include <syslog.h>
-#include <pthread.h>
+#include <stdlib.h>
#include <unistd.h>
+#include <pthread.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/time.h>
@@ -89,7 +89,7 @@ vs_mme_get_version (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, in
assert (NULL != ctx);
assert (NULL != request);
assert (NULL != confirm);
- assert (len >= sizeof (vs_get_version_cnf_t) + sizeof (MME_t));
+ assert ((unsigned int)len >= sizeof (vs_get_version_cnf_t) + sizeof (MME_t));
/* check for request content */
if (memcmp ((char *) request + sizeof (MME_t), OUI_SPIDCOM, 3))
@@ -187,7 +187,7 @@ vs_mme_eth_stats (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int
assert (NULL != ctx);
assert (NULL != request);
assert (NULL != confirm);
- assert (len >= sizeof (vs_eth_stats_cnf_t) + sizeof (MME_t));
+ assert ((unsigned int) len >= sizeof (vs_eth_stats_cnf_t) + sizeof (MME_t));
eth_stats_req = (vs_eth_stats_req_t *) ((unsigned char*)request + sizeof (MME_t));
eth_stats_cnf = (vs_eth_stats_cnf_t *) ((unsigned char*)confirm + sizeof (MME_t));
@@ -287,7 +287,7 @@ vs_mme_reset (struct managerd_ctx *ctx, MME_t *request, MME_t *confirm, int len)
assert (NULL != ctx);
assert (NULL != request);
assert (NULL != confirm);
- assert (len >= sizeof (vs_reset_cnf_t) + sizeof (MME_t));
+ assert ((unsigned int) len >= sizeof (vs_reset_cnf_t) + sizeof (MME_t));
/* check for request content */
if (memcmp ((char*) request + sizeof (MME_t), OUI_SPIDCOM, 3))