diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/ouroboros/CMakeLists.txt | 5 | ||||
-rw-r--r-- | include/ouroboros/instance_name.h | 91 | ||||
-rw-r--r-- | include/ouroboros/ipcp.h | 36 | ||||
-rw-r--r-- | include/ouroboros/irm.h | 52 | ||||
-rw-r--r-- | include/ouroboros/irm_config.h | 73 | ||||
-rw-r--r-- | include/ouroboros/sockets.h | 2 |
6 files changed, 122 insertions, 137 deletions
diff --git a/include/ouroboros/CMakeLists.txt b/include/ouroboros/CMakeLists.txt index 2ea86883..68c88a18 100644 --- a/include/ouroboros/CMakeLists.txt +++ b/include/ouroboros/CMakeLists.txt @@ -5,13 +5,12 @@ configure_file( set(HEADER_FILES cdap.h dev.h - dif_config.h errno.h flow.h - instance_name.h irm.h + irm_config.h nsm.h qos.h ) -install(FILES ${HEADER_FILES} DESTINATION /usr/include/ouroboros) +install(FILES ${HEADER_FILES} DESTINATION usr/include/ouroboros) diff --git a/include/ouroboros/instance_name.h b/include/ouroboros/instance_name.h deleted file mode 100644 index 92681504..00000000 --- a/include/ouroboros/instance_name.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * RINA naming related utilities - * - * Sander Vrijders <sander.vrijders@intec.ugent.be> - * Francesco Salvestrini <f.salvestrini@nextworks.it> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef INSTANCE_NAME_H -#define INSTANCE_NAME_H - -#include <stdint.h> -#include <unistd.h> -#include <stdbool.h> - -typedef struct { - char * name; - uint16_t id; -} instance_name_t; - -/* - * Allocates a new name, returning the allocated object. - * In case of an error, a NULL is returned. - */ -instance_name_t * instance_name_create(); - -/* - * Initializes a previously dynamically allocated name (i.e. name_create()) - * or a statically one (e.g. declared into a struct not as a pointer). - * Returns the passed object pointer in case everything is ok, a NULL - * otherwise. - * - * A call to name_destroy() is allowed in case of error, in order to - * release the associated resources. - * - * It is allowed to call name_init() over an already initialized object - */ -instance_name_t * instance_name_init_from(instance_name_t * dst, - const char * name, - uint16_t api_id); - -/* Takes ownership of the passed parameters */ -instance_name_t * instance_name_init_with(instance_name_t * dst, - char * name, - uint16_t id); - -/* - * Finalize a name object, releasing all the embedded resources (without - * releasing the object itself). After name_fini() execution the passed - * object will be in the same states as at the end of name_init(). - */ -void instance_name_fini(instance_name_t * dst); - -/* Releases all the associated resources bound to a name object */ -void instance_name_destroy(instance_name_t * ptr); - -/* Duplicates a name object, returning the pointer to the new object */ -instance_name_t * instance_name_dup(const instance_name_t * src); - -/* - * Copies the source object contents into the destination object, both must - * be previously allocated - */ -int instance_name_cpy(instance_name_t * dst, - const instance_name_t * src); - -int instance_name_cmp(const instance_name_t * a, - const instance_name_t * b); - -bool instance_name_is_valid(const instance_name_t * n); - -/* Returns a name as a (newly allocated) string */ -char * instance_name_to_string(const instance_name_t * n); - -/* Inverse of name_tostring() */ -instance_name_t * string_to_instance_name(const char * s); - -#endif /* INSTANCE_NAME_H */ diff --git a/include/ouroboros/ipcp.h b/include/ouroboros/ipcp.h index 0d62bd59..f5657b64 100644 --- a/include/ouroboros/ipcp.h +++ b/include/ouroboros/ipcp.h @@ -20,8 +20,7 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include <ouroboros/dif_config.h> -#include <ouroboros/instance_name.h> +#include <ouroboros/irm_config.h> #include <ouroboros/sockets.h> #include <ouroboros/common.h> @@ -33,58 +32,57 @@ struct ipcp; /* Returns the process id */ -pid_t ipcp_create(char * ipcp_name, - enum ipcp_type ipcp_type); +pid_t ipcp_create(enum ipcp_type ipcp_type); -int ipcp_destroy(pid_t pid); +int ipcp_destroy(pid_t api); -int ipcp_reg(pid_t pid, +int ipcp_reg(pid_t api, char ** difs, size_t difs_size); -int ipcp_unreg(pid_t pid, +int ipcp_unreg(pid_t api, char ** difs, size_t difs_size); -int ipcp_enroll(pid_t pid, +int ipcp_enroll(pid_t api, char * dif_name, char * n_1_dif); -int ipcp_bootstrap(pid_t pid, +int ipcp_bootstrap(pid_t api, dif_config_msg_t * conf); /* Flow related ops, these go from IRMd to IPCP */ -int ipcp_name_reg(pid_t pid, +int ipcp_name_reg(pid_t api, char * name); -int ipcp_name_unreg(pid_t pid, +int ipcp_name_unreg(pid_t api, char * name); -int ipcp_flow_alloc(pid_t pid, +int ipcp_flow_alloc(pid_t api, int port_id, - pid_t n_pid, + pid_t n_api, char * dst_name, char * src_ae_name, enum qos_cube qos); -int ipcp_flow_alloc_resp(pid_t pid, +int ipcp_flow_alloc_resp(pid_t api, int port_id, - pid_t n_pid, + pid_t n_api, int response); /* These operations go from the IPCP to the IRMd */ /* Returns the port_id */ -int ipcp_flow_req_arr(pid_t pid, +int ipcp_flow_req_arr(pid_t api, char * dst_name, char * src_ae_name); -int ipcp_flow_alloc_reply(pid_t pid, +int ipcp_flow_alloc_reply(pid_t api, int port_id, int response); /* * This operation can go both ways - * pid == 0 means the IRMd is the destination + * api == 0 means the IRMd is the destination */ -int ipcp_flow_dealloc(pid_t pid, +int ipcp_flow_dealloc(pid_t api, int port_id); diff --git a/include/ouroboros/irm.h b/include/ouroboros/irm.h index 743ed79c..9f27db05 100644 --- a/include/ouroboros/irm.h +++ b/include/ouroboros/irm.h @@ -1,7 +1,7 @@ /* * Ouroboros - Copyright (C) 2016 * - * The API to instruct the IRM + * The API to instruct the IPC Resource Manager * * Sander Vrijders <sander.vrijders@intec.ugent.be> * @@ -23,34 +23,40 @@ #ifndef OUROBOROS_IRM_H #define OUROBOROS_IRM_H -#include <ouroboros/instance_name.h> -#include <ouroboros/dif_config.h> - +#include <ouroboros/irm_config.h> #include <sys/types.h> -pid_t irm_create_ipcp(char * ipcp_name, - enum ipcp_type ipcp_type); +pid_t irm_create_ipcp(char * name, + enum ipcp_type ipcp_type); + +int irm_destroy_ipcp(pid_t api); + +/* APIs is an out-parameter */ +ssize_t irm_list_ipcps(char * name, + pid_t ** apis); + +int irm_enroll_ipcp(pid_t api, + char * dif_name); -int irm_destroy_ipcp(instance_name_t * api); +int irm_bootstrap_ipcp(pid_t api, + struct dif_config * conf); -int irm_enroll_ipcp(instance_name_t * api, - char * dif_name); +int irm_bind(char * name, + char * ap_name, + uint16_t opts, + int argc, + char ** argv); -int irm_bootstrap_ipcp(instance_name_t * api, - struct dif_config * conf); +int irm_unbind(char * name, + char * ap_name, + uint16_t opts); -int irm_reg(char * name, - instance_name_t * api, - int argc, - char ** argv, - bool autoexec, - char ** difs, - size_t difs_size); +int irm_reg(char * name, + char ** difs, + size_t difs_size); -int irm_unreg(char * name, - const instance_name_t * api, - char ** difs, - size_t difs_size, - bool hard); +int irm_unreg(char * name, + char ** difs, + size_t difs_size); #endif /* OUROBOROS_IRM_H */ diff --git a/include/ouroboros/irm_config.h b/include/ouroboros/irm_config.h new file mode 100644 index 00000000..d5f2b565 --- /dev/null +++ b/include/ouroboros/irm_config.h @@ -0,0 +1,73 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Configuration information for the IPC Resource Manager + * + * Sander Vrijders <sander.vrijders@intec.ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdint.h> +#include <unistd.h> + +#ifndef OUROBOROS_IRM_CONFIG_H +#define OUROBOROS_IRM_CONFIG_H + +/* Name binding options */ + +#define BIND_AP_AUTO 0x01 +#define BIND_AP_UNIQUE 0x02 + +enum ipcp_type { + IPCP_NORMAL = 0, + IPCP_LOCAL, + IPCP_SHIM_UDP, + IPCP_SHIM_ETH_LLC +}; + +struct dif_config { + char * dif_name; + enum ipcp_type type; + + union { + /* Normal DIF */ + struct { + uint8_t addr_size; + uint8_t cep_id_size; + uint8_t pdu_length_size; + uint8_t qos_id_size; + uint8_t seqno_size; + + /* DUP constants */ + uint8_t ttl_size; + uint8_t chk_size; + + uint32_t min_pdu_size; + uint32_t max_pdu_size; + }; + /* Shim UDP */ + struct { + uint32_t ip_addr; + uint32_t dns_addr; + }; + /* Shim Ethernet LLC */ + struct { + char * if_name; + }; + }; +}; + +#endif /* OUROBOROS_IRM_CONFIG_H */ diff --git a/include/ouroboros/sockets.h b/include/ouroboros/sockets.h index 0a215a76..ce7876b3 100644 --- a/include/ouroboros/sockets.h +++ b/include/ouroboros/sockets.h @@ -46,7 +46,7 @@ typedef IpcpMsg ipcp_msg_t; #define IPCP_MSG_BUF_SIZE IRM_MSG_BUF_SIZE /* Returns the full socket path of an IPCP */ -char * ipcp_sock_path(pid_t pid); +char * ipcp_sock_path(pid_t api); int server_socket_open(char * file_name); int client_socket_open(char * file_name); |