summaryrefslogtreecommitdiff
path: root/src/irmd/main.c
diff options
context:
space:
mode:
authorSander Vrijders <[email protected]>2016-03-15 15:43:17 +0100
committerSander Vrijders <[email protected]>2016-03-15 15:43:17 +0100
commitbd7a8ea8a1adbd6763aea857e72623929b7ad7a4 (patch)
tree168c30a3090d14c654967d0942b4718cd4a979a9 /src/irmd/main.c
parent74dc5818ac8586fcc36915874592c9f4fbb4e6f6 (diff)
downloadouroboros-bd7a8ea8a1adbd6763aea857e72623929b7ad7a4.tar.gz
ouroboros-bd7a8ea8a1adbd6763aea857e72623929b7ad7a4.zip
irmd, lib: Create and destroy IPC Processes
This adds the functionality to create and destroy IPCPs. Upon creation a new process is forked and execve'd. Upon destruction the IPCP is destroyed by killing it with SIGTERM.
Diffstat (limited to 'src/irmd/main.c')
-rw-r--r--src/irmd/main.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/irmd/main.c b/src/irmd/main.c
index 9a072382..b695519a 100644
--- a/src/irmd/main.c
+++ b/src/irmd/main.c
@@ -38,7 +38,7 @@
struct name_to_pid_entry {
struct list_head next;
- int pid;
+ pid_t pid;
rina_name_t * name;
};
@@ -46,8 +46,8 @@ struct irm {
struct list_head name_to_pid;
};
-static int find_pid_by_name(struct irm * instance,
- rina_name_t * name)
+static pid_t find_pid_by_name(struct irm * instance,
+ rina_name_t * name)
{
struct list_head * pos;
@@ -68,11 +68,11 @@ static void create_ipcp(struct irm * instance,
rina_name_t name,
char * ipcp_type)
{
- int pid;
+ pid_t pid;
struct name_to_pid_entry * tmp;
pid = ipcp_create(name, ipcp_type);
- if (pid == 0) {
+ if (pid == -1) {
LOG_ERR("Failed to create IPCP");
return;
}
@@ -90,14 +90,17 @@ static void create_ipcp(struct irm * instance,
return;
}
+ LOG_DBG("Created IPC process with pid %d", pid);
+
list_add(&tmp->next, &instance->name_to_pid);
}
static void destroy_ipcp(struct irm * instance,
rina_name_t name)
{
- int pid = 0;
+ pid_t pid = 0;
struct list_head * pos;
+ struct list_head * n;
pid = find_pid_by_name(instance, &name);
if (pid == 0) {
@@ -105,10 +108,12 @@ static void destroy_ipcp(struct irm * instance,
return;
}
+ LOG_DBG("Destroying ipcp with pid %d", pid);
+
if (ipcp_destroy(pid))
LOG_ERR("Could not destroy IPCP");
- list_for_each(pos, &instance->name_to_pid) {
+ list_for_each_safe(pos, n, &(instance->name_to_pid)) {
struct name_to_pid_entry * tmp =
list_entry(pos, struct name_to_pid_entry, next);
@@ -121,7 +126,7 @@ static void bootstrap_ipcp(struct irm * instance,
rina_name_t name,
struct dif_config conf)
{
- int pid = 0;
+ pid_t pid = 0;
pid = find_pid_by_name(instance, &name);
if (pid == 0) {
@@ -137,7 +142,7 @@ static void enroll_ipcp(struct irm * instance,
rina_name_t name,
char * dif_name)
{
- int pid = 0;
+ pid_t pid = 0;
rina_name_t * member;
char ** n_1_difs = NULL;
ssize_t n_1_difs_size = 0;
@@ -166,7 +171,7 @@ static void reg_ipcp(struct irm * instance,
char ** difs,
size_t difs_size)
{
- int pid = 0;
+ pid_t pid = 0;
pid = find_pid_by_name(instance, &name);
if (pid == 0) {
@@ -183,7 +188,7 @@ static void unreg_ipcp(struct irm * instance,
char ** difs,
size_t difs_size)
{
- int pid = 0;
+ pid_t pid = 0;
pid = find_pid_by_name(instance, &name);
if (pid == 0) {