lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [lwip-users] Using ARP to get MAC address


From: Tomas Daujotas
Subject: Re: [lwip-users] Using ARP to get MAC address
Date: Fri, 17 Feb 2012 14:37:37 +0200

A small update:

In etharp_find_addr(), I've found that I don't get
ETHARP_STATE_STABLE, but the index returned is correct here:

s8_t etharp_find_addr(struct netif *netif, ip_addr_t *ipaddr, struct
eth_addr **eth_ret, ip_addr_t **ip_ret) {

  s8_t i;

  LWIP_ASSERT("eth_ret != NULL && ip_ret != NULL", eth_ret != NULL &&
ip_ret != NULL);

  LWIP_UNUSED_ARG(netif);

  i = find_entry(ipaddr, ETHARP_FLAG_FIND_ONLY); // <<--- here returns
table index 0

  if((i >= 0) && arp_table[i].state == 1) {     //ETHARP_STATE_STABLE)
{ <<--- I don't know what flag is equal to ETHARP_STATE_STABLE, so
let's override it for tests only
      *eth_ret = &arp_table[i].ethaddr; // <<--- returned all 0
      *ip_ret = &arp_table[i].ipaddr; // returned correct IP address
      return i; // returns 0
  }
  return -1;
}

I get the index 0, so I've overrided the ETHARP_STATE_STABLE part,
since arp_table[i].state returns 1.

Now the check part:

I've defined required structs as pointers:

struct ip_addr * ret_ip_addr;
struct eth_addr * ret_eth_addr;

Then the check part is:

        arp_query = etharp_query(&alteraTseNetif, &alteraTseNetif.gw, NULL);
        arp_find = etharp_find_addr(&alteraTseNetif, &alteraTseNetif.gw,
&ret_eth_addr, &ret_ip_addr);

    if(arp_query != ERR_OK) {
        printf("Query FAIL (returned: %d)\n",arp_query);
    } else {
        printf("Query OK, trying to find MAC address...\n");
                if(arp_find > -1) {
                        printf("Find addr OK (returned arp table index number:
%d)\n", arp_find);
                        printf("Returned IP: 0x%08X\n", (unsigned 
int)ret_ip_addr->addr);
                        printf("Returned MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
ret_eth_addr->addr[0],
                                                                                
                                                        ret_eth_addr->addr[1],
                                                                                
                                                        ret_eth_addr->addr[2],
                                                                                
                                                        ret_eth_addr->addr[3],
                                                                                
                                                        ret_eth_addr->addr[4],
                                                                                
                                                        ret_eth_addr->addr[5]);
                } else {
                        printf("Find addr FAIL (returned %d)\n", arp_find);
                }
    }

I get the correct result in ret_ip_addr pointer, which, as You can
see, returns my gateway address (same as alteraTseNetif.gw). However
my MAC pointer returns all six 0x00. This means the table isn't
updated?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]