diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/dev.c | 3 | ||||
-rw-r--r-- | src/lib/ipcp_config.proto | 10 | ||||
-rw-r--r-- | src/lib/ipcpd_messages.proto | 7 | ||||
-rw-r--r-- | src/lib/irm.c | 70 | ||||
-rw-r--r-- | src/lib/irmd_messages.proto | 31 | ||||
-rw-r--r-- | src/lib/rib.c | 3 |
6 files changed, 91 insertions, 33 deletions
diff --git a/src/lib/dev.c b/src/lib/dev.c index 9b41e5d4..cfcfdf81 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -857,8 +857,7 @@ int flow_dealloc(int fd) if (!recv_msg->has_result) { irm_msg__free_unpacked(recv_msg, NULL); - assert(false); - return -1; + return -EIRMD; } irm_msg__free_unpacked(recv_msg, NULL); diff --git a/src/lib/ipcp_config.proto b/src/lib/ipcp_config.proto index f0d5f6eb..4ede5060 100644 --- a/src/lib/ipcp_config.proto +++ b/src/lib/ipcp_config.proto @@ -35,12 +35,10 @@ message ipcp_config_msg { optional uint32 fd_size = 4; optional bool has_ttl = 5; optional uint32 addr_auth_type = 6; - optional uint32 dt_gam_type = 7; - optional uint32 rm_gam_type = 8; - optional uint32 routing_type = 9; + optional uint32 routing_type = 7; // Config for shim UDP - optional uint32 ip_addr = 10; - optional uint32 dns_addr = 11; + optional uint32 ip_addr = 8; + optional uint32 dns_addr = 9; // Config for the shim Ethernet LLC - optional string if_name = 12; + optional string if_name = 10; } diff --git a/src/lib/ipcpd_messages.proto b/src/lib/ipcpd_messages.proto index 2e6c0497..691b76ad 100644 --- a/src/lib/ipcpd_messages.proto +++ b/src/lib/ipcpd_messages.proto @@ -33,7 +33,9 @@ enum ipcp_msg_code { IPCP_FLOW_ALLOC = 6; IPCP_FLOW_ALLOC_RESP = 7; IPCP_FLOW_DEALLOC = 8; - IPCP_REPLY = 9; + IPCP_CONNECT = 9; + IPCP_DISCONNECT = 10; + IPCP_REPLY = 11; }; message ipcp_msg { @@ -47,5 +49,6 @@ message ipcp_msg { optional int32 api = 8; optional dif_info_msg dif_info = 9; optional int32 response = 10; - optional int32 result = 11; + optional string comp_name = 11; + optional int32 result = 12; }; diff --git a/src/lib/irm.c b/src/lib/irm.c index 4232cec1..ce17bf18 100644 --- a/src/lib/irm.c +++ b/src/lib/irm.c @@ -121,10 +121,6 @@ int irm_bootstrap_ipcp(pid_t api, config.has_ttl = conf->has_ttl; config.has_addr_auth_type = true; config.addr_auth_type = conf->addr_auth_type; - config.has_dt_gam_type = true; - config.dt_gam_type = conf->dt_gam_type; - config.has_rm_gam_type = true; - config.rm_gam_type = conf->rm_gam_type; config.has_routing_type = true; config.routing_type = conf->routing_type; dif_info.dir_hash_algo = conf->dif_info.dir_hash_algo; @@ -150,7 +146,65 @@ int irm_bootstrap_ipcp(pid_t api, if (recv_msg->has_result == false) { irm_msg__free_unpacked(recv_msg, NULL); - return -1; + return -EIRMD; + } + + ret = recv_msg->result; + irm_msg__free_unpacked(recv_msg, NULL); + + return ret; +} + +int irm_connect_ipcp(pid_t api, + const char * dst, + const char * component) +{ + irm_msg_t msg = IRM_MSG__INIT; + irm_msg_t * recv_msg = NULL; + int ret; + + msg.code = IRM_MSG_CODE__IRM_CONNECT_IPCP; + msg.dst_name = (char *) dst; + msg.comp_name = (char *) component; + msg.has_api = true; + msg.api = api; + + recv_msg = send_recv_irm_msg(&msg); + if (recv_msg == NULL) + return -EIRMD; + + if (recv_msg->has_result == false) { + irm_msg__free_unpacked(recv_msg, NULL); + return -EIRMD; + } + + ret = recv_msg->result; + irm_msg__free_unpacked(recv_msg, NULL); + + return ret; +} + +int irm_disconnect_ipcp(pid_t api, + const char * dst, + const char * component) +{ + irm_msg_t msg = IRM_MSG__INIT; + irm_msg_t * recv_msg = NULL; + int ret; + + msg.code = IRM_MSG_CODE__IRM_DISCONNECT_IPCP; + msg.dst_name = (char *) dst; + msg.comp_name = (char *) component; + msg.has_api = true; + msg.api = api; + + recv_msg = send_recv_irm_msg(&msg); + if (recv_msg == NULL) + return -EIRMD; + + if (recv_msg->has_result == false) { + irm_msg__free_unpacked(recv_msg, NULL); + return -EIRMD; } ret = recv_msg->result; @@ -162,15 +216,15 @@ int irm_bootstrap_ipcp(pid_t api, ssize_t irm_list_ipcps(const char * name, pid_t ** apis) { - irm_msg_t msg = IRM_MSG__INIT; + irm_msg_t msg = IRM_MSG__INIT; irm_msg_t * recv_msg = NULL; - size_t nr = 0; + size_t nr = 0; size_t i; if (apis == NULL) return -EINVAL; - msg.code = IRM_MSG_CODE__IRM_LIST_IPCPS; + msg.code = IRM_MSG_CODE__IRM_LIST_IPCPS; msg.dst_name = (char *) name; recv_msg = send_recv_irm_msg(&msg); diff --git a/src/lib/irmd_messages.proto b/src/lib/irmd_messages.proto index 117752c8..723f6fb3 100644 --- a/src/lib/irmd_messages.proto +++ b/src/lib/irmd_messages.proto @@ -31,19 +31,21 @@ enum irm_msg_code { IRM_LIST_IPCPS = 4; IRM_BOOTSTRAP_IPCP = 5; IRM_ENROLL_IPCP = 6; - IRM_BIND_AP = 7; - IRM_UNBIND_AP = 8; - IRM_API_ANNOUNCE = 9; - IRM_BIND_API = 10; - IRM_UNBIND_API = 11; - IRM_REG = 12; - IRM_UNREG = 13; - IRM_FLOW_ALLOC = 14; - IRM_FLOW_ACCEPT = 15; - IRM_FLOW_DEALLOC = 16; - IPCP_FLOW_REQ_ARR = 17; - IPCP_FLOW_ALLOC_REPLY = 18; - IRM_REPLY = 19; + IRM_CONNECT_IPCP = 7; + IRM_DISCONNECT_IPCP = 8; + IRM_BIND_AP = 9; + IRM_UNBIND_AP = 10; + IRM_API_ANNOUNCE = 11; + IRM_BIND_API = 12; + IRM_UNBIND_API = 13; + IRM_REG = 14; + IRM_UNREG = 15; + IRM_FLOW_ALLOC = 16; + IRM_FLOW_ACCEPT = 17; + IRM_FLOW_DEALLOC = 18; + IPCP_FLOW_REQ_ARR = 19; + IPCP_FLOW_ALLOC_REPLY = 20; + IRM_REPLY = 21; }; message irm_msg { @@ -63,5 +65,6 @@ message irm_msg { repeated sint32 apis = 14; optional uint32 timeo_sec = 15; optional uint32 timeo_nsec = 16; - optional sint32 result = 17; + optional string comp_name = 17; + optional sint32 result = 18; }; diff --git a/src/lib/rib.c b/src/lib/rib.c index 104dc0cc..bbe996e7 100644 --- a/src/lib/rib.c +++ b/src/lib/rib.c @@ -373,7 +373,8 @@ static void destroy_rnode(struct rnode * node) branch_hash(node->parent); } - rnode_throw_event(node, RO_DELETE); + if (node->parent != NULL) + rnode_throw_event(node->parent, RO_DELETE); list_for_each_safe(p, h, &node->subs) { struct rn_sub * s = list_entry(p, struct rn_sub, next); |