From 6274542a5e40dd3d1755141745a6e0a1312ed17a Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Tue, 14 Feb 2017 16:50:54 +0100 Subject: [PATCH] lldp: don't use chassis TTL anymore Move it to global configuration instead. This is less confusing than having it at two different places. --- src/client/display.c | 3 --- src/daemon/agent.c | 2 +- src/daemon/client.c | 4 ++-- src/daemon/event.c | 2 +- src/daemon/lldpd.c | 4 +--- src/daemon/protocols/cdp.c | 2 +- src/daemon/protocols/lldp.c | 2 +- src/lib/atoms/chassis.c | 2 -- src/lib/lldpctl.h | 2 +- src/lldpd-structs.h | 3 +-- tests/check_cdp.c | 2 ++ tests/check_snmp.c | 3 +-- tests/common.c | 1 - tests/decode.c | 1 - 14 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/client/display.c b/src/client/display.c index 13bbfa8f..cbd0e31a 100644 --- a/src/client/display.c +++ b/src/client/display.c @@ -252,9 +252,6 @@ display_chassis(struct writer* w, lldpctl_atom_t* chassis, int details) } tag_datatag(w, "descr", "SysDescr", lldpctl_atom_get_str(chassis, lldpctl_k_chassis_descr)); - if (details && lldpctl_atom_get_int(chassis, lldpctl_k_chassis_ttl) > 0) - tag_datatag(w, "ttl", "TTL", - lldpctl_atom_get_str(chassis, lldpctl_k_chassis_ttl)); /* Management addresses */ mgmts = lldpctl_atom_get(chassis, lldpctl_k_chassis_mgmt); diff --git a/src/daemon/agent.c b/src/daemon/agent.c index b58b4968..3973183c 100644 --- a/src/daemon/agent.c +++ b/src/daemon/agent.c @@ -606,7 +606,7 @@ agent_h_scalars(struct variable *vp, oid *name, size_t *length, long_ret = scfg->g_config.c_tx_interval; return (u_char *)&long_ret; case LLDP_SNMP_TXMULTIPLIER: - long_ret = LOCAL_CHASSIS(scfg)->c_ttl / scfg->g_config.c_tx_interval; + long_ret = scfg->g_config.c_ttl / scfg->g_config.c_tx_interval; return (u_char *)&long_ret; case LLDP_SNMP_REINITDELAY: long_ret = 1; diff --git a/src/daemon/client.c b/src/daemon/client.c index 8382d020..cb59ffbd 100644 --- a/src/daemon/client.c +++ b/src/daemon/client.c @@ -76,7 +76,7 @@ client_handle_set_configuration(struct lldpd *cfg, enum hmsg_type *type, log_debug("rpc", "client change transmit interval to %d", config->c_tx_interval); cfg->g_config.c_tx_interval = config->c_tx_interval; - LOCAL_CHASSIS(cfg)->c_ttl = cfg->g_config.c_tx_interval * + cfg->g_config.c_ttl = cfg->g_config.c_tx_interval * cfg->g_config.c_tx_hold; } } @@ -84,7 +84,7 @@ client_handle_set_configuration(struct lldpd *cfg, enum hmsg_type *type, log_debug("rpc", "client change transmit hold to %d", config->c_tx_hold); cfg->g_config.c_tx_hold = config->c_tx_hold; - LOCAL_CHASSIS(cfg)->c_ttl = cfg->g_config.c_tx_interval * + cfg->g_config.c_ttl = cfg->g_config.c_tx_interval * cfg->g_config.c_tx_hold; } if (CHANGED(c_lldp_portid_type) && diff --git a/src/daemon/event.c b/src/daemon/event.c index bf12879e..fc09e0c0 100644 --- a/src/daemon/event.c +++ b/src/daemon/event.c @@ -797,7 +797,7 @@ levent_schedule_cleanup(struct lldpd *cfg) } /* Compute the next TTL event */ - struct timeval tv = { LOCAL_CHASSIS(cfg)->c_ttl, 0 }; + struct timeval tv = { cfg->g_config.c_ttl, 0 }; time_t now = time(NULL); time_t next; struct lldpd_hardware *hardware; diff --git a/src/daemon/lldpd.c b/src/daemon/lldpd.c index 0db44693..459c72ec 100644 --- a/src/daemon/lldpd.c +++ b/src/daemon/lldpd.c @@ -1768,6 +1768,7 @@ lldpd_main(int argc, char *argv[], char *envp[]) cfg->g_config.c_receiveonly = receiveonly; cfg->g_config.c_tx_interval = LLDPD_TX_INTERVAL; cfg->g_config.c_tx_hold = LLDPD_TX_HOLD; + cfg->g_config.c_ttl = cfg->g_config.c_tx_interval * cfg->g_config.c_tx_hold; cfg->g_config.c_max_neighbors = LLDPD_MAX_NEIGHBORS; #ifdef ENABLE_LLDPMED cfg->g_config.c_enable_fast_start = enable_fast_start; @@ -1820,9 +1821,6 @@ lldpd_main(int argc, char *argv[], char *envp[]) cfg->g_config.c_noinventory = 1; #endif - /* Set TTL */ - lchassis->c_ttl = cfg->g_config.c_tx_interval * cfg->g_config.c_tx_hold; - log_debug("main", "initialize protocols"); cfg->g_protocols = protos; for (i=0; protos[i].mode != 0; i++) { diff --git a/src/daemon/protocols/cdp.c b/src/daemon/protocols/cdp.c index cc2c93e4..ac76b9ff 100644 --- a/src/daemon/protocols/cdp.c +++ b/src/daemon/protocols/cdp.c @@ -87,7 +87,7 @@ cdp_send(struct lldpd *global, if (!( POKE_SAVE(pos_cdp) && POKE_UINT8((version == 0)?1:version) && - POKE_UINT8(chassis->c_ttl) && + POKE_UINT8(global?global->g_config.c_ttl:180) && POKE_SAVE(pos_checksum) && /* Save checksum position */ POKE_UINT16(0))) goto toobig; diff --git a/src/daemon/protocols/lldp.c b/src/daemon/protocols/lldp.c index a338313f..c70794d9 100644 --- a/src/daemon/protocols/lldp.c +++ b/src/daemon/protocols/lldp.c @@ -131,7 +131,7 @@ static int _lldp_send(struct lldpd *global, /* Time to live */ if (!( POKE_START_LLDP_TLV(LLDP_TLV_TTL) && - POKE_UINT16(shutdown?0:chassis->c_ttl) && + POKE_UINT16(shutdown?0:(global?global->g_config.c_ttl:180)) && POKE_END_LLDP_TLV)) goto toobig; diff --git a/src/lib/atoms/chassis.c b/src/lib/atoms/chassis.c index 6cbf1a4f..006996fc 100644 --- a/src/lib/atoms/chassis.c +++ b/src/lib/atoms/chassis.c @@ -186,8 +186,6 @@ _lldpctl_atom_get_int_chassis(lldpctl_atom_t *atom, lldpctl_key_t key) return chassis->c_cap_available; case lldpctl_k_chassis_cap_enabled: return chassis->c_cap_enabled; - case lldpctl_k_chassis_ttl: - return chassis->c_ttl; #ifdef ENABLE_LLDPMED case lldpctl_k_chassis_med_type: return chassis->c_med_type; diff --git a/src/lib/lldpctl.h b/src/lib/lldpctl.h index a5fbb733..08a4dba9 100644 --- a/src/lib/lldpctl.h +++ b/src/lib/lldpctl.h @@ -726,7 +726,7 @@ typedef enum { lldpctl_k_chassis_cap_available, /**< `(I)` Available capabalities (see `LLDP_CAP_*`) */ lldpctl_k_chassis_cap_enabled, /**< `(I)` Enabled capabilities (see `LLDP_CAP_*`) */ lldpctl_k_chassis_mgmt, /**< `(AL)` List of management addresses */ - lldpctl_k_chassis_ttl, /**< `(I)` The chassis TTL */ + lldpctl_k_chassis_ttl, /**< Deprecated */ lldpctl_k_chassis_med_type = 1900, /**< `(IS)` Chassis MED type. See `LLDP_MED_CLASS_*` */ lldpctl_k_chassis_med_cap, /**< `(I)` Available MED capabilitied. See `LLDP_MED_CAP_*` */ diff --git a/src/lldpd-structs.h b/src/lldpd-structs.h index 5596cf79..fd9f1ae0 100644 --- a/src/lldpd-structs.h +++ b/src/lldpd-structs.h @@ -178,8 +178,6 @@ struct lldpd_chassis { u_int16_t c_cap_available; u_int16_t c_cap_enabled; - u_int16_t c_ttl; /* TTL for local chassis */ - TAILQ_HEAD(, lldpd_mgmt) c_mgmt; #ifdef ENABLE_LLDPMED @@ -373,6 +371,7 @@ MARSHAL_END(lldpd_port_set); struct lldpd_config { int c_paused; /* lldpd is paused */ int c_tx_interval; /* Transmit interval */ + int c_ttl; /* TTL */ int c_smart; /* Bitmask for smart configuration (see SMART_*) */ int c_receiveonly; /* Receive only mode */ int c_max_neighbors; /* Maximum number of neighbors (per protocol) */ diff --git a/tests/check_cdp.c b/tests/check_cdp.c index ef11218b..dddd063c 100644 --- a/tests/check_cdp.c +++ b/tests/check_cdp.c @@ -109,6 +109,7 @@ Cisco Discovery Protocol struct lldpd_mgmt *mgmt; struct lldpd cfg = { .g_config = { + .c_ttl = 180, .c_platform = "Linux" } }; @@ -243,6 +244,7 @@ Cisco Discovery Protocol struct lldpd_mgmt *mgmt2; struct lldpd cfg = { .g_config = { + .c_ttl = 180, .c_platform = "Linux" } }; diff --git a/tests/check_snmp.c b/tests/check_snmp.c index e697798f..742c5bf8 100644 --- a/tests/check_snmp.c +++ b/tests/check_snmp.c @@ -33,6 +33,7 @@ extern struct variable8 agent_lldp_vars[]; struct lldpd test_cfg = { .g_config = { .c_tx_interval = 30, + .c_ttl = 60, .c_smart = 0 } }; @@ -55,7 +56,6 @@ struct lldpd_chassis chassis1 = { .c_descr = "First chassis", .c_cap_available = LLDP_CAP_BRIDGE | LLDP_CAP_WLAN | LLDP_CAP_ROUTER, .c_cap_enabled = LLDP_CAP_ROUTER, - .c_ttl = 60, #ifdef ENABLE_LLDPMED .c_med_cap_available = LLDP_MED_CAP_CAP | LLDP_MED_CAP_IV | \ LLDP_MED_CAP_LOCATION | LLDP_MED_CAP_POLICY | \ @@ -96,7 +96,6 @@ struct lldpd_chassis chassis2 = { .c_descr = "Second chassis", .c_cap_available = LLDP_CAP_ROUTER, .c_cap_enabled = LLDP_CAP_ROUTER, - .c_ttl = 60, #ifdef ENABLE_LLDPMED .c_med_hw = "Hardware 2", /* We skip c_med_fw */ diff --git a/tests/common.c b/tests/common.c index 36528b77..a077eb73 100644 --- a/tests/common.c +++ b/tests/common.c @@ -124,7 +124,6 @@ pcap_setup() /* Prepare chassis */ memset(&chassis, 0, sizeof(struct lldpd_chassis)); hardware.h_lport.p_chassis = &chassis; - chassis.c_ttl = 180; } void diff --git a/tests/decode.c b/tests/decode.c index 68733500..aefe28fd 100644 --- a/tests/decode.c +++ b/tests/decode.c @@ -139,7 +139,6 @@ main(int argc, char **argv) printf(" Description: %s\n", nchassis->c_descr?nchassis->c_descr:"(null)"); printf(" Cap available: %" PRIu16 "\n", nchassis->c_cap_available); printf(" Cap enabled: %" PRIu16 "\n", nchassis->c_cap_enabled); - printf(" TTL: %" PRIu16 "\n", nchassis->c_ttl); struct lldpd_mgmt *mgmt; TAILQ_FOREACH(mgmt, &nchassis->c_mgmt, m_entries) { char ipaddress[INET6_ADDRSTRLEN + 1]; -- 2.39.5