summaryrefslogtreecommitdiff
path: root/src/ipcpd/ipcp-data.c
diff options
context:
space:
mode:
authordimitri staessens <[email protected]>2016-04-22 17:39:30 +0200
committerdimitri staessens <[email protected]>2016-04-22 17:39:30 +0200
commitf4f67651db3891652f4dd08dec990aa0560bb35c (patch)
tree38d9d3f171389a85fc9b6ab7dcb640029ac0d743 /src/ipcpd/ipcp-data.c
parentcd428b2b63230fce191ff3a90d5f6928aa50df46 (diff)
downloadouroboros-f4f67651db3891652f4dd08dec990aa0560bb35c.tar.gz
ouroboros-f4f67651db3891652f4dd08dec990aa0560bb35c.zip
irmd: reg/unreg whatevercast names
Unregistering ap's now works. An AP now registers/unregisters its AP-I by sending its AP name and its pid to the IRMd. The IPCPs register whatevercast names. An AP name is currently mapped on a whatevercast name represented by the same string literal. The IRMd allows registration of only one AP-I per AP. A Name Space Management system is needed in the processing system so we can resolve this completely. Changing the stack to register whatevercast names required some changes all over the ipcpd implemented and in the library.
Diffstat (limited to 'src/ipcpd/ipcp-data.c')
-rw-r--r--src/ipcpd/ipcp-data.c94
1 files changed, 14 insertions, 80 deletions
diff --git a/src/ipcpd/ipcp-data.c b/src/ipcpd/ipcp-data.c
index 1828fda9..e6997e3e 100644
--- a/src/ipcpd/ipcp-data.c
+++ b/src/ipcpd/ipcp-data.c
@@ -35,8 +35,7 @@
struct reg_entry {
struct list_head list;
- char * ap_name;
- uint32_t reg_ap_id;
+ char * name;
};
struct dir_entry {
@@ -45,16 +44,14 @@ struct dir_entry {
uint64_t addr;
};
-static struct reg_entry * reg_entry_create(const char * ap_name,
- uint32_t reg_ap_id)
+static struct reg_entry * reg_entry_create(const char * name)
{
struct reg_entry * entry = malloc(sizeof *entry);
if (entry == NULL)
return NULL;
- entry->reg_ap_id = reg_ap_id;
- entry->ap_name = strdup(ap_name);
- if (entry->ap_name == NULL)
+ entry->name = strdup(name);
+ if (entry->name == NULL)
return NULL;
return entry;
@@ -65,7 +62,7 @@ static void reg_entry_destroy(struct reg_entry * entry)
if (entry == NULL)
return;
- free(entry->ap_name);
+ free(entry->name);
free(entry);
}
@@ -194,25 +191,12 @@ void ipcp_data_destroy(struct ipcp_data * data)
static struct reg_entry * find_reg_entry_by_name(struct ipcp_data * data,
- const char * ap_name)
+ const char * name)
{
struct list_head * h;
list_for_each(h, &data->registry) {
struct reg_entry * e = list_entry(h, struct reg_entry, list);
- if (!strcmp(e->ap_name, ap_name))
- return e;
- }
-
- return NULL;
-}
-
-static struct reg_entry * find_reg_entry_by_id(struct ipcp_data * data,
- uint32_t reg_ap_id)
-{
- struct list_head * h;
- list_for_each(h, &data->registry) {
- struct reg_entry * e = list_entry(h, struct reg_entry, list);
- if (e->reg_ap_id == reg_ap_id)
+ if (!strcmp(e->name, name))
return e;
}
@@ -253,7 +237,7 @@ bool ipcp_data_is_in_directory(struct ipcp_data * data,
}
int ipcp_data_del_reg_entry(struct ipcp_data * data,
- uint32_t reg_ap_id)
+ const char * name)
{
struct reg_entry * e;
if (data == NULL)
@@ -261,7 +245,7 @@ int ipcp_data_del_reg_entry(struct ipcp_data * data,
pthread_mutex_lock(&data->reg_lock);
- e = find_reg_entry_by_id(data, reg_ap_id);
+ e = find_reg_entry_by_name(data, name);
if (e == NULL) {
pthread_mutex_unlock(&data->reg_lock);
return 0; /* nothing to do */
@@ -302,23 +286,21 @@ int ipcp_data_del_dir_entry(struct ipcp_data * data,
}
int ipcp_data_add_reg_entry(struct ipcp_data * data,
- char * ap_name,
- uint32_t reg_ap_id)
+ const char * name)
{
struct reg_entry * entry;
- if (data == NULL || ap_name == NULL)
+ if (data == NULL || name == NULL)
return -1;
pthread_mutex_lock(&data->reg_lock);
- if (find_reg_entry_by_name(data, ap_name) ||
- find_reg_entry_by_id(data, reg_ap_id)) {
+ if (find_reg_entry_by_name(data, name)) {
pthread_mutex_unlock(&data->reg_lock);
return -2;
}
- entry = reg_entry_create(ap_name, reg_ap_id);
+ entry = reg_entry_create(name);
if (entry == NULL) {
pthread_mutex_unlock(&data->reg_lock);
return -1;
@@ -332,7 +314,7 @@ int ipcp_data_add_reg_entry(struct ipcp_data * data,
}
int ipcp_data_add_dir_entry(struct ipcp_data * data,
- char * ap_name,
+ const char * ap_name,
uint64_t addr)
{
struct dir_entry * entry;
@@ -366,54 +348,6 @@ bool ipcp_data_is_in_registry(struct ipcp_data * data,
return find_reg_entry_by_name(data, ap_name) != NULL;
}
-uint32_t ipcp_data_get_reg_ap_id(struct ipcp_data * data,
- const char * ap_name)
-{
- struct reg_entry * entry;
- uint32_t id;
-
- pthread_mutex_lock(&data->reg_lock);
-
- entry = find_reg_entry_by_name(data, ap_name);
-
- if (entry == NULL) {
- pthread_mutex_unlock(&data->reg_lock);
- return 0; /* undefined behaviour */
- }
-
- id = entry->reg_ap_id;
-
- pthread_mutex_unlock(&data->reg_lock);
-
- return id;
-}
-
-const char * ipcp_data_get_reg_ap_name(struct ipcp_data * data,
- uint32_t reg_ap_id)
-{
- struct reg_entry * entry;
- char * name;
-
- pthread_mutex_lock(&data->reg_lock);
-
- entry = find_reg_entry_by_id(data, reg_ap_id);
-
- if (entry == NULL) {
- pthread_mutex_unlock(&data->reg_lock);
- return NULL;
- }
-
- name = strdup(entry->ap_name);
- if (name == NULL) {
- pthread_mutex_unlock(&data->reg_lock);
- return NULL;
- }
-
- pthread_mutex_unlock(&data->reg_lock);
-
- return name;
-}
-
uint64_t ipcp_data_get_addr(struct ipcp_data * data,
const char * ap_name)
{