Example #1
0
/*---------------------------------------------------------------------------*/
struct ip64_addrmap_entry *
ip64_addrmap_lookup(const uip_ip6addr_t *ip6addr,
		    uint16_t ip6port,
		    const uip_ip4addr_t *ip4addr,
		    uint16_t ip4port,
		    uint8_t protocol)
{
  struct ip64_addrmap_entry *m;

  printf("lookup ip4port %d ip6port %d\n", uip_htons(ip4port),
	 uip_htons(ip6port));
  check_age();
  for(m = list_head(entrylist); m != NULL; m = list_item_next(m)) {
    printf("protocol %d %d, ip4port %d %d, ip6port %d %d, ip4 %d ip6 %d\n",
	   m->protocol, protocol,
	   m->ip4port, ip4port,
	   m->ip6port, ip6port,
	   uip_ip4addr_cmp(&m->ip4addr, ip4addr),
	   uip_ip6addr_cmp(&m->ip6addr, ip6addr));
    if(m->protocol == protocol &&
       m->ip4port == ip4port &&
       m->ip6port == ip6port &&
       uip_ip4addr_cmp(&m->ip4addr, ip4addr) &&
       uip_ip6addr_cmp(&m->ip6addr, ip6addr)) {
      return m;
    }
  }
  return NULL;
}
Example #2
0
/*---------------------------------------------------------------------------*/
static void
echo_reply_handler(uip_ipaddr_t *source, uint8_t ttl, uint8_t *data,
                   uint16_t datalen)
{
    if(uip_ip6addr_cmp(source, uip_ds6_defrt_choose())) {
        def_rt_rssi = sicslowpan_get_last_rssi();
    }
}
Example #3
0
/*
 * get border router structur associated to ipaddr
 * ipaddr == NULL => find first border router
 */
uip_ds6_border_router_t *
uip_ds6_br_lookup(uip_ipaddr_t *ipaddr)
{
  for(locbr = uip_ds6_br_list;
      locbr < uip_ds6_br_list + UIP_DS6_BR_NB;
      locbr++) {
    if(locbr->state != BR_ST_FREE &&
       (ipaddr == NULL || uip_ip6addr_cmp(ipaddr, &locbr->ipaddr))) {
      return locbr;
    }
  }
  return NULL;
}
Example #4
0
/*---------------------------------------------------------------------------*/
static struct neighbor_entry *find_entry(struct uip_stack *ustack,
					 struct in6_addr *addr6)
{
	int i;

	for (i = 0; i < UIP_NEIGHBOR_ENTRIES; ++i) {
		if (uip_ip6addr_cmp
		    (ustack->neighbor_entries[i].ipaddr.s6_addr,
		     addr6->s6_addr)) {
			return &ustack->neighbor_entries[i];
		}
	}

	return NULL;
}
Example #5
0
void uip_neighbor_add(struct uip_stack *ustack,
		      struct in6_addr *addr6, struct uip_eth_addr *addr)
{
	int i, oldest;
	u8_t oldest_time;
	char buf[INET6_ADDRSTRLEN];

	inet_ntop(AF_INET6, addr6, buf, sizeof(buf));

	pthread_mutex_lock(&ustack->lock);

	/* Find the first unused entry or the oldest used entry. */
	oldest_time = 0;
	oldest = 0;
	for (i = 0; i < UIP_NEIGHBOR_ENTRIES; ++i) {
		if (ustack->neighbor_entries[i].time == MAX_TIME) {
			oldest = i;
			break;
		}
		if (uip_ip6addr_cmp
		    (ustack->neighbor_entries[i].ipaddr.s6_addr, addr6)) {
			oldest = i;
			break;
		}
		if (ustack->neighbor_entries[i].time > oldest_time) {
			oldest = i;
			oldest_time = ustack->neighbor_entries[i].time;
		}
	}

	/* Use the oldest or first free entry (either pointed to by the
	   "oldest" variable). */
	ustack->neighbor_entries[oldest].time = 0;
	uip_ip6addr_copy(ustack->neighbor_entries[oldest].ipaddr.s6_addr,
			 addr6);
	memcpy(&ustack->neighbor_entries[oldest].mac_addr, addr,
	       sizeof(struct uip_eth_addr));

	LOG_DEBUG("Adding neighbor %s with "
		  "mac address %02x:%02x:%02x:%02x:%02x:%02x at %d",
		  buf, addr->addr[0], addr->addr[1], addr->addr[2],
		  addr->addr[3], addr->addr[4], addr->addr[5], oldest);

	pthread_mutex_unlock(&ustack->lock);
}