170 lines
4.8 KiB
Diff
170 lines
4.8 KiB
Diff
For vdp to be usable, enabletx must be set to true. The check for enabletx
|
|
needs to be made before checking if vdp_data for this ifname already exists.
|
|
Otherwise VDP is running even though enabletx is false.
|
|
|
|
Signed-off-by: Jens Osterkamp <jens@linux.vnet.ibm.com>
|
|
---
|
|
ecp/ecp_rx.c | 10 +++-------
|
|
ecp/ecp_tx.c | 7 +++----
|
|
include/lldp_vdp.h | 1 +
|
|
lldp_vdp.c | 38 ++++++++++++++++++++++----------------
|
|
4 files changed, 29 insertions(+), 27 deletions(-)
|
|
|
|
diff --git a/ecp/ecp_rx.c b/ecp/ecp_rx.c
|
|
index a56cd3b..182b911 100644
|
|
--- a/ecp/ecp_rx.c
|
|
+++ b/ecp/ecp_rx.c
|
|
@@ -211,9 +211,7 @@ void ecp_rx_ReceiveFrame(void *ctx, unsigned int ifindex, const u8 *buf, size_t
|
|
LLDPAD_DBG("%s(%i)-%s: received packet with size %i\n", __func__, __LINE__,
|
|
vd->ifname, (int) len);
|
|
|
|
- if (!port ||
|
|
- port->adminStatus == disabled ||
|
|
- port->adminStatus == enabledTxOnly)
|
|
+ if (vd->enabletx == false)
|
|
return;
|
|
|
|
if (vd->ecp.rx.framein &&
|
|
@@ -551,15 +549,13 @@ bool ecp_set_rx_state(struct vdp_data *vd)
|
|
}
|
|
return false;
|
|
case ECP_RX_INIT_RECEIVE:
|
|
- if ((port->adminStatus == enabledRxTx) ||
|
|
- (port->adminStatus == enabledRxOnly)) {
|
|
+ if (vd->enabletx == true) {
|
|
ecp_rx_change_state(vd, ECP_RX_RECEIVE_WAIT);
|
|
return true;
|
|
}
|
|
return false;
|
|
case ECP_RX_RECEIVE_WAIT:
|
|
- if ((port->adminStatus == disabled) ||
|
|
- (port->adminStatus == enabledTxOnly)) {
|
|
+ if (vd->enabletx == false) {
|
|
ecp_rx_change_state(vd, ECP_RX_IDLE);
|
|
return true;
|
|
}
|
|
diff --git a/ecp/ecp_tx.c b/ecp/ecp_tx.c
|
|
index c81e101..8a9d2b0 100644
|
|
--- a/ecp/ecp_tx.c
|
|
+++ b/ecp/ecp_tx.c
|
|
@@ -414,15 +414,14 @@ static bool ecp_set_tx_state(struct vdp_data *vd)
|
|
|
|
switch (vd->ecp.tx.state) {
|
|
case ECP_TX_INIT_TRANSMIT:
|
|
- if (port->portEnabled && ((port->adminStatus == enabledRxTx) ||
|
|
- (port->adminStatus == enabledTxOnly)) && vd->ecp.tx.localChange) {
|
|
+ if (port->portEnabled && (vd->enabletx == true)
|
|
+ && vd->ecp.tx.localChange) {
|
|
ecp_tx_change_state(vd, ECP_TX_TRANSMIT_ECPDU);
|
|
return true;
|
|
}
|
|
return false;
|
|
case ECP_TX_TRANSMIT_ECPDU:
|
|
- if ((port->adminStatus == disabled) ||
|
|
- (port->adminStatus == enabledRxOnly)) {
|
|
+ if (vd->enabletx == false) {
|
|
ecp_tx_change_state(vd, ECP_TX_INIT_TRANSMIT);
|
|
return true;
|
|
}
|
|
diff --git a/include/lldp_vdp.h b/include/lldp_vdp.h
|
|
index b9fd37f..1192364 100644
|
|
--- a/include/lldp_vdp.h
|
|
+++ b/include/lldp_vdp.h
|
|
@@ -112,6 +112,7 @@ struct vsi_profile {
|
|
|
|
struct vdp_data {
|
|
char ifname[IFNAMSIZ];
|
|
+ u8 enabletx;
|
|
struct ecp ecp;
|
|
struct unpacked_tlv *vdp;
|
|
int role;
|
|
diff --git a/lldp_vdp.c b/lldp_vdp.c
|
|
index 646105a..424bcbe 100644
|
|
--- a/lldp_vdp.c
|
|
+++ b/lldp_vdp.c
|
|
@@ -42,6 +42,8 @@
|
|
#include "config.h"
|
|
#include "lldp_tlv.h"
|
|
#include "lldp_vdp_cmds.h"
|
|
+#include "lldp_vdp_clif.h"
|
|
+#include "lldp_mand_clif.h"
|
|
|
|
const char * const vsi_responses[] = {
|
|
[VDP_RESPONSE_SUCCESS] = "success",
|
|
@@ -1365,10 +1367,11 @@ out_err:
|
|
void vdp_ifup(char *ifname)
|
|
{
|
|
char *string;
|
|
+ char config_path[16];
|
|
struct vdp_data *vd;
|
|
struct vdp_user_data *ud;
|
|
- struct port *port;
|
|
struct vsi_profile *p;
|
|
+ int enabletx = false;
|
|
|
|
/* VDP does not support bonded devices */
|
|
if (is_bond(ifname))
|
|
@@ -1376,9 +1379,25 @@ void vdp_ifup(char *ifname)
|
|
|
|
LLDPAD_DBG("%s(%i): starting VDP for if %s !\n", __func__, __LINE__, ifname);
|
|
|
|
+ snprintf(config_path, sizeof(config_path), "%s.%s",
|
|
+ VDP_PREFIX, ARG_TLVTXENABLE);
|
|
+
|
|
+ if (get_config_setting(ifname, config_path, (void *)&enabletx,
|
|
+ CONFIG_TYPE_BOOL))
|
|
+ enabletx = false;
|
|
+
|
|
+ if (enabletx == false) {
|
|
+ LLDPAD_WARN("%s(%i): port %s not enabled for VDP (%i) !\n",
|
|
+ __func__, __LINE__, ifname, enabletx);
|
|
+ return;
|
|
+ }
|
|
+
|
|
vd = vdp_data(ifname);
|
|
if (vd) {
|
|
- LLDPAD_WARN("%s:%s vdp data already exists !\n", __func__, ifname);
|
|
+ vd->enabletx = enabletx;
|
|
+
|
|
+ LLDPAD_WARN("%s:%s vdp data already exists !\n",
|
|
+ __func__, ifname);
|
|
goto out_start_again;
|
|
}
|
|
|
|
@@ -1392,6 +1411,7 @@ void vdp_ifup(char *ifname)
|
|
strncpy(vd->ifname, ifname, IFNAMSIZ);
|
|
|
|
vd->role = VDP_ROLE_STATION;
|
|
+ vd->enabletx = enabletx;
|
|
|
|
if (!get_cfg(ifname, "vdp.role", (void *)&string,
|
|
CONFIG_TYPE_STRING)) {
|
|
@@ -1408,20 +1428,6 @@ void vdp_ifup(char *ifname)
|
|
ud = find_module_user_data_by_id(&lldp_head, LLDP_MOD_VDP);
|
|
LIST_INSERT_HEAD(&ud->head, vd, entry);
|
|
|
|
- port = port_find_by_name(ifname);
|
|
-
|
|
- if (!port) {
|
|
- LLDPAD_ERR("%s(%i): could not find port for %s!\n",
|
|
- __func__, __LINE__, ifname);
|
|
- goto out_err;
|
|
- }
|
|
-
|
|
- if (port->adminStatus != enabledRxTx) {
|
|
- LLDPAD_WARN("%s(%i): port %s not enabled for RxTx (%i) !\n",
|
|
- __func__, __LINE__, ifname, port->adminStatus);
|
|
- return;
|
|
- }
|
|
-
|
|
out_start_again:
|
|
if (ecp_init(ifname)) {
|
|
LLDPAD_ERR("%s:%s unable to init ecp !\n", __func__, ifname);
|
|
--
|
|
1.7.4.4
|
|
|
|
_______________________________________________
|
|
lldp-devel mailing list
|
|
lldp-devel@open-lldp.org
|
|
https://lists.open-fcoe.org/mailman/listinfo/lldp-devel
|