diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/ipcpd_messages.proto | 7 | ||||
| -rw-r--r-- | src/lib/irm.c | 66 | ||||
| -rw-r--r-- | src/lib/irmd_messages.proto | 31 | 
3 files changed, 84 insertions, 20 deletions
| 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 eec89338..ce17bf18 100644 --- a/src/lib/irm.c +++ b/src/lib/irm.c @@ -146,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; @@ -158,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;  }; | 
