diff options
Diffstat (limited to 'utils/sysrepo-plugins/hicn-plugin/plugin/hicn_plugin.c')
-rw-r--r-- | utils/sysrepo-plugins/hicn-plugin/plugin/hicn_plugin.c | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/utils/sysrepo-plugins/hicn-plugin/plugin/hicn_plugin.c b/utils/sysrepo-plugins/hicn-plugin/plugin/hicn_plugin.c new file mode 100644 index 000000000..262e98553 --- /dev/null +++ b/utils/sysrepo-plugins/hicn-plugin/plugin/hicn_plugin.c @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2019 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include <inttypes.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include "hicn_plugin.h" +#include "model/hicn_model.h" +#include "ietf/ietf_interface.h" + + +sr_subscription_ctx_t *subscription = NULL; +volatile int exit_application = 0; + +int sr_plugin_init_cb(sr_session_ctx_t *session, void **private_ctx) { + HICN_INVOKE_BEGIN; + sr_subscription_ctx_t *subscription = NULL; + int rc = SR_ERR_OK; + rc = hicn_connect_vpp(); + if (SR_ERR_OK != rc) { + HICN_LOG_ERR("vpp connect error , with return %d.", rc); + return SR_ERR_INTERNAL; + } + + // HICN subscribe + hicn_subscribe_events(session, &subscription); + + // IETF subscribe + ietf_subscribe_events(session, &subscription); + + + /* set subscription as our private context */ + *private_ctx = subscription; + HICN_INVOKE_END; + return SR_ERR_OK; +} + +void sr_plugin_cleanup_cb(sr_session_ctx_t *session, void *private_ctx) { + HICN_INVOKE_BEGIN; + + /* subscription was set as our private context */ + sr_unsubscribe(session, private_ctx); + HICN_LOG_DBG_MSG("hicn pligin unload plugin ok."); + hicn_disconnect_vpp(); + HICN_LOG_DBG_MSG("hicn plugin disconnect vpp ok."); + HICN_INVOKE_END; +} + +static void sigint_handler(int signum) { exit_application = 1; } +int subscribe_all_module_events(sr_session_ctx_t *session) { + sr_plugin_init_cb(session, (void **)&subscription); + return 0; +} + +int main(int argc, char **argv) { + sr_conn_ctx_t *connection = NULL; + sr_session_ctx_t *session = NULL; + int rc = SR_ERR_OK; + /* connect to vpp */ + rc = hicn_connect_vpp(); + if (-1 == rc) { + fprintf(stderr, "vpp connect error"); + return -1; + } + + /* connect to sysrepo */ + rc = sr_connect("cpe_application", SR_CONN_DEFAULT, &connection); + if (SR_ERR_OK != rc) { + fprintf(stderr, "Error by sr_connect: %s\n", sr_strerror(rc)); + goto cleanup; + } + + /* start session */ + rc = sr_session_start(connection, SR_DS_STARTUP, SR_SESS_DEFAULT, &session); + if (SR_ERR_OK != rc) { + fprintf(stderr, "Error by sr_session_start: %s\n", sr_strerror(rc)); + goto cleanup; + } + + /* subscribe all module events */ + rc = subscribe_all_module_events(session); + if (SR_ERR_OK != rc) { + fprintf(stderr, "Error by subscribe module events: %s\n", sr_strerror(rc)); + goto cleanup; + } + + /* loop until ctrl-c is pressed / SIGINT is received */ + signal(SIGINT, sigint_handler); + signal(SIGPIPE, SIG_IGN); + + while (!exit_application) { + sleep(2); + } + + printf("Application exit requested, exiting.\n"); + +cleanup: + if (NULL != subscription) { + sr_unsubscribe(session, subscription); + } + if (NULL != session) { + sr_session_stop(session); + } + if (NULL != connection) { + sr_disconnect(connection); + } + hicn_disconnect_vpp(); + return rc; +}
\ No newline at end of file |