mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-09-17 20:24:24 +00:00
SNMP: Fix InetAddress octet string encoding (length was missing)
This commit is contained in:
parent
c2a74b767b
commit
c2ba9129ad
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user