diff options
author | Sander Vrijders <[email protected]> | 2016-08-10 19:16:41 +0200 |
---|---|---|
committer | Sander Vrijders <[email protected]> | 2016-08-10 19:16:41 +0200 |
commit | 16cf56fc3c31a2f6201c4d9cc6e6ad314f9a1f37 (patch) | |
tree | 8a1654ef31bb091c285887a3b6c5d4ad1287382c /src/lib | |
parent | 88e820cd80323cf7f08fb7be1e683200016e9d34 (diff) | |
parent | 11c6be30491ebe4e41380f48a271c57bcff4b043 (diff) | |
download | ouroboros-16cf56fc3c31a2f6201c4d9cc6e6ad314f9a1f37.tar.gz ouroboros-16cf56fc3c31a2f6201c4d9cc6e6ad314f9a1f37.zip |
Merged in dstaesse/ouroboros/be-api-bind (pull request #203)
lib, irmd: Bind AP instances to AP_subsets
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/dev.c | 37 | ||||
-rw-r--r-- | src/lib/irmd_messages.proto | 48 |
2 files changed, 61 insertions, 24 deletions
diff --git a/src/lib/dev.c b/src/lib/dev.c index c8577feb..f27ef0fe 100644 --- a/src/lib/dev.c +++ b/src/lib/dev.c @@ -134,6 +134,42 @@ void ap_fini(void) free(_ap_instance); } +int api_bind(char * ap_subset) +{ + irm_msg_t msg = IRM_MSG__INIT; + irm_msg_t * recv_msg = NULL; + int ret = -1; + + msg.code = IRM_MSG_CODE__IRM_API_BIND; + msg.has_api = true; + + if (_ap_instance->ap_name == NULL) + return -EPERM; /* call init first */ + + pthread_rwlock_rdlock(&_ap_instance->data_lock); + + msg.api = _ap_instance->api; + msg.ap_name = _ap_instance->ap_name; + + pthread_rwlock_unlock(&_ap_instance->data_lock); + + msg.ap_subset = ap_subset; + + recv_msg = send_recv_irm_msg(&msg); + if (recv_msg == NULL) { + return -1; + } + + if (!recv_msg->has_result || (ret = recv_msg->result)) { + irm_msg__free_unpacked(recv_msg, NULL); + return ret; + } + + irm_msg__free_unpacked(recv_msg, NULL); + + return ret; +} + static int port_id_to_fd(int port_id) { int i; @@ -154,7 +190,6 @@ int flow_accept(char ** ae_name) pthread_rwlock_rdlock(&_ap_instance->data_lock); - msg.ap_name = _ap_instance->ap_name; msg.api = _ap_instance->api; pthread_rwlock_unlock(&_ap_instance->data_lock); diff --git a/src/lib/irmd_messages.proto b/src/lib/irmd_messages.proto index 730f842c..5c320a17 100644 --- a/src/lib/irmd_messages.proto +++ b/src/lib/irmd_messages.proto @@ -31,32 +31,34 @@ enum irm_msg_code { IRM_ENROLL_IPCP = 6; IRM_BIND = 7; IRM_UNBIND = 8; - IRM_REG = 9; - IRM_UNREG = 10; - IRM_FLOW_ACCEPT = 11; - IRM_FLOW_ALLOC_RESP = 12; - IRM_FLOW_ALLOC = 13; - IRM_FLOW_ALLOC_RES = 14; - IRM_FLOW_DEALLOC = 15; - IPCP_FLOW_REQ_ARR = 16; - IPCP_FLOW_ALLOC_REPLY = 17; - IPCP_FLOW_DEALLOC = 18; - IRM_REPLY = 19; + IRM_API_BIND = 9; + IRM_REG = 10; + IRM_UNREG = 11; + IRM_FLOW_ACCEPT = 12; + IRM_FLOW_ALLOC_RESP = 13; + IRM_FLOW_ALLOC = 14; + IRM_FLOW_ALLOC_RES = 15; + IRM_FLOW_DEALLOC = 16; + IPCP_FLOW_REQ_ARR = 17; + IPCP_FLOW_ALLOC_REPLY = 18; + IPCP_FLOW_DEALLOC = 19; + IRM_REPLY = 20; }; message irm_msg { required irm_msg_code code = 1; optional string ap_name = 2; - optional string ae_name = 3; - optional sint32 api = 4; - optional uint32 ipcp_type = 5; - repeated string dif_name = 6; - repeated string args = 7; - optional sint32 response = 8; - optional string dst_name = 9; - optional sint32 port_id = 10; - optional dif_config_msg conf = 11; - optional uint32 opts = 12; - repeated sint32 apis = 13; - optional sint32 result = 14; + optional string ap_subset = 3; + optional string ae_name = 4; + optional sint32 api = 5; + optional uint32 ipcp_type = 6; + repeated string dif_name = 7; + repeated string args = 8; + optional sint32 response = 9; + optional string dst_name = 10; + optional sint32 port_id = 11; + optional dif_config_msg conf = 12; + optional uint32 opts = 13; + repeated sint32 apis = 14; + optional sint32 result = 15; }; |