Ejemplo n.º 1
0
/* IMPORTANT CALLS */
int
get_dsteth(ipaddr_t dstaddr,ethaddr_t ethaddr,int *ifnum) {
  /* first search interfaces */
  ipaddr_t gateway;

  switch(find_if(dstaddr,ifnum)) {
  case IFRET_LOOPBACK:
    //printf("Directly on interface (loopback)\n");
    bzero(ethaddr,6); 
    return 0;
  case IFRET_RESOLVE:
    //printf("Directly on interface\n");
    return arp_resolve_ip(dstaddr,ethaddr,*ifnum);
  case IFRET_BROADCAST:
    //printf("Broadcast\n");
    memset(ethaddr,0xff,6);
    return 0;
  case IFRET_NOTFOUND:
    /* fall through */
  }
  if (find_route(dstaddr,gateway) == 0) {
    //printf("Via gateway: %s\n",pripaddr(gateway));
    switch(find_if(gateway,ifnum)) {
    case IFRET_LOOPBACK:
      bzero(ethaddr,6); 
      return 0;
    case IFRET_RESOLVE:
      //printf("Directly on interface\n");
      return arp_resolve_ip(gateway,ethaddr,*ifnum);
    case IFRET_BROADCAST:
      //printf("Broadcast\n");
      memset(ethaddr,0xff,6);
      return 0;
    case IFRET_NOTFOUND:
      /* fall through */
    }
  }
    
  printf("get_dsteth: could not find route to destination: %s\n",pripaddr(dstaddr));
  return -1;
}

#define ASSERTIFNUM(ifnum)				\
  EnterCritical(); 					\
  assert(ifnum < GETNUMIFENTRIES && ifnum >= 0);	\
  ExitCritical();

void
get_ifnum_ethernet(int ifnum, ethaddr_t ethaddr) {
  if_entry_p ife;
  ASSERTIFNUM(ifnum);
  EnterCritical();
  ife = GETIFP(ifnum);
  bcopy(ife->ethaddr,ethaddr, 6);
  ExitCritical();
}
Ejemplo n.º 2
0
Archivo: test_arp.c Proyecto: Keidan/tk
int main(int argc, char** argv) {
  syssig_init(log_init_cast_user("test_arp", LOG_PID|LOG_CONS|LOG_PERROR), NULL);
  struct arp_entry_s entry;
  if(!arp_find_from_table("192.168.43.1", &entry)) {
    printf("ARP table\nIP: %s\nMAC: %s\nFlags:", entry.ip, entry.mac);
    if(arp_entry_is_inuse(&entry)) printf(" INUSE");
    if(arp_entry_is_permanent(&entry)) printf(" PERM");
    if(arp_entry_is_published(&entry)) printf(" PUBLISHED");
    if(arp_entry_is_trailers(&entry)) printf(" TRAILERS");
    if(arp_entry_is_proxy(&entry)) printf(" PROXY");
    printf("\n");
  }

  /* arp_add_in_table("wlan0", "192.168.1.18", "74:e5:43:5a:ea:ff"); */
  struct netiface_info_s info;
  netiface_get_info_by_name("wlan0", &info);
  netiface_mac_t mac;
  int ret = arp_resolve_ip(DEF_ARP_DBG, info, "192.168.43.1", &mac);
  //int ret = arp_resolve_ip(DEF_ARP_DBG, info, "192.168.43.1", &mac);
  printf("Ret: %d, mac: '%s'\n", ret, mac);

  log_close();
  return 0;
}