SNMP: Fix InetAddress octet string encoding (length was missing)

This commit is contained in:
Dirk Ziegelmeier 2016-01-13 13:04:37 +01:00
parent c2a74b767b
commit c2ba9129ad

View File

@ -104,7 +104,7 @@ const struct snmp_obj_id* snmp_get_device_enterprise_oid(void)
#if LWIP_IPV4 #if LWIP_IPV4
/** /**
* Conversion from InetAddress oid to lwIP ip4_addr * Conversion from InetAddressIPv4 oid to lwIP ip4_addr
* @param ident points to u32_t ident[4] input * @param ident points to u32_t ident[4] input
* @param ip points to output struct * @param ip points to output struct
*/ */
@ -124,7 +124,7 @@ snmp_oid_to_ip4(const u32_t *oid, ip4_addr_t *ip)
} }
/** /**
* Convert ip4_addr to InetAddress (no InetAddressType) * Convert ip4_addr to InetAddressIPv4 (no InetAddressType)
* @param ip points to input struct * @param ip points to input struct
* @param oid points to u32_t ident[4] output * @param oid points to u32_t ident[4] output
*/ */
@ -140,7 +140,7 @@ snmp_ip4_to_oid(const ip4_addr_t *ip, u32_t *oid)
#if LWIP_IPV6 #if LWIP_IPV6
/** /**
* Conversion from InetAddress oid to lwIP ip6_addr * Conversion from InetAddressIPv6 oid to lwIP ip6_addr
* @param oid points to u32_t oid[16] input * @param oid points to u32_t oid[16] input
* @param ip points to output struct * @param ip points to output struct
*/ */
@ -175,7 +175,7 @@ snmp_oid_to_ip6(const u32_t *oid, ip6_addr_t *ip)
} }
/** /**
* Convert ip6_addr to InetAddress (no InetAddressType) * Convert ip6_addr to InetAddressIPv6 (no InetAddressType)
* @param ip points to input struct * @param ip points to input struct
* @param oid points to u32_t ident[16] output * @param oid points to u32_t ident[16] output
*/ */
@ -233,16 +233,18 @@ snmp_ip_to_oid(const ip_addr_t *ip, u32_t *oid)
if(IP_IS_V6(ip)) { if(IP_IS_V6(ip)) {
#if LWIP_IPV6 #if LWIP_IPV6
oid[0] = 2; /* ipv6 */ oid[0] = 2; /* ipv6 */
snmp_ip6_to_oid(ip_2_ip6(ip), &oid[1]); oid[1] = 16; /* 16 InetAddressIPv6 OIDs follow */
return 17; snmp_ip6_to_oid(ip_2_ip6(ip), &oid[2]);
return 18;
#else /* LWIP_IPV6 */ #else /* LWIP_IPV6 */
return 0; return 0;
#endif /* LWIP_IPV6 */ #endif /* LWIP_IPV6 */
} else { } else {
#if LWIP_IPV4 #if LWIP_IPV4
oid[0] = 1; /* ipv4 */ oid[0] = 1; /* ipv4 */
snmp_ip4_to_oid(ip_2_ip4(ip), &oid[1]); oid[1] = 4; /* 4 InetAddressIPv4 OIDs follow */
return 5; snmp_ip4_to_oid(ip_2_ip4(ip), &oid[2]);
return 6;
#else /* LWIP_IPV4 */ #else /* LWIP_IPV4 */
return 0; return 0;
#endif /* LWIP_IPV4 */ #endif /* LWIP_IPV4 */
@ -266,33 +268,43 @@ snmp_oid_to_ip(const u32_t *oid, u8_t oid_len, ip_addr_t *ip)
if (oid[0] == 1) { /* ipv4 */ if (oid[0] == 1) { /* ipv4 */
#if LWIP_IPV4 #if LWIP_IPV4
/* InetAddressType, 4x InetAddress */ /* 1x InetAddressType, 4x InetAddressIPv4 */
if(oid_len < 5) { if(oid_len < 6) {
return 0; return 0;
} }
/* 4x ipv4 OID */
if(oid[1] != 4) {
return 0;
}
IP_SET_TYPE(ip, IPADDR_TYPE_V4); IP_SET_TYPE(ip, IPADDR_TYPE_V4);
if(!snmp_oid_to_ip4(&oid[1], ip_2_ip4(ip))) { if(!snmp_oid_to_ip4(&oid[2], ip_2_ip4(ip))) {
return 0; return 0;
} }
return 5; return 6;
#else /* LWIP_IPV4 */ #else /* LWIP_IPV4 */
return 0; return 0;
#endif /* LWIP_IPV4 */ #endif /* LWIP_IPV4 */
} else if(oid[0] == 2) { /* ipv6 */ } else if(oid[0] == 2) { /* ipv6 */
#if LWIP_IPV6 #if LWIP_IPV6
/* InetAddressType, 16x InetAddress */ /* 1x InetAddressType, 16x InetAddressIPv6 */
if(oid_len < 17) { if(oid_len < 18) {
return 0;
}
/* 16x ipv6 OID */
if(oid[1] != 16) {
return 0; return 0;
} }
IP_SET_TYPE(ip, IPADDR_TYPE_V6); IP_SET_TYPE(ip, IPADDR_TYPE_V6);
if(!snmp_oid_to_ip6(&oid[1], ip_2_ip6(ip))) { if(!snmp_oid_to_ip6(&oid[2], ip_2_ip6(ip))) {
return 0; return 0;
} }
return 17; return 18;
#else /* LWIP_IPV6 */ #else /* LWIP_IPV6 */
return 0; return 0;
#endif /* LWIP_IPV6 */ #endif /* LWIP_IPV6 */