Fix displaying of the Management Address TLV

This commit is contained in:
Petr Šabata 2012-08-23 15:23:21 +02:00
parent 22fc8f5861
commit 1ad910aaba
2 changed files with 100 additions and 3 deletions

View File

@ -0,0 +1,93 @@
From 327ef662eb08ca549c51a5e46b3fc6df5c36dee6 Mon Sep 17 00:00:00 2001
From: John Fastabend <john.r.fastabend@intel.com>
Date: Mon, 13 Aug 2012 20:47:41 -0700
Subject: [PATCH] The display of the Management Address TLV had some errors.
Fixups include: - some TLV output not tabbed - passing bad
length to hexstr2bin when printing OID, resulting in
debug code (removed) printing out - print errors for
incorrect OID lengths. - add oid data length to TLV length
when creating the management address TLV (kind of a no-op
for now since no OID is currently sent).
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Eric Multanen <eric.w.multanen@intel.com>
Signed-off-by: Petr Šabata <contyk@redhat.com>
---
lldp_basman.c | 2 +-
lldp_basman_clif.c | 14 +++++++++-----
lldp_util.c | 4 +---
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/lldp_basman.c b/lldp_basman.c
index b86bcee..4916e19 100644
--- a/lldp_basman.c
+++ b/lldp_basman.c
@@ -452,7 +452,7 @@ out_set:
length += sizeof(struct tlv_info_maif);
o = (struct tlv_info_maoid *)&data[length];
o->len = 0;
- length += sizeof(o->len);
+ length += sizeof(o->len) + o->len;
tlv = create_tlv();
if (!tlv)
diff --git a/lldp_basman_clif.c b/lldp_basman_clif.c
index ef245c6..7dba9d2 100644
--- a/lldp_basman_clif.c
+++ b/lldp_basman_clif.c
@@ -251,16 +251,16 @@ void print_mng_addr(u16 len, char *info)
switch (iftype) {
case IFNUM_UNKNOWN:
- printf("Unknown interface subtype: ");
+ printf("\tUnknown interface subtype: ");
break;
case IFNUM_IFINDEX:
printf("\tIfindex: ");
break;
case IFNUM_SYS_PORT_NUM:
- printf("System port number: ");
+ printf("\tSystem port number: ");
break;
default:
- printf("Bad interface numbering subtype: ");
+ printf("\tBad interface numbering subtype: ");
break;
}
printf("%d\n", ifnum);
@@ -270,8 +270,12 @@ void print_mng_addr(u16 len, char *info)
if (oidlen && oidlen <= 128) {
memset(buf, 0, sizeof(buf));
- hexstr2bin(info+offset, (u8 *)&buf, sizeof(buf));
- printf("OID: %s", buf);
+ if (hexstr2bin(info+offset, (u8 *)&buf, oidlen))
+ printf("\tOID: Error parsing OID\n");
+ else
+ printf("\tOID: %s\n", buf);
+ } else if (oidlen > 128) {
+ printf("\tOID: Invalid length = %d\n", oidlen);
}
}
diff --git a/lldp_util.c b/lldp_util.c
index 3d6e12b..4dc15d5 100644
--- a/lldp_util.c
+++ b/lldp_util.c
@@ -114,10 +114,8 @@ int hexstr2bin(const char *hex, u8 *buf, size_t len)
for (i = 0; i < len; i++) {
a = hex2byte(ipos);
- if (a < 0) {
- printf("ipos=%2.2s, a=%x\n", ipos, a);
+ if (a < 0)
return -1;
- }
*opos++ = a;
ipos += 2;
}
--
1.7.11.4

View File

@ -3,7 +3,7 @@
Name: lldpad Name: lldpad
Version: 0.9.45 Version: 0.9.45
Release: 1%{?dist} Release: 2%{?dist}
Summary: Intel LLDP Agent Summary: Intel LLDP Agent
Group: System Environment/Daemons Group: System Environment/Daemons
License: GPLv2 License: GPLv2
@ -11,6 +11,7 @@ URL: http://open-lldp.org/
Source0: %{name}-%{version}.tar.gz Source0: %{name}-%{version}.tar.gz
Patch0: lldpad-0.9.45-archiver.patch Patch0: lldpad-0.9.45-archiver.patch
Patch1: lldpad-0.9.41-lldptool-invalid-pointer.patch Patch1: lldpad-0.9.41-lldptool-invalid-pointer.patch
Patch2: lldpad-0.9.45-The-display-of-the-Management-Address-TLV-had-some.patch
Requires: kernel >= 2.6.32 Requires: kernel >= 2.6.32
BuildRequires: systemd-units BuildRequires: systemd-units
BuildRequires: libconfig-devel >= 1.3.2 kernel-headers >= 2.6.32 BuildRequires: libconfig-devel >= 1.3.2 kernel-headers >= 2.6.32
@ -44,6 +45,7 @@ that use %{name}.
%setup -q %setup -q
%patch0 -p1 -b .archiver %patch0 -p1 -b .archiver
%patch1 -p1 -b .invalid-pointer %patch1 -p1 -b .invalid-pointer
%patch2 -p1
%build %build
./bootstrap.sh ./bootstrap.sh
@ -110,6 +112,9 @@ fi
%{_libdir}/liblldp_clif.so %{_libdir}/liblldp_clif.so
%changelog %changelog
* Thu Aug 23 2012 Petr Šabata <contyk@redhat.com> - 0.9.45-2
- Fix displaying of the Management Address TLV (327ef662)
* Wed Aug 15 2012 Petr Šabata <contyk@redhat.com> - 0.9.45-1 * Wed Aug 15 2012 Petr Šabata <contyk@redhat.com> - 0.9.45-1
- 0.9.45 bump - 0.9.45 bump
- Provide bash-completion and the new clif library - Provide bash-completion and the new clif library
@ -146,7 +151,7 @@ fi
* Tue Jun 21 2011 Petr Sabata <contyk@redhat.com> - 0.9.42-2 * Tue Jun 21 2011 Petr Sabata <contyk@redhat.com> - 0.9.42-2
- Introduce systemd unit file, drop SysV support - Introduce systemd unit file, drop SysV support
- Call systemctl instead of service and chkconfig - Call systemctl instead of service and chkconfig
- Enable the service only on new installation (%post) - Enable the service only on new installation (post)
- Clean exit patch - Clean exit patch
* Mon Jun 13 2011 Petr Sabata <contyk@redhat.com> - 0.9.42-1 * Mon Jun 13 2011 Petr Sabata <contyk@redhat.com> - 0.9.42-1
@ -244,4 +249,3 @@ fi
* Thu Feb 26 2009 Chris Leech <christopher.leech@intel.com> - 0.9.5-1 * Thu Feb 26 2009 Chris Leech <christopher.leech@intel.com> - 0.9.5-1
- initial RPM packaging - initial RPM packaging