00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00022 #include <sync/common.h>
00023 #include <jnx/provider_info.h>
00024 #include "monitube-mgmt_kcom.h"
00025 #include "monitube-mgmt_config.h"
00026 #include "monitube-mgmt_conn.h"
00027 #include "monitube-mgmt_logging.h"
00028
00029 #include MONITUBE_OUT_H
00030
00031
00032
00033 #define MSP_IFD_NAME_PATTERN "ms-"
00034
00035
00036
00037
00038
00039
00052 static int
00053 ifd_down_async_handler(kcom_ifdev_t * msg, void * user_info __unused)
00054 {
00055 char * name = msg->ifdev_name;
00056
00057 if((msg->ifdev_op == KCOM_DELETE || junos_kcom_ifd_down(msg)) &&
00058 strstr(name, MSP_IFD_NAME_PATTERN)) {
00059
00060 junos_trace(MONITUBE_TRACEFLAG_KCOM,
00061 "%s: Handling ifd %s going down", __func__, name);
00062
00063
00064 mspic_offline(name);
00065 }
00066
00067 junos_kcom_msg_free(msg);
00068
00069 return 0;
00070 }
00071
00072
00073
00074
00075
00085 int
00086 kcom_init(evContext ctx)
00087 {
00088 int status;
00089 provider_origin_id_t id;
00090
00091 status = provider_info_get_origin_id(&id);
00092
00093 if(status != 0) {
00094 LOG(TRACE_LOG_ERR, "%s: Retrieving origin id failed", __func__);
00095 return -1;
00096 }
00097
00098 status = junos_kcom_init(id, ctx);
00099 INSIST(status == KCOM_OK);
00100
00101
00102 status = junos_kcom_register_ifd_handler(NULL, ifd_down_async_handler);
00103 if(status != KCOM_OK) {
00104 LOG(TRACE_LOG_ERR, "%s: Register ifd handler failed", __func__);
00105 }
00106
00107 return status;
00108 }
00109
00110
00114 void
00115 kcom_shutdown(void)
00116 {
00117 junos_trace(MONITUBE_TRACEFLAG_KCOM, "%s", __func__);
00118
00119 junos_kcom_shutdown();
00120 }