void AppGetRemoteHW_Addr (NET_IF_NBR if_nbr)
{
NET_IPv4_ADDR addr_ipv4_local;
NET_IPv4_ADDR addr_ipv4_remote;
CPU_CHAR *p_addr_ipv4_remote;
CPU_CHAR addr_hw_str[NET_IF_ETHER_ADDR_SIZE_STR];
CPU_INT08U addr_hw[NET_IF_ETHER_ADDR_SIZE];
NET_ERR err;
/* ------------- PREPARE IPv4 ADDRs ------------- */
p_addr_ipv4_local = "10.10.1.10"; /* MUST be one of host's configured IPv4 addrs. */
addr_ipv4_local = NetASCII_Str_to_IP((CPU_CHAR *) p_addr_ipv4_local,
(NET_ERR *)&err);
if (err != NET_ASCII_ERR_NONE) {
printf(" Error #%d converting IPv4 address %s", err, p_addr_ipv4_local);
return;
}
p_addr_ipv4_remote = "10.10.1.50"; /* Remote host's IPv4 addr to get hardware addr. */
(void)NetASCII_Str_to_IP((CPU_CHAR *) p_addr_ipv4_remote,
(void *)&addr_ipv4_remote,
NET_IPv4_ADDR_SIZE,
(NET_ERR *)&err);
if (err != NET_ASCII_ERR_NONE) {
printf(" Error #%d converting IPv4 address %s", err, p_addr_ipv4_remote);
return;
}
addr_ipv4_local = NET_UTIL_HOST_TO_NET_32(addr_ipv4_local);
addr_ipv4_remote = NET_UTIL_HOST_TO_NET_32(addr_ipv4_remote);
/* ------------- PROBE ADDR ON NET -------------- */
NetARP_CacheProbeAddrOnNet((NET_PROTOCOL_TYPE) NET_PROTOCOL_TYPE_IP_V4,
(CPU_INT08U *) &addr_ipv4_local,
(CPU_INT08U *) &addr_ipv4_remote,
(NET_CACHE_ADDR_LEN) sizeof(addr_ipv4_remote),
(NET_ERR *) &err);
if (err != NET_ARP_ERR_NONE) {
printf(" Error #%d probing address %s on network", err, addr_ipv4_remote);
return;
}
OSTimeDly(2); /* Delay short time for ARP to probe network. */
/* ----- QUERY ARP CACHE FOR REMOTE HW ADDR ----- */
(void)NetARP_CacheGetAddrHW((NET_IF_NBR ) if_nbr,
(CPU_INT08U *)&addr_hw[0],
(NET_CACHE_ADDR_LEN) sizeof(addr_hw_str),
(CPU_INT08U *)&addr_ipv4_remote,
(NET_CACHE_ADDR_LEN) sizeof(addr_ipv4_remote),
(NET_ERR *)&err);
switch (err) {
case NET_ARP_ERR_NONE:
NetASCII_MAC_to_Str((CPU_INT08U *)&addr_hw[0],
(CPU_CHAR *)&addr_hw_str[0],
(CPU_BOOLEAN ) DEF_NO,
(CPU_BOOLEAN ) DEF_YES,
(NET_ERR *)&err);
if (err != NET_ASCII_ERR_NONE) {
printf(" Error #%d converting hardware address", err);
return;
}
printf(" Remote IPv4 Addr %s @ HW Addr %s\n\r", p_addr_ipv4_remote, &addr_hw_str[0]);
break;
case NET_ARP_ERR_CACHE_NOT_FOUND:
printf(" Remote IPv4 Addr %s NOT found on network\n\r", p_addr_ipv4_remote);
break;
case NET_ARP_ERR_CACHE_PEND:
printf(" Remote IPv4 Addr %s NOT YET found on network\n\r", p_addr_ipv4_remote);
break;
case NET_ARP_ERR_NULL_PTR:
case NET_ARP_ERR_INVALID_HW_ADDR_LEN:
case NET_ARP_ERR_INVALID_PROTOCOL_ADDR_LEN:
default:
printf(" Error #%d querying ARP cache", err);
break;
}
} |