lldpad/lldpad-0.9.43-lldpad-Do-not-enable-CEE-mode-if-explicitly-disabled.patch
2011-09-08 08:34:30 +02:00

84 lines
2.8 KiB
Diff

From 527ac435e46c59f9ee83aced36ccf83a0518f7fe Mon Sep 17 00:00:00 2001
From: John Fastabend <john.r.fastabend@intel.com>
Date: Wed, 27 Jul 2011 15:08:04 -0700
Subject: [PATCH 17/29] lldpad: Do not enable CEE mode if explicitly disabled
Do not re-enable CEE mode by default after it has been
explicitly disabled.
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Signed-off-by: Petr Sabata <contyk@redhat.com>
---
lldp_dcbx.c | 15 ++++++++++++---
lldp_dcbx_cmds.c | 11 ++---------
2 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/lldp_dcbx.c b/lldp_dcbx.c
index 4cf2cb5..7949147 100644
--- a/lldp_dcbx.c
+++ b/lldp_dcbx.c
@@ -563,10 +563,15 @@ initialized:
/* if the dcbx field is not filled in by the capabilities
* query, then the kernel is older and does not support
- * IEEE mode, so make CEE DCBX active by default.
+ * IEEE mode, so make CEE DCBX active by default. Unless
+ * the dcb state has been disabled from command line.
*/
get_dcb_capabilities(ifname, &dcb_support);
- if (!dcb_support.dcbx || (gdcbx_subtype & ~MASK_DCBX_FORCE)) {
+
+ exists = get_dcb_enable_state(ifname, &dcb_enable);
+
+ if ((exists < 0 || dcb_enable) &&
+ (!dcb_support.dcbx || (gdcbx_subtype & ~MASK_DCBX_FORCE))) {
set_dcbx_mode(tlvs->ifname,
DCB_CAP_DCBX_HOST | DCB_CAP_DCBX_VER_CEE);
set_hw_state(ifname, 1);
@@ -719,8 +724,12 @@ int dcbx_rchange(struct port *port, struct unpacked_tlv *tlv)
}
if (tlv->type == TYPE_0) {
+ int enabled;
+ int exists = get_dcb_enable_state(dcbx->ifname, &enabled);
+
if (!dcbx->active && !ieee8021qaz_tlvs_rxed(dcbx->ifname) &&
- dcbx->rxed_tlvs) {
+ dcbx->rxed_tlvs &&
+ (exists < 0 || enabled)) {
LLDPAD_INFO("CEE DCBX %s going ACTIVE\n", dcbx->ifname);
set_dcbx_mode(port->ifname,
DCB_CAP_DCBX_HOST | DCB_CAP_DCBX_VER_CEE);
diff --git a/lldp_dcbx_cmds.c b/lldp_dcbx_cmds.c
index 7799557..9ec671e 100644
--- a/lldp_dcbx_cmds.c
+++ b/lldp_dcbx_cmds.c
@@ -245,7 +245,6 @@ static int get_dcb_state(char *port_id, char *rbuf)
static dcb_result set_dcb_state(char *port_id, char *ibuf, int ilen)
{
bool state;
- int tmp;
int off;
int plen;
dcb_result rval = dcb_success;
@@ -255,14 +254,8 @@ static dcb_result set_dcb_state(char *port_id, char *ibuf, int ilen)
if (ilen == (off + CFG_DCB_DLEN)) {
state = (*(ibuf+off+DCB_STATE)) ^ '0';
- /* if get_hw_state fails, then don't bother
- * trying to set the state.
- */
- if (get_hw_state(port_id, &tmp) ||
- set_hw_state(port_id, state))
- rval = dcb_failed;
- else
- rval = save_dcb_enable_state(port_id, state);
+ set_hw_state(port_id, state);
+ rval = save_dcb_enable_state(port_id, state);
} else {
printf("error - setcommand has invalid argument length\n");
rval = dcb_bad_params;
--
1.7.6