lldpad/lldpad-0.9.41-support-disabling-of-LLDP-on-switch-side.patch
2011-05-04 17:49:39 +02:00

72 lines
1.8 KiB
Diff

From 76dbd2e24ff64fe7ae1503c658614e44a0a4e2e4 Mon Sep 17 00:00:00 2001
From: Jens Osterkamp <jens@linux.vnet.ibm.com>
Date: Wed, 4 May 2011 08:21:42 -0700
Subject: [PATCH 1/3] support disabling of LLDP on switch side
In case LLDP is disabled on the switch side, the switch will send a LLDP
frame with chassis, port and TTL with TTL set to 0.
In this case evb_mibdelete is called to reset the previously negotiated EVB
data.
Signed-off-by: Jens Osterkamp <jens@linux.vnet.ibm.com>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Signed-off-by: Petr Sabata <psabata@redhat.com>
---
lldp_evb.c | 33 +++++++++++++++++++++++++++++++++
1 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/lldp_evb.c b/lldp_evb.c
index 0839054..b3d756b 100644
--- a/lldp_evb.c
+++ b/lldp_evb.c
@@ -594,6 +594,38 @@ out_err:
return;
}
+u8 evb_mibdelete(struct port *port)
+{
+ struct evb_data *ed;
+
+ if (!is_tlv_txenabled(port->ifname, TLVID_8021Qbg(LLDP_EVB_SUBTYPE))) {
+ goto out_err;
+ }
+
+ LLDPAD_DBG("%s(%i): mibdelete triggered for port %s.\n", __func__,
+ __LINE__, port->ifname);
+
+ ed = evb_data(port->ifname);
+ if (!ed) {
+ LLDPAD_DBG("%s:%s does not exist.\n", __func__, port->ifname);
+ goto out_err;
+ }
+
+ free(ed->tie);
+ free(ed->last);
+ free(ed->policy);
+
+ if (evb_init_cfg_tlv(ed)) {
+ LLDPAD_ERR("%s:%s evb_init_cfg_tlv failed\n", __func__, port->ifname);
+ goto out_err;
+ }
+
+ evb_bld_tlv(ed);
+
+out_err:
+ return 0;
+}
+
static const struct lldp_mod_ops evb_ops = {
.lldp_mod_register = evb_register,
.lldp_mod_unregister = evb_unregister,
@@ -601,6 +633,7 @@ static const struct lldp_mod_ops evb_ops = {
.lldp_mod_rchange = evb_rchange,
.lldp_mod_ifup = evb_ifup,
.lldp_mod_ifdown = evb_ifdown,
+ .lldp_mod_mibdelete = evb_mibdelete,
.get_arg_handler = evb_get_arg_handlers,
};
--
1.7.4.4