summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authordimitri staessens <dimitri.staessens@intec.ugent.be>2016-04-22 17:39:30 +0200
committerdimitri staessens <dimitri.staessens@intec.ugent.be>2016-04-22 17:39:30 +0200
commitf4f67651db3891652f4dd08dec990aa0560bb35c (patch)
tree38d9d3f171389a85fc9b6ab7dcb640029ac0d743 /src/lib
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/lib')
-rw-r--r--src/lib/dev.c78
-rw-r--r--src/lib/ipcp.c67
-rw-r--r--src/lib/ipcpd_messages.proto30
-rw-r--r--src/lib/irmd_messages.proto71
4 files changed, 138 insertions, 108 deletions
diff --git a/src/lib/dev.c b/src/lib/dev.c
index c138b009..60dee701 100644
--- a/src/lib/dev.c
+++ b/src/lib/dev.c
@@ -43,9 +43,11 @@ int ap_reg(char * ap_name,
return -EINVAL;
}
- msg.code = IRM_MSG_CODE__IRM_AP_REG;
- msg.ap_name = ap_name;
- msg.dif_name = difs;
+ msg.code = IRM_MSG_CODE__IRM_AP_REG;
+ msg.has_pid = true;
+ msg.pid = getpid();
+ msg.ap_name = ap_name;
+ msg.dif_name = difs;
msg.n_dif_name = difs_size;
recv_msg = send_recv_irm_msg(&msg);
@@ -78,9 +80,11 @@ int ap_unreg(char * ap_name,
return -EINVAL;
}
- msg.code = IRM_MSG_CODE__IRM_AP_UNREG;
- msg.ap_name = ap_name;
- msg.dif_name = difs;
+ msg.code = IRM_MSG_CODE__IRM_AP_UNREG;
+ msg.has_pid = true;
+ msg.pid = getpid();
+ msg.ap_name = ap_name;
+ msg.dif_name = difs;
msg.n_dif_name = difs_size;
recv_msg = send_recv_irm_msg(&msg);
@@ -110,9 +114,11 @@ int flow_accept(int fd,
return -EINVAL;
}
- msg.code = IRM_MSG_CODE__IRM_FLOW_ACCEPT;
- msg.has_fd = true;
- msg.fd = fd;
+ msg.code = IRM_MSG_CODE__IRM_FLOW_ACCEPT;
+ msg.has_pid = true;
+ msg.pid = getpid();
+ msg.has_fd = true;
+ msg.fd = fd;
recv_msg = send_recv_irm_msg(&msg);
if (recv_msg == NULL)
@@ -122,7 +128,7 @@ int flow_accept(int fd,
irm_msg__free_unpacked(recv_msg, NULL);
return -1;
}
- cli_fd = recv_msg->fd;
+ cli_fd = recv_msg->fd;
ap_name = recv_msg->ap_name;
ae_name = recv_msg->ae_name;
@@ -131,17 +137,19 @@ int flow_accept(int fd,
}
int flow_alloc_resp(int fd,
- int result)
+ int response)
{
irm_msg_t msg = IRM_MSG__INIT;
irm_msg_t * recv_msg = NULL;
int ret = -1;
- msg.code = IRM_MSG_CODE__IRM_FLOW_ALLOC_RESP;
- msg.has_fd = true;
+ msg.code = IRM_MSG_CODE__IRM_FLOW_ALLOC_RESP;
+ msg.has_pid = true;
+ msg.pid = getpid();
+ msg.has_fd = true;
msg.fd = fd;
- msg.has_result = true;
- msg.result = result;
+ msg.has_response = true;
+ msg.response = response;
recv_msg = send_recv_irm_msg(&msg);
if (recv_msg == NULL)
@@ -158,7 +166,7 @@ int flow_alloc_resp(int fd,
return ret;
}
-int flow_alloc(char * dst_ap_name,
+int flow_alloc(char * dst_name,
char * src_ap_name,
char * src_ae_name,
struct qos_spec * qos,
@@ -168,18 +176,18 @@ int flow_alloc(char * dst_ap_name,
irm_msg_t * recv_msg = NULL;
int fd = 0;
- if (dst_ap_name == NULL ||
+ if (dst_name == NULL ||
src_ap_name == NULL ||
qos == NULL) {
return -EINVAL;
}
- msg.code = IRM_MSG_CODE__IRM_FLOW_ALLOC;
- msg.dst_ap_name = dst_ap_name;
- msg.ap_name = src_ap_name;
- msg.ae_name = src_ae_name;
- msg.has_oflags = true;
- msg.oflags = oflags;
+ msg.code = IRM_MSG_CODE__IRM_FLOW_ALLOC;
+ msg.dst_name = dst_name;
+ msg.ap_name = src_ap_name;
+ msg.ae_name = src_ae_name;
+ msg.has_oflags = true;
+ msg.oflags = oflags;
recv_msg = send_recv_irm_msg(&msg);
if (recv_msg == NULL)
@@ -201,9 +209,11 @@ int flow_alloc_res(int fd)
irm_msg_t * recv_msg = NULL;
int result = 0;
- msg.code = IRM_MSG_CODE__IRM_FLOW_ALLOC_RES;
- msg.has_fd = true;
- msg.fd = fd;
+ msg.code = IRM_MSG_CODE__IRM_FLOW_ALLOC_RES;
+ msg.has_pid = true;
+ msg.pid = getpid();
+ msg.has_fd = true;
+ msg.fd = fd;
recv_msg = send_recv_irm_msg(&msg);
if (recv_msg == NULL)
@@ -226,9 +236,11 @@ int flow_dealloc(int fd)
irm_msg_t * recv_msg = NULL;
int ret = -1;
- msg.code = IRM_MSG_CODE__IRM_FLOW_DEALLOC;
- msg.has_fd = true;
- msg.fd = fd;
+ msg.code = IRM_MSG_CODE__IRM_FLOW_DEALLOC;
+ msg.has_pid = true;
+ msg.pid = getpid();
+ msg.has_fd = true;
+ msg.fd = fd;
recv_msg = send_recv_irm_msg(&msg);
if (recv_msg == NULL)
@@ -251,9 +263,11 @@ int flow_cntl(int fd, int oflags)
irm_msg_t * recv_msg = NULL;
int ret = -1;
- msg.has_fd = true;
- msg.fd = fd;
- msg.oflags = oflags;
+ msg.has_pid = true;
+ msg.pid = getpid();
+ msg.has_fd = true;
+ msg.fd = fd;
+ msg.oflags = oflags;
recv_msg = send_recv_irm_msg(&msg);
if (recv_msg == NULL)
diff --git a/src/lib/ipcp.c b/src/lib/ipcp.c
index 338d8683..b93f5488 100644
--- a/src/lib/ipcp.c
+++ b/src/lib/ipcp.c
@@ -326,21 +326,18 @@ int ipcp_enroll(pid_t pid,
return ret;
}
-int ipcp_ap_reg(pid_t pid,
- uint32_t reg_ap_id,
- char * ap_name)
+int ipcp_name_reg(pid_t pid,
+ char * name)
{
ipcp_msg_t msg = IPCP_MSG__INIT;
ipcp_msg_t * recv_msg = NULL;
int ret = -1;
- if (ap_name == NULL)
+ if (name == NULL)
return -1;
- msg.code = IPCP_MSG_CODE__IPCP_AP_REG;
- msg.ap_name = ap_name;
- msg.has_reg_ap_id = true;
- msg.reg_ap_id = reg_ap_id;
+ msg.code = IPCP_MSG_CODE__IPCP_NAME_REG;
+ msg.name = name;
recv_msg = send_recv_ipcp_msg(pid, &msg);
if (recv_msg == NULL)
@@ -357,16 +354,15 @@ int ipcp_ap_reg(pid_t pid,
return ret;
}
-int ipcp_ap_unreg(pid_t pid,
- uint32_t reg_ap_id)
+int ipcp_name_unreg(pid_t pid,
+ char * name)
{
ipcp_msg_t msg = IPCP_MSG__INIT;
ipcp_msg_t * recv_msg = NULL;
int ret = -1;
- msg.code = IPCP_MSG_CODE__IPCP_AP_UNREG;
- msg.has_reg_ap_id = true;
- msg.reg_ap_id = reg_ap_id;
+ msg.code = IPCP_MSG_CODE__IPCP_NAME_UNREG;
+ msg.name = name;
recv_msg = send_recv_ipcp_msg(pid, &msg);
if (recv_msg == NULL)
@@ -385,7 +381,7 @@ int ipcp_ap_unreg(pid_t pid,
int ipcp_flow_alloc(pid_t pid,
uint32_t port_id,
- char * dst_ap_name,
+ char * dst_name,
char * src_ap_name,
char * src_ae_name,
struct qos_spec * qos)
@@ -394,13 +390,13 @@ int ipcp_flow_alloc(pid_t pid,
ipcp_msg_t * recv_msg = NULL;
int ret = -1;
- if (dst_ap_name == NULL || src_ap_name == NULL || src_ae_name == NULL)
+ if (dst_name == NULL || src_ap_name == NULL || src_ae_name == NULL)
return -EINVAL;
msg.code = IPCP_MSG_CODE__IPCP_FLOW_ALLOC;
- msg.ap_name = src_ap_name;
- msg.ae_name = src_ae_name;
- msg.dst_ap_name = dst_ap_name;
+ msg.src_ap_name = src_ap_name;
+ msg.src_ae_name = src_ae_name;
+ msg.dst_name = dst_name;
msg.port_id = port_id;
msg.has_port_id = true;
@@ -449,22 +445,21 @@ int ipcp_flow_alloc_resp(pid_t pid,
}
int ipcp_flow_req_arr(pid_t pid,
- uint32_t reg_ap_id,
- char * ap_name,
- char * ae_name)
+ char * dst_name,
+ char * src_ap_name,
+ char * src_ae_name)
{
irm_msg_t msg = IRM_MSG__INIT;
irm_msg_t * recv_msg = NULL;
int fd = -1;
- if (ap_name == NULL || ae_name == NULL)
+ if (src_ap_name == NULL || src_ae_name == NULL)
return -EINVAL;
msg.code = IRM_MSG_CODE__IPCP_FLOW_REQ_ARR;
- msg.ap_name = ap_name;
- msg.ae_name = ae_name;
- msg.reg_ap_id = reg_ap_id;
- msg.has_reg_ap_id = true;
+ msg.dst_name = dst_name;
+ msg.ap_name = src_ap_name;
+ msg.ae_name = src_ae_name;
msg.pid = pid;
msg.has_pid = true;
@@ -485,17 +480,17 @@ int ipcp_flow_req_arr(pid_t pid,
int ipcp_flow_alloc_reply(pid_t pid,
uint32_t port_id,
- int result)
+ int response)
{
irm_msg_t msg = IRM_MSG__INIT;
irm_msg_t * recv_msg = NULL;
int ret = -1;
- msg.code = IRM_MSG_CODE__IPCP_FLOW_ALLOC_REPLY;
- msg.port_id = port_id;
- msg.has_port_id = true;
- msg.result = result;
- msg.has_result = true;
+ msg.code = IRM_MSG_CODE__IPCP_FLOW_ALLOC_REPLY;
+ msg.port_id = port_id;
+ msg.has_port_id = true;
+ msg.response = response;
+ msg.has_response = true;
recv_msg = send_recv_irm_msg(&msg);
if (recv_msg == NULL)
@@ -521,9 +516,9 @@ int ipcp_flow_dealloc(pid_t pid,
ipcp_msg_t * recv_msg = NULL;
int ret = -1;
- msg.code = IPCP_MSG_CODE__IPCP_FLOW_DEALLOC;
+ msg.code = IPCP_MSG_CODE__IPCP_FLOW_DEALLOC;
msg.has_port_id = true;
- msg.port_id = port_id;
+ msg.port_id = port_id;
recv_msg = send_recv_ipcp_msg(pid, &msg);
if (recv_msg == NULL)
@@ -543,9 +538,9 @@ int ipcp_flow_dealloc(pid_t pid,
irm_msg_t * recv_msg = NULL;
int ret = -1;
- msg.code = IRM_MSG_CODE__IPCP_FLOW_DEALLOC;
+ msg.code = IRM_MSG_CODE__IPCP_FLOW_DEALLOC;
msg.has_port_id = true;
- msg.port_id = port_id;
+ msg.port_id = port_id;
recv_msg = send_recv_irm_msg(&msg);
if (recv_msg == NULL)
diff --git a/src/lib/ipcpd_messages.proto b/src/lib/ipcpd_messages.proto
index 850c64e4..da4bb469 100644
--- a/src/lib/ipcpd_messages.proto
+++ b/src/lib/ipcpd_messages.proto
@@ -1,16 +1,16 @@
import "dif_config.proto";
enum ipcp_msg_code {
- IPCP_BOOTSTRAP = 1;
- IPCP_ENROLL = 2;
- IPCP_REG = 3;
- IPCP_UNREG = 4;
- IPCP_AP_REG = 5;
- IPCP_AP_UNREG = 6;
- IPCP_FLOW_ALLOC = 7;
- IPCP_FLOW_ALLOC_RESP = 8;
- IPCP_FLOW_DEALLOC = 9;
- IPCP_REPLY = 10;
+ IPCP_BOOTSTRAP = 1;
+ IPCP_ENROLL = 2;
+ IPCP_REG = 3;
+ IPCP_UNREG = 4;
+ IPCP_NAME_REG = 5;
+ IPCP_NAME_UNREG = 6;
+ IPCP_FLOW_ALLOC = 7;
+ IPCP_FLOW_ALLOC_RESP = 8;
+ IPCP_FLOW_DEALLOC = 9;
+ IPCP_REPLY = 10;
};
message ipcp_msg {
@@ -19,11 +19,11 @@ message ipcp_msg {
optional string n_1_dif = 3;
repeated string dif_names = 4;
optional int32 len = 5;
- optional string ap_name = 6;
- optional int32 reg_ap_id = 7;
- optional int32 port_id = 8;
- optional string dst_ap_name = 9;
- optional string ae_name = 10;
+ optional string name = 6;
+ optional int32 port_id = 7;
+ optional string dst_name = 8;
+ optional string src_ap_name = 9;
+ optional string src_ae_name = 10;
optional dif_config_msg conf = 11;
optional int32 result = 12;
optional int32 fd = 13;
diff --git a/src/lib/irmd_messages.proto b/src/lib/irmd_messages.proto
index d484a007..89e2c882 100644
--- a/src/lib/irmd_messages.proto
+++ b/src/lib/irmd_messages.proto
@@ -1,42 +1,63 @@
+/*
+ * Ouroboros - Copyright (C) 2016
+ *
+ * IRM messages
+ *
+ * Sander Vrijders <sander.vrijders@intec.ugent.be>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
import "dif_config.proto";
enum irm_msg_code {
- IRM_CREATE_IPCP = 1;
- IRM_DESTROY_IPCP = 2;
- IRM_BOOTSTRAP_IPCP = 3;
- IRM_ENROLL_IPCP = 4;
- IRM_REG_IPCP = 5;
- IRM_UNREG_IPCP = 6;
- IRM_AP_REG = 7;
- IRM_AP_UNREG = 8;
- IRM_FLOW_ACCEPT = 9;
- IRM_FLOW_ALLOC_RESP = 10;
- IRM_FLOW_ALLOC = 11;
- IRM_FLOW_ALLOC_RES = 12;
- IRM_FLOW_DEALLOC = 13;
- IRM_FLOW_CONTROL = 14;
- IRM_FLOW_WRITE = 15;
- IRM_FLOW_READ = 16;
- IPCP_FLOW_REQ_ARR = 17;
+ IRM_CREATE_IPCP = 1;
+ IRM_DESTROY_IPCP = 2;
+ IRM_BOOTSTRAP_IPCP = 3;
+ IRM_ENROLL_IPCP = 4;
+ IRM_REG_IPCP = 5;
+ IRM_UNREG_IPCP = 6;
+ IRM_AP_REG = 7;
+ IRM_AP_UNREG = 8;
+ IRM_FLOW_ACCEPT = 9;
+ IRM_FLOW_ALLOC_RESP = 10;
+ IRM_FLOW_ALLOC = 11;
+ IRM_FLOW_ALLOC_RES = 12;
+ IRM_FLOW_DEALLOC = 13;
+ IRM_FLOW_CONTROL = 14;
+ IRM_FLOW_WRITE = 15;
+ IRM_FLOW_READ = 16;
+ IPCP_FLOW_REQ_ARR = 17;
IPCP_FLOW_ALLOC_REPLY = 18;
- IPCP_FLOW_DEALLOC = 19;
- IRM_REPLY = 20;
+ IPCP_FLOW_DEALLOC = 19;
+ IRM_REPLY = 20;
};
message irm_msg {
required irm_msg_code code = 1;
optional string ap_name = 2;
- optional uint32 api_id = 3;
optional string ae_name = 4;
+ optional uint32 api_id = 3;
optional uint32 ipcp_type = 5;
repeated string dif_name = 6;
optional int32 fd = 7;
optional int32 response = 8;
optional int32 oflags = 9;
- optional string dst_ap_name = 10;
+ optional string dst_name = 10;
optional uint32 port_id = 11;
- optional uint32 reg_ap_id = 12;
- optional int32 pid = 13;
- optional dif_config_msg conf = 14;
- optional int32 result = 15;
+ optional int32 pid = 12;
+ optional dif_config_msg conf = 13;
+ optional int32 result = 14;
};