73 lines
2.5 KiB
Diff
73 lines
2.5 KiB
Diff
From c834d11be209324b603dec54ec6e16784a077ce4 Mon Sep 17 00:00:00 2001
|
|
From: Jens Osterkamp <jens@linux.vnet.ibm.com>
|
|
Date: Wed, 6 Apr 2011 08:34:03 -0700
|
|
Subject: [PATCH 30/51] bugfix: avoid failed query of vdp role
|
|
|
|
This patch corrects the query of the configured VDP role even if the role
|
|
has not been saved to lldpad config file.
|
|
|
|
Suggested-by: Zhifeng, Cai <bluewindow@h3c.com>
|
|
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_vdp_cmds.c | 27 +++++++++++++++++++--------
|
|
1 files changed, 19 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/lldp_vdp_cmds.c b/lldp_vdp_cmds.c
|
|
index b9399c6..4d82b0b 100644
|
|
--- a/lldp_vdp_cmds.c
|
|
+++ b/lldp_vdp_cmds.c
|
|
@@ -328,20 +328,33 @@ static int set_arg_mode(struct cmd *cmd, char *arg, char *argvalue,
|
|
static int get_arg_role(struct cmd *cmd, char *arg, char *argvalue,
|
|
char *obuf)
|
|
{
|
|
- char *p;
|
|
char arg_path[VDP_BUF_SIZE];
|
|
+ struct vdp_data *vd;
|
|
|
|
if (cmd->cmd != cmd_gettlv)
|
|
return cmd_invalid;
|
|
|
|
+ vd = vdp_data(cmd->ifname);
|
|
+
|
|
+ if (!vd) {
|
|
+ LLDPAD_ERR("%s(%i): could not find vdp_data for %s !\n",
|
|
+ __FILE__, __LINE__, cmd->ifname);
|
|
+ return cmd_invalid;
|
|
+ }
|
|
+
|
|
switch (cmd->tlvid) {
|
|
case ((LLDP_MOD_VDP) << 8) | LLDP_VDP_SUBTYPE:
|
|
- snprintf(arg_path, sizeof(arg_path), "%s.%s",
|
|
- VDP_PREFIX, arg);
|
|
+ if (vd->role == VDP_ROLE_STATION) {
|
|
+ sprintf(obuf, "%02x%s%04x%s", (unsigned int) strlen(arg), arg,
|
|
+ (unsigned int) strlen("station"), "station");
|
|
+ } else if (vd->role == VDP_ROLE_BRIDGE) {
|
|
+ sprintf(obuf, "%02x%s%04x%s", (unsigned int) strlen(arg), arg,
|
|
+ (unsigned int) strlen("bridge"), "bridge");
|
|
+ } else {
|
|
+ return cmd_failed;
|
|
+ }
|
|
+
|
|
|
|
- if (get_cfg(cmd->ifname, arg_path, (void *)&p,
|
|
- CONFIG_TYPE_STRING))
|
|
- return cmd_failed;
|
|
break;
|
|
case INVALID_TLVID:
|
|
return cmd_invalid;
|
|
@@ -349,8 +362,6 @@ static int get_arg_role(struct cmd *cmd, char *arg, char *argvalue,
|
|
return cmd_not_applicable;
|
|
}
|
|
|
|
- sprintf(obuf, "%02x%s%04x%s", (unsigned int) strlen(arg), arg,
|
|
- (unsigned int) strlen(p), p);
|
|
|
|
return cmd_success;
|
|
}
|
|
--
|
|
1.7.4.4
|
|
|