Blob Blame History Raw
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