72 #include <amxc/amxc_macros.h>
73 #include <amxc/amxc.h>
74 #include <amxm/amxm.h>
75 #include <amxp/amxp_dir.h>
83 #define MOD_PON_STAT "pon_stat"
84 #define MOD_PON_CFG "pon_cfg"
86 static const char*
const MODULES_PATH =
"/usr/lib/amx/tr181-xpon/modules/";
108 { .name = NULL, .impl = NULL }
114 { .name = NULL, .impl = NULL }
120 amxm_shared_object_t* so = amxm_get_so(
"self");
122 SAH_TRACEZ_ERROR(
ME,
"Failed to get amxm_shared_object_t for self");
127 SAH_TRACEZ_ERROR(
ME,
"Failed to register %s module namespace",
MOD_PON_STAT);
135 SAH_TRACEZ_ERROR(
ME,
"Failed to register self.%s.%s()",
MOD_PON_STAT,
148 amxm_shared_object_t* so = amxm_get_so(
"self");
150 SAH_TRACEZ_ERROR(
ME,
"Failed to get amxm_shared_object_t for self");
155 SAH_TRACEZ_ERROR(
ME,
"Failed to register %s module namespace",
MOD_PON_CFG);
163 SAH_TRACEZ_ERROR(
ME,
"Failed to register self.%s.%s()",
MOD_PON_CFG,
188 amxc_string_t module;
189 amxc_string_init(&module, 0);
190 amxc_string_setf(&module,
"%s", name);
192 amxc_string_replace(&module,
".so",
"", 1);
193 const char*
const module_cstr = amxc_string_get(&module, 0);
200 SAH_TRACEZ_ERROR(
ME,
"Found more than one vendor module");
201 SAH_TRACEZ_ERROR(
ME,
" modules found: %s.so, %s.so",
206 amxc_string_clean(&module);
215 const char*
const filter =
"d_type == DT_REG && d_name matches 'mod-xpon-.*\\.so'";
223 SAH_TRACEZ_ERROR(
ME,
"Failed to find vendor module");
250 amxc_string_t mod_path;
251 amxc_string_init(&mod_path, 0);
256 const char*
const module = amxc_string_get(&
s_module_name, 0);
257 amxc_string_setf(&mod_path,
"%s%s.so",
MODULES_PATH, module);
259 const char*
const path_to_so = amxc_string_get(&mod_path, 0);
261 if(access(path_to_so, F_OK) != 0) {
262 SAH_TRACEZ_ERROR(
ME,
"%s does not exist", path_to_so);
266 if(amxm_so_open(&
s_module_so, module, path_to_so)) {
267 const char* error = dlerror();
268 SAH_TRACEZ_ERROR(
ME,
"Failed to load %s module", module);
269 SAH_TRACEZ_ERROR(
ME,
"dlerror(): '%s'", error ? error :
"No error");
279 amxc_string_clean(&mod_path);
313 *module_error =
true;
344 SAH_TRACEZ_ERROR(
ME,
"Failed to close module");
void dm_set_module_error(void)
void dm_set_vendor_module(const char *name)
const char * mod_get_vendor_module_loaded(void)
static bool load_vendor_module(void)
static const pon_stat_function_t PON_CFG_FUNCTIONS[]
struct _pon_stat_function pon_stat_function_t
static amxc_string_t s_module_name
static bool register_pon_cfg_module(void)
static const pon_stat_function_t PON_STAT_FUNCTIONS[]
static amxm_module_t * s_pon_cfg_module
void mod_module_mgmt_cleanup(void)
static amxm_shared_object_t * s_module_so
static amxm_module_t * s_pon_stat_module
bool mod_module_mgmt_init(bool *module_error)
static const char *const MODULES_PATH
static int handle_vendor_module_match(const char *name, void *priv UNUSED)
static bool find_vendor_module(void)
static bool register_pon_stat_module(void)
int pon_cfg_get_param_value(const char *function_name, amxc_var_t *args, amxc_var_t *ret)
int dm_instance_added(const char *function_name, amxc_var_t *args, amxc_var_t *ret)
int watch_file_descriptor_start(const char *function_name, amxc_var_t *args, amxc_var_t *ret)
int dm_object_changed(const char *function_name, amxc_var_t *args, amxc_var_t *ret)
int dm_instance_removed(const char *function_name, amxc_var_t *args, amxc_var_t *ret)
int dm_add_or_change_instance(const char *function_name, amxc_var_t *args, amxc_var_t *ret)
int watch_file_descriptor_stop(const char *function_name, amxc_var_t *args, amxc_var_t *ret)
int dm_set_xpon_parameter(const char *function_name, amxc_var_t *args, amxc_var_t *ret)
int omci_reset_mib(const char *function_name, amxc_var_t *args, amxc_var_t *ret)
#define SAH_TRACEZ_DEBUG(zone, format,...)