From a2b113ef9d48d981d97242dda3711a9c27b7cfc8 Mon Sep 17 00:00:00 2001 From: kanna Date: Mon, 6 Oct 2014 11:29:43 -0700 Subject: [PATCH] lldpd: check if capabilities are available/supported before enabling them Different platforms can support different capabilities. we need to enable only those that the platform can support Signed-off-by: kanna --- src/daemon/interfaces-linux.c | 6 ++++-- src/daemon/interfaces.c | 8 +++++--- src/daemon/lldpd.c | 7 ++++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/daemon/interfaces-linux.c b/src/daemon/interfaces-linux.c index fcf359fb..956470a3 100644 --- a/src/daemon/interfaces-linux.c +++ b/src/daemon/interfaces-linux.c @@ -774,8 +774,10 @@ interfaces_update(struct lldpd *cfg) /* Add missing bits to list of interfaces */ iflinux_add_driver(cfg, interfaces); - iflinux_add_wireless(cfg, interfaces); - iflinux_add_bridge(cfg, interfaces); + if (LOCAL_CHASSIS(cfg)->c_cap_available & LLDP_CAP_WLAN) + iflinux_add_wireless(cfg, interfaces); + if (LOCAL_CHASSIS(cfg)->c_cap_available & LLDP_CAP_BRIDGE) + iflinux_add_bridge(cfg, interfaces); iflinux_add_bond(cfg, interfaces); iflinux_add_vlan(cfg, interfaces); iflinux_add_physical(cfg, interfaces); diff --git a/src/daemon/interfaces.c b/src/daemon/interfaces.c index a52e99c2..c0e03b5d 100644 --- a/src/daemon/interfaces.c +++ b/src/daemon/interfaces.c @@ -298,15 +298,17 @@ interfaces_helper_chassis(struct lldpd *cfg, struct lldpd_hardware *hardware; char *name = NULL; - LOCAL_CHASSIS(cfg)->c_cap_enabled &= ~(LLDP_CAP_BRIDGE | LLDP_CAP_WLAN); + LOCAL_CHASSIS(cfg)->c_cap_enabled &= + ~(LLDP_CAP_BRIDGE | LLDP_CAP_WLAN | LLDP_CAP_STATION); TAILQ_FOREACH(iface, interfaces, next) { if (iface->type & IFACE_BRIDGE_T) LOCAL_CHASSIS(cfg)->c_cap_enabled |= LLDP_CAP_BRIDGE; if (iface->type & IFACE_WIRELESS_T) LOCAL_CHASSIS(cfg)->c_cap_enabled |= LLDP_CAP_WLAN; } - if (LOCAL_CHASSIS(cfg)->c_cap_enabled == 0) - LOCAL_CHASSIS(cfg)->c_cap_enabled = LLDP_CAP_STATION; + if ((LOCAL_CHASSIS(cfg)->c_cap_available & LLDP_CAP_STATION) && + (LOCAL_CHASSIS(cfg)->c_cap_enabled == 0)) + LOCAL_CHASSIS(cfg)->c_cap_enabled = LLDP_CAP_STATION; if (LOCAL_CHASSIS(cfg)->c_id != NULL && LOCAL_CHASSIS(cfg)->c_id_subtype == LLDP_CHASSISID_SUBTYPE_LLADDR) diff --git a/src/daemon/lldpd.c b/src/daemon/lldpd.c index 80a6ab5b..10c5ed79 100644 --- a/src/daemon/lldpd.c +++ b/src/daemon/lldpd.c @@ -980,6 +980,10 @@ static int lldpd_routing_enabled(struct lldpd *cfg) { int routing; + + if ((LOCAL_CHASSIS(cfg)->c_cap_available & LLDP_CAP_ROUTER) == 0) + return 0; + if ((routing = interfaces_routing_enabled(cfg)) == -1) { log_debug("localchassis", "unable to check if routing is enabled"); return 0; @@ -1048,7 +1052,8 @@ lldpd_update_localchassis(struct lldpd *cfg) else LOCAL_CHASSIS(cfg)->c_med_sw = strdup("Unknown"); #endif - if (LOCAL_CHASSIS(cfg)->c_cap_enabled == 0) + if ((LOCAL_CHASSIS(cfg)->c_cap_available & LLDP_CAP_STATION) && + (LOCAL_CHASSIS(cfg)->c_cap_enabled == 0)) LOCAL_CHASSIS(cfg)->c_cap_enabled = LLDP_CAP_STATION; /* Set chassis ID if needed. This is only done if chassis ID -- 2.39.5