From d37add0f20c93432c0b4c12866810c124a7a18ec Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Fri, 25 Mar 2016 19:13:32 +0100 Subject: build: Add protobuf-c commands for cmake This adds a cmake file so that the build can ask to generate protobuf-c files from .proto files. The messages between the IRM and the library are compiled into the library. --- cmake/FindProtobufC.cmake | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 cmake/FindProtobufC.cmake (limited to 'cmake') diff --git a/cmake/FindProtobufC.cmake b/cmake/FindProtobufC.cmake new file mode 100644 index 00000000..cae9f1c3 --- /dev/null +++ b/cmake/FindProtobufC.cmake @@ -0,0 +1,72 @@ +function(PROTOBUF_GENERATE_C SRCS HDRS) + if(NOT ARGN) + message(SEND_ERROR "Error: PROTOBUF_GENERATE_C() called without any proto files") + return() + endif() + + if(PROTOBUF_GENERATE_C_APPEND_PATH) + # Create an include path for each file specified + foreach(FIL ${ARGN}) + get_filename_component(ABS_FIL ${FIL} ABSOLUTE) + get_filename_component(ABS_PATH ${ABS_FIL} PATH) + list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _protobuf_include_path -I ${ABS_PATH}) + endif() + endforeach() + else() + set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR}) + endif() + + set(${SRCS}) + set(${HDRS}) + foreach(FIL ${ARGN}) + get_filename_component(ABS_FIL ${FIL} ABSOLUTE) + get_filename_component(FIL_WE ${FIL} NAME_WE) + + list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.cc") + list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.h") + + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.cc" + "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.h" + COMMAND ${PROTOBUF_PROTOC_C_EXECUTABLE} + ARGS --c_out=${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL} + DEPENDS ${ABS_FIL} ${PROTOBUF_PROTOC_C_EXECUTABLE} + COMMENT "Running C protocol buffer compiler on ${FIL}" + VERBATIM ) + endforeach() + + set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE) + set(${SRCS} ${${SRCS}} PARENT_SCOPE) + set(${HDRS} ${${HDRS}} PARENT_SCOPE) +endfunction() + +# By default have PROTOBUF_GENERATE_C macro pass -I to protoc +# for each directory where a proto file is referenced. +if(NOT DEFINED PROTOBUF_GENERATE_C_APPEND_PATH) + set(PROTOBUF_GENERATE_C_APPEND_PATH TRUE) +endif() + +# Find library +find_library(PROTOBUF_C_LIBRARY + NAMES libprotobuf-c.so libprotobuf-c +) +mark_as_advanced(PROTOBUF_C_LIBRARY) + +# Find the include directory +find_path(PROTOBUF_C_INCLUDE_DIR + google/protobuf-c/protobuf-c.h +) +mark_as_advanced(PROTOBUF_C_INCLUDE_DIR) + +# Find the protoc-c Executable +find_program(PROTOBUF_PROTOC_C_EXECUTABLE + NAMES protoc-c + DOC "The Google Protocol Buffers C Compiler" +) +mark_as_advanced(PROTOBUF_PROTOC_C_EXECUTABLE) + +find_package(PackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ProtobufC DEFAULT_MSG + PROTOBUF_C_LIBRARY PROTOBUF_C_INCLUDE_DIR PROTOBUF_PROTOC_C_EXECUTABLE) -- cgit v1.2.3 From a14d696bdbc72754e8019fa9579d5a338cc85a05 Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Mon, 28 Mar 2016 14:43:16 +0200 Subject: lib: Update irm.h API Removes rina_name_t from that API. Passing ap_name and api_id as params instead. The IRM tool has been updated accordingly. Some errors in the build related to protobuf-c have also been resolved. --- cmake/FindProtobufC.cmake | 4 +- include/ouroboros/irm.h | 32 ++++---- include/ouroboros/sockets.h | 5 ++ src/lib/.gitignore | 1 + src/lib/CMakeLists.txt | 11 ++- src/lib/irm.c | 141 +++++++++++++++++++++--------------- src/lib/sockets.c | 7 ++ src/tools/irm/irm_bootstrap_ipcp.c | 20 +++-- src/tools/irm/irm_create_ipcp.c | 28 +++---- src/tools/irm/irm_destroy_ipcp.c | 17 +++-- src/tools/irm/irm_enroll_ipcp.c | 29 ++++---- src/tools/irm/irm_register_ipcp.c | 32 ++++---- src/tools/irm/irm_unregister_ipcp.c | 31 ++++---- src/tools/irm/irm_utils.c | 16 ---- src/tools/irm/irm_utils.h | 2 - 15 files changed, 207 insertions(+), 169 deletions(-) create mode 100644 src/lib/.gitignore (limited to 'cmake') diff --git a/cmake/FindProtobufC.cmake b/cmake/FindProtobufC.cmake index cae9f1c3..bfa50110 100644 --- a/cmake/FindProtobufC.cmake +++ b/cmake/FindProtobufC.cmake @@ -24,11 +24,11 @@ function(PROTOBUF_GENERATE_C SRCS HDRS) get_filename_component(ABS_FIL ${FIL} ABSOLUTE) get_filename_component(FIL_WE ${FIL} NAME_WE) - list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.cc") + list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.c") list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.h") add_custom_command( - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.cc" + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.c" "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb-c.h" COMMAND ${PROTOBUF_PROTOC_C_EXECUTABLE} ARGS --c_out=${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL} diff --git a/include/ouroboros/irm.h b/include/ouroboros/irm.h index a6f0d9f3..fe72aefe 100644 --- a/include/ouroboros/irm.h +++ b/include/ouroboros/irm.h @@ -26,20 +26,26 @@ #include "common.h" #include "rina_name.h" -int irm_create_ipcp(rina_name_t name, - char * ipcp_type); -int irm_destroy_ipcp(rina_name_t name); +int irm_create_ipcp(char * ap_name, + int api_id, + char * ipcp_type); +int irm_destroy_ipcp(char * ap_name, + int api_id); -int irm_bootstrap_ipcp(rina_name_t name, - struct dif_config conf); -int irm_enroll_ipcp(rina_name_t name, - char * dif_name); +int irm_bootstrap_ipcp(char * ap_name, + int api_id, + struct dif_config * conf); +int irm_enroll_ipcp(char * ap_name, + int api_id, + char * dif_name); -int irm_reg_ipcp(rina_name_t name, - char ** difs, - size_t difs_size); -int irm_unreg_ipcp(rina_name_t name, - char ** difs, - size_t difs_size); +int irm_reg_ipcp(char * ap_name, + int api_id, + char ** difs, + size_t difs_size); +int irm_unreg_ipcp(char * ap_name, + int api_id, + char ** difs, + size_t difs_size); #endif diff --git a/include/ouroboros/sockets.h b/include/ouroboros/sockets.h index 45d7a27d..69d86cd0 100644 --- a/include/ouroboros/sockets.h +++ b/include/ouroboros/sockets.h @@ -28,6 +28,9 @@ #include +#include "irmd_messages.pb-c.h" +typedef IrmMsg irm_msg_t; + #define IRM_SOCK_PATH "/tmp/irm_sock" #define IRM_MSG_BUF_SIZE 256 @@ -100,6 +103,8 @@ int client_socket_open(char * file_name); int send_irmd_msg(struct irm_msg * msg); struct irm_msg * send_recv_irmd_msg(struct irm_msg * msg); +int send_irm_msg(irm_msg_t * msg); + /* Caller has to free the buffer */ buffer_t * serialize_irm_msg(struct irm_msg * msg); buffer_t * serialize_ipcp_msg(struct ipcp_msg * msg); diff --git a/src/lib/.gitignore b/src/lib/.gitignore new file mode 100644 index 00000000..8704469b --- /dev/null +++ b/src/lib/.gitignore @@ -0,0 +1 @@ +*.pb-c.[ch] \ No newline at end of file diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index e05dce8b..0427e236 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -34,10 +34,13 @@ set(SOURCE_FILES shm_du_map.c sockets.c utils.c -) + ) -add_library(ouroboros SHARED ${SOURCE_FILES} ${PROTO_SRCS} ${PROTO_HDRS}) -target_link_libraries(ouroboros rt pthread ${PROTOBUF_LIBRARIES}) +install(FILES ${PROTO_HDRS} + DESTINATION include/ouroboros) + +add_library(ouroboros SHARED ${SOURCE_FILES} ${PROTO_SRCS}) +target_link_libraries(ouroboros rt pthread ${PROTOBUF_C_LIBRARY}) include(MacroAddCompileFlags) if (CMAKE_BUILD_TYPE MATCHES Debug) @@ -46,4 +49,6 @@ endif (CMAKE_BUILD_TYPE MATCHES Debug) install(TARGETS ouroboros LIBRARY DESTINATION lib) +target_include_directories(ouroboros PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) + add_subdirectory(tests) diff --git a/src/lib/irm.c b/src/lib/irm.c index 9fd13d52..92d8b3a5 100644 --- a/src/lib/irm.c +++ b/src/lib/irm.c @@ -26,26 +26,25 @@ #include #include #include + #include -int irm_create_ipcp(rina_name_t name, +int irm_create_ipcp(char * ap_name, + int api_id, char * ipcp_type) { - struct irm_msg msg; + irm_msg_t msg = IRM_MSG__INIT; - if (ipcp_type == NULL) - return -1; + if (ipcp_type == NULL || ap_name == NULL) + return -EINVAL; - if (!name_is_ok(&name)) { - LOG_ERR("Bad name"); - return -1; - } - - msg.code = IRM_CREATE_IPCP; - msg.name = &name; + msg.code = IRM_MSG_CODE__IRM_CREATE_IPCP; + msg.ap_name = ap_name; + msg.has_api_id = true; + msg.api_id = api_id; msg.ipcp_type = ipcp_type; - if (send_irmd_msg(&msg)) { + if (send_irm_msg(&msg)) { LOG_ERR("Failed to send message to daemon"); return -1; } @@ -53,19 +52,21 @@ int irm_create_ipcp(rina_name_t name, return 0; } -int irm_destroy_ipcp(rina_name_t name) +int irm_destroy_ipcp(char * ap_name, + int api_id) { - struct irm_msg msg; + irm_msg_t msg = IRM_MSG__INIT; - if (!name_is_ok(&name)) { - LOG_ERR("Bad name"); - return -1; + if (ap_name == NULL) { + return -EINVAL; } - msg.code = IRM_DESTROY_IPCP; - msg.name = &name; + msg.code = IRM_MSG_CODE__IRM_DESTROY_IPCP; + msg.ap_name = ap_name; + msg.has_api_id = true; + msg.api_id = api_id; - if (send_irmd_msg(&msg)) { + if (send_irm_msg(&msg)) { LOG_ERR("Failed to send message to daemon"); return -1; } @@ -73,21 +74,22 @@ int irm_destroy_ipcp(rina_name_t name) return 0; } -int irm_bootstrap_ipcp(rina_name_t name, - struct dif_config conf) +int irm_bootstrap_ipcp(char * ap_name, + int api_id, + struct dif_config * conf) { - struct irm_msg msg; + irm_msg_t msg = IRM_MSG__INIT; - if (!name_is_ok(&name)) { - LOG_ERR("Bad name"); - return -1; + if (ap_name == NULL || conf == NULL) { + return -EINVAL; } - msg.code = IRM_BOOTSTRAP_IPCP; - msg.name = &name; - msg.conf = &conf; + msg.code = IRM_MSG_CODE__IRM_BOOTSTRAP_IPCP; + msg.ap_name = ap_name; + msg.has_api_id = true; + msg.api_id = api_id; - if (send_irmd_msg(&msg)) { + if (send_irm_msg(&msg)) { LOG_ERR("Failed to send message to daemon"); return -1; } @@ -95,45 +97,61 @@ int irm_bootstrap_ipcp(rina_name_t name, return 0; } -int irm_enroll_ipcp(rina_name_t name, +int irm_enroll_ipcp(char * ap_name, + int api_id, char * dif_name) { - struct irm_msg msg; + irm_msg_t msg = IRM_MSG__INIT; - if (!name_is_ok(&name)) { - LOG_ERR("Bad name"); - return -1; + if (ap_name == NULL || dif_name == NULL) { + return -EINVAL; } - msg.code = IRM_ENROLL_IPCP; - msg.name = &name; - msg.dif_name = dif_name; + msg.code = IRM_MSG_CODE__IRM_ENROLL_IPCP; + msg.ap_name = ap_name; + msg.has_api_id = true; + msg.api_id = api_id; + msg.n_dif_name = 1; + msg.dif_name = malloc(sizeof(*(msg.dif_name))); + if (msg.dif_name == NULL) { + LOG_ERR("Failed to malloc"); + return -1; + } + msg.dif_name[0] = dif_name; - if (send_irmd_msg(&msg)) { + if (send_irm_msg(&msg)) { LOG_ERR("Failed to send message to daemon"); + free(msg.dif_name); return -1; } + free(msg.dif_name); + return 0; } -int irm_reg_ipcp(rina_name_t name, +int irm_reg_ipcp(char * ap_name, + int api_id, char ** difs, size_t difs_size) { - struct irm_msg msg; + irm_msg_t msg = IRM_MSG__INIT; - if (!name_is_ok(&name)) { - LOG_ERR("Bad name"); - return -1; + if (ap_name == NULL || + difs == NULL || + difs_size == 0 || + difs[0] == NULL) { + return -EINVAL; } - msg.code = IRM_REG_IPCP; - msg.name = &name; - msg.difs = difs; - msg.difs_size = difs_size; + msg.code = IRM_MSG_CODE__IRM_REG_IPCP; + msg.ap_name = ap_name; + msg.has_api_id = true; + msg.api_id = api_id; + msg.dif_name = difs; + msg.n_dif_name = difs_size; - if (send_irmd_msg(&msg)) { + if (send_irm_msg(&msg)) { LOG_ERR("Failed to send message to daemon"); return -1; } @@ -141,23 +159,28 @@ int irm_reg_ipcp(rina_name_t name, return 0; } -int irm_unreg_ipcp(rina_name_t name, +int irm_unreg_ipcp(char * ap_name, + int api_id, char ** difs, size_t difs_size) { - struct irm_msg msg; + irm_msg_t msg = IRM_MSG__INIT; - if (!name_is_ok(&name)) { - LOG_ERR("Bad name"); - return -1; + if (ap_name == NULL || + difs == NULL || + difs_size == 0 || + difs[0] == NULL) { + return -EINVAL; } - msg.code = IRM_UNREG_IPCP; - msg.name = &name; - msg.difs = difs; - msg.difs_size = difs_size; + msg.code = IRM_MSG_CODE__IRM_UNREG_IPCP; + msg.ap_name = ap_name; + msg.has_api_id = true; + msg.api_id = api_id; + msg.dif_name = difs; + msg.n_dif_name = difs_size; - if (send_irmd_msg(&msg)) { + if (send_irm_msg(&msg)) { LOG_ERR("Failed to send message to daemon"); return -1; } diff --git a/src/lib/sockets.c b/src/lib/sockets.c index b157b628..b98f6bbc 100644 --- a/src/lib/sockets.c +++ b/src/lib/sockets.c @@ -166,6 +166,13 @@ struct irm_msg * send_recv_irmd_msg(struct irm_msg * msg) return recv_msg; } + +int send_irm_msg(irm_msg_t * msg) +{ + + return -1; +} + char * ipcp_sock_path(pid_t pid) { char * full_name = NULL; diff --git a/src/tools/irm/irm_bootstrap_ipcp.c b/src/tools/irm/irm_bootstrap_ipcp.c index 89950069..0843083d 100644 --- a/src/tools/irm/irm_bootstrap_ipcp.c +++ b/src/tools/irm/irm_bootstrap_ipcp.c @@ -21,6 +21,7 @@ */ #include +#include #include #include @@ -38,29 +39,32 @@ static void usage() int do_bootstrap_ipcp(int argc, char ** argv) { - rina_name_t name; + char * ap_name = NULL; + int api_id = 0; struct dif_config conf; conf.qosspecs = NULL; - name.ap_name = NULL; - name.api_id = 0; - while (argc > 0) { - if (!parse_name(argv, &name)) { + if (matches(*argv, "ap") == 0) { + ap_name = *(argv + 1); + } else if (matches(*argv, "api") == 0) { + api_id = atoi(*(argv + 1)); + } else { printf("\"%s\" is unknown, try \"irm " - "enroll_ipcp\".\n", *argv); + "destroy_ipcp\".\n", *argv); return -1; } + argc -= 2; argv += 2; } - if (name.ap_name == NULL) { + if (ap_name == NULL) { usage(); return -1; } - return irm_bootstrap_ipcp(name, conf); + return irm_bootstrap_ipcp(ap_name, api_id, &conf); } diff --git a/src/tools/irm/irm_create_ipcp.c b/src/tools/irm/irm_create_ipcp.c index 854a15f9..3262bd5c 100644 --- a/src/tools/irm/irm_create_ipcp.c +++ b/src/tools/irm/irm_create_ipcp.c @@ -40,31 +40,31 @@ static void usage() int do_create_ipcp(int argc, char ** argv) { - rina_name_t name; char * ipcp_type = NULL; - - name.ap_name = NULL; - name.api_id = 0; + char * ap_name = NULL; + int api_id = 0; while (argc > 0) { - if (!parse_name(argv, &name)) { - if (matches(*argv, "type") == 0) { - ipcp_type = *(argv + 1); - } else { - printf("\"%s\" is unknown, try \"irm " - "create_ipcp\".\n", *argv); - return -1; - } + if (matches(*argv, "type") == 0) { + ipcp_type = *(argv + 1); + } else if (matches(*argv, "ap") == 0) { + ap_name = *(argv + 1); + } else if (matches(*argv, "api") == 0) { + api_id = atoi(*(argv + 1)); + } else { + printf("\"%s\" is unknown, try \"irm " + "create_ipcp\".\n", *argv); + return -1; } argc -= 2; argv += 2; } - if (ipcp_type == NULL || name.ap_name == NULL) { + if (ipcp_type == NULL || ap_name == NULL) { usage(); return -1; } - return irm_create_ipcp(name, ipcp_type); + return irm_create_ipcp(ap_name, api_id, ipcp_type); } diff --git a/src/tools/irm/irm_destroy_ipcp.c b/src/tools/irm/irm_destroy_ipcp.c index 4f02f9cb..fbbeb5bd 100644 --- a/src/tools/irm/irm_destroy_ipcp.c +++ b/src/tools/irm/irm_destroy_ipcp.c @@ -21,6 +21,7 @@ */ #include +#include #include #include @@ -36,13 +37,15 @@ static void usage() int do_destroy_ipcp(int argc, char ** argv) { - rina_name_t name; - - name.ap_name = NULL; - name.api_id = 0; + char * ap_name = NULL; + int api_id = 0; while (argc > 0) { - if (!parse_name(argv, &name)) { + if (matches(*argv, "ap") == 0) { + ap_name = *(argv + 1); + } else if (matches(*argv, "api") == 0) { + api_id = atoi(*(argv + 1)); + } else { printf("\"%s\" is unknown, try \"irm " "destroy_ipcp\".\n", *argv); return -1; @@ -52,10 +55,10 @@ int do_destroy_ipcp(int argc, char ** argv) argv += 2; } - if (name.ap_name == NULL) { + if (ap_name == NULL) { usage(); return -1; } - return irm_destroy_ipcp(name); + return irm_destroy_ipcp(ap_name, api_id); } diff --git a/src/tools/irm/irm_enroll_ipcp.c b/src/tools/irm/irm_enroll_ipcp.c index 1dcdc919..70798821 100644 --- a/src/tools/irm/irm_enroll_ipcp.c +++ b/src/tools/irm/irm_enroll_ipcp.c @@ -21,6 +21,7 @@ */ #include +#include #include #include @@ -37,31 +38,31 @@ static void usage() int do_enroll_ipcp(int argc, char ** argv) { - rina_name_t name; + char * ap_name = NULL; + int api_id = 0; char * dif_name = NULL; - name.ap_name = NULL; - name.api_id = 0; - while (argc > 0) { - if (!parse_name(argv, &name)) { - if (matches(*argv, "dif") == 0) { - dif_name = *(argv + 1); - } else { - printf("\"%s\" is unknown, try \"irm " - "enroll_ipcp\".\n", *argv); - return -1; - } + if (matches(*argv, "ap") == 0) { + ap_name = *(argv + 1); + } else if (matches(*argv, "api") == 0) { + api_id = atoi(*(argv + 1)); + } else if (matches(*argv, "dif") == 0) { + dif_name = *(argv + 1); + } else { + printf("\"%s\" is unknown, try \"irm " + "enroll_ipcp\".\n", *argv); + return -1; } argc -= 2; argv += 2; } - if (dif_name == NULL || name.ap_name == NULL) { + if (dif_name == NULL || ap_name == NULL) { usage(); return -1; } - return irm_enroll_ipcp(name, dif_name); + return irm_enroll_ipcp(ap_name, api_id, dif_name); } diff --git a/src/tools/irm/irm_register_ipcp.c b/src/tools/irm/irm_register_ipcp.c index 468ef28f..b8808ecd 100644 --- a/src/tools/irm/irm_register_ipcp.c +++ b/src/tools/irm/irm_register_ipcp.c @@ -45,36 +45,36 @@ static void usage() int do_register_ipcp(int argc, char ** argv) { - rina_name_t name; char * difs[MAX_DIFS]; size_t difs_size = 0; - - name.ap_name = NULL; - name.api_id = 0; + char * ap_name = NULL; + int api_id = 0; while (argc > 0) { - if (!parse_name(argv, &name)) { - if (matches(*argv, "dif") == 0) { - difs[difs_size++] = *(argv + 1); - if (difs_size > MAX_DIFS) { - printf("Too many difs specified\n"); - return -1; - } - } else { - printf("\"%s\" is unknown, try \"irm " - "register_ipcp\".\n", *argv); + if (matches(*argv, "ap") == 0) { + ap_name = *(argv + 1); + } else if (matches(*argv, "api") == 0) { + api_id = atoi(*(argv + 1)); + } else if (matches(*argv, "dif") == 0) { + difs[difs_size++] = *(argv + 1); + if (difs_size > MAX_DIFS) { + printf("Too many difs specified\n"); return -1; } + } else { + printf("\"%s\" is unknown, try \"irm " + "register_ipcp\".\n", *argv); + return -1; } argc -= 2; argv += 2; } - if (difs_size == 0 || name.ap_name == NULL) { + if (difs_size == 0 || ap_name == NULL) { usage(); return -1; } - return irm_reg_ipcp(name, difs, difs_size); + return irm_reg_ipcp(ap_name, api_id, difs, difs_size); } diff --git a/src/tools/irm/irm_unregister_ipcp.c b/src/tools/irm/irm_unregister_ipcp.c index 0b669503..1321c263 100644 --- a/src/tools/irm/irm_unregister_ipcp.c +++ b/src/tools/irm/irm_unregister_ipcp.c @@ -45,36 +45,37 @@ static void usage() int do_unregister_ipcp(int argc, char ** argv) { - rina_name_t name; + char * ap_name = NULL; + int api_id = 0; char * difs[MAX_DIFS]; size_t difs_size = 0; - name.ap_name = NULL; - name.api_id = 0; while (argc > 0) { - if (!parse_name(argv, &name)) { - if (matches(*argv, "dif") == 0) { - difs[difs_size++] = *(argv + 1); - if (difs_size > MAX_DIFS) { - printf("Too many difs specified\n"); - return -1; - } - } else { - printf("\"%s\" is unknown, try \"irm " - "unregister_ipcp\".\n", *argv); + if (matches(*argv, "ap") == 0) { + ap_name = *(argv + 1); + } else if (matches(*argv, "api") == 0) { + api_id = atoi(*(argv + 1)); + } else if (matches(*argv, "dif") == 0) { + difs[difs_size++] = *(argv + 1); + if (difs_size > MAX_DIFS) { + printf("Too many difs specified\n"); return -1; } + } else { + printf("\"%s\" is unknown, try \"irm " + "unregister_ipcp\".\n", *argv); + return -1; } argc -= 2; argv += 2; } - if (difs_size == 0 || name.ap_name == NULL) { + if (difs_size == 0 || ap_name == NULL) { usage(); return -1; } - return irm_unreg_ipcp(name, difs, difs_size); + return irm_unreg_ipcp(ap_name, api_id, difs, difs_size); } diff --git a/src/tools/irm/irm_utils.c b/src/tools/irm/irm_utils.c index 04cb7242..feb8ac98 100644 --- a/src/tools/irm/irm_utils.c +++ b/src/tools/irm/irm_utils.c @@ -36,19 +36,3 @@ int matches(const char * cmd, const char * pattern) return memcmp(pattern, cmd, len); } - - -bool parse_name(char ** argv, - rina_name_t * name) -{ - bool found = true; - - if (matches(*argv, "ap") == 0) - name->ap_name = *(argv + 1); - else if (matches(*argv, "api") == 0) - name->api_id = atoi(*(argv + 1)); - else - found = false; - - return found; -} diff --git a/src/tools/irm/irm_utils.h b/src/tools/irm/irm_utils.h index 2a478d09..3d328d95 100644 --- a/src/tools/irm/irm_utils.h +++ b/src/tools/irm/irm_utils.h @@ -25,5 +25,3 @@ #include int matches(const char * cmd, const char * pattern); - -bool parse_name(char ** argv, rina_name_t * name); -- cgit v1.2.3