From 79658533561990d93a74fd25b4d1b26c01182a8e Mon Sep 17 00:00:00 2001 From: Aaron Conole Date: Mon, 20 Sep 2021 16:27:56 -0400 Subject: [PATCH 8/8] Revert "Use interface index instead of name in libconfig" This reverts commit e272d34f45bc15d52424228f824c1ad96932867e. During production, it was found that the ifindex can be unstable. See discussion at https://github.com/intel/openlldp/pull/3 Signed-off-by: Aaron Conole (cherry picked from commit 2c7dd5e4a0db201a850f8037b957acbd14950297) --- config.c | 35 ++++++++--------------------------- include/config.h | 3 --- lldp_dcbx_cfg.c | 24 +++++++----------------- 3 files changed, 15 insertions(+), 47 deletions(-) diff --git a/config.c b/config.c index 41b5045..7e969b9 100644 --- a/config.c +++ b/config.c @@ -55,21 +55,6 @@ config_t lldpad_cfg; -/* - * config_ifkey - Generates a config key - * - * Given an interface name this functions generates - * a key (based on interface's index) suitable - * to pass to libconfig. - * - */ -void config_ifkey(const char *name, char *ifkey) { - int index = if_nametoindex(name); - - if(index) - sprintf(ifkey, "if%d", index); -} - /* * init_cfg - initialze the global lldpad_cfg via config_init * @@ -466,15 +451,14 @@ static int lookup_config_value(char *path, union cfg_get v, int type) int get_config_setting(const char *ifname, int agenttype, char *path, union cfg_get v, int type) { - char p[1024], ifkey[IFNAMSIZ]; + char p[1024]; int rval = CONFIG_FALSE; const char *section = agent_type2section(agenttype); /* look for setting in section->ifname area first */ if (ifname) { - config_ifkey(ifname, ifkey); snprintf(p, sizeof(p), "%s.%s.%s", - section, ifkey, path); + section, ifname, path); rval = lookup_config_value(p, v, type); } @@ -491,16 +475,15 @@ int get_config_setting(const char *ifname, int agenttype, char *path, int remove_config_setting(const char *ifname, int agenttype, char *parent, char *name) { - char p[1024], ifkey[IFNAMSIZ]; + char p[1024]; int rval = CONFIG_FALSE; config_setting_t *setting = NULL; const char *section = agent_type2section(agenttype); /* look for setting in section->ifname area first */ - if (ifname) { - config_ifkey(ifname, ifkey); + if (ifname) { snprintf(p, sizeof(p), "%s.%s.%s", - section, ifkey, parent); + section, ifname, parent); setting = config_lookup(&lldpad_cfg, p); } @@ -587,17 +570,15 @@ int set_config_setting(const char *ifname, int agenttype, char *path, union cfg_set v, int type) { config_setting_t *setting = NULL; - char p[1024], ifkey[IFNAMSIZ]; + char p[1024]; int rval = cmd_success; const char *section = agent_type2section(agenttype); LLDPAD_DBG("%s(%i): \n", __func__, __LINE__); - if (strlen(ifname)){ - config_ifkey(ifname, ifkey); + if (strlen(ifname)) snprintf(p, sizeof(p), "%s.%s.%s", - section, ifkey, path); - } + section, ifname, path); else snprintf(p, sizeof(p), "%s.%s.%s", section, LLDP_COMMON, path); diff --git a/include/config.h b/include/config.h index 3abf8e8..61cb5da 100644 --- a/include/config.h +++ b/include/config.h @@ -111,7 +111,4 @@ void destroy_cfg(void); int check_cfg_file(void); int check_for_old_file_format(void); void init_ports(void); - -void config_ifkey(const char *name, char *ifkey); - #endif /* _CONFIG_H_ */ diff --git a/lldp_dcbx_cfg.c b/lldp_dcbx_cfg.c index 40cabb2..ab9cc35 100644 --- a/lldp_dcbx_cfg.c +++ b/lldp_dcbx_cfg.c @@ -99,15 +99,12 @@ static config_setting_t *construct_new_setting(char *device_name) config_setting_t *tmp2_setting = NULL; char abuf[32]; int i; - char device_name_sanitized[IFNAMSIZ]; dcbx_setting = config_lookup(&lldpad_cfg, DCBX_SETTING); if (!dcbx_setting) return NULL; - config_ifkey(device_name, device_name_sanitized); - - eth_setting = config_setting_add(dcbx_setting, device_name_sanitized, + eth_setting = config_setting_add(dcbx_setting, device_name, CONFIG_TYPE_GROUP); if (!eth_setting) goto set_error; @@ -374,13 +371,11 @@ static int _set_persistent(char *device_name, int dcb_enable, config_setting_t *setting_value = NULL; char abuf[2*DCB_MAX_TLV_LENGTH + 1]; int result, i; - char device_name_sanitized[IFNAMSIZ]; dcbx_setting = config_lookup(&lldpad_cfg, DCBX_SETTING); - config_ifkey(device_name, device_name_sanitized); if (dcbx_setting) eth_settings = config_setting_get_member(dcbx_setting, - device_name_sanitized); + device_name); /* init the internal data store for device_name */ if (NULL == eth_settings) { @@ -787,15 +782,13 @@ int get_persistent(char *device_name, full_dcb_attribs *attribs) int result = cmd_failed, i; int results[MAX_USER_PRIORITIES]; int len; - char abuf[32], device_name_sanitized[IFNAMSIZ]; + char abuf[32]; memset(attribs, 0, sizeof(*attribs)); dcbx_setting = config_lookup(&lldpad_cfg, DCBX_SETTING); - - config_ifkey(device_name, device_name_sanitized); if (dcbx_setting) - eth_settings = config_setting_get_member(dcbx_setting, - device_name_sanitized); + eth_settings = config_setting_get_member(dcbx_setting, + device_name); /* init the internal data store for device_name */ result = get_default_persistent(device_name, attribs); @@ -1074,16 +1067,13 @@ int get_dcb_enable_state(char *ifname, int *result) int rc = EINVAL; config_setting_t *settings = NULL; char path[sizeof(DCBX_SETTING) + IFNAMSIZ + 16]; - char ifkey[IFNAMSIZ]; - - config_ifkey(ifname, ifkey); memset(path, 0, sizeof(path)); - snprintf(path, sizeof(path), "%s.%s.dcb_enable", DCBX_SETTING, ifkey); + snprintf(path, sizeof(path), "%s.%s.dcb_enable", DCBX_SETTING, ifname); settings = config_lookup(&lldpad_cfg, path); if (!settings) { LLDPAD_INFO("### %s:%s:failed on %s\n", __func__, ifname, path); - snprintf(path, sizeof(path), "%s.dcb_enable", ifkey); + snprintf(path, sizeof(path), "%s.dcb_enable", ifname); settings = config_lookup(&lldpad_cfg, path); if (!settings) { LLDPAD_INFO("### %s:%s:failed again %s\n", __func__, ifname, path); -- 2.31.1