84 lines
2.8 KiB
Diff
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
|
|
|