lldpad/lldpad-0.9.41-bugfix-avoid-failed-query-of-vdp-role.patch
2011-04-21 09:10:21 +02:00

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