Blob Blame History Raw
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