]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
lldpd: check if capabilities are available/supported before enabling them
authorkanna <kanna@cumulusnetworks.com>
Mon, 6 Oct 2014 18:29:43 +0000 (11:29 -0700)
committerVincent Bernat <vincent@bernat.im>
Tue, 7 Oct 2014 08:03:26 +0000 (10:03 +0200)
Different platforms can support different capabilities. we need to enable
only those that the platform can support

Signed-off-by: kanna <kanna@cumulusnetworks.com>
src/daemon/interfaces-linux.c
src/daemon/interfaces.c
src/daemon/lldpd.c

index fcf359fb53ce12334a1dd68556bd74b189af5003..956470a313ba1cf40437636958473f63a5b5375f 100644 (file)
@@ -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);
index a52e99c29361352127c5c7d55e95702c2898592d..c0e03b5d87bc1d78f95d648fa0347f6612bf0308 100644 (file)
@@ -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)
index 80a6ab5bb4c8bf4d667a7170e7fb24d429e316ab..10c5ed791926a90615249822a372bfd4f35b7204 100644 (file)
@@ -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