|
Packit |
e9ba0d |
/* -*- mode: c; c-file-style: "openbsd" -*- */
|
|
Packit |
e9ba0d |
/*
|
|
Packit |
e9ba0d |
* Copyright (c) 2015 Vincent Bernat <bernat@luffy.cx>
|
|
Packit |
e9ba0d |
*
|
|
Packit |
e9ba0d |
* Permission to use, copy, modify, and/or distribute this software for any
|
|
Packit |
e9ba0d |
* purpose with or without fee is hereby granted, provided that the above
|
|
Packit |
e9ba0d |
* copyright notice and this permission notice appear in all copies.
|
|
Packit |
e9ba0d |
*
|
|
Packit |
e9ba0d |
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
Packit |
e9ba0d |
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
Packit |
e9ba0d |
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
Packit |
e9ba0d |
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
Packit |
e9ba0d |
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
Packit |
e9ba0d |
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
Packit |
e9ba0d |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
Packit |
e9ba0d |
*/
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
#include <stdlib.h>
|
|
Packit |
e9ba0d |
#include <sys/socket.h>
|
|
Packit |
e9ba0d |
#include <arpa/inet.h>
|
|
Packit |
e9ba0d |
#include <netinet/in.h>
|
|
Packit |
e9ba0d |
#include <check.h>
|
|
Packit |
e9ba0d |
#include "common.h"
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
char filenameprefix[] = "cdp_send";
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
#ifdef ENABLE_CDP
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
START_TEST (test_send_cdpv1)
|
|
Packit |
e9ba0d |
{
|
|
Packit |
e9ba0d |
int n;
|
|
Packit |
e9ba0d |
/* Packet we should build:
|
|
Packit |
e9ba0d |
IEEE 802.3 Ethernet
|
|
Packit |
e9ba0d |
Destination: CDP/VTP/DTP/PAgP/UDLD (01:00:0c:cc:cc:cc)
|
|
Packit |
e9ba0d |
Source: 5e:10:8e:e7:84:ad (5e:10:8e:e7:84:ad)
|
|
Packit |
e9ba0d |
Length: 106
|
|
Packit |
e9ba0d |
Logical-Link Control
|
|
Packit |
e9ba0d |
DSAP: SNAP (0xaa)
|
|
Packit |
e9ba0d |
IG Bit: Individual
|
|
Packit |
e9ba0d |
SSAP: SNAP (0xaa)
|
|
Packit |
e9ba0d |
CR Bit: Command
|
|
Packit |
e9ba0d |
Control field: U, func=UI (0x03)
|
|
Packit |
e9ba0d |
000. 00.. = Command: Unnumbered Information (0x00)
|
|
Packit |
e9ba0d |
.... ..11 = Frame type: Unnumbered frame (0x03)
|
|
Packit |
e9ba0d |
Organization Code: Cisco (0x00000c)
|
|
Packit |
e9ba0d |
PID: CDP (0x2000)
|
|
Packit |
e9ba0d |
Cisco Discovery Protocol
|
|
Packit |
e9ba0d |
Version: 1
|
|
Packit |
e9ba0d |
TTL: 180 seconds
|
|
Packit |
e9ba0d |
Checksum: 0x3af7 [correct]
|
|
Packit |
e9ba0d |
[Good: True]
|
|
Packit |
e9ba0d |
[Bad : False]
|
|
Packit |
e9ba0d |
Device ID: First chassis
|
|
Packit |
e9ba0d |
Type: Device ID (0x0001)
|
|
Packit |
e9ba0d |
Length: 17
|
|
Packit |
e9ba0d |
Device ID: First chassis
|
|
Packit |
e9ba0d |
Addresses
|
|
Packit |
e9ba0d |
Type: Addresses (0x0002)
|
|
Packit |
e9ba0d |
Length: 17
|
|
Packit |
e9ba0d |
Number of addresses: 1
|
|
Packit |
e9ba0d |
IP address: 172.17.142.37
|
|
Packit |
e9ba0d |
Protocol type: NLPID
|
|
Packit |
e9ba0d |
Protocol length: 1
|
|
Packit |
e9ba0d |
Protocol: IP
|
|
Packit |
e9ba0d |
Address length: 4
|
|
Packit |
e9ba0d |
IP address: 172.17.142.37
|
|
Packit |
e9ba0d |
Port ID: FastEthernet 1/5
|
|
Packit |
e9ba0d |
Type: Port ID (0x0003)
|
|
Packit |
e9ba0d |
Length: 20
|
|
Packit |
e9ba0d |
Sent through Interface: FastEthernet 1/5
|
|
Packit |
e9ba0d |
Capabilities
|
|
Packit |
e9ba0d |
Type: Capabilities (0x0004)
|
|
Packit |
e9ba0d |
Length: 8
|
|
Packit |
e9ba0d |
Capabilities: 0x00000011
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... ...1 = Is a Router
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... ..0. = Not a Transparent Bridge
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... .0.. = Not a Source Route Bridge
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... 0... = Not a Switch
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... ...1 .... = Is a Host
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... ..0. .... = Not IGMP capable
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .0.. .... = Not a Repeater
|
|
Packit |
e9ba0d |
Software Version
|
|
Packit |
e9ba0d |
Type: Software version (0x0005)
|
|
Packit |
e9ba0d |
Length: 23
|
|
Packit |
e9ba0d |
Software Version: Chassis description
|
|
Packit |
e9ba0d |
Platform: Linux
|
|
Packit |
e9ba0d |
Type: Platform (0x0006)
|
|
Packit |
e9ba0d |
Length: 9
|
|
Packit |
e9ba0d |
Platform: Linux
|
|
Packit |
e9ba0d |
*/
|
|
Packit |
e9ba0d |
char pkt1[] = {
|
|
Packit |
e9ba0d |
0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc, 0x5e, 0x10,
|
|
Packit |
e9ba0d |
0x8e, 0xe7, 0x84, 0xad, 0x00, 0x6a, 0xaa, 0xaa,
|
|
Packit |
e9ba0d |
0x03, 0x00, 0x00, 0x0c, 0x20, 0x00, 0x01, 0xb4,
|
|
Packit |
e9ba0d |
0x3a, 0xf7, 0x00, 0x01, 0x00, 0x11, 0x46, 0x69,
|
|
Packit |
e9ba0d |
0x72, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x73,
|
|
Packit |
e9ba0d |
0x73, 0x69, 0x73, 0x00, 0x02, 0x00, 0x11, 0x00,
|
|
Packit |
e9ba0d |
0x00, 0x00, 0x01, 0x01, 0x01, 0xcc, 0x00, 0x04,
|
|
Packit |
e9ba0d |
0xac, 0x11, 0x8e, 0x25, 0x00, 0x03, 0x00, 0x14,
|
|
Packit |
e9ba0d |
0x46, 0x61, 0x73, 0x74, 0x45, 0x74, 0x68, 0x65,
|
|
Packit |
e9ba0d |
0x72, 0x6e, 0x65, 0x74, 0x20, 0x31, 0x2f, 0x35,
|
|
Packit |
e9ba0d |
0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x11,
|
|
Packit |
e9ba0d |
0x00, 0x05, 0x00, 0x17, 0x43, 0x68, 0x61, 0x73,
|
|
Packit |
e9ba0d |
0x73, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63,
|
|
Packit |
e9ba0d |
0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x00,
|
|
Packit |
e9ba0d |
0x06, 0x00, 0x09, 0x4c, 0x69, 0x6e, 0x75, 0x78 };
|
|
Packit |
e9ba0d |
struct packet *pkt;
|
|
Packit |
e9ba0d |
in_addr_t addr;
|
|
Packit |
e9ba0d |
struct lldpd_mgmt *mgmt;
|
|
Packit |
e9ba0d |
struct lldpd cfg = {
|
|
Packit |
e9ba0d |
.g_config = {
|
|
Packit |
e9ba0d |
.c_ttl = 180,
|
|
Packit |
e9ba0d |
.c_platform = "Linux"
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
};
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
/* Populate port and chassis */
|
|
Packit |
e9ba0d |
hardware.h_lport.p_id_subtype = LLDP_PORTID_SUBTYPE_IFNAME;
|
|
Packit |
e9ba0d |
hardware.h_lport.p_id = "Not used";
|
|
Packit |
e9ba0d |
hardware.h_lport.p_id_len = strlen(hardware.h_lport.p_id);
|
|
Packit |
e9ba0d |
hardware.h_lport.p_descr = "FastEthernet 1/5";
|
|
Packit |
e9ba0d |
chassis.c_id_subtype = LLDP_CHASSISID_SUBTYPE_LLADDR;
|
|
Packit |
e9ba0d |
chassis.c_id = macaddress;
|
|
Packit |
e9ba0d |
chassis.c_id_len = ETHER_ADDR_LEN;
|
|
Packit |
e9ba0d |
chassis.c_name = "First chassis";
|
|
Packit |
e9ba0d |
chassis.c_descr = "Chassis description";
|
|
Packit |
e9ba0d |
chassis.c_cap_available = chassis.c_cap_enabled = LLDP_CAP_ROUTER;
|
|
Packit |
e9ba0d |
TAILQ_INIT(&chassis.c_mgmt);
|
|
Packit |
e9ba0d |
addr = inet_addr("172.17.142.37");
|
|
Packit |
e9ba0d |
mgmt = lldpd_alloc_mgmt(LLDPD_AF_IPV4,
|
|
Packit |
e9ba0d |
&addr, sizeof(in_addr_t), 0);
|
|
Packit |
e9ba0d |
if (mgmt == NULL)
|
|
Packit |
e9ba0d |
ck_abort();
|
|
Packit |
e9ba0d |
TAILQ_INSERT_TAIL(&chassis.c_mgmt, mgmt, m_entries);
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
/* Build packet */
|
|
Packit |
e9ba0d |
n = cdpv1_send(&cfg, &hardware);
|
|
Packit |
e9ba0d |
if (n != 0) {
|
|
Packit |
e9ba0d |
fail("unable to build packet");
|
|
Packit |
e9ba0d |
return;
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
if (TAILQ_EMPTY(&pkts)) {
|
|
Packit |
e9ba0d |
fail("no packets sent");
|
|
Packit |
e9ba0d |
return;
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
pkt = TAILQ_FIRST(&pkts);
|
|
Packit |
e9ba0d |
ck_assert_int_eq(pkt->size, sizeof(pkt1));
|
|
Packit |
e9ba0d |
fail_unless(memcmp(pkt->data, pkt1, sizeof(pkt1)) == 0);
|
|
Packit |
e9ba0d |
fail_unless(TAILQ_NEXT(pkt, next) == NULL, "more than one packet sent");
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
END_TEST
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
START_TEST (test_send_cdpv2)
|
|
Packit |
e9ba0d |
{
|
|
Packit |
e9ba0d |
int n;
|
|
Packit |
e9ba0d |
/* Packet we should build:
|
|
Packit |
e9ba0d |
IEEE 802.3 Ethernet
|
|
Packit |
e9ba0d |
Destination: CDP/VTP/DTP/PAgP/UDLD (01:00:0c:cc:cc:cc)
|
|
Packit |
e9ba0d |
Source: 5e:10:8e:e7:84:ad (5e:10:8e:e7:84:ad)
|
|
Packit |
e9ba0d |
the factory default)
|
|
Packit |
e9ba0d |
Length: 111
|
|
Packit |
e9ba0d |
Logical-Link Control
|
|
Packit |
e9ba0d |
DSAP: SNAP (0xaa)
|
|
Packit |
e9ba0d |
IG Bit: Individual
|
|
Packit |
e9ba0d |
SSAP: SNAP (0xaa)
|
|
Packit |
e9ba0d |
CR Bit: Command
|
|
Packit |
e9ba0d |
Control field: U, func=UI (0x03)
|
|
Packit |
e9ba0d |
000. 00.. = Command: Unnumbered Information (0x00)
|
|
Packit |
e9ba0d |
.... ..11 = Frame type: Unnumbered frame (0x03)
|
|
Packit |
e9ba0d |
Organization Code: Cisco (0x00000c)
|
|
Packit |
e9ba0d |
PID: CDP (0x2000)
|
|
Packit |
e9ba0d |
Cisco Discovery Protocol
|
|
Packit |
e9ba0d |
Version: 2
|
|
Packit |
e9ba0d |
TTL: 180 seconds
|
|
Packit |
e9ba0d |
Checksum: 0x5926 [correct]
|
|
Packit |
e9ba0d |
[Good: True]
|
|
Packit |
e9ba0d |
[Bad : False]
|
|
Packit |
e9ba0d |
Device ID: Second chassis
|
|
Packit |
e9ba0d |
Type: Device ID (0x0001)
|
|
Packit |
e9ba0d |
Length: 18
|
|
Packit |
e9ba0d |
Device ID: Second chassis
|
|
Packit |
e9ba0d |
Addresses
|
|
Packit |
e9ba0d |
Type: Addresses (0x0002)
|
|
Packit |
e9ba0d |
Length: 26
|
|
Packit |
e9ba0d |
Number of addresses: 2
|
|
Packit |
e9ba0d |
IP address: 172.17.142.36
|
|
Packit |
e9ba0d |
Protocol type: NLPID
|
|
Packit |
e9ba0d |
Protocol length: 1
|
|
Packit |
e9ba0d |
Protocol: IP
|
|
Packit |
e9ba0d |
Address length: 4
|
|
Packit |
e9ba0d |
IP address: 172.17.142.36
|
|
Packit |
e9ba0d |
IP address: 172.17.142.38
|
|
Packit |
e9ba0d |
Protocol type: NLPID
|
|
Packit |
e9ba0d |
Protocol length: 1
|
|
Packit |
e9ba0d |
Protocol: IP
|
|
Packit |
e9ba0d |
Address length: 4
|
|
Packit |
e9ba0d |
IP address: 172.17.142.38
|
|
Packit |
e9ba0d |
Port ID: Gigabit Ethernet 5/8
|
|
Packit |
e9ba0d |
Type: Port ID (0x0003)
|
|
Packit |
e9ba0d |
Length: 24
|
|
Packit |
e9ba0d |
Sent through Interface: Gigabit Ethernet 5/8
|
|
Packit |
e9ba0d |
Capabilities
|
|
Packit |
e9ba0d |
Type: Capabilities (0x0004)
|
|
Packit |
e9ba0d |
Length: 8
|
|
Packit |
e9ba0d |
Capabilities: 0x00000019
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... ...1 = Is a Router
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... ..0. = Not a Transparent Bridge
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... .0.. = Not a Source Route Bridge
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... 1... = Is a Switch
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... ...1 .... = Is a Host
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... ..0. .... = Not IGMP capable
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .0.. .... = Not a Repeater
|
|
Packit |
e9ba0d |
Software Version
|
|
Packit |
e9ba0d |
Type: Software version (0x0005)
|
|
Packit |
e9ba0d |
Length: 23
|
|
Packit |
e9ba0d |
Software Version: Chassis description
|
|
Packit |
e9ba0d |
Platform: Linux
|
|
Packit |
e9ba0d |
Type: Platform (0x0006)
|
|
Packit |
e9ba0d |
Length: 9
|
|
Packit |
e9ba0d |
Platform: Linux
|
|
Packit |
e9ba0d |
*/
|
|
Packit |
e9ba0d |
char pkt1[] = {
|
|
Packit |
e9ba0d |
0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc, 0x5e, 0x10,
|
|
Packit |
e9ba0d |
0x8e, 0xe7, 0x84, 0xad, 0x00, 0x78, 0xaa, 0xaa,
|
|
Packit |
e9ba0d |
0x03, 0x00, 0x00, 0x0c, 0x20, 0x00, 0x02, 0xb4,
|
|
Packit |
e9ba0d |
0xc8, 0x67, 0x00, 0x01, 0x00, 0x12, 0x53, 0x65,
|
|
Packit |
e9ba0d |
0x63, 0x6f, 0x6e, 0x64, 0x20, 0x63, 0x68, 0x61,
|
|
Packit |
e9ba0d |
0x73, 0x73, 0x69, 0x73, 0x00, 0x02, 0x00, 0x1a,
|
|
Packit |
e9ba0d |
0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0xcc, 0x00,
|
|
Packit |
e9ba0d |
0x04, 0xac, 0x11, 0x8e, 0x24, 0x01, 0x01, 0xcc,
|
|
Packit |
e9ba0d |
0x00, 0x04, 0xac, 0x11, 0x8e, 0x26, 0x00, 0x03,
|
|
Packit |
e9ba0d |
0x00, 0x18, 0x47, 0x69, 0x67, 0x61, 0x62, 0x69,
|
|
Packit |
e9ba0d |
0x74, 0x20, 0x45, 0x74, 0x68, 0x65, 0x72, 0x6e,
|
|
Packit |
e9ba0d |
0x65, 0x74, 0x20, 0x35, 0x2f, 0x38, 0x00, 0x04,
|
|
Packit |
e9ba0d |
0x00, 0x08, 0x00, 0x00, 0x00, 0x19, 0x00, 0x05,
|
|
Packit |
e9ba0d |
0x00, 0x17, 0x43, 0x68, 0x61, 0x73, 0x73, 0x69,
|
|
Packit |
e9ba0d |
0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
|
|
Packit |
e9ba0d |
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00,
|
|
Packit |
e9ba0d |
0x09, 0x4c, 0x69, 0x6e, 0x75, 0x78 };
|
|
Packit |
e9ba0d |
struct packet *pkt;
|
|
Packit |
e9ba0d |
in_addr_t addr1;
|
|
Packit |
e9ba0d |
in_addr_t addr2;
|
|
Packit |
e9ba0d |
struct lldpd_mgmt *mgmt1;
|
|
Packit |
e9ba0d |
struct lldpd_mgmt *mgmt2;
|
|
Packit |
e9ba0d |
struct lldpd cfg = {
|
|
Packit |
e9ba0d |
.g_config = {
|
|
Packit |
e9ba0d |
.c_ttl = 180,
|
|
Packit |
e9ba0d |
.c_platform = "Linux"
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
};
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
/* Populate port and chassis */
|
|
Packit |
e9ba0d |
hardware.h_lport.p_id_subtype = LLDP_PORTID_SUBTYPE_LLADDR;
|
|
Packit |
e9ba0d |
hardware.h_lport.p_id = macaddress;
|
|
Packit |
e9ba0d |
hardware.h_lport.p_id_len = ETHER_ADDR_LEN;
|
|
Packit |
e9ba0d |
hardware.h_lport.p_descr = "Gigabit Ethernet 5/8";
|
|
Packit |
e9ba0d |
chassis.c_id_subtype = LLDP_CHASSISID_SUBTYPE_LLADDR;
|
|
Packit |
e9ba0d |
chassis.c_id = macaddress;
|
|
Packit |
e9ba0d |
chassis.c_id_len = ETHER_ADDR_LEN;
|
|
Packit |
e9ba0d |
chassis.c_name = "Second chassis";
|
|
Packit |
e9ba0d |
chassis.c_descr = "Chassis description";
|
|
Packit |
e9ba0d |
chassis.c_cap_available = chassis.c_cap_enabled =
|
|
Packit |
e9ba0d |
LLDP_CAP_ROUTER | LLDP_CAP_BRIDGE;
|
|
Packit |
e9ba0d |
TAILQ_INIT(&chassis.c_mgmt);
|
|
Packit |
e9ba0d |
addr1 = inet_addr("172.17.142.36");
|
|
Packit |
e9ba0d |
addr2 = inet_addr("172.17.142.38");
|
|
Packit |
e9ba0d |
mgmt1 = lldpd_alloc_mgmt(LLDPD_AF_IPV4,
|
|
Packit |
e9ba0d |
&addr1, sizeof(in_addr_t), 0);
|
|
Packit |
e9ba0d |
mgmt2 = lldpd_alloc_mgmt(LLDPD_AF_IPV4,
|
|
Packit |
e9ba0d |
&addr2, sizeof(in_addr_t), 0);
|
|
Packit |
e9ba0d |
if (mgmt1 == NULL || mgmt2 == NULL)
|
|
Packit |
e9ba0d |
ck_abort();
|
|
Packit |
e9ba0d |
TAILQ_INSERT_TAIL(&chassis.c_mgmt, mgmt1, m_entries);
|
|
Packit |
e9ba0d |
TAILQ_INSERT_TAIL(&chassis.c_mgmt, mgmt2, m_entries);
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
/* Build packet */
|
|
Packit |
e9ba0d |
n = cdpv2_send(&cfg, &hardware);
|
|
Packit |
e9ba0d |
if (n != 0) {
|
|
Packit |
e9ba0d |
fail("unable to build packet");
|
|
Packit |
e9ba0d |
return;
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
if (TAILQ_EMPTY(&pkts)) {
|
|
Packit |
e9ba0d |
fail("no packets sent");
|
|
Packit |
e9ba0d |
return;
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
pkt = TAILQ_FIRST(&pkts);
|
|
Packit |
e9ba0d |
ck_assert_int_eq(pkt->size, sizeof(pkt1));
|
|
Packit |
e9ba0d |
fail_unless(memcmp(pkt->data, pkt1, sizeof(pkt1)) == 0);
|
|
Packit |
e9ba0d |
fail_unless(TAILQ_NEXT(pkt, next) == NULL, "more than one packet sent");
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
END_TEST
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
START_TEST (test_recv_cdpv1)
|
|
Packit |
e9ba0d |
{
|
|
Packit |
e9ba0d |
char pkt1[] = {
|
|
Packit |
e9ba0d |
0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc, 0x00, 0xe0,
|
|
Packit |
e9ba0d |
0x1e, 0xd5, 0xd5, 0x15, 0x01, 0x1e, 0xaa, 0xaa,
|
|
Packit |
e9ba0d |
0x03, 0x00, 0x00, 0x0c, 0x20, 0x00, 0x01, 0xb4,
|
|
Packit |
e9ba0d |
0xdf, 0xf0, 0x00, 0x01, 0x00, 0x06, 0x52, 0x31,
|
|
Packit |
e9ba0d |
0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01,
|
|
Packit |
e9ba0d |
0x01, 0x01, 0xcc, 0x00, 0x04, 0xc0, 0xa8, 0x0a,
|
|
Packit |
e9ba0d |
0x01, 0x00, 0x03, 0x00, 0x0d, 0x45, 0x74, 0x68,
|
|
Packit |
e9ba0d |
0x65, 0x72, 0x6e, 0x65, 0x74, 0x30, 0x00, 0x04,
|
|
Packit |
e9ba0d |
0x00, 0x08, 0x00, 0x00, 0x00, 0x11, 0x00, 0x05,
|
|
Packit |
e9ba0d |
0x00, 0xd8, 0x43, 0x69, 0x73, 0x63, 0x6f, 0x20,
|
|
Packit |
e9ba0d |
0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
|
|
Packit |
e9ba0d |
0x77, 0x6f, 0x72, 0x6b, 0x20, 0x4f, 0x70, 0x65,
|
|
Packit |
e9ba0d |
0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x53,
|
|
Packit |
e9ba0d |
0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x53, 0x6f,
|
|
Packit |
e9ba0d |
0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x0a,
|
|
Packit |
e9ba0d |
0x49, 0x4f, 0x53, 0x20, 0x28, 0x74, 0x6d, 0x29,
|
|
Packit |
e9ba0d |
0x20, 0x31, 0x36, 0x30, 0x30, 0x20, 0x53, 0x6f,
|
|
Packit |
e9ba0d |
0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x20, 0x28,
|
|
Packit |
e9ba0d |
0x43, 0x31, 0x36, 0x30, 0x30, 0x2d, 0x4e, 0x59,
|
|
Packit |
e9ba0d |
0x2d, 0x4c, 0x29, 0x2c, 0x20, 0x56, 0x65, 0x72,
|
|
Packit |
e9ba0d |
0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x31, 0x2e,
|
|
Packit |
e9ba0d |
0x32, 0x28, 0x31, 0x32, 0x29, 0x50, 0x2c, 0x20,
|
|
Packit |
e9ba0d |
0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x20,
|
|
Packit |
e9ba0d |
0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45,
|
|
Packit |
e9ba0d |
0x20, 0x28, 0x66, 0x63, 0x31, 0x29, 0x0a, 0x43,
|
|
Packit |
e9ba0d |
0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74,
|
|
Packit |
e9ba0d |
0x20, 0x28, 0x63, 0x29, 0x20, 0x31, 0x39, 0x38,
|
|
Packit |
e9ba0d |
0x36, 0x2d, 0x31, 0x39, 0x39, 0x38, 0x20, 0x62,
|
|
Packit |
e9ba0d |
0x79, 0x20, 0x63, 0x69, 0x73, 0x63, 0x6f, 0x20,
|
|
Packit |
e9ba0d |
0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2c,
|
|
Packit |
e9ba0d |
0x20, 0x49, 0x6e, 0x63, 0x2e, 0x0a, 0x43, 0x6f,
|
|
Packit |
e9ba0d |
0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x54,
|
|
Packit |
e9ba0d |
0x75, 0x65, 0x20, 0x30, 0x33, 0x2d, 0x4d, 0x61,
|
|
Packit |
e9ba0d |
0x72, 0x2d, 0x39, 0x38, 0x20, 0x30, 0x36, 0x3a,
|
|
Packit |
e9ba0d |
0x33, 0x33, 0x20, 0x62, 0x79, 0x20, 0x64, 0x73,
|
|
Packit |
e9ba0d |
0x63, 0x68, 0x77, 0x61, 0x72, 0x74, 0x00, 0x06,
|
|
Packit |
e9ba0d |
0x00, 0x0e, 0x63, 0x69, 0x73, 0x63, 0x6f, 0x20,
|
|
Packit |
e9ba0d |
0x31, 0x36, 0x30, 0x31 };
|
|
Packit |
e9ba0d |
/* This is:
|
|
Packit |
e9ba0d |
IEEE 802.3 Ethernet
|
|
Packit |
e9ba0d |
Destination: CDP/VTP/DTP/PAgP/UDLD (01:00:0c:cc:cc:cc)
|
|
Packit |
e9ba0d |
Source: Cisco_d5:d5:15 (00:e0:1e:d5:d5:15)
|
|
Packit |
e9ba0d |
Length: 286
|
|
Packit |
e9ba0d |
Logical-Link Control
|
|
Packit |
e9ba0d |
DSAP: SNAP (0xaa)
|
|
Packit |
e9ba0d |
IG Bit: Individual
|
|
Packit |
e9ba0d |
SSAP: SNAP (0xaa)
|
|
Packit |
e9ba0d |
CR Bit: Command
|
|
Packit |
e9ba0d |
Control field: U, func=UI (0x03)
|
|
Packit |
e9ba0d |
000. 00.. = Command: Unnumbered Information (0x00)
|
|
Packit |
e9ba0d |
.... ..11 = Frame type: Unnumbered frame (0x03)
|
|
Packit |
e9ba0d |
Organization Code: Cisco (0x00000c)
|
|
Packit |
e9ba0d |
PID: CDP (0x2000)
|
|
Packit |
e9ba0d |
Cisco Discovery Protocol
|
|
Packit |
e9ba0d |
Version: 1
|
|
Packit |
e9ba0d |
TTL: 180 seconds
|
|
Packit |
e9ba0d |
Checksum: 0xdff0 [correct]
|
|
Packit |
e9ba0d |
[Good: True]
|
|
Packit |
e9ba0d |
[Bad : False]
|
|
Packit |
e9ba0d |
Device ID: R1
|
|
Packit |
e9ba0d |
Type: Device ID (0x0001)
|
|
Packit |
e9ba0d |
Length: 6
|
|
Packit |
e9ba0d |
Device ID: R1
|
|
Packit |
e9ba0d |
Addresses
|
|
Packit |
e9ba0d |
Type: Addresses (0x0002)
|
|
Packit |
e9ba0d |
Length: 17
|
|
Packit |
e9ba0d |
Number of addresses: 1
|
|
Packit |
e9ba0d |
IP address: 192.168.10.1
|
|
Packit |
e9ba0d |
Protocol type: NLPID
|
|
Packit |
e9ba0d |
Protocol length: 1
|
|
Packit |
e9ba0d |
Protocol: IP
|
|
Packit |
e9ba0d |
Address length: 4
|
|
Packit |
e9ba0d |
IP address: 192.168.10.1
|
|
Packit |
e9ba0d |
Port ID: Ethernet0
|
|
Packit |
e9ba0d |
Type: Port ID (0x0003)
|
|
Packit |
e9ba0d |
Length: 13
|
|
Packit |
e9ba0d |
Sent through Interface: Ethernet0
|
|
Packit |
e9ba0d |
Capabilities
|
|
Packit |
e9ba0d |
Type: Capabilities (0x0004)
|
|
Packit |
e9ba0d |
Length: 8
|
|
Packit |
e9ba0d |
Capabilities: 0x00000011
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... ...1 = Is a Router
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... ..0. = Not a Transparent Bridge
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... .0.. = Not a Source Route Bridge
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... 0... = Not a Switch
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... ...1 .... = Is a Host
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... ..0. .... = Not IGMP capable
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .0.. .... = Not a Repeater
|
|
Packit |
e9ba0d |
Software Version
|
|
Packit |
e9ba0d |
Type: Software version (0x0005)
|
|
Packit |
e9ba0d |
Length: 216
|
|
Packit |
e9ba0d |
Software Version: Cisco Internetwork Operating System Software
|
|
Packit |
e9ba0d |
IOS (tm) 1600 Software (C1600-NY-L), Version 11.2(12)P, RELEASE SOFTWARE (fc1)
|
|
Packit |
e9ba0d |
Copyright (c) 1986-1998 by cisco Systems, Inc.
|
|
Packit |
e9ba0d |
Compiled Tue 03-Mar-98 06:33 by dschwart
|
|
Packit |
e9ba0d |
Platform: cisco 1601
|
|
Packit |
e9ba0d |
Type: Platform (0x0006)
|
|
Packit |
e9ba0d |
Length: 14
|
|
Packit |
e9ba0d |
Platform: cisco 1601
|
|
Packit |
e9ba0d |
*/
|
|
Packit |
e9ba0d |
struct lldpd_chassis *nchassis = NULL;
|
|
Packit |
e9ba0d |
struct lldpd_port *nport = NULL;
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
fail_unless(cdpv1_guess(pkt1, sizeof(pkt1)));
|
|
Packit |
e9ba0d |
fail_unless(cdp_decode(NULL, pkt1, sizeof(pkt1), &hardware,
|
|
Packit |
e9ba0d |
&nchassis, &nport) != -1);
|
|
Packit |
e9ba0d |
if (!nchassis || !nport) {
|
|
Packit |
e9ba0d |
fail("unable to decode packet");
|
|
Packit |
e9ba0d |
return;
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
ck_assert_int_eq(nchassis->c_id_subtype,
|
|
Packit |
e9ba0d |
LLDP_CHASSISID_SUBTYPE_LOCAL);
|
|
Packit |
e9ba0d |
ck_assert_int_eq(nchassis->c_id_len, 2);
|
|
Packit |
e9ba0d |
fail_unless(memcmp(nchassis->c_id, "R1", 2) == 0);
|
|
Packit |
e9ba0d |
ck_assert_str_eq(nchassis->c_name, "R1");
|
|
Packit |
e9ba0d |
ck_assert_int_eq(TAILQ_FIRST(&nchassis->c_mgmt)->m_addr.inet.s_addr,
|
|
Packit |
e9ba0d |
(u_int32_t)inet_addr("192.168.10.1"));
|
|
Packit |
e9ba0d |
ck_assert_int_eq(TAILQ_FIRST(&nchassis->c_mgmt)->m_iface, 0);
|
|
Packit |
e9ba0d |
ck_assert_int_eq(nport->p_id_subtype,
|
|
Packit |
e9ba0d |
LLDP_PORTID_SUBTYPE_IFNAME);
|
|
Packit |
e9ba0d |
ck_assert_int_eq(nport->p_id_len, strlen("Ethernet0"));
|
|
Packit |
e9ba0d |
fail_unless(memcmp(nport->p_id,
|
|
Packit |
e9ba0d |
"Ethernet0", strlen("Ethernet0")) == 0);
|
|
Packit |
e9ba0d |
ck_assert_str_eq(nport->p_descr, "Ethernet0");
|
|
Packit |
e9ba0d |
ck_assert_int_eq(nchassis->c_cap_enabled, LLDP_CAP_ROUTER);
|
|
Packit |
e9ba0d |
ck_assert_str_eq(nchassis->c_descr,
|
|
Packit |
e9ba0d |
"cisco 1601 running on\n"
|
|
Packit |
e9ba0d |
"Cisco Internetwork Operating System Software \n"
|
|
Packit |
e9ba0d |
"IOS (tm) 1600 Software (C1600-NY-L), Version 11.2(12)P, RELEASE SOFTWARE (fc1)\n"
|
|
Packit |
e9ba0d |
"Copyright (c) 1986-1998 by cisco Systems, Inc.\n"
|
|
Packit |
e9ba0d |
"Compiled Tue 03-Mar-98 06:33 by dschwart");
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
END_TEST
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
START_TEST (test_recv_cdpv2)
|
|
Packit |
e9ba0d |
{
|
|
Packit |
e9ba0d |
char pkt1[] = {
|
|
Packit |
e9ba0d |
0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc, 0xca, 0x00,
|
|
Packit |
e9ba0d |
0x68, 0x46, 0x00, 0x00, 0x01, 0x30, 0xaa, 0xaa,
|
|
Packit |
e9ba0d |
0x03, 0x00, 0x00, 0x0c, 0x20, 0x00, 0x02, 0xb4,
|
|
Packit |
e9ba0d |
0x54, 0x27, 0x00, 0x01, 0x00, 0x0f, 0x72, 0x74,
|
|
Packit |
e9ba0d |
0x62, 0x67, 0x36, 0x74, 0x65, 0x73, 0x74, 0x30,
|
|
Packit |
e9ba0d |
0x31, 0x00, 0x05, 0x00, 0xd3, 0x43, 0x69, 0x73,
|
|
Packit |
e9ba0d |
0x63, 0x6f, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72,
|
|
Packit |
e9ba0d |
0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20,
|
|
Packit |
e9ba0d |
0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e,
|
|
Packit |
e9ba0d |
0x67, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d,
|
|
Packit |
e9ba0d |
0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72,
|
|
Packit |
e9ba0d |
0x65, 0x20, 0x0a, 0x49, 0x4f, 0x53, 0x20, 0x28,
|
|
Packit |
e9ba0d |
0x74, 0x6d, 0x29, 0x20, 0x37, 0x32, 0x30, 0x30,
|
|
Packit |
e9ba0d |
0x20, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72,
|
|
Packit |
e9ba0d |
0x65, 0x20, 0x28, 0x43, 0x37, 0x32, 0x30, 0x30,
|
|
Packit |
e9ba0d |
0x2d, 0x50, 0x2d, 0x4d, 0x29, 0x2c, 0x20, 0x56,
|
|
Packit |
e9ba0d |
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31,
|
|
Packit |
e9ba0d |
0x32, 0x2e, 0x32, 0x28, 0x34, 0x36, 0x29, 0x2c,
|
|
Packit |
e9ba0d |
0x20, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45,
|
|
Packit |
e9ba0d |
0x20, 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52,
|
|
Packit |
e9ba0d |
0x45, 0x20, 0x28, 0x66, 0x63, 0x31, 0x29, 0x0a,
|
|
Packit |
e9ba0d |
0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68,
|
|
Packit |
e9ba0d |
0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x31, 0x39,
|
|
Packit |
e9ba0d |
0x38, 0x36, 0x2d, 0x32, 0x30, 0x30, 0x37, 0x20,
|
|
Packit |
e9ba0d |
0x62, 0x79, 0x20, 0x63, 0x69, 0x73, 0x63, 0x6f,
|
|
Packit |
e9ba0d |
0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73,
|
|
Packit |
e9ba0d |
0x2c, 0x20, 0x49, 0x6e, 0x63, 0x2e, 0x0a, 0x43,
|
|
Packit |
e9ba0d |
0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x64, 0x20,
|
|
Packit |
e9ba0d |
0x54, 0x68, 0x75, 0x20, 0x32, 0x36, 0x2d, 0x41,
|
|
Packit |
e9ba0d |
0x70, 0x72, 0x2d, 0x30, 0x37, 0x20, 0x32, 0x31,
|
|
Packit |
e9ba0d |
0x3a, 0x35, 0x36, 0x20, 0x62, 0x79, 0x20, 0x70,
|
|
Packit |
e9ba0d |
0x77, 0x61, 0x64, 0x65, 0x00, 0x06, 0x00, 0x11,
|
|
Packit |
e9ba0d |
0x63, 0x69, 0x73, 0x63, 0x6f, 0x20, 0x37, 0x32,
|
|
Packit |
e9ba0d |
0x30, 0x36, 0x56, 0x58, 0x52, 0x00, 0x02, 0x00,
|
|
Packit |
e9ba0d |
0x11, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0xcc,
|
|
Packit |
e9ba0d |
0x00, 0x04, 0xac, 0x42, 0x37, 0x03, 0x00, 0x03,
|
|
Packit |
e9ba0d |
0x00, 0x13, 0x46, 0x61, 0x73, 0x74, 0x45, 0x74,
|
|
Packit |
e9ba0d |
0x68, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x30, 0x2f,
|
|
Packit |
e9ba0d |
0x30, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
|
|
Packit |
e9ba0d |
0x00, 0x00, 0x0b, 0x00, 0x05, 0x00 };
|
|
Packit |
e9ba0d |
/* This is:
|
|
Packit |
e9ba0d |
IEEE 802.3 Ethernet
|
|
Packit |
e9ba0d |
Destination: CDP/VTP/DTP/PAgP/UDLD (01:00:0c:cc:cc:cc)
|
|
Packit |
e9ba0d |
Source: ca:00:68:46:00:00 (ca:00:68:46:00:00)
|
|
Packit |
e9ba0d |
Length: 304
|
|
Packit |
e9ba0d |
Logical-Link Control
|
|
Packit |
e9ba0d |
DSAP: SNAP (0xaa)
|
|
Packit |
e9ba0d |
IG Bit: Individual
|
|
Packit |
e9ba0d |
SSAP: SNAP (0xaa)
|
|
Packit |
e9ba0d |
CR Bit: Command
|
|
Packit |
e9ba0d |
Control field: U, func=UI (0x03)
|
|
Packit |
e9ba0d |
000. 00.. = Command: Unnumbered Information (0x00)
|
|
Packit |
e9ba0d |
.... ..11 = Frame type: Unnumbered frame (0x03)
|
|
Packit |
e9ba0d |
Organization Code: Cisco (0x00000c)
|
|
Packit |
e9ba0d |
PID: CDP (0x2000)
|
|
Packit |
e9ba0d |
Cisco Discovery Protocol
|
|
Packit |
e9ba0d |
Version: 2
|
|
Packit |
e9ba0d |
TTL: 180 seconds
|
|
Packit |
e9ba0d |
Checksum: 0x5427 [correct]
|
|
Packit |
e9ba0d |
[Good: True]
|
|
Packit |
e9ba0d |
[Bad : False]
|
|
Packit |
e9ba0d |
Device ID: rtbg6test01
|
|
Packit |
e9ba0d |
Type: Device ID (0x0001)
|
|
Packit |
e9ba0d |
Length: 15
|
|
Packit |
e9ba0d |
Device ID: rtbg6test01
|
|
Packit |
e9ba0d |
Software Version
|
|
Packit |
e9ba0d |
Type: Software version (0x0005)
|
|
Packit |
e9ba0d |
Length: 211
|
|
Packit |
e9ba0d |
Software Version: Cisco Internetwork Operating System Software
|
|
Packit |
e9ba0d |
IOS (tm) 7200 Software (C7200-P-M), Version 12.2(46), RELEASE SOFTWARE (fc1)
|
|
Packit |
e9ba0d |
Copyright (c) 1986-2007 by cisco Systems, Inc.
|
|
Packit |
e9ba0d |
Compiled Thu 26-Apr-07 21:56 by pwade
|
|
Packit |
e9ba0d |
Platform: cisco 7206VXR
|
|
Packit |
e9ba0d |
Type: Platform (0x0006)
|
|
Packit |
e9ba0d |
Length: 17
|
|
Packit |
e9ba0d |
Platform: cisco 7206VXR
|
|
Packit |
e9ba0d |
Addresses
|
|
Packit |
e9ba0d |
Type: Addresses (0x0002)
|
|
Packit |
e9ba0d |
Length: 17
|
|
Packit |
e9ba0d |
Number of addresses: 1
|
|
Packit |
e9ba0d |
IP address: 172.66.55.3
|
|
Packit |
e9ba0d |
Protocol type: NLPID
|
|
Packit |
e9ba0d |
Protocol length: 1
|
|
Packit |
e9ba0d |
Protocol: IP
|
|
Packit |
e9ba0d |
Address length: 4
|
|
Packit |
e9ba0d |
IP address: 172.66.55.3
|
|
Packit |
e9ba0d |
Port ID: FastEthernet0/0
|
|
Packit |
e9ba0d |
Type: Port ID (0x0003)
|
|
Packit |
e9ba0d |
Length: 19
|
|
Packit |
e9ba0d |
Sent through Interface: FastEthernet0/0
|
|
Packit |
e9ba0d |
Capabilities
|
|
Packit |
e9ba0d |
Type: Capabilities (0x0004)
|
|
Packit |
e9ba0d |
Length: 8
|
|
Packit |
e9ba0d |
Capabilities: 0x00000000
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... ...0 = Not a Router
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... ..0. = Not a Transparent Bridge
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... .0.. = Not a Source Route Bridge
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .... 0... = Not a Switch
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... ...0 .... = Not a Host
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... ..0. .... = Not IGMP capable
|
|
Packit |
e9ba0d |
.... .... .... .... .... .... .0.. .... = Not a Repeater
|
|
Packit |
e9ba0d |
Duplex: Half
|
|
Packit |
e9ba0d |
Type: Duplex (0x000b)
|
|
Packit |
e9ba0d |
Length: 5
|
|
Packit |
e9ba0d |
Duplex: Half
|
|
Packit |
e9ba0d |
*/
|
|
Packit |
e9ba0d |
struct lldpd_chassis *nchassis = NULL;
|
|
Packit |
e9ba0d |
struct lldpd_port *nport = NULL;
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
fail_unless(cdpv2_guess(pkt1, sizeof(pkt1)));
|
|
Packit |
e9ba0d |
fail_unless(cdp_decode(NULL, pkt1, sizeof(pkt1), &hardware,
|
|
Packit |
e9ba0d |
&nchassis, &nport) != -1);
|
|
Packit |
e9ba0d |
if (!nchassis || !nport) {
|
|
Packit |
e9ba0d |
fail("unable to decode packet");
|
|
Packit |
e9ba0d |
return;
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
ck_assert_int_eq(nchassis->c_id_subtype,
|
|
Packit |
e9ba0d |
LLDP_CHASSISID_SUBTYPE_LOCAL);
|
|
Packit |
e9ba0d |
ck_assert_int_eq(nchassis->c_id_len, strlen("rtbg6test01"));
|
|
Packit |
e9ba0d |
fail_unless(memcmp(nchassis->c_id,
|
|
Packit |
e9ba0d |
"rtbg6test01", strlen("rtbg6test01")) == 0);
|
|
Packit |
e9ba0d |
ck_assert_str_eq(nchassis->c_name, "rtbg6test01");
|
|
Packit |
e9ba0d |
ck_assert_int_eq(TAILQ_FIRST(&nchassis->c_mgmt)->m_addr.inet.s_addr,
|
|
Packit |
e9ba0d |
(u_int32_t)inet_addr("172.66.55.3"));
|
|
Packit |
e9ba0d |
ck_assert_int_eq(TAILQ_FIRST(&nchassis->c_mgmt)->m_iface, 0);
|
|
Packit |
e9ba0d |
ck_assert_int_eq(nport->p_id_subtype,
|
|
Packit |
e9ba0d |
LLDP_PORTID_SUBTYPE_IFNAME);
|
|
Packit |
e9ba0d |
ck_assert_int_eq(nport->p_id_len, strlen("FastEthernet0/0"));
|
|
Packit |
e9ba0d |
fail_unless(memcmp(nport->p_id,
|
|
Packit |
e9ba0d |
"FastEthernet0/0", strlen("FastEthernet0/0")) == 0);
|
|
Packit |
e9ba0d |
ck_assert_str_eq(nport->p_descr, "FastEthernet0/0");
|
|
Packit |
e9ba0d |
ck_assert_int_eq(nchassis->c_cap_enabled, LLDP_CAP_STATION);
|
|
Packit |
e9ba0d |
ck_assert_str_eq(nchassis->c_descr,
|
|
Packit |
e9ba0d |
"cisco 7206VXR running on\n"
|
|
Packit |
e9ba0d |
"Cisco Internetwork Operating System Software \n"
|
|
Packit |
e9ba0d |
"IOS (tm) 7200 Software (C7200-P-M), Version 12.2(46), RELEASE SOFTWARE (fc1)\n"
|
|
Packit |
e9ba0d |
"Copyright (c) 1986-2007 by cisco Systems, Inc.\n"
|
|
Packit |
e9ba0d |
"Compiled Thu 26-Apr-07 21:56 by pwade");
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
END_TEST
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
#endif
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
Suite *
|
|
Packit |
e9ba0d |
cdp_suite(void)
|
|
Packit |
e9ba0d |
{
|
|
Packit |
e9ba0d |
Suite *s = suite_create("CDP");
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
#ifdef ENABLE_CDP
|
|
Packit |
e9ba0d |
TCase *tc_send = tcase_create("Send CDP packets");
|
|
Packit |
e9ba0d |
TCase *tc_receive = tcase_create("Receive CDP packets");
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
tcase_add_checked_fixture(tc_send, pcap_setup, pcap_teardown);
|
|
Packit |
e9ba0d |
tcase_add_test(tc_send, test_send_cdpv1);
|
|
Packit |
e9ba0d |
tcase_add_test(tc_send, test_send_cdpv2);
|
|
Packit |
e9ba0d |
suite_add_tcase(s, tc_send);
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
tcase_add_test(tc_receive, test_recv_cdpv1);
|
|
Packit |
e9ba0d |
tcase_add_test(tc_receive, test_recv_cdpv2);
|
|
Packit |
e9ba0d |
suite_add_tcase(s, tc_receive);
|
|
Packit |
e9ba0d |
#endif
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
return s;
|
|
Packit |
e9ba0d |
}
|
|
Packit |
e9ba0d |
|
|
Packit |
e9ba0d |
int
|
|
Packit |
e9ba0d |
main()
|
|
Packit |
e9ba0d |
{
|
|
Packit |
e9ba0d |
int number_failed;
|
|
Packit |
e9ba0d |
Suite *s = cdp_suite ();
|
|
Packit |
e9ba0d |
SRunner *sr = srunner_create (s);
|
|
Packit |
e9ba0d |
srunner_set_fork_status (sr, CK_NOFORK); /* Can't fork because
|
|
Packit |
e9ba0d |
we need to write
|
|
Packit |
e9ba0d |
files */
|
|
Packit |
e9ba0d |
srunner_run_all (sr, CK_ENV);
|
|
Packit |
e9ba0d |
number_failed = srunner_ntests_failed (sr);
|
|
Packit |
e9ba0d |
srunner_free (sr);
|
|
Packit |
e9ba0d |
return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
|
|
Packit |
e9ba0d |
}
|