|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
From 4749b5abad3dabb802b34dddf6dbfb9ac6d180ff Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
From: Jens Osterkamp <jens@linux.vnet.ibm.com>
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
Date: Sun, 6 Mar 2011 21:39:05 -0800
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
Subject: [PATCH 22/51] prevent "forgotten" ECP frame for vsi type
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
We have seen cases where an ecp frame for a profile is "forgotten" to be
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
sent out if the ecp tx state machine is still waiting for an ack for a
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
previous frame.
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
The sequence which leads to this is as follows:
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
1) ecp frame for vsi type 1 is sent out
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
2) ecp tx state machine is switched to ECP_TX_WAIT_FOR_ACK_FRAME
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
3) keepalive timer for vsi type 2 times out, vsi type 2 is marked fo
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
4) ecp tx state machine switches to ECP_TX_REQUEST_PDU
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
5) ecp frame for vsi type 2 is not sent out
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
6) vdp ack timer for vsi type 2 times out
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
7) vsi type 2 is removed
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
It can take between hours and days until this behaviour can be observed.
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
This patch fixes it by checking for pending vsi type when switching to
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
ECP_TX_REQUEST_PDU.
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
Signed-off-by: Jens Osterkamp <jens@linux.vnet.ibm.com>
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
Signed-off-by: Petr Sabata <psabata@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
---
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
ecp/ecp_tx.c | 7 ++++++-
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
lldp_vdp.c | 20 ++++++++++++++++++++
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
2 files changed, 26 insertions(+), 1 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
diff --git a/ecp/ecp_tx.c b/ecp/ecp_tx.c
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
index 99d5cae..ebf9e4b 100644
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
--- a/ecp/ecp_tx.c
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+++ b/ecp/ecp_tx.c
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
@@ -53,7 +53,7 @@ void ecp_somethingChangedLocal(struct vdp_data *vd, bool flag)
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
if (!vd)
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
return;
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
- LLDPAD_DBG("%s(%i): setting vd->ecp.tx.localChange to %s.", __func__,
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ LLDPAD_DBG("%s(%i): vd->ecp.tx.localChange to %s.", __func__,
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
__LINE__, (flag == true) ? "true" : "false");
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
vd->ecp.tx.localChange = flag;
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
@@ -412,6 +412,11 @@ static bool ecp_set_tx_state(struct vdp_data *vd)
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
}
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
if (vd->ecp.ackReceived && vd->ecp.seqECPDU == vd->ecp.lastSequence) {
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
vd->ecp.ackReceived = false;
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ if (vdp_vsis_pending(vd)) {
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ LLDPAD_DBG("%s(%i)-%s: still work pending !\n",
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ __func__, __LINE__, vd->ifname);
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ ecp_somethingChangedLocal(vd, true);
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
ecp_tx_change_state(vd, ECP_TX_REQUEST_PDU);
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
return true;
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
}
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
diff --git a/lldp_vdp.c b/lldp_vdp.c
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
index e6ee7e8..b3c7726 100644
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
--- a/lldp_vdp.c
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+++ b/lldp_vdp.c
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
@@ -149,6 +149,26 @@ void vdp_ack_profiles(struct vdp_data *vd, int seqnr)
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
}
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+/* vdp_vsis_pending - check for pending VSIs
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ * @vd: vdp data for the interface
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ *
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ * returns the number of VSIs found
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ *
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ * walk through the list of VSIs and return the count.
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ */
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+int vdp_vsis_pending(struct vdp_data *vd)
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+{
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ struct vsi_profile *p;
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ int count = 0;
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ LIST_FOREACH(p, &vd->profile_head, profile) {
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ if (p->localChange && (p->ackReceived == false))
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ count++;
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+ return count;
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+}
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
+
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
/* vdp_somethingChangedLocal - set flag if profile has changed
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
* @profile: profile to set the flag for
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
* @flag: set the flag to true or false
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
--
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
1.7.4.4
|
|
![](https://seccdn.libravatar.org/avatar/61d20727f63bdd14c651c576141611f5b451d019f34c837c88c25c4f3a1231c7?s=16&d=retro) |
c639191 |
|