您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ uip_is_addr_unspecified函数代码示例

51自学网 2021-06-03 09:08:22
  C++
这篇教程C++ uip_is_addr_unspecified函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中uip_is_addr_unspecified函数的典型用法代码示例。如果您正苦于以下问题:C++ uip_is_addr_unspecified函数的具体用法?C++ uip_is_addr_unspecified怎么用?C++ uip_is_addr_unspecified使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了uip_is_addr_unspecified函数的23个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: route_callback

static voidroute_callback(int event, uip_ipaddr_t *route, uip_ipaddr_t *ipaddr, int numroutes){  if(event == UIP_DS6_NOTIFICATION_DEFRT_ADD) {    if(route != NULL && ipaddr != NULL &&       !uip_is_addr_unspecified(route) &&       !uip_is_addr_unspecified(ipaddr)) {      check_dodag_creation(NULL);    }  }}
开发者ID:kamejoko80,项目名称:6lbr,代码行数:11,


示例2: route_callback

/*---------------------------------------------------------------------------*/static voidroute_callback(int event, uip_ipaddr_t *route, uip_ipaddr_t *ipaddr,               int numroutes){  if(event == UIP_DS6_NOTIFICATION_DEFRT_ADD) {    if(route != NULL && ipaddr != NULL &&       !uip_is_addr_unspecified(route) &&       !uip_is_addr_unspecified(ipaddr)) {      if(to_become_root) {        ctimer_set(&c, 0, create_dag_callback, NULL);      }    }  }}
开发者ID:examyes,项目名称:SMeshStudio,代码行数:15,


示例3: native_config_network_route_handler

static int native_config_network_route_handler(config_level_t level, void* user, const char* section, const char* name,    const char* value) {  static uip_ipaddr_t ipaddr;  static uint8_t length = 0;  static uip_ipaddr_t next_hop;  if(level != CONFIG_LEVEL_NETWORK) {    return 1;  }  if(!name) {    if(!uip_is_addr_unspecified(&ipaddr) && length > 0 && !uip_is_addr_unspecified(&next_hop)) {      uip_ds6_route_add_static(&ipaddr, length, &next_hop);    } else {      LOG6LBR_ERROR("Missing parameters for route creation/n");      return 0;    }    //Reset parameters    uip_create_unspecified(&ipaddr);    uip_create_unspecified(&next_hop);    length = 0;    return 1;  }  if(strcmp(name, "dest") == 0) {    if(uiplib_ipaddrconv(value, &ipaddr) == 0) {      LOG6LBR_ERROR("Invalid ip address : %s/n", value);      return 0;    }    length = 128;  } else if (strcmp(name, "via") == 0) {    if(uiplib_ipaddrconv(value, &next_hop) == 0) {      LOG6LBR_ERROR("Invalid ip address : %s/n", value);      return 0;    }  } else {    LOG6LBR_ERROR("Invalid parameter : %s/n", name);    return 0;  }  return 1;}
开发者ID:Ayesha-N,项目名称:6lbr,代码行数:41,


示例4: PROCESS_THREAD

/*---------------------------------------------------------------------------*/PROCESS_THREAD(rd_client_process, ev, data){  static struct etimer et;  static coap_packet_t request[1];      /* This way the packet can be treated as pointer as usual. */  static char query_buffer[200];  static char rd_client_name[64];  PROCESS_BEGIN();  PROCESS_PAUSE();  PRINTF("RD client started/n");  sprintf(rd_client_name, "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",      uip_lladdr.addr[0], uip_lladdr.addr[1], uip_lladdr.addr[2], uip_lladdr.addr[3],      uip_lladdr.addr[4], uip_lladdr.addr[5], uip_lladdr.addr[6], uip_lladdr.addr[7]);  while(1) {    new_address = 0;    while(!registered) {      while(uip_is_addr_unspecified(&rd_server_ipaddr)) {        status = RD_CLIENT_UNCONFIGURED;        PROCESS_YIELD();      }      status = RD_CLIENT_REGISTERING;      etimer_set(&et, CLOCK_SECOND);      PROCESS_YIELD_UNTIL(etimer_expired(&et));      PRINTF("Registering to ");      PRINT6ADDR(&rd_server_ipaddr);      PRINTF(" %d with %s/n", rd_server_port, resources_list);      coap_init_message(request, COAP_TYPE_CON, COAP_POST, 0);      coap_set_header_uri_path(request, "rd");      sprintf(query_buffer, "ep=%s&b=U&lt=%d", rd_client_name, RD_CLIENT_LIFETIME);      coap_set_header_uri_query(request, query_buffer);      coap_set_payload(request, (uint8_t *) resources_list, resources_list_size);      COAP_BLOCKING_REQUEST_BLOCK_RESPONSE(coap_default_context, &rd_server_ipaddr, UIP_HTONS(rd_server_port), request, client_registration_request_handler, client_registration_response_handler);    }    status = RD_CLIENT_REGISTERED;    etimer_set(&et, RD_CLIENT_LIFETIME * CLOCK_SECOND / 10 * 9);    PROCESS_YIELD_UNTIL(etimer_expired(&et) || new_address);    registered = 0;    if(!new_address) {      PRINTF("Update endpoint %s/n", registration_name);      coap_init_message(request, COAP_TYPE_CON, COAP_PUT, 0);      coap_set_header_uri_path(request, registration_name);      sprintf(query_buffer, "b=U&lt=%d", RD_CLIENT_LIFETIME);      coap_set_header_uri_query(request, query_buffer);      COAP_BLOCKING_REQUEST(coap_default_context, &rd_server_ipaddr, UIP_HTONS(rd_server_port), request, client_update_response_handler);    }  }  PROCESS_END();}
开发者ID:Scypho,项目名称:6lbr,代码行数:53,


示例5: od_handler

/*----------------------------------------------------------------------------*/voidod_handler(void *request, void *response, uint8_t *buffer,           uint16_t preferred_size, int32_t *offset, tres_res_t *task){  uint16_t len;  rest_resource_flags_t method;  const char *ptr;  int retv;  int16_t pos;  method = REST.get_method_type(request);  switch (method) {  case METHOD_GET:    if(!uip_is_addr_unspecified(task->od->addr)) {      pos = snprintf((char *)buffer, REST_MAX_CHUNK_SIZE, "<");      pos += create_coap_url((char *)buffer + pos, REST_MAX_CHUNK_SIZE,                             task->od->addr, task->od->path);      pos += snprintf((char *)buffer + pos, REST_MAX_CHUNK_SIZE, ">");      if(pos >= REST_MAX_CHUNK_SIZE) {        PRINTF("ERROR: input source resource larger than REST_MAX_CHUNK_SIZE");        //TODO: return error code      }      len = strlen((char *)buffer);      REST.set_header_content_type(response, REST.type.APPLICATION_LINK_FORMAT);      REST.set_response_payload(response, buffer, len);    }    break;  case METHOD_PUT:    len = REST.get_request_payload(request, (const uint8_t **)&ptr);    PRINTF("Req str len = %u/n", (unsigned int)strlen(ptr));    PRINTF("Req len = %d/n", len);    retv = task_od_set(task, ptr);    if(retv == ERR_NONE) {      REST.set_response_status(response, REST.status.CHANGED);    } else {      REST.set_response_status(response, REST.status.BAD_REQUEST);    }    break;  case METHOD_DELETE:    task_od_reset(task);    REST.set_response_status(response, REST.status.DELETED);    break;  default:    REST.set_response_status(response, REST.status.METHOD_NOT_ALLOWED);  }}
开发者ID:andreaazzara,项目名称:contiki-tres,代码行数:47,


示例6: uip_nameserver_count

/*----------------------------------------------------------------------------*/uint16_tuip_nameserver_count(void){#if UIP_NAMESERVER_POOL_SIZE > 1  if(initialized == 0) {    return 0;  }  return list_length(dns);#else /* UIP_NAMESERVER_POOL_SIZE > 1 */#if NETSTACK_CONF_WITH_IPV6  if(uip_is_addr_unspecified(&serveraddr)) {#else /* NETSTACK_CONF_WITH_IPV6 */  if(uip_ipaddr_cmp(&serveraddr, &uip_all_zeroes_addr)) {#endif /* NETSTACK_CONF_WITH_IPV6 */    return 0;  } else {    return 1;  }#endif /* UIP_NAMESERVER_POOL_SIZE > 1 */}
开发者ID:01org,项目名称:CODK-A-Firmware,代码行数:21,


示例7: cetic_6lbr_start_dodag_root

voidcetic_6lbr_start_dodag_root(void){#if CETIC_6LBR_DODAG_ROOT  if((nvm_data.rpl_config & CETIC_6LBR_MODE_MANUAL_DODAG) != 0) {    //Manual DODAG ID    cetic_dag = rpl_set_root(nvm_data.rpl_instance_id, (uip_ipaddr_t*)&nvm_data.rpl_dodag_id);  } else {    //Automatic DODAG ID    if((nvm_data.rpl_config & CETIC_6LBR_MODE_GLOBAL_DODAG) != 0) {#if CETIC_6LBR_SMARTBRIDGE      if((nvm_data.mode & CETIC_MODE_WAIT_RA_MASK) == 0) {#endif      //DODAGID = global address used !      cetic_dag = rpl_set_root(nvm_data.rpl_instance_id, &wsn_ip_addr);#if CETIC_6LBR_SMARTBRIDGE      } else {        //Not global IP yet configured        cetic_dag = NULL;      }#endif    } else {      //DODAGID = link-local address used !      cetic_dag = rpl_set_root(nvm_data.rpl_instance_id, &wsn_ip_local_addr);    }  }#if CETIC_6LBR_SMARTBRIDGE  if((nvm_data.mode & CETIC_MODE_WAIT_RA_MASK) == 0) {    rpl_set_prefix(cetic_dag, &wsn_net_prefix, nvm_data.wsn_net_prefix_len);  }#else  rpl_set_prefix(cetic_dag, &wsn_net_prefix, nvm_data.wsn_net_prefix_len);#endif  if(cetic_dag) {    LOG6LBR_6ADDR(INFO, &cetic_dag->dag_id, "Configured as DODAG Root ");  }  if(!uip_is_addr_unspecified(&wsn_ip_addr)) {    uip_ds6_addr_add(&wsn_ip_addr, 0, ((nvm_data.mode & CETIC_MODE_WSN_AUTOCONF) != 0) ? ADDR_AUTOCONF : ADDR_MANUAL);  }#endif /* CETIC_6LBR_DODAG_ROOT */}
开发者ID:kamejoko80,项目名称:6lbr,代码行数:41,


示例8: uip_nd6_rs_output

/*---------------------------------------------------------------------------*/voiduip_nd6_rs_output(void){  UIP_IP_BUF->vtc = 0x60;  UIP_IP_BUF->tcflow = 0;  UIP_IP_BUF->flow = 0;  UIP_IP_BUF->proto = UIP_PROTO_ICMP6;  UIP_IP_BUF->ttl = UIP_ND6_HOP_LIMIT;  uip_create_linklocal_allrouters_mcast(&UIP_IP_BUF->destipaddr);  uip_ds6_select_src(&UIP_IP_BUF->srcipaddr, &UIP_IP_BUF->destipaddr);  UIP_ICMP_BUF->type = ICMP6_RS;  UIP_ICMP_BUF->icode = 0;  UIP_IP_BUF->len[0] = 0;       /* length will not be more than 255 */  if(uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) {    UIP_IP_BUF->len[1] = UIP_ICMPH_LEN + UIP_ND6_RS_LEN;    uip_len = uip_l3_icmp_hdr_len + UIP_ND6_RS_LEN;  } else {    uip_len = uip_l3_icmp_hdr_len + UIP_ND6_RS_LEN + UIP_ND6_OPT_LLAO_LEN;    UIP_IP_BUF->len[1] =      UIP_ICMPH_LEN + UIP_ND6_RS_LEN + UIP_ND6_OPT_LLAO_LEN;    create_llao(&uip_buf[uip_l2_l3_icmp_hdr_len + UIP_ND6_RS_LEN],		UIP_ND6_OPT_SLLAO);  }  UIP_ICMP_BUF->icmpchksum = 0;  UIP_ICMP_BUF->icmpchksum = ~uip_icmp6chksum();  UIP_STAT(++uip_stat.nd6.sent);  PRINTF("Sendin RS to");  PRINT6ADDR(&UIP_IP_BUF->destipaddr);  PRINTF("from");  PRINT6ADDR(&UIP_IP_BUF->srcipaddr);  PRINTF("/n");  return;}
开发者ID:naguirre,项目名称:contiki,代码行数:38,


示例9: ip64_dhcpc_configured

/*---------------------------------------------------------------------------*/voidip64_dhcpc_configured(const struct ip64_dhcpc_state *s){  uip_ip6addr_t ip6dnsaddr;  PRINTF("DHCP Configured with %d.%d.%d.%d/n",	 s->ipaddr.u8[0], s->ipaddr.u8[1],	 s->ipaddr.u8[2], s->ipaddr.u8[3]);  ip64_set_hostaddr((uip_ip4addr_t *)&s->ipaddr);  ip64_set_netmask((uip_ip4addr_t *)&s->netmask);  ip64_set_draddr((uip_ip4addr_t *)&s->default_router);  if(!uip_ip4addr_cmp((uip_ip4addr_t *)&s->dnsaddr, &uip_all_zeroes_addr)) {    //Note: Currently we assume only one DNS server    uip_ipaddr_t * dns = uip_nameserver_get(0);    //Only update DNS entry if it is empty or already IPv4    if(uip_is_addr_unspecified(dns) || ip64_addr_is_ip64(dns)) {      ip64_addr_4to6((uip_ip4addr_t *)&s->dnsaddr, &ip6dnsaddr);      uip_nameserver_update(&ip6dnsaddr, uip_ntohs(s->lease_time[0])*65536ul + uip_ntohs(s->lease_time[1]));    }  }#if CETIC_6LBR  cetic_6lbr_ip64_dhcpc_configured(s);#endif}
开发者ID:Ayesha-N,项目名称:6lbr,代码行数:25,


示例10: uip_nd6_io_ns_input

/*------------------------------------------------------------------*/void uip_nd6_io_ns_input(void){  PRINTF("Received NS from");  PRINT6ADDR(&UIP_IP_BUF->srcipaddr);  PRINTF("to");  PRINT6ADDR(&UIP_IP_BUF->destipaddr);  PRINTF("with target address");  PRINT6ADDR((uip_ipaddr_t *)(&UIP_ND6_NS_BUF->tgtipaddr));  PRINTF("/n");  UIP_STAT(++uip_stat.nd6.recv);   u8_t flags; #if UIP_CONF_IPV6_CHECKS  if((UIP_IP_BUF->ttl != UIP_ND6_HOP_LIMIT) ||     (uip_is_addr_mcast(&UIP_ND6_NS_BUF->tgtipaddr)) ||     (UIP_ICMP_BUF->icode != 0))  {    goto badpkt;  }#endif /* UIP_CONF_IPV6_CHECKS */     /* Options reading: we handle only SLLAO for now */  nd6_opt_llao = NULL;  nd6_opt_offset = UIP_ND6_NS_LEN;  while(uip_l3_icmp_hdr_len + nd6_opt_offset < uip_len) {#if UIP_CONF_IPV6_CHECKS    if(UIP_ND6_OPT_HDR_BUF->len == 0) {      goto badpkt;    }#endif /* UIP_CONF_IPV6_CHECKS */     switch(UIP_ND6_OPT_HDR_BUF->type) {      case UIP_ND6_OPT_SLLAO:        nd6_opt_llao = (struct uip_nd6_opt_llao *)UIP_ND6_OPT_HDR_BUF;        break;      default:        UIP_LOG("ND option not supported in NS");        break;    }    nd6_opt_offset += (UIP_ND6_OPT_HDR_BUF->len << 3);  }  /* Options processing: only SLLAO */  if(nd6_opt_llao != NULL) {#if UIP_CONF_IPV6_CHECKS    /* There must be NO option in a DAD NS */    if(uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) {      goto badpkt;    } else {#endif /*UIP_CONF_IPV6_CHECKS*/      neighbor = uip_nd6_nbrcache_lookup(&UIP_IP_BUF->srcipaddr);      if(neighbor == NULL) {        /* we need to add the neighbor*/        uip_nd6_nbrcache_add(&UIP_IP_BUF->srcipaddr,                             &nd6_opt_llao->addr, 0, STALE);      } else {        /* If LL address changed, set neighbor state to stale */        if(memcmp(&nd6_opt_llao->addr, &neighbor->lladdr, UIP_LLADDR_LEN) != 0) {          memcpy(&neighbor->lladdr, &nd6_opt_llao->addr, UIP_LLADDR_LEN);          neighbor->state = STALE;        } else {          /* If neighbor state is INCOMPLETE, set to STALE */          if(neighbor->state == INCOMPLETE) {            neighbor->state = STALE;          }        }      }#if UIP_CONF_IPV6_CHECKS    }   #endif /*UIP_CONF_IPV6_CHECKS*/  }  /*    * Rest of NS processing: Depends on the purpose of the NS: NUD or DAD or   * Address Resolution    */  /** /note we use ifaddr to remember the target address */  ifaddr = uip_netif_addr_lookup(&UIP_ND6_NS_BUF->tgtipaddr, 128, 0);  if(ifaddr != NULL) {    if(uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)){      /* DAD CASE */#if UIP_CONF_IPV6_CHECKS       /* Dst address must be solicited node mcast address */      if(!uip_netif_is_addr_my_solicited(&UIP_IP_BUF->destipaddr)){        goto badpkt;      }#endif /* UIP_CONF_IPV6_CHECKS */       /*       * If my address is not tentative, then send a NA to all nodes with       * TLLAO flags are: override = yes.       */        if(ifaddr->state!=TENTATIVE) {          /*          * we need to send a NA, we set the src, dest, flags. tgt remains the         * same and the rest is done at "create_na"          */        uip_create_linklocal_allnodes_mcast(&UIP_IP_BUF->destipaddr);        uip_netif_select_src(&UIP_IP_BUF->srcipaddr, &UIP_IP_BUF->destipaddr);//.........这里部分代码省略.........
开发者ID:EDAyele,项目名称:ptunes,代码行数:101,


示例11: PT_THREAD

//.........这里部分代码省略.........#endif  add("</pre><h2>Default Routers</h2><pre>");  for(dr = uip_ds6_defrt_head(); dr != NULL; dr = list_item_next(r)) {    ipaddr_add(&dr->ipaddr);    if(dr->isinfinite) {      add(" Inf");    } else {      add(" %u s", stimer_remaining(&dr->lifetime));    }    add("/n");    SEND_STRING(&s->sout, buf);    reset_buf();  }#if UIP_CONF_DS6_ROUTE_INFORMATION  add("</pre><h2>Route info</h2><pre>");  for(i = 0; i < UIP_DS6_ROUTE_INFO_NB; i++) {    if(uip_ds6_route_info_list[i].isused) {      ipaddr_add(&uip_ds6_route_info_list[i].ipaddr);      add("/%u (%x) %u s/n", uip_ds6_route_info_list[i].length,          uip_ds6_route_info_list[i].flags,          uip_ds6_route_info_list[i].lifetime);    }  }  SEND_STRING(&s->sout, buf);  reset_buf();#endif  add("</pre><h2>DNS server</h2><pre>");  //Note: Currently we assume only one DNS server  uip_ipaddr_t * dns = uip_nameserver_get(0);  if(!uip_is_addr_unspecified(dns)) {    ipaddr_add(dns);    add(" %u s/n", uip_nameserver_next_expiration());  }  SEND_STRING(&s->sout, buf);  reset_buf();#if CETIC_6LBR_WITH_IP64  if((nvm_data.global_flags & CETIC_GLOBAL_IP64) != 0) {    add("</pre><h2>IP64 connections mapping</h2><pre>");    static struct ip64_addrmap_entry *m;    for(m = ip64_addrmap_list();        m != NULL;        m = list_item_next(m)) {      if(timer_expired(&m->timer)) continue;      ipaddr_add(&m->ip6addr);      add("%%%d (%d)", m->ip6port, m->protocol);      if(m->ip6to4 && m->ip4to6) {        add(" <-> ");      } else if(m->ip6to4) {        add(" -> ");      } else {        add(" <- ");      }      ip4addr_add(&m->ip4addr);      add("%%%d : %d (%x) %us/n", m->ip4port, m->mapped_port,          m->flags, (m->timer.interval - (clock_time() - m->timer.start)) / CLOCK_SECOND);      SEND_STRING(&s->sout, buf);      reset_buf();    }  }#endif
开发者ID:kamejoko80,项目名称:6lbr,代码行数:66,


示例12: uip_nd6_ns_input

voiduip_nd6_ns_input(void){  u8_t flags;  PRINTF("Received NS from");  PRINT6ADDR(&UIP_IP_BUF->srcipaddr);  PRINTF("to");  PRINT6ADDR(&UIP_IP_BUF->destipaddr);  PRINTF("with target address");  PRINT6ADDR((uip_ipaddr_t *) (&UIP_ND6_NS_BUF->tgtipaddr));  PRINTF("/n");  UIP_STAT(++uip_stat.nd6.recv);#if UIP_CONF_IPV6_CHECKS  if((UIP_IP_BUF->ttl != UIP_ND6_HOP_LIMIT) ||     (uip_is_addr_mcast(&UIP_ND6_NS_BUF->tgtipaddr)) ||     (UIP_ICMP_BUF->icode != 0)) {    PRINTF("NS received is bad/n");    goto discard;  }#endif /* UIP_CONF_IPV6_CHECKS */  /* Options processing */  nd6_opt_llao = NULL;  nd6_opt_offset = UIP_ND6_NS_LEN;  while(uip_l3_icmp_hdr_len + nd6_opt_offset < uip_len) {#if UIP_CONF_IPV6_CHECKS    if(UIP_ND6_OPT_HDR_BUF->len == 0) {      PRINTF("NS received is bad/n");      goto discard;    }#endif /* UIP_CONF_IPV6_CHECKS */    switch (UIP_ND6_OPT_HDR_BUF->type) {    case UIP_ND6_OPT_SLLAO:      nd6_opt_llao = &uip_buf[uip_l2_l3_icmp_hdr_len + nd6_opt_offset];#if UIP_CONF_IPV6_CHECKS      /* There must be NO option in a DAD NS */      if(uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) {        PRINTF("NS received is bad/n");        goto discard;      } else {#endif /*UIP_CONF_IPV6_CHECKS */        nbr = uip_ds6_nbr_lookup(&UIP_IP_BUF->srcipaddr);        if(nbr == NULL) {          uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr,			  (uip_lladdr_t *)&nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET],			  0, NBR_STALE);        } else {          if(memcmp(&nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET],		    &nbr->lladdr, UIP_LLADDR_LEN) != 0) {            memcpy(&nbr->lladdr, &nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET],		   UIP_LLADDR_LEN);            nbr->state = NBR_STALE;          } else {            if(nbr->state == NBR_INCOMPLETE) {              nbr->state = NBR_STALE;            }          }        }#if UIP_CONF_IPV6_CHECKS      }#endif /*UIP_CONF_IPV6_CHECKS */      break;    default:      PRINTF("ND option not supported in NS");      break;    }    nd6_opt_offset += (UIP_ND6_OPT_HDR_BUF->len << 3);  }  addr = uip_ds6_addr_lookup(&UIP_ND6_NS_BUF->tgtipaddr);  if(addr != NULL) {    if(uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) {      /* DAD CASE */#if UIP_CONF_IPV6_CHECKS      if(!uip_is_addr_solicited_node(&UIP_IP_BUF->destipaddr)) {        PRINTF("NS received is bad/n");        goto discard;      }#endif /* UIP_CONF_IPV6_CHECKS */      if(addr->state != ADDR_TENTATIVE) {        uip_create_linklocal_allnodes_mcast(&UIP_IP_BUF->destipaddr);        uip_ds6_select_src(&UIP_IP_BUF->srcipaddr, &UIP_IP_BUF->destipaddr);        flags = UIP_ND6_NA_FLAG_OVERRIDE;        goto create_na;      } else {          /** /todo if I sent a NS before him, I win */        uip_ds6_dad_failed(addr);        goto discard;      }    }#if UIP_CONF_IPV6_CHECKS    if(uip_ds6_is_my_addr(&UIP_IP_BUF->srcipaddr)) {        /**         * /NOTE do we do something here? we both are using the same address.         * If we are doing dad, we could cancel it, though we should receive a         * NA in response of DAD NS we sent, hence DAD will fail anyway. If we         * were not doing DAD, it means there is a duplicate in the network!         */      PRINTF("NS received is bad/n");//.........这里部分代码省略.........
开发者ID:EmuxEvans,项目名称:ContikiCC2530Port,代码行数:101,


示例13: cetic_6lbr_init

voidcetic_6lbr_init(void){  uip_ds6_addr_t *local = uip_ds6_get_link_local(-1);  uip_ipaddr_copy(&wsn_ip_local_addr, &local->ipaddr);  LOG6LBR_6ADDR(INFO, &wsn_ip_local_addr, "Tentative local IPv6 address ");#if CETIC_6LBR_SMARTBRIDGE  if((nvm_data.mode & CETIC_MODE_WAIT_RA_MASK) == 0)    //Manual configuration  {    memcpy(wsn_net_prefix.u8, &nvm_data.wsn_net_prefix,           sizeof(nvm_data.wsn_net_prefix));    if((nvm_data.mode & CETIC_MODE_WSN_AUTOCONF) != 0)  //Address auto configuration    {      uip_ipaddr_copy(&wsn_ip_addr, &wsn_net_prefix);      uip_ds6_set_addr_iid(&wsn_ip_addr, &uip_lladdr);      uip_ds6_addr_add(&wsn_ip_addr, 0, ADDR_AUTOCONF);    } else {      memcpy(wsn_ip_addr.u8, &nvm_data.wsn_ip_addr,             sizeof(nvm_data.wsn_ip_addr));      uip_ds6_addr_add(&wsn_ip_addr, 0, ADDR_MANUAL);    }    LOG6LBR_6ADDR(INFO, &wsn_ip_addr, "Tentative global IPv6 address ");    memcpy(eth_dft_router.u8, &nvm_data.eth_dft_router,           sizeof(nvm_data.eth_dft_router));    if ( !uip_is_addr_unspecified(&eth_dft_router) ) {      uip_ds6_defrt_add(&eth_dft_router, 0);    }  }                             //End manual configuration#endif#if CETIC_6LBR_ROUTER  //WSN network configuration  memcpy(wsn_net_prefix.u8, &nvm_data.wsn_net_prefix,         sizeof(nvm_data.wsn_net_prefix));  wsn_net_prefix_len = nvm_data.wsn_net_prefix_len;  if((nvm_data.mode & CETIC_MODE_WSN_AUTOCONF) != 0)    //Address auto configuration  {    uip_ipaddr_copy(&wsn_ip_addr, &wsn_net_prefix);    uip_ds6_set_addr_iid(&wsn_ip_addr, &uip_lladdr);    uip_ds6_addr_add(&wsn_ip_addr, 0, ADDR_AUTOCONF);  } else {    memcpy(wsn_ip_addr.u8, &nvm_data.wsn_ip_addr,           sizeof(nvm_data.wsn_ip_addr));    uip_ds6_addr_add(&wsn_ip_addr, 0, ADDR_MANUAL);  }  LOG6LBR_6ADDR(INFO, &wsn_ip_addr, "Tentative global IPv6 address (WSN) ");  //Ethernet network configuration  memcpy(eth_net_prefix.u8, &nvm_data.eth_net_prefix,         sizeof(nvm_data.eth_net_prefix));  memcpy(eth_dft_router.u8, &nvm_data.eth_dft_router,         sizeof(nvm_data.eth_dft_router));  if ( !uip_is_addr_unspecified(&eth_dft_router) ) {    uip_ds6_defrt_add(&eth_dft_router, 0);  }  eth_mac64_addr.addr[0] = eth_mac_addr[0];  eth_mac64_addr.addr[1] = eth_mac_addr[1];  eth_mac64_addr.addr[2] = eth_mac_addr[2];  eth_mac64_addr.addr[3] = CETIC_6LBR_ETH_EXT_A;  eth_mac64_addr.addr[4] = CETIC_6LBR_ETH_EXT_B;  eth_mac64_addr.addr[5] = eth_mac_addr[3];  eth_mac64_addr.addr[6] = eth_mac_addr[4];  eth_mac64_addr.addr[7] = eth_mac_addr[5];  if((nvm_data.mode & CETIC_MODE_ETH_AUTOCONF) != 0)    //Address auto configuration  {    uip_ipaddr_copy(&eth_ip_addr, &eth_net_prefix);    uip_ds6_set_addr_iid(&eth_ip_addr, &eth_mac64_addr);    uip_ds6_addr_add(&eth_ip_addr, 0, ADDR_AUTOCONF);  } else {    memcpy(eth_ip_addr.u8, &nvm_data.eth_ip_addr,           sizeof(nvm_data.eth_ip_addr));    uip_ds6_addr_add(&eth_ip_addr, 0, ADDR_MANUAL);  }  LOG6LBR_6ADDR(INFO, &eth_ip_addr, "Tentative global IPv6 address (ETH) ");  //Ugly hack : in order to set WSN local address as the default address  //We must add it afterwards as uip_ds6_addr_add allocates addr from the end of the list  uip_ds6_addr_rm(local);  uip_create_linklocal_prefix(&eth_ip_local_addr);  uip_ds6_set_addr_iid(&eth_ip_local_addr, &eth_mac64_addr);  uip_ds6_addr_add(&eth_ip_local_addr, 0, ADDR_AUTOCONF);  uip_ds6_addr_add(&wsn_ip_local_addr, 0, ADDR_AUTOCONF);  //Prefix and RA configuration#if UIP_CONF_IPV6_RPL  uint8_t publish = (nvm_data.ra_prefix_flags & CETIC_6LBR_MODE_SEND_PIO) != 0;  uip_ds6_prefix_add(&eth_net_prefix, nvm_data.eth_net_prefix_len, publish,                     nvm_data.ra_prefix_flags,                     nvm_data.ra_prefix_vtime, nvm_data.ra_prefix_ptime);#else  uip_ds6_prefix_add(&eth_net_prefix, nvm_data.eth_net_prefix_len, 0, 0, 0, 0);  uint8_t publish = (nvm_data.ra_prefix_flags & CETIC_6LBR_MODE_SEND_PIO) != 0;//.........这里部分代码省略.........
开发者ID:Mastnest,项目名称:6lbr,代码行数:101,


示例14: uip_process

/*---------------------------------------------------------------------------*/voiduip_process(){  PRINTF("NEW packet/n");  /* Check validity of the IP header. */  if((UIP_IP_BUF->vtc & 0xf0) != 0x60)  { /* IP version and header length. */    PRINTF("Wrong IP Version/n");    goto drop;  }  /*   * Check the size of the packet. If the size reported to us in   * uip_len is smaller the size reported in the IP header, we assume   * that the packet has been corrupted in transit. If the size of   * uip_len is larger than the size reported in the IP packet header,   * the packet has been padded and we set uip_len to the correct   * value..   */  if((UIP_IP_BUF->len[0] << 8) + UIP_IP_BUF->len[1] <= uip_len) {    uip_len = (UIP_IP_BUF->len[0] << 8) + UIP_IP_BUF->len[1] + UIP_IPH_LEN;    /*     * The length reported in the IPv6 header is the     * length of the payload that follows the     * header. However, uIP uses the uip_len variable     * for holding the size of the entire packet,     * including the IP header. For IPv4 this is not a     * problem as the length field in the IPv4 header     * contains the length of the entire packet. But     * for IPv6 we need to add the size of the IPv6     * header (40 bytes).     */  } else {    PRINTF("Wrong Length/n");    goto drop;  }    PRINTF("IPv6 packet received from ");  PRINT6ADDR(&UIP_IP_BUF->srcipaddr);  PRINTF(" to ");  PRINT6ADDR(&UIP_IP_BUF->destipaddr);  PRINTF("/n");  if(uip_is_addr_mcast(&UIP_IP_BUF->srcipaddr)){    PRINTF("Dropping packet, src is mcast/n");    goto drop;  }  /*   * Next header field processing. In IPv6, we can have extension headers,   * if present, the Hop-by-Hop Option must be processed before forwarding   * the packet.   */  uip_next_hdr = &UIP_IP_BUF->proto;  uip_ext_len = 0;  uip_ext_bitmap = 0;  if (*uip_next_hdr == UIP_PROTO_HBHO) {#if UIP_CONF_IPV6_CHECKS    uip_ext_bitmap |= UIP_EXT_HDR_BITMAP_HBHO;#endif /*UIP_CONF_IPV6_CHECKS*/    switch(ext_hdr_options_process()) {      case 0:        /*continue*/        uip_next_hdr = &UIP_EXT_BUF->next;        uip_ext_len += (UIP_EXT_BUF->len << 3) + 8;        break;      case 1:        /*silently discard*/        goto drop;      case 2:        /* send icmp error message (created in ext_hdr_options_process)         * and discard*/        goto send;    }  }  /* TBD Some Parameter problem messages */  if(!uip_ds6_is_my_addr(&UIP_IP_BUF->destipaddr) &&     !uip_ds6_is_my_maddr(&UIP_IP_BUF->destipaddr)) {    if(!uip_is_addr_mcast(&UIP_IP_BUF->destipaddr) &&       !uip_is_addr_link_local(&UIP_IP_BUF->destipaddr) &&       !uip_is_addr_link_local(&UIP_IP_BUF->srcipaddr) &&       !uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr) &&       !uip_is_addr_loopback(&UIP_IP_BUF->destipaddr)) {      /* Check MTU */      if(uip_len > UIP_LINK_MTU) {        uip_icmp6_error_output(ICMP6_PACKET_TOO_BIG, 0, UIP_LINK_MTU);        goto send;      }      /* Check Hop Limit */      if(UIP_IP_BUF->ttl <= 1) {        uip_icmp6_error_output(ICMP6_TIME_EXCEEDED,                               ICMP6_TIME_EXCEED_TRANSIT, 0);        goto send;      }//.........这里部分代码省略.........
开发者ID:Feandil,项目名称:RPL_Gateway,代码行数:101,


示例15: tcpip_ipv6_output

voidtcpip_ipv6_output(void){  struct uip_nd6_neighbor *nbc = NULL;  struct uip_nd6_defrouter *dr = NULL;    if(uip_len == 0)    return;  if(uip_len > UIP_LINK_MTU){    UIP_LOG("tcpip_ipv6_output: Packet to big");    uip_len = 0;    return;  }  if(uip_is_addr_unspecified(&UIP_IP_BUF->destipaddr)){    UIP_LOG("tcpip_ipv6_output: Destination address unspecified");    uip_len = 0;    return;  }  if(!uip_is_addr_mcast(&UIP_IP_BUF->destipaddr)) {    /*If destination is on link */    nbc = NULL;    if(uip_nd6_is_addr_onlink(&UIP_IP_BUF->destipaddr)){      nbc = uip_nd6_nbrcache_lookup(&UIP_IP_BUF->destipaddr);    } else {#if UIP_CONF_ROUTER      /*destination is not on link*/      uip_ipaddr_t ipaddr;      uip_ipaddr_t *next_hop;      /* Try to find the next hop address in the local routing table. */      next_hop = uip_router != NULL ?        uip_router->lookup(&UIP_IP_BUF->destipaddr, &ipaddr) : NULL;      if(next_hop != NULL) {        /* Look for the next hop of the route in the neighbor cache.           Add a cache entry if we can't find it. */        nbc = uip_nd6_nbrcache_lookup(next_hop);        if(nbc == NULL) {          nbc = uip_nd6_nbrcache_add(next_hop, NULL, 1, NO_STATE);        }      } else {#endif /* UIP_CONF_ROUTER */        /* No route found, check if a default router exists and use it then. */        dr = uip_nd6_choose_defrouter();        if(dr != NULL){          nbc = dr->nb;        } else {          /* shall we send a icmp error message destination unreachable ?*/          UIP_LOG("tcpip_ipv6_output: Destination off-link but no router");          uip_len = 0;          return;        }#if UIP_CONF_ROUTER      }#endif /* UIP_CONF_ROUTER */    }    /* there are two cases where the entry logically does not exist:     * 1 it really does not exist. 2 it is in the NO_STATE state */    if (nbc == NULL || nbc->state == NO_STATE) {      if (nbc == NULL) {        /* create neighbor cache entry, original packet is replaced by NS*/        nbc = uip_nd6_nbrcache_add(&UIP_IP_BUF->destipaddr, NULL, 0, INCOMPLETE);      } else {        nbc->state = INCOMPLETE;      }#if UIP_CONF_IPV6_QUEUE_PKT      /* copy outgoing pkt in the queuing buffer for later transmmit */      memcpy(nbc->queue_buf, UIP_IP_BUF, uip_len);      nbc->queue_buf_len = uip_len;#endif      /* RFC4861, 7.2.2:       * "If the source address of the packet prompting the solicitation is the       * same as one of the addresses assigned to the outgoing interface, that       * address SHOULD be placed in the IP Source Address of the outgoing       * solicitation.  Otherwise, any one of the addresses assigned to the       * interface should be used."*/      if(uip_netif_is_addr_my_unicast(&UIP_IP_BUF->srcipaddr)){        uip_nd6_io_ns_output(&UIP_IP_BUF->srcipaddr, NULL, &nbc->ipaddr);      } else {        uip_nd6_io_ns_output(NULL, NULL, &nbc->ipaddr);      }      stimer_set(&(nbc->last_send),                uip_netif_physical_if.retrans_timer / 1000);      nbc->count_send = 1;    } else {      if (nbc->state == INCOMPLETE){        PRINTF("tcpip_ipv6_output: neighbor cache entry incomplete/n");#if UIP_CONF_IPV6_QUEUE_PKT        /* copy outgoing pkt in the queuing buffer for later transmmit and set           the destination neighbor to nbc */        memcpy(nbc->queue_buf, UIP_IP_BUF, uip_len);        nbc->queue_buf_len = uip_len;        uip_len = 0;#endif /*UIP_CONF_IPV6_QUEUE_PKT*/        return;      }      /* if running NUD (nbc->state == STALE, DELAY, or PROBE ) keep         sending in parallel see rfc 4861 Node behavior in section 7.7.3*/	 //.........这里部分代码省略.........
开发者ID:EDAyele,项目名称:ptunes,代码行数:101,


示例16: tcpip_ipv6_output

voidtcpip_ipv6_output(void){  uip_ds6_nbr_t *nbr = NULL;  uip_ipaddr_t *nexthop;  if(uip_len == 0) {    return;  }  if(uip_len > UIP_LINK_MTU) {    UIP_LOG("tcpip_ipv6_output: Packet to big");    uip_clear_buf();    return;  }  if(uip_is_addr_unspecified(&UIP_IP_BUF->destipaddr)){    UIP_LOG("tcpip_ipv6_output: Destination address unspecified");    uip_clear_buf();    return;  }  if(!uip_is_addr_mcast(&UIP_IP_BUF->destipaddr)) {    /* Next hop determination */    nbr = NULL;    /* We first check if the destination address is on our immediate       link. If so, we simply use the destination address as our       nexthop address. */    if(uip_ds6_is_addr_onlink(&UIP_IP_BUF->destipaddr)){      nexthop = &UIP_IP_BUF->destipaddr;    } else {      uip_ds6_route_t *route;      /* Check if we have a route to the destination address. */      route = uip_ds6_route_lookup(&UIP_IP_BUF->destipaddr);      /* No route was found - we send to the default route instead. */      if(route == NULL) {        PRINTF("tcpip_ipv6_output: no route found, using default route/n");        nexthop = uip_ds6_defrt_choose();        if(nexthop == NULL) {#ifdef UIP_FALLBACK_INTERFACE	  PRINTF("FALLBACK: removing ext hdrs & setting proto %d %d/n", 		 uip_ext_len, *((uint8_t *)UIP_IP_BUF + 40));	  if(uip_ext_len > 0) {	    extern void remove_ext_hdr(void);	    uint8_t proto = *((uint8_t *)UIP_IP_BUF + 40);	    remove_ext_hdr();	    /* This should be copied from the ext header... */	    UIP_IP_BUF->proto = proto;	  }	  /* Inform the other end that the destination is not reachable. If it's	   * not informed routes might get lost unexpectedly until there's a need	   * to send a new packet to the peer */	  if(UIP_FALLBACK_INTERFACE.output() < 0) {	    PRINTF("FALLBACK: output error. Reporting DST UNREACH/n");	    uip_icmp6_error_output(ICMP6_DST_UNREACH, ICMP6_DST_UNREACH_ADDR, 0);	    uip_flags = 0;	    tcpip_ipv6_output();	    return;	  }#else          PRINTF("tcpip_ipv6_output: Destination off-link but no route/n");#endif /* !UIP_FALLBACK_INTERFACE */          uip_clear_buf();          return;        }      } else {        /* A route was found, so we look up the nexthop neighbor for           the route. */        nexthop = uip_ds6_route_nexthop(route);        /* If the nexthop is dead, for example because the neighbor           never responded to link-layer acks, we drop its route. */        if(nexthop == NULL) {#if UIP_CONF_IPV6_RPL          /* If we are running RPL, and if we are the root of the             network, we'll trigger a global repair berfore we remove             the route. */          rpl_dag_t *dag;          rpl_instance_t *instance;          dag = (rpl_dag_t *)route->state.dag;          if(dag != NULL) {            instance = dag->instance;            rpl_repair_root(instance->instance_id);          }#endif /* UIP_CONF_IPV6_RPL */          uip_ds6_route_rm(route);          /* We don't have a nexthop to send the packet to, so we drop             it. */          return;        }      }#if TCPIP_CONF_ANNOTATE_TRANSMISSIONS      if(nexthop != NULL) {        static uint8_t annotate_last;//.........这里部分代码省略.........
开发者ID:1847123212,项目名称:ampm_contiki_wisun,代码行数:101,


示例17: ns_input

static voidns_input(void){    uint8_t flags;#if CETIC_6LBR_SMARTBRIDGE    uip_ds6_route_t * route;#endif    uip_ipaddr_t tgtipaddr;    PRINTF("Received NS from ");    PRINT6ADDR(&UIP_IP_BUF->srcipaddr);    PRINTF(" to ");    PRINT6ADDR(&UIP_IP_BUF->destipaddr);    PRINTF(" with target address");    PRINT6ADDR((uip_ipaddr_t *) (&UIP_ND6_NS_BUF->tgtipaddr));    PRINTF("/n");    UIP_STAT(++uip_stat.nd6.recv);#if UIP_CONF_IPV6_CHECKS    if((UIP_IP_BUF->ttl != UIP_ND6_HOP_LIMIT) ||            (uip_is_addr_mcast(&UIP_ND6_NS_BUF->tgtipaddr)) ||            (UIP_ICMP_BUF->icode != 0)) {        PRINTF("NS received is bad/n");        goto discard;    }#endif /* UIP_CONF_IPV6_CHECKS */    /* Options processing */    nd6_opt_llao = NULL;    nd6_opt_offset = UIP_ND6_NS_LEN;    while(uip_l3_icmp_hdr_len + nd6_opt_offset < uip_len) {#if UIP_CONF_IPV6_CHECKS        if(UIP_ND6_OPT_HDR_BUF->len == 0) {            PRINTF("NS received is bad/n");            goto discard;        }#endif /* UIP_CONF_IPV6_CHECKS */        switch (UIP_ND6_OPT_HDR_BUF->type) {        case UIP_ND6_OPT_SLLAO:            nd6_opt_llao = &uip_buf[uip_l2_l3_icmp_hdr_len + nd6_opt_offset];#if UIP_CONF_IPV6_CHECKS            /* There must be NO option in a DAD NS */            if(uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) {                PRINTF("NS received is bad/n");                goto discard;            } else {#endif /*UIP_CONF_IPV6_CHECKS */                nbr = uip_ds6_nbr_lookup(&UIP_IP_BUF->srcipaddr);                if(nbr == NULL) {                    /* Copy link address to a uip_lladdr_t first                     * to ensure the second argument to uip_ds6_nbr_add is word-aligned */                    uip_lladdr_t lladdr;                    memcpy(&lladdr, &nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], UIP_LLADDR_LEN);                    uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr, &lladdr, 0, NBR_STALE);                } else {                    uip_lladdr_t *lladdr = (uip_lladdr_t *)uip_ds6_nbr_get_ll(nbr);                    if(memcmp(&nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET],                              lladdr, UIP_LLADDR_LEN) != 0) {                        memcpy(lladdr, &nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], UIP_LLADDR_LEN);                        nbr->state = NBR_STALE;                    } else {                        if(nbr->state == NBR_INCOMPLETE) {                            nbr->state = NBR_STALE;                        }                    }                }#if UIP_CONF_IPV6_CHECKS            }#endif /*UIP_CONF_IPV6_CHECKS */            break;        default:            PRINTF("ND option not supported in NS");            break;        }        nd6_opt_offset += (UIP_ND6_OPT_HDR_BUF->len << 3);    }    memcpy(&tgtipaddr, &UIP_ND6_NS_BUF->tgtipaddr, sizeof(tgtipaddr));    addr = uip_ds6_addr_lookup(&tgtipaddr);#if CETIC_6LBR_SMARTBRIDGE    //ND Proxy implementation    if ( addr == NULL ) {        if ( (route = uip_ds6_route_lookup(&tgtipaddr)) != NULL ) {            if(uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) {                /* DAD CASE */                uip_create_linklocal_allnodes_mcast(&tgtipaddr);                uip_ipaddr_copy(&UIP_IP_BUF->srcipaddr, &tgtipaddr);                flags = UIP_ND6_NA_FLAG_OVERRIDE;                goto create_na;            } else {                uip_ipaddr_copy(&UIP_IP_BUF->destipaddr, &UIP_IP_BUF->srcipaddr);                uip_ipaddr_copy(&UIP_IP_BUF->srcipaddr, &tgtipaddr);                flags = UIP_ND6_NA_FLAG_SOLICITED | UIP_ND6_NA_FLAG_OVERRIDE;                goto create_na;            }        }    }#endif    if(addr != NULL) {#if UIP_ND6_DEF_MAXDADNS > 0//.........这里部分代码省略.........
开发者ID:drandreas,项目名称:6lbr,代码行数:101,


示例18: tcpip_ipv6_output

voidtcpip_ipv6_output(void){    static uip_ds6_nbr_t *nbr = NULL;    static uip_ipaddr_t* nexthop;    if(uip_len == 0) {        return;    }    if(uip_len > UIP_LINK_MTU) {        UIP_LOG("tcpip_ipv6_output: Packet to big");        uip_len = 0;        return;    }    if(uip_is_addr_unspecified(&UIP_IP_BUF->destipaddr)) {        UIP_LOG("tcpip_ipv6_output: Destination address unspecified");        uip_len = 0;        return;    }    if(!uip_is_addr_mcast(&UIP_IP_BUF->destipaddr)) {        /* Next hop determination */        nbr = NULL;        if(uip_ds6_is_addr_onlink(&UIP_IP_BUF->destipaddr)) {            nexthop = &UIP_IP_BUF->destipaddr;        } else {            uip_ds6_route_t* locrt;            locrt = uip_ds6_route_lookup(&UIP_IP_BUF->destipaddr);            if(locrt == NULL) {                if((nexthop = uip_ds6_defrt_choose()) == NULL) {#ifdef UIP_FALLBACK_INTERFACE                    UIP_FALLBACK_INTERFACE.output();#else                    PRINTF("tcpip_ipv6_output: Destination off-link but no route/n");#endif                    uip_len = 0;                    return;                }            } else {                nexthop = &locrt->nexthop;            }        }        /* end of next hop determination */        if((nbr = uip_ds6_nbr_lookup(nexthop)) == NULL) {            //      printf("add1 %d/n", nexthop->u8[15]);            if((nbr = uip_ds6_nbr_add(nexthop, NULL, 0, NBR_INCOMPLETE)) == NULL) {                //        printf("add n/n");                uip_len = 0;                return;            } else {#if UIP_CONF_IPV6_QUEUE_PKT                /* copy outgoing pkt in the queuing buffer for later transmmit */                if(uip_packetqueue_alloc(&nbr->packethandle, UIP_DS6_NBR_PACKET_LIFETIME) != NULL) {                    memcpy(uip_packetqueue_buf(&nbr->packethandle), UIP_IP_BUF, uip_len);                    uip_packetqueue_set_buflen(&nbr->packethandle, uip_len);                }#endif                /* RFC4861, 7.2.2:                 * "If the source address of the packet prompting the solicitation is the                 * same as one of the addresses assigned to the outgoing interface, that                 * address SHOULD be placed in the IP Source Address of the outgoing                 * solicitation.  Otherwise, any one of the addresses assigned to the                 * interface should be used."*/                if(uip_ds6_is_my_addr(&UIP_IP_BUF->srcipaddr)) {                    uip_nd6_ns_output(&UIP_IP_BUF->srcipaddr, NULL, &nbr->ipaddr);                } else {                    uip_nd6_ns_output(NULL, NULL, &nbr->ipaddr);                }                stimer_set(&(nbr->sendns), uip_ds6_if.retrans_timer / 1000);                nbr->nscount = 1;            }        } else {            if(nbr->state == NBR_INCOMPLETE) {                PRINTF("tcpip_ipv6_output: nbr cache entry incomplete/n");#if UIP_CONF_IPV6_QUEUE_PKT                /* copy outgoing pkt in the queuing buffer for later transmmit and set                   the destination nbr to nbr */                if(uip_packetqueue_alloc(&nbr->packethandle, UIP_DS6_NBR_PACKET_LIFETIME) != NULL) {                    memcpy(uip_packetqueue_buf(&nbr->packethandle), UIP_IP_BUF, uip_len);                    uip_packetqueue_set_buflen(&nbr->packethandle, uip_len);                }                /*        memcpy(nbr->queue_buf, UIP_IP_BUF, uip_len);                          nbr->queue_buf_len = uip_len;*/                uip_len = 0;#endif /*UIP_CONF_IPV6_QUEUE_PKT*/                return;            }            /* if running NUD (nbc->state == STALE, DELAY, or PROBE ) keep               sending in parallel see rfc 4861 Node behavior in section 7.7.3*/            if(nbr->state == NBR_STALE) {                nbr->state = NBR_DELAY;                stimer_set(&(nbr->reachable),                           UIP_ND6_DELAY_FIRST_PROBE_TIME);                nbr->nscount = 0;                PRINTF("tcpip_ipv6_output: nbr cache entry stale moving to delay/n");            }            stimer_set(&(nbr->sendns),//.........这里部分代码省略.........
开发者ID:brycel,项目名称:ContikiCC2530Port,代码行数:101,


示例19: rs_input

/*---------------------------------------------------------------------------*/static voidrs_input(void){    PRINTF("Received RS from");    PRINT6ADDR(&UIP_IP_BUF->srcipaddr);    PRINTF("to");    PRINT6ADDR(&UIP_IP_BUF->destipaddr);    PRINTF("/n");    UIP_STAT(++uip_stat.nd6.recv);#if UIP_CONF_IPV6_CHECKS    /*     * Check hop limit / icmp code     * target address must not be multicast     * if the NA is solicited, dest must not be multicast     */    if((UIP_IP_BUF->ttl != UIP_ND6_HOP_LIMIT) || (UIP_ICMP_BUF->icode != 0)) {        PRINTF("RS received is bad/n");        goto discard;    }#endif /*UIP_CONF_IPV6_CHECKS */    /* Only valid option is Source Link-Layer Address option any thing       else is discarded */    nd6_opt_offset = UIP_ND6_RS_LEN;    nd6_opt_llao = NULL;    while(uip_l3_icmp_hdr_len + nd6_opt_offset < uip_len) {#if UIP_CONF_IPV6_CHECKS        if(UIP_ND6_OPT_HDR_BUF->len == 0) {            PRINTF("RS received is bad/n");            goto discard;        }#endif /*UIP_CONF_IPV6_CHECKS */        switch (UIP_ND6_OPT_HDR_BUF->type) {        case UIP_ND6_OPT_SLLAO:            nd6_opt_llao = (uint8_t *)UIP_ND6_OPT_HDR_BUF;            break;        default:            PRINTF("ND option not supported in RS/n");            break;        }        nd6_opt_offset += (UIP_ND6_OPT_HDR_BUF->len << 3);    }    /* Options processing: only SLLAO */    if(nd6_opt_llao != NULL) {#if UIP_CONF_IPV6_CHECKS        if(uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) {            PRINTF("RS received is bad/n");            goto discard;        } else {#endif /*UIP_CONF_IPV6_CHECKS */            /* Copy link address to a uip_lladdr_t first             * to ensure the second argument to uip_ds6_nbr_add is word-aligned */            uip_lladdr_t lladdr;            memcpy(&lladdr, &nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET], UIP_LLADDR_LEN);            if((nbr = uip_ds6_nbr_lookup(&UIP_IP_BUF->srcipaddr)) == NULL) {                /* we need to add the neighbor */                uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr, &lladdr, 0, NBR_STALE);            } else {                /* If LL address changed, set neighbor state to stale */                if(memcmp(&nd6_opt_llao[UIP_ND6_OPT_DATA_OFFSET],                          uip_ds6_nbr_get_ll(nbr), UIP_LLADDR_LEN) != 0) {                    uip_ds6_nbr_t nbr_data = *nbr;                    uip_ds6_nbr_rm(nbr);                    nbr = uip_ds6_nbr_add(&UIP_IP_BUF->srcipaddr, &lladdr, 0, NBR_STALE);                    nbr->reachable = nbr_data.reachable;                    nbr->sendns = nbr_data.sendns;                    nbr->nscount = nbr_data.nscount;                }                nbr->isrouter = 0;            }#if UIP_CONF_IPV6_CHECKS        }#endif /*UIP_CONF_IPV6_CHECKS */    }    /* Schedule a sollicited RA */    uip_ds6_send_ra_sollicited();discard:    uip_clear_buf();    return;}
开发者ID:drandreas,项目名称:6lbr,代码行数:87,


示例20: tcpip_ipv6_output

voidtcpip_ipv6_output(void){  uip_ds6_nbr_t *nbr = NULL;  uip_ipaddr_t *nexthop;  uip_ds6_route_t *route = NULL;  if(uip_len == 0) {    return;  }  PRINTF("IPv6 packet send from ");  PRINT6ADDR(&UIP_IP_BUF->srcipaddr);  PRINTF(" to ");  PRINT6ADDR(&UIP_IP_BUF->destipaddr);  PRINTF("/n");  if(uip_len > UIP_LINK_MTU) {    UIP_LOG("tcpip_ipv6_output: Packet to big");    uip_clear_buf();    return;  }  if(uip_is_addr_unspecified(&UIP_IP_BUF->destipaddr)){    UIP_LOG("tcpip_ipv6_output: Destination address unspecified");    uip_clear_buf();    return;  }  if(!uip_is_addr_mcast(&UIP_IP_BUF->destipaddr)) {    /* Next hop determination */    nbr = NULL;    /* We first check if the destination address is on our immediate       link. If so, we simply use the destination address as our       nexthop address. */    if(uip_ds6_is_addr_onlink(&UIP_IP_BUF->destipaddr)){      nexthop = &UIP_IP_BUF->destipaddr;    } else {      /* Check if we have a route to the destination address. */      route = uip_ds6_route_lookup(&UIP_IP_BUF->destipaddr);      /* No route was found - we send to the default route instead. */      if(route == NULL) {#if CETIC_6LBR_SMARTBRIDGE        if (uip_ipaddr_prefixcmp(&wsn_net_prefix, &UIP_IP_BUF->destipaddr, 64)) {          /* In smart-bridge mode, there is no route towards hosts on the Ethernet side          Therefore we have to check the destination and assume the host is on-link */          nexthop = &UIP_IP_BUF->destipaddr;        } else#endif#if CETIC_6LBR_ROUTER && UIP_CONF_IPV6_RPL        if (is_dodag_root() && uip_ipaddr_prefixcmp(&wsn_net_prefix, &UIP_IP_BUF->destipaddr, 64)) {          //In router mode, we drop packets towards unknown mote          PRINTF("Dropping wsn packet with no route/n");          uip_len = 0;          return;        } else#endif#if CETIC_6LBR_IP64        if(ip64_addr_is_ip64(&UIP_IP_BUF->destipaddr)) {#if UIP_CONF_IPV6_RPL          rpl_remove_header();#endif          IP64_CONF_UIP_FALLBACK_INTERFACE.output();          uip_len = 0;          uip_ext_len = 0;          return;        }        else#endif        {          PRINTF("tcpip_ipv6_output: no route found, using default route/n");          nexthop = uip_ds6_defrt_choose();        }        if(nexthop == NULL) {#ifdef UIP_FALLBACK_INTERFACE	  PRINTF("FALLBACK: removing ext hdrs & setting proto %d %d/n", 		 uip_ext_len, *((uint8_t *)UIP_IP_BUF + 40));	  if(uip_ext_len > 0) {	    extern void remove_ext_hdr(void);	    uint8_t proto = *((uint8_t *)UIP_IP_BUF + 40);	    remove_ext_hdr();	    /* This should be copied from the ext header... */	    UIP_IP_BUF->proto = proto;	  }	  UIP_FALLBACK_INTERFACE.output();#else          PRINTF("tcpip_ipv6_output: Destination off-link but no route/n");#endif /* !UIP_FALLBACK_INTERFACE */          uip_clear_buf();          return;        }      } else {        /* A route was found, so we look up the nexthop neighbor for           the route. */        nexthop = uip_ds6_route_nexthop(route);        /* If the nexthop is dead, for example because the neighbor//.........这里部分代码省略.........
开发者ID:adutze,项目名称:6lbr,代码行数:101,


示例21: tcpip_ipv6_output

voidtcpip_ipv6_output(void){  uip_ds6_nbr_t *nbr = NULL;  uip_ipaddr_t* nexthop;    if(uip_len == 0) {    return;  }    if(uip_len > UIP_LINK_MTU) {    UIP_LOG("tcpip_ipv6_output: Packet to big");    uip_len = 0;    return;  }  if(uip_is_addr_unspecified(&UIP_IP_BUF->destipaddr)){    UIP_LOG("tcpip_ipv6_output: Destination address unspecified");    uip_len = 0;    return;  }  if(!uip_is_addr_mcast(&UIP_IP_BUF->destipaddr)) {    /* Next hop determination */    nbr = NULL;    if(uip_ds6_is_addr_onlink(&UIP_IP_BUF->destipaddr)){      nexthop = &UIP_IP_BUF->destipaddr;    } else {      uip_ds6_route_t* locrt;      locrt = uip_ds6_route_lookup(&UIP_IP_BUF->destipaddr);      if(locrt == NULL) {        if((nexthop = uip_ds6_defrt_choose()) == NULL) {#ifdef UIP_FALLBACK_INTERFACE	  UIP_FALLBACK_INTERFACE.output();#else          PRINTF("tcpip_ipv6_output: Destination off-link but no route/n");#endif          uip_len = 0;          return;        }      } else {        nexthop = &locrt->nexthop;      }    }    /* end of next hop determination */   // if((nbr = uip_ds6_nbr_lookup(nexthop)) == NULL) {	if(0){	/* 	 * I-D.ietf.6lowpan-nd 5.7: As all prefixes but the link-local prefix are	 * always assumed to be off-link, multicast-based address resolution between	 * neighbors is not needed.	 * In addition, there are neither INCOMPLETE, STALE, DELAY, nor PROBE NCEs 	 * in 6LoWPAN-ND.	 */			return;    } else {    	tcpip_output(&(nbr->lladdr));      uip_len = 0;      return;    }  }     /*multicast IP destination address */  tcpip_output(NULL);  uip_len = 0;  uip_ext_len = 0;   }
开发者ID:serflosa,项目名称:torrija_gateway,代码行数:66,


示例22: cetic_6lbr_init

/*---------------------------------------------------------------------------*/voidcetic_6lbr_init(void){  uip_ds6_addr_t *local = uip_ds6_get_link_local(-1);  uip_ipaddr_copy(&wsn_ip_local_addr, &local->ipaddr);  LOG6LBR_6ADDR(INFO, &wsn_ip_local_addr, "Tentative local IPv6 address ");  eth_mac64_addr.addr[0] = eth_mac_addr[0];  eth_mac64_addr.addr[1] = eth_mac_addr[1];  eth_mac64_addr.addr[2] = eth_mac_addr[2];  eth_mac64_addr.addr[3] = CETIC_6LBR_ETH_EXT_A;  eth_mac64_addr.addr[4] = CETIC_6LBR_ETH_EXT_B;  eth_mac64_addr.addr[5] = eth_mac_addr[3];  eth_mac64_addr.addr[6] = eth_mac_addr[4];  eth_mac64_addr.addr[7] = eth_mac_addr[5];#if CETIC_6LBR_SMARTBRIDGE  if((nvm_data.mode & CETIC_MODE_WAIT_RA_MASK) == 0)    //Manual configuration  {    memcpy(wsn_net_prefix.u8, &nvm_data.wsn_net_prefix,           sizeof(nvm_data.wsn_net_prefix));    wsn_net_prefix_len = nvm_data.wsn_net_prefix_len;    if((nvm_data.mode & CETIC_MODE_WSN_AUTOCONF) != 0)  //Address auto configuration    {      uip_ipaddr_copy(&wsn_ip_addr, &wsn_net_prefix);      uip_ds6_set_addr_iid(&wsn_ip_addr, &uip_lladdr);      uip_ds6_addr_add(&wsn_ip_addr, 0, ADDR_AUTOCONF);    } else {      memcpy(wsn_ip_addr.u8, &nvm_data.wsn_ip_addr,             sizeof(nvm_data.wsn_ip_addr));      uip_ds6_addr_add(&wsn_ip_addr, 0, ADDR_MANUAL);    }    LOG6LBR_6ADDR(INFO, &wsn_ip_addr, "Tentative global IPv6 address ");    memcpy(eth_dft_router.u8, &nvm_data.eth_dft_router,           sizeof(nvm_data.eth_dft_router));    if ( !uip_is_addr_unspecified(&eth_dft_router) ) {      uip_ds6_defrt_add(&eth_dft_router, 0);    }    uip_ipaddr_t dns;    memcpy(dns.u8, &nvm_data.dns_server,           sizeof(nvm_data.dns_server));    uip_nameserver_update(&dns, UIP_NAMESERVER_INFINITE_LIFETIME);  } else {                            //End manual configuration    uip_create_unspecified(&wsn_net_prefix);    wsn_net_prefix_len = 0;    uip_create_unspecified(&wsn_ip_addr);  }#endif#if CETIC_6LBR_ROUTER  //WSN network configuration  memcpy(wsn_net_prefix.u8, &nvm_data.wsn_net_prefix,         sizeof(nvm_data.wsn_net_prefix));  wsn_net_prefix_len = nvm_data.wsn_net_prefix_len;  if((nvm_data.mode & CETIC_MODE_WSN_AUTOCONF) != 0)    //Address auto configuration  {    uip_ipaddr_copy(&wsn_ip_addr, &wsn_net_prefix);    uip_ds6_set_addr_iid(&wsn_ip_addr, &uip_lladdr);    uip_ds6_addr_add(&wsn_ip_addr, 0, ADDR_AUTOCONF);  } else {    memcpy(wsn_ip_addr.u8, &nvm_data.wsn_ip_addr,           sizeof(nvm_data.wsn_ip_addr));    uip_ds6_addr_add(&wsn_ip_addr, 0, ADDR_MANUAL);  }  LOG6LBR_6ADDR(INFO, &wsn_ip_addr, "Tentative global IPv6 address (WSN) ");  uip_ipaddr_t dns;  memcpy(dns.u8, &nvm_data.dns_server,         sizeof(nvm_data.dns_server));  uip_nameserver_update(&dns, UIP_NAMESERVER_INFINITE_LIFETIME);  //Ethernet network configuration  memcpy(eth_net_prefix.u8, &nvm_data.eth_net_prefix,         sizeof(nvm_data.eth_net_prefix));  memcpy(eth_dft_router.u8, &nvm_data.eth_dft_router,         sizeof(nvm_data.eth_dft_router));  if ( !uip_is_addr_unspecified(&eth_dft_router) ) {    uip_ds6_defrt_add(&eth_dft_router, 0);  }  if((nvm_data.mode & CETIC_MODE_ETH_AUTOCONF) != 0)    //Address auto configuration  {    uip_ipaddr_copy(&eth_ip_addr, &eth_net_prefix);    uip_ds6_set_addr_iid(&eth_ip_addr, &eth_mac64_addr);    uip_ds6_addr_add(&eth_ip_addr, 0, ADDR_AUTOCONF);  } else {    memcpy(eth_ip_addr.u8, &nvm_data.eth_ip_addr,           sizeof(nvm_data.eth_ip_addr));    uip_ds6_addr_add(&eth_ip_addr, 0, ADDR_MANUAL);  }  LOG6LBR_6ADDR(INFO, &eth_ip_addr, "Tentative global IPv6 address (ETH) ");  //Ugly hack : in order to set WSN local address as the default address  //We must add it afterwards as uip_ds6_addr_add allocates addr from the end of the list  uip_ds6_addr_rm(local);//.........这里部分代码省略.........
开发者ID:kamejoko80,项目名称:6lbr,代码行数:101,


示例23: tcpip_ipv6_output

voidtcpip_ipv6_output(void){    uip_ds6_nbr_t *nbr = NULL;    uip_ipaddr_t *nexthop;    if(uip_len == 0) {        return;    }    if(uip_len > UIP_LINK_MTU) {        UIP_LOG("tcpip_ipv6_output: Packet to big");        uip_len = 0;        return;    }    if(uip_is_addr_unspecified(&UIP_IP_BUF->destipaddr)) {        UIP_LOG("tcpip_ipv6_output: Destination address unspecified");        uip_len = 0;        return;    }    if(!uip_is_addr_mcast(&UIP_IP_BUF->destipaddr)) {        /* Next hop determination */        nbr = NULL;        if(uip_ds6_is_addr_onlink(&UIP_IP_BUF->destipaddr)) {            nexthop = &UIP_IP_BUF->destipaddr;        } else {            uip_ds6_route_t* locrt;            locrt = uip_ds6_route_lookup(&UIP_IP_BUF->destipaddr);            if(locrt == NULL) {                if((nexthop = uip_ds6_defrt_choose()) == NULL) {#ifdef UIP_FALLBACK_INTERFACE                    PRINTF("FALLBACK: removing ext hdrs & setting proto %d %d/n",                           uip_ext_len, *((uint8_t *)UIP_IP_BUF + 40));                    if(uip_ext_len > 0) {                        extern void remove_ext_hdr(void);                        uint8_t proto = *((uint8_t *)UIP_IP_BUF + 40);                        remove_ext_hdr();                        /* This should be copied from the ext header... */                        UIP_IP_BUF->proto = proto;                    }                    UIP_FALLBACK_INTERFACE.output();#else                    PRINTF("tcpip_ipv6_output: Destination off-link but no route/n");#endif /* !UIP_FALLBACK_INTERFACE */                    uip_len = 0;                    return;                }            } else {                nexthop = &locrt->nexthop;            }#if TCPIP_CONF_ANNOTATE_TRANSMISSIONS            if(nexthop != NULL) {                printf("#L %u 1; red/n", nexthop->u8[sizeof(uip_ipaddr_t) - 1]);            }#endif /* TCPIP_CONF_ANNOTATE_TRANSMISSIONS */        }        /* End of next hop determination */#if UIP_CONF_IPV6_RPL        if(rpl_update_header_final(nexthop)) {            uip_len = 0;            return;        }#endif /* UIP_CONF_IPV6_RPL */        if((nbr = uip_ds6_nbr_lookup(nexthop)) == NULL) {#if UIP_ND6_SEND_NA            if((nbr = uip_ds6_nbr_add(nexthop, NULL, 0, NBR_INCOMPLETE)) == NULL) {                uip_len = 0;                return;            } else {#if UIP_CONF_IPV6_QUEUE_PKT                /* Copy outgoing pkt in the queuing buffer for later transmit. */                if(uip_packetqueue_alloc(&nbr->packethandle, UIP_DS6_NBR_PACKET_LIFETIME) != NULL) {                    memcpy(uip_packetqueue_buf(&nbr->packethandle), UIP_IP_BUF, uip_len);                    uip_packetqueue_set_buflen(&nbr->packethandle, uip_len);                }#endif                /* RFC4861, 7.2.2:                 * "If the source address of the packet prompting the solicitation is the                 * same as one of the addresses assigned to the outgoing interface, that                 * address SHOULD be placed in the IP Source Address of the outgoing                 * solicitation.  Otherwise, any one of the addresses assigned to the                 * interface should be used."*/                if(uip_ds6_is_my_addr(&UIP_IP_BUF->srcipaddr)) {                    uip_nd6_ns_output(&UIP_IP_BUF->srcipaddr, NULL, &nbr->ipaddr);                } else {                    uip_nd6_ns_output(NULL, NULL, &nbr->ipaddr);                }                stimer_set(&nbr->sendns, uip_ds6_if.retrans_timer / 1000);                nbr->nscount = 1;            }#endif /* UIP_ND6_SEND_NA */        } else {#if UIP_ND6_SEND_NA            if(nbr->state == NBR_INCOMPLETE) {                PRINTF("tcpip_ipv6_output: nbr cache entry incomplete/n");#if UIP_CONF_IPV6_QUEUE_PKT                /* Copy outgoing pkt in the queuing buffer for later transmit and set//.........这里部分代码省略.........
开发者ID:kenog,项目名称:contiki-inga,代码行数:101,



注:本文中的uip_is_addr_unspecified函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ uip_listen函数代码示例
C++ uip_is_addr_mcast函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。