{
struct lldpd_chassis *chassis = LOCAL_CHASSIS(scfg);
struct lldpd_mgmt *mgmt;
+ oid index[2 + 16];
if (!header_index_init(vp, name, length, exact, var_len, write_method)) return NULL;
TAILQ_FOREACH(mgmt, &chassis->c_mgmt, m_entries) {
- if (mgmt->m_family != LLDPD_AF_IPV4)
- continue;
- oid index[6] = {
- 1, 4,
- mgmt->m_addr.octets[0],
- mgmt->m_addr.octets[1],
- mgmt->m_addr.octets[2],
- mgmt->m_addr.octets[3] };
- if (header_index_add(index, 6, mgmt))
+ int i;
+ switch (mgmt->m_family) {
+ case LLDPD_AF_IPV4: index[0] = 1; break;
+ case LLDPD_AF_IPV6: index[0] = 2; break;
+ default: assert(0);
+ }
+ index[1] = mgmt->m_addrsize;
+ if (index[1] > sizeof(index) - 2)
+ continue; /* Odd... */
+ for (i = 0; i < index[1]; i++)
+ index[i + 2] = mgmt->m_addr.octets[i];
+ if (header_index_add(index, 2 + index[1], mgmt))
return mgmt;
}
struct lldpd_hardware *hardware;
struct lldpd_port *port;
struct lldpd_mgmt *mgmt;
+ oid index[5 + 16];
if (!header_index_init(vp, name, length, exact, var_len, write_method)) return NULL;
TAILQ_FOREACH(hardware, &scfg->g_hardware, h_entries) {
TAILQ_FOREACH(port, &hardware->h_rports, p_entries) {
if (SMART_HIDDEN(port)) continue;
TAILQ_FOREACH(mgmt, &port->p_chassis->c_mgmt, m_entries) {
- if (mgmt->m_family != LLDPD_AF_IPV4)
- continue;
- oid index[9] = { lastchange(port),
- hardware->h_ifindex,
- port->p_chassis->c_index,
- 1, 4,
- mgmt->m_addr.octets[0],
- mgmt->m_addr.octets[1],
- mgmt->m_addr.octets[2],
- mgmt->m_addr.octets[3] };
- if (header_index_add(index, 9,
- mgmt))
+ int i;
+ index[0] = lastchange(port);
+ index[1] = hardware->h_ifindex;
+ index[2] = port->p_chassis->c_index;
+ switch (mgmt->m_family) {
+ case LLDPD_AF_IPV4: index[3] = 1; break;
+ case LLDPD_AF_IPV6: index[3] = 2; break;
+ default: assert(0);
+ }
+ index[4] = mgmt->m_addrsize;
+ if (index[4] > sizeof(index) - 5)
+ continue; /* Odd... */
+ for (i = 0; i < index[4]; i++)
+ index[i + 5] = mgmt->m_addr.octets[i];
+ if (header_index_add(index, 5 + index[4], mgmt))
return mgmt;
}
}
static unsigned long int long_ret;
static oid zeroDotZero[2] = {0, 0};
- assert(mgmt->m_family == LLDPD_AF_IPV4);
switch (vp->magic) {
case LLDP_SNMP_ADDR_LEN:
- long_ret = 5;
+ long_ret = mgmt->m_addrsize + 1;
return (u_char*)&long_ret;
case LLDP_SNMP_ADDR_IFSUBTYPE:
if (mgmt->m_iface != 0)
.m_addrsize = sizeof(struct in_addr),
.m_iface = 5
};
+struct lldpd_mgmt mgmt3 = {
+ .m_family = LLDPD_AF_IPV6,
+ .m_addr = { .octets = { 0x20, 0x01, 0x0d, 0xb8,
+ 0xca, 0xfe, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x17 } }, /* 2001:db8:cafe::17 */
+ .m_addrsize = sizeof(struct in6_addr),
+ .m_iface = 5
+};
struct lldpd_chassis chassis2 = {
.c_index = 4,
.c_protocol = LLDPD_MODE_LLDP,
TAILQ_INSERT_TAIL(&test_cfg.g_chassis, &chassis1, c_entries);
TAILQ_INIT(&chassis2.c_mgmt);
TAILQ_INSERT_TAIL(&chassis2.c_mgmt, &mgmt2, m_entries);
+ TAILQ_INSERT_TAIL(&chassis2.c_mgmt, &mgmt3, m_entries);
TAILQ_INSERT_TAIL(&test_cfg.g_chassis, &chassis2, c_entries);
TAILQ_INIT(&test_cfg.g_hardware);
TAILQ_INSERT_TAIL(&test_cfg.g_hardware, &hardware1, h_entries);
/* lldpRemManAddrIfSubtype */
{ {1, 4, 2, 1, 3, 0, 3, 1, 1, 4, 192, 0, 2, 15 }, 14, ASN_INTEGER, { .integer = 2 } },
{ {1, 4, 2, 1, 3, 8000, 3, 4, 1, 4, 192, 0, 2, 17 }, 14, ASN_INTEGER, { .integer = 2 } },
+ { {1, 4, 2, 1, 3, 8000, 3, 4, 2, 16,
+ 0x20, 0x01, 0x0d, 0xb8, 0xca, 0xfe, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17 }, 26, ASN_INTEGER, { .integer = 2 } },
{ {1, 4, 2, 1, 3, 10000, 4, 1, 1, 4, 192, 0, 2, 15 }, 14, ASN_INTEGER, { .integer = 2 } },
/* lldpRemManAddrIfId */
{ {1, 4, 2, 1, 4, 0, 3, 1, 1, 4, 192, 0, 2, 15 }, 14, ASN_INTEGER, { .integer = 3 } },
{ {1, 4, 2, 1, 4, 8000, 3, 4, 1, 4, 192, 0, 2, 17 }, 14, ASN_INTEGER, { .integer = 5 } },
+ { {1, 4, 2, 1, 4, 8000, 3, 4, 2, 16,
+ 0x20, 0x01, 0x0d, 0xb8, 0xca, 0xfe, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17 }, 26, ASN_INTEGER, { .integer = 5 } },
{ {1, 4, 2, 1, 4, 10000, 4, 1, 1, 4, 192, 0, 2, 15 }, 14, ASN_INTEGER, { .integer = 3 } },
/* lldpRemManAddrOID */
{ {1, 4, 2, 1, 5, 0, 3, 1, 1, 4, 192, 0, 2, 15 }, 14, ASN_OBJECT_ID,
{ {1, 4, 2, 1, 5, 8000, 3, 4, 1, 4, 192, 0, 2, 17 }, 14, ASN_OBJECT_ID,
{ .string = { .octet = (char *)zeroDotZero,
.len = sizeof(zeroDotZero) }} },
+ { {1, 4, 2, 1, 5, 8000, 3, 4, 2, 16,
+ 0x20, 0x01, 0x0d, 0xb8, 0xca, 0xfe, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17 }, 26, ASN_OBJECT_ID,
+ { .string = { .octet = (char *)zeroDotZero,
+ .len = sizeof(zeroDotZero) }} },
{ {1, 4, 2, 1, 5, 10000, 4, 1, 1, 4, 192, 0, 2, 15 }, 14, ASN_OBJECT_ID,
{ .string = { .octet = (char *)zeroDotZero,
.len = sizeof(zeroDotZero) }} },