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);  | 
