summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/dev.c21
-rw-r--r--src/lib/ipcpd_messages.proto3
-rw-r--r--src/lib/irmd_messages.proto7
3 files changed, 23 insertions, 8 deletions
diff --git a/src/lib/dev.c b/src/lib/dev.c
index 2e61df52..5f6a3694 100644
--- a/src/lib/dev.c
+++ b/src/lib/dev.c
@@ -574,6 +574,7 @@ int flow_accept(qosspec_t * qs,
uint8_t buf[MSGBUFSZ];
int err = -EIRMD;
ssize_t key_len;
+ time_t mpl;
memset(s, 0, SYMMKEYSZ);
@@ -617,7 +618,7 @@ int flow_accept(qosspec_t * qs,
}
if (!recv_msg->has_pid || !recv_msg->has_flow_id ||
- recv_msg->qosspec == NULL)
+ !recv_msg->has_mpl || recv_msg->qosspec == NULL)
goto fail_result;
if (recv_msg->pk.len != 0 &&
@@ -632,6 +633,8 @@ int flow_accept(qosspec_t * qs,
fd = flow_init(recv_msg->flow_id, recv_msg->pid,
msg_to_spec(recv_msg->qosspec), s);
+ mpl = recv_msg->mpl;
+
irm_msg__free_unpacked(recv_msg, NULL);
if (fd < 0)
@@ -642,7 +645,7 @@ int flow_accept(qosspec_t * qs,
assert(ai.flows[fd].frcti == NULL);
if (ai.flows[fd].qs.in_order != 0) {
- ai.flows[fd].frcti = frcti_create(fd, DELT_A, DELT_R, DELT_MPL);
+ ai.flows[fd].frcti = frcti_create(fd, DELT_A, DELT_R, mpl);
if (ai.flows[fd].frcti == NULL) {
pthread_rwlock_unlock(&ai.lock);
flow_dealloc(fd);
@@ -678,6 +681,7 @@ static int __flow_alloc(const char * dst,
uint8_t s[SYMMKEYSZ]; /* secret key for flow */
uint8_t buf[MSGBUFSZ];
int err = -EIRMD;
+ time_t mpl;
memset(s, 0, SYMMKEYSZ);
@@ -726,7 +730,8 @@ static int __flow_alloc(const char * dst,
goto fail_result;
}
- if (!recv_msg->has_pid || !recv_msg->has_flow_id)
+ if (!recv_msg->has_pid || !recv_msg->has_flow_id ||
+ !recv_msg->has_mpl)
goto fail_result;
if (!join && qs != NULL && qs->cypher_s != 0) {
@@ -747,6 +752,8 @@ static int __flow_alloc(const char * dst,
fd = flow_init(recv_msg->flow_id, recv_msg->pid,
qs == NULL ? qos_raw : *qs, s);
+ mpl = recv_msg->mpl;
+
irm_msg__free_unpacked(recv_msg, NULL);
if (fd < 0)
@@ -757,7 +764,7 @@ static int __flow_alloc(const char * dst,
assert(ai.flows[fd].frcti == NULL);
if (ai.flows[fd].qs.in_order != 0) {
- ai.flows[fd].frcti = frcti_create(fd, DELT_A, DELT_R, DELT_MPL);
+ ai.flows[fd].frcti = frcti_create(fd, DELT_A, DELT_R, mpl);
if (ai.flows[fd].frcti == NULL) {
pthread_rwlock_unlock(&ai.lock);
flow_dealloc(fd);
@@ -1771,6 +1778,7 @@ int ipcp_create_r(int result)
int ipcp_flow_req_arr(const uint8_t * dst,
size_t len,
qosspec_t qs,
+ time_t mpl,
const void * data,
size_t dlen)
{
@@ -1789,6 +1797,8 @@ int ipcp_flow_req_arr(const uint8_t * dst,
msg.hash.data = (uint8_t *) dst;
qs_msg = spec_to_msg(&qs);
msg.qosspec = &qs_msg;
+ msg.has_mpl = true;
+ msg.mpl = mpl;
msg.has_pk = true;
msg.pk.data = (uint8_t *) data;
msg.pk.len = dlen;
@@ -1817,6 +1827,7 @@ int ipcp_flow_req_arr(const uint8_t * dst,
int ipcp_flow_alloc_reply(int fd,
int response,
+ time_t mpl,
const void * data,
size_t len)
{
@@ -1831,6 +1842,8 @@ int ipcp_flow_alloc_reply(int fd,
msg.has_pk = true;
msg.pk.data = (uint8_t *) data;
msg.pk.len = (uint32_t) len;
+ msg.has_mpl = true;
+ msg.mpl = mpl;
pthread_rwlock_rdlock(&ai.lock);
diff --git a/src/lib/ipcpd_messages.proto b/src/lib/ipcpd_messages.proto
index a8c3bfb4..4908a3a3 100644
--- a/src/lib/ipcpd_messages.proto
+++ b/src/lib/ipcpd_messages.proto
@@ -53,5 +53,6 @@ message ipcp_msg {
optional int32 response = 10;
optional string comp = 11;
optional uint32 timeo_sec = 12;
- optional int32 result = 13;
+ optional sint32 mpl = 13;
+ optional int32 result = 14;
};
diff --git a/src/lib/irmd_messages.proto b/src/lib/irmd_messages.proto
index 515d486f..2173d514 100644
--- a/src/lib/irmd_messages.proto
+++ b/src/lib/irmd_messages.proto
@@ -84,7 +84,8 @@ message irm_msg {
repeated name_info_msg names = 16;
optional uint32 timeo_sec = 17;
optional uint32 timeo_nsec = 18;
- optional string comp = 19;
- optional bytes pk = 20; /* piggyback */
- optional sint32 result = 21;
+ optional sint32 mpl = 19;
+ optional string comp = 20;
+ optional bytes pk = 21; /* piggyback */
+ optional sint32 result = 22;
};