/*---------------------------------------------------------------------------*/ PROCESS_THREAD(unicast_sender_process, ev, data) { static struct etimer periodic_timer; static struct etimer send_timer; uip_ipaddr_t global_ipaddr; PROCESS_BEGIN(); printf("App: %u starting\n", node_id); uip_ip6addr(&root_ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 1); if(node_id == ROOT_ID) { memcpy(&global_ipaddr, &root_ipaddr, 16); uip_ds6_addr_add(&global_ipaddr, 0, ADDR_MANUAL); rpl_dag_t *dag = rpl_set_root(RPL_DEFAULT_INSTANCE, &global_ipaddr); rpl_set_prefix(dag, &global_ipaddr, 64); } else { uip_ip6addr(&global_ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&global_ipaddr, &uip_lladdr); uip_ds6_addr_add(&global_ipaddr, 0, ADDR_AUTOCONF); } orpl_init(&global_ipaddr, node_id == ROOT_ID, 1); simple_udp_register(&unicast_connection, UDP_PORT, NULL, UDP_PORT, receiver); if(node_id == ROOT_ID) { NETSTACK_RDC.off(1); } else { etimer_set(&periodic_timer, SEND_INTERVAL); while(1) { etimer_set(&send_timer, random_rand() % (SEND_INTERVAL)); PROCESS_WAIT_UNTIL(etimer_expired(&send_timer)); if(orpl_current_edc() != 0xffff) { app_send_to(ROOT_ID); } else { printf("App: not in DODAG\n"); } PROCESS_WAIT_UNTIL(etimer_expired(&periodic_timer)); etimer_reset(&periodic_timer); } } PROCESS_END(); }
/*---------------------------------------------------------------------------*/ PROCESS_THREAD(udp_server_process, ev, data) { #if UIP_CONF_ROUTER uip_ipaddr_t ipaddr; #endif /* UIP_CONF_ROUTER */ PROCESS_BEGIN(); PRINTF("UDP server started\n"); #if UIP_CONF_ROUTER uip_ip6addr(&ipaddr, UIP_DS6_DEFAULT_PREFIX, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); #endif /* UIP_CONF_ROUTER */ print_local_addresses(); server_conn = udp_new(NULL, UIP_HTONS(3001), NULL); udp_bind(server_conn, UIP_HTONS(3000)); while(1) { PROCESS_YIELD(); if(ev == tcpip_event) { tcpip_handler(); } } PROCESS_END(); }
/*---------------------------------------------------------------------------*/ PROCESS_THREAD(udp_server_process, ev, data) { #if UIP_CONF_ROUTER uip_ipaddr_t ipaddr; #endif /* UIP_CONF_ROUTER */ PROCESS_BEGIN(); PRINTF("UDP server started\n"); #if RESOLV_CONF_SUPPORTS_MDNS resolv_set_hostname("contiki-udp-server"); #endif #if UIP_CONF_ROUTER uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); #endif /* UIP_CONF_ROUTER */ print_local_addresses(); server_conn = udp_new(NULL, UIP_HTONS(3001), NULL); udp_bind(server_conn, UIP_HTONS(3000)); while(1) { PROCESS_YIELD(); if(ev == tcpip_event) { tcpip_handler(); } } PROCESS_END(); }
/*---------------------------------------------------------------------------*/ void uip_ds6_init(void) { PRINTF("Init of IPv6 data structures\n"); PRINTF("%u neighbors\n%u default routers\n%u prefixes\n%u routes\n%u unicast addresses\n%u multicast addresses\n%u anycast addresses\n", UIP_DS6_NBR_NB, UIP_DS6_DEFRT_NB, UIP_DS6_PREFIX_NB, UIP_DS6_ROUTE_NB, UIP_DS6_ADDR_NB, UIP_DS6_MADDR_NB, UIP_DS6_AADDR_NB); memset(uip_ds6_prefix_list, 0, sizeof(uip_ds6_prefix_list)); memset(&uip_ds6_if, 0, sizeof(uip_ds6_if)); memset(uip_ds6_routing_table, 0, sizeof(uip_ds6_routing_table)); /* Set interface parameters */ uip_ds6_if.link_mtu = UIP_LINK_MTU; uip_ds6_if.cur_hop_limit = UIP_TTL; uip_ds6_if.maxdadns = 0; /* Create link local address, prefix, multicast addresses, anycast addresses */ uip_create_linklocal_prefix(&loc_fipaddr); uip_ds6_prefix_add(&loc_fipaddr, UIP_DEFAULT_PREFIX_LEN, 0, 0, 0, 0); uip_ds6_set_addr_iid(&loc_fipaddr, &uip_lladdr); uip_ds6_addr_add(&loc_fipaddr, 0, ADDR_AUTOCONF); uip_create_linklocal_allnodes_mcast(&loc_fipaddr); uip_ds6_maddr_add(&loc_fipaddr); uip_create_linklocal_allrouters_mcast(&loc_fipaddr); uip_ds6_maddr_add(&loc_fipaddr); PRINTF("DS: init set timer to %u\n",UIP_DS6_PERIOD); return; }
//**************************************************************************************************************************************************// PROCESS_THREAD(RSSI_SCAN, ev, data) { static struct etimer rssitimer; static struct rtimer rt; PROCESS_BEGIN(); // Set the local address uip_ip6addr(&my_addr, 0, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&my_addr, &uip_lladdr); uip_ds6_addr_add(&my_addr, 0, ADDR_MANUAL); //listening to port 3001 from beacons and sensors listen_conn = udp_new(NULL, UIP_HTONS(0), NULL); //Server Listen connection is bound too port 4001 udp_bind(listen_conn, UIP_HTONS(RECEIVER_PORT)); while(1) { //printf("inside while\n\r"); //etimer_set(&rssitimer, CLOCK_SECOND/200); //GPIO_SET_PIN(GPIO_C_BASE, GPIO_PIN_MASK(1)); //PROCESS_YIELD(); PROCESS_WAIT_EVENT_UNTIL(ev == tcpip_event); if ((ev == tcpip_event)) { recv_handler(); } } PROCESS_END(); }
int rpl_set_prefix(rpl_dag_t *dag, uip_ipaddr_t *prefix, int len) { uip_ipaddr_t ipaddr; if(len <= 128) { memset(&dag->prefix_info.prefix, 0, 16); memcpy(&dag->prefix_info.prefix, prefix, (len + 7) / 8); dag->prefix_info.length = len; dag->prefix_info.flags = 0x40; PRINTF("RPL: Prefix set - will announce this in DIOs\n"); /* Autoconfigure an address if this node does not already have an address with this prefix. */ /* assume that the prefix ends with zeros! */ memcpy(&ipaddr, &dag->prefix_info.prefix, 16); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); if(uip_ds6_addr_lookup(&ipaddr) == NULL) { PRINTF("RPL: adding global IP address "); PRINT6ADDR(&ipaddr); PRINTF("\n"); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); } return 1; } return 0; }
/*---------------------------------------------------------------------------*/ void uip_ds6_set_lladdr(uip_lladdr_t *lladdr) { /* First remove the current address from system as this function * can be called many times. */ uip_ds6_addr_rm(uip_ds6_addr_lookup(&loc_fipaddr)); /* Create link local address, prefix, multicast addresses, * anycast addresses */ uip_create_linklocal_prefix(&loc_fipaddr); #if UIP_CONF_ROUTER uip_ds6_prefix_add(&loc_fipaddr, UIP_DEFAULT_PREFIX_LEN, 0, 0, 0, 0); #else /* UIP_CONF_ROUTER */ uip_ds6_prefix_add(&loc_fipaddr, UIP_DEFAULT_PREFIX_LEN, 0); #endif /* UIP_CONF_ROUTER */ memcpy(&uip_lladdr, lladdr, sizeof(uip_lladdr)); uip_ds6_set_addr_iid(&loc_fipaddr, &uip_lladdr); uip_ds6_addr_add(&loc_fipaddr, 0, ADDR_AUTOCONF); uip_create_linklocal_allnodes_mcast(&loc_fipaddr); uip_ds6_maddr_add(&loc_fipaddr); #if UIP_CONF_ROUTER uip_create_linklocal_allrouters_mcast(&loc_fipaddr); uip_ds6_maddr_add(&loc_fipaddr); #endif /* UIP_CONF_ROUTER */ }
void set_net_address(void) { uip_ipaddr_t ipaddr; #if RPL_BORDER_ROUTER rpl_dag_t *dag; #endif uip_ip6addr(&ipaddr, NET_ADDR_A, NET_ADDR_B, NET_ADDR_C, NET_ADDR_D, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_TENTATIVE); //#if !UIP_CONF_ROUTER // uip_ds6_prefix_add(&ipaddr, 64, 0); // For on-link determination. //#else // uip_ds6_prefix_add(&ipaddr, 64, 0, 0, 600, 600); //#endif print_addresses(); #if RPL_BORDER_ROUTER dag = rpl_set_root(RPL_DEFAULT_INSTANCE,&ipaddr); if(dag != NULL) { PRINTF("This node is setted as root of a DAG.\r\n"); } else { PRINTF("Error while setting this node as root of a DAG.\r\n"); } #endif }
/*---------------------------------------------------------------------------*/ static void set_global_address(void) { uip_ipaddr_t ipaddr; uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); /* The choice of server address determines its 6LoPAN header compression. * (Our address will be compressed Mode 3 since it is derived from our link-local address) * Obviously the choice made here must also be selected in udp-server.c. * * For correct Wireshark decoding using a sniffer, add the /64 prefix to the 6LowPAN protocol preferences, * e.g. set Context 0 to aaaa::. At present Wireshark copies Context/128 and then overwrites it. * (Setting Context 0 to aaaa::1111:2222:3333:4444 will report a 16 bit compressed address of aaaa::1111:22ff:fe33:xxxx) * * Note the IPCMV6 checksum verification depends on the correct uncompressed addresses. */ #if 0 /* Mode 1 - 64 bits inline */ uip_ip6addr(&server_ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 1); #elif 1 /* Mode 2 - 16 bits inline */ uip_ip6addr(&server_ipaddr, 0xaaaa, 0, 0, 0, 0, 0x00ff, 0xfe00, 1); #else /* Mode 3 - derived from server link-local (MAC) address */ uip_ip6addr(&server_ipaddr, 0xaaaa, 0, 0, 0, 0x0250, 0xc2ff, 0xfea8, 0xcd1a); //redbee-econotag #endif }
/*---------------------------------------------------------------------------*/ static uip_ipaddr_t * set_global_address(void) { static uip_ipaddr_t ipaddr; int i; uint8_t state; uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); printf("IPv6 addresses: "); for(i = 0; i < UIP_DS6_ADDR_NB; i++) { state = uip_ds6_if.addr_list[i].state; if(uip_ds6_if.addr_list[i].isused && (state == ADDR_TENTATIVE || state == ADDR_PREFERRED)) { uip_debug_ipaddr_print(&uip_ds6_if.addr_list[i].ipaddr); printf("\n"); if(state == ADDR_TENTATIVE) { uip_ds6_if.addr_list[i].state = ADDR_PREFERRED; } } } return &ipaddr; }
/*---------------------------------------------------------------------------*/ static uip_ipaddr_t * set_global_address(void) { static uip_ipaddr_t ipaddr; int i; uint8_t state; /* Assign a unique local address (RFC4193, http://tools.ietf.org/html/rfc4193). */ #if CONTIKI_TARGET_TRXEB1120 || CONTIKI_TARGET_ETH1120 || CONTIKI_TARGET_TRXEB2520 || CONTIKI_TARGET_TRXEB1101 || CONTIKI_TARGET_ETH1101 || CONTIKI_TARGET_ETH2520 uip_ip6addr(&ipaddr, 0xfc00, 0, 0xabba, 0xabba, 0, 0, 0, 0); #else /* CONTIKI_TARGET_TRXEB1120 */ uip_ip6addr(&ipaddr, 0xfc00, 0, 0, 0, 0, 0, 0, 0); #endif /* CONTIKI_TARGET_TRXEB1120 */ uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); printf("IPv6 addresses: "); for(i = 0; i < UIP_DS6_ADDR_NB; i++) { state = uip_ds6_if.addr_list[i].state; if(uip_ds6_if.addr_list[i].isused && (state == ADDR_TENTATIVE || state == ADDR_PREFERRED)) { uip_debug_ipaddr_print(&uip_ds6_if.addr_list[i].ipaddr); printf("\n"); } } return &ipaddr; }
/*---------------------------------------------------------------------------*/ static void check_prefix(rpl_prefix_t *last_prefix, rpl_prefix_t *new_prefix) { uip_ipaddr_t ipaddr; uip_ds6_addr_t *rep; if(last_prefix != NULL && new_prefix != NULL && last_prefix->length == new_prefix->length && uip_ipaddr_prefixcmp(&last_prefix->prefix, &new_prefix->prefix, new_prefix->length) && last_prefix->flags == new_prefix->flags) { /* Nothing has changed. */ return; } if(last_prefix != NULL) { set_ip_from_prefix(&ipaddr, last_prefix); rep = uip_ds6_addr_lookup(&ipaddr); if(rep != NULL) { PRINTF("RPL: removing global IP address "); PRINT6ADDR(&ipaddr); PRINTF("\n"); uip_ds6_addr_rm(rep); } } if(new_prefix != NULL) { set_ip_from_prefix(&ipaddr, new_prefix); if(uip_ds6_addr_lookup(&ipaddr) == NULL) { PRINTF("RPL: adding global IP address "); PRINT6ADDR(&ipaddr); PRINTF("\n"); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); } } }
void set_global_address(void) { uip_ipaddr_t ipaddr; uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); }
/*---------------------------------------------------------------------------*/ static uip_ds6_maddr_t * join_mcast_group(void) { uip_ipaddr_t addr; uip_ds6_maddr_t *rv; /* First, set our v6 global */ uip_ip6addr(&addr, UIP_DS6_DEFAULT_PREFIX, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&addr, &uip_lladdr); uip_ds6_addr_add(&addr, 0, ADDR_AUTOCONF); /* * IPHC will use stateless multicast compression for this destination * (M=1, DAC=0), with 32 inline bits (1E 89 AB CD) */ uip_ip6addr(&addr, 0xFF1E,0,0,0,0,0,0x89,0xABCD); rv = uip_ds6_maddr_add(&addr); if(rv) { PRINTF("Joined multicast group "); PRINT6ADDR(&uip_ds6_maddr_lookup(&addr)->ipaddr); PRINTF("\n"); } return rv; }
/*---------------------------------------------------------------------------*/ static uip_ipaddr_t * set_global_address(void) { static uip_ipaddr_t ipaddr; int i; uint8_t state; /* Assign a unique local address (RFC4193, http://tools.ietf.org/html/rfc4193). */ uip_ip6addr(&ipaddr, UIP_DS6_DEFAULT_PREFIX, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); printf("IPv6 addresses: "); for(i = 0; i < UIP_DS6_ADDR_NB; i++) { state = uip_ds6_if.addr_list[i].state; if(uip_ds6_if.addr_list[i].isused && (state == ADDR_TENTATIVE || state == ADDR_PREFERRED)) { uip_debug_ipaddr_print(&uip_ds6_if.addr_list[i].ipaddr); printf("\n"); } } return &ipaddr; }
/*---------------------------------------------------------------------------*/ static void set_own_addresses(void) { int i; uint8_t state; rpl_dag_t *dag; uip_ipaddr_t ipaddr; uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); PRINTF("Our IPv6 addresses:\n"); for(i = 0; i < UIP_DS6_ADDR_NB; i++) { state = uip_ds6_if.addr_list[i].state; if(uip_ds6_if.addr_list[i].isused && (state == ADDR_TENTATIVE || state == ADDR_PREFERRED)) { PRINTF(" "); PRINT6ADDR(&uip_ds6_if.addr_list[i].ipaddr); PRINTF("\n"); if(state == ADDR_TENTATIVE) { uip_ds6_if.addr_list[i].state = ADDR_PREFERRED; } } } /* Become root of a new DODAG with ID our global v6 address */ dag = rpl_set_root(RPL_DEFAULT_INSTANCE, &ipaddr); if(dag != NULL) { rpl_set_prefix(dag, &ipaddr, 64); PRINTF("Created a new RPL dag with ID: "); PRINT6ADDR(&dag->dag_id); PRINTF("\n"); } }
PROCESS_THREAD(border_router_process, ev, data) { PROCESS_BEGIN(); PROCESS_PAUSE(); { rpl_dag_t *dag; char buf[sizeof(dag_id)]; memcpy(buf,dag_id,sizeof(dag_id)); dag = rpl_set_root((uip_ip6addr_t *)buf); /* Assign separate addresses to the uip stack and the host network interface, but with the same prefix */ /* E.g. bbbb::ff:fe00:200 to the stack and bbbb::1 to the host *fallback* network interface */ /* Otherwise the host will trap packets intended for the stack, just as the stack will trap packets intended for the host */ /* $ifconfig usb0 -arp on Ubuntu to skip the neighbor solicitations. Add explicit neighbors on other OSs */ if(dag != NULL) { printf("Created a new RPL dag\n"); #if UIP_CONF_ROUTER_RECEIVE_RA //Contiki stack will shut down until assigned an address from the interface RA //Currently this requires changes in the core rpl-icmp6.c to pass the link-local RA broadcast #else void sprint_ip6(uip_ip6addr_t addr); int i; uip_ip6addr_t ipaddr; #ifdef HARD_CODED_ADDRESS uiplib_ipaddrconv(HARD_CODED_ADDRESS, &ipaddr); #else uip_ip6addr(&ipaddr, 0xbbbb, 0, 0, 0, 0, 0, 0, 0x1); #endif uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); rpl_set_prefix(dag, &ipaddr, 64); for (i=0;i<UIP_DS6_ADDR_NB;i++) { if (uip_ds6_if.addr_list[i].isused) { printf("IPV6 Address: ");sprint_ip6(uip_ds6_if.addr_list[i].ipaddr);printf("\n"); } } #endif } } /* The border router runs with a 100% duty cycle in order to ensure high packet reception rates. */ // NETSTACK_MAC.off(1); while(1) { PROCESS_YIELD(); /* Local and global dag repair can be done from ? */ // rpl_set_prefix(rpl_get_dag(RPL_ANY_INSTANCE), &ipaddr, 64); // rpl_repair_dag(rpl_get_dag(RPL_ANY_INSTANCE)); } PROCESS_END(); }
/*-----------------------------------------------------------------------*/ static void set_global_address(void) { uip_ipaddr_t ipaddr; uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); /* set sink address */ uip_ip6addr(&sink_ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 1); }
static void set_global_address(void) { uip_ipaddr_t ipaddr; uip_ip6addr(&ipaddr, UIP_DS6_DEFAULT_PREFIX, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); }
/*---------------------------------------------------------------------------*/ PROCESS_THREAD(udp_server_process, ev, data) { uip_ipaddr_t ipaddr; struct uip_ds6_addr *root_if; PROCESS_BEGIN(); PROCESS_PAUSE(); SENSORS_ACTIVATE(button_sensor); PRINTF("UDP server started\n"); #if UIP_CONF_ROUTER uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 1); /* uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); */ uip_ds6_addr_add(&ipaddr, 0, ADDR_MANUAL); root_if = uip_ds6_addr_lookup(&ipaddr); if(root_if != NULL) { rpl_dag_t *dag; rpl_set_root((uip_ip6addr_t *)&ipaddr); dag = rpl_get_dag(RPL_ANY_INSTANCE); uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); rpl_set_prefix(dag, &ipaddr, 64); PRINTF("created a new RPL dag\n"); } else { PRINTF("failed to create a new RPL DAG\n"); } #endif /* UIP_CONF_ROUTER */ print_local_addresses(); /* The data sink runs with a 100% duty cycle in order to ensure high packet reception rates. */ NETSTACK_RDC.off(1); server_conn = udp_new(NULL, UIP_HTONS(UDP_CLIENT_PORT), NULL); udp_bind(server_conn, UIP_HTONS(UDP_SERVER_PORT)); PRINTF("Created a server connection with remote address "); PRINT6ADDR(&server_conn->ripaddr); PRINTF(" local/remote port %u/%u\n", UIP_HTONS(server_conn->lport), UIP_HTONS(server_conn->rport)); while(1) { PROCESS_YIELD(); if(ev == tcpip_event) { tcpip_handler(); } else if (ev == sensors_event && data == &button_sensor) { PRINTF("Initiaing global repair\n"); rpl_repair_dag(rpl_get_dag(RPL_ANY_INSTANCE)); } } PROCESS_END(); }
/*---------------------------------------------------------------------------*/ void set_prefix_64(uip_ipaddr_t *prefix_64) { uip_ipaddr_t ipaddr; memcpy(&prefix, prefix_64, 16); memcpy(&ipaddr, prefix_64, 16); prefix_set = 1; uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); }
void init_dtls() { static dtls_handler_t cb = { .write = send_to_peer, .read = read_from_peer, .event = NULL, #ifdef DTLS_PSK .get_psk_info = get_psk_info, #endif /* DTLS_PSK */ #ifdef DTLS_ECC .get_ecdsa_key = get_ecdsa_key, .verify_ecdsa_key = verify_ecdsa_key #endif /* DTLS_ECC */ }; #if 0 uip_ipaddr_t ipaddr; /* struct uip_ds6_addr *root_if; */ #endif /* UIP_CONF_ROUTER */ PRINTF("DTLS server started\n"); #if 0 /* TEST */ memset(&tmp_addr, 0, sizeof(rimeaddr_t)); if(get_eui64_from_eeprom(tmp_addr.u8)); #if UIP_CONF_IPV6 memcpy(&uip_lladdr.addr, &tmp_addr.u8, 8); #endif #endif /* TEST */ #if 0 /* uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); */ /* uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); */ /* uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); */ /* create_rpl_dag(&ipaddr); */ /* #else */ /* uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); */ uip_ip6addr(&ipaddr, 0xaaaa, 0,0,0,0x0200,0,0,0x0003); uip_ds6_addr_add(&ipaddr, 0, ADDR_MANUAL); create_rpl_dag(&ipaddr); #endif /* UIP_CONF_ROUTER */ server_conn = udp_new(NULL, 0, NULL); udp_bind(server_conn, UIP_HTONS(20220)); dtls_set_log_level(DTLS_LOG_DEBUG); dtls_context = dtls_new_context(server_conn); if (dtls_context) dtls_set_handler(dtls_context, &cb); }
static void set_global_address(void) { uip_ipaddr_t ipaddr; uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); /*where is the uip_lladdr defined?*/ uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); /* Mode 2 - 16 bits inline */ /* Set sink address. What if more than one sink? */ uip_ip6addr(&sink_ipaddr, 0xaaaa, 0, 0, 0, 0, 0x00ff, 0xfe00, 1); }
/*---------------------------------------------------------------------------*/ void uip_ds6_init(void) { uip_ds6_route_init(); PRINTF("Init of IPv6 data structures\n"); PRINTF("%u neighbors\n%u default routers\n%u prefixes\n%u routes\n%u unicast addresses\n%u multicast addresses\n%u anycast addresses\n", UIP_DS6_NBR_NB, UIP_DS6_DEFRT_NB, UIP_DS6_PREFIX_NB, UIP_DS6_ROUTE_NB, UIP_DS6_ADDR_NB, UIP_DS6_MADDR_NB, UIP_DS6_AADDR_NB); memset(uip_ds6_nbr_cache, 0, sizeof(uip_ds6_nbr_cache)); // memset(uip_ds6_defrt_list, 0, sizeof(uip_ds6_defrt_list)); memset(uip_ds6_prefix_list, 0, sizeof(uip_ds6_prefix_list)); memset(&uip_ds6_if, 0, sizeof(uip_ds6_if)); // memset(uip_ds6_routing_table, 0, sizeof(uip_ds6_routing_table)); uip_ds6_addr_size = sizeof(struct uip_ds6_addr); uip_ds6_netif_addr_list_offset = offsetof(struct uip_ds6_netif, addr_list); /* Set interface parameters */ uip_ds6_if.link_mtu = UIP_LINK_MTU; uip_ds6_if.cur_hop_limit = UIP_TTL; uip_ds6_if.base_reachable_time = UIP_ND6_REACHABLE_TIME; uip_ds6_if.reachable_time = uip_ds6_compute_reachable_time(); uip_ds6_if.retrans_timer = UIP_ND6_RETRANS_TIMER; uip_ds6_if.maxdadns = UIP_ND6_DEF_MAXDADNS; /* Create link local address, prefix, multicast addresses, anycast addresses */ uip_create_linklocal_prefix(&loc_fipaddr); #if UIP_CONF_ROUTER uip_ds6_prefix_add(&loc_fipaddr, UIP_DEFAULT_PREFIX_LEN, 0, 0, 0, 0); #else /* UIP_CONF_ROUTER */ uip_ds6_prefix_add(&loc_fipaddr, UIP_DEFAULT_PREFIX_LEN, 0); #endif /* UIP_CONF_ROUTER */ uip_ds6_set_addr_iid(&loc_fipaddr, &uip_lladdr); uip_ds6_addr_add(&loc_fipaddr, 0, ADDR_AUTOCONF); uip_create_linklocal_allnodes_mcast(&loc_fipaddr); uip_ds6_maddr_add(&loc_fipaddr); #if UIP_CONF_ROUTER uip_create_linklocal_allrouters_mcast(&loc_fipaddr); uip_ds6_maddr_add(&loc_fipaddr); #if UIP_ND6_SEND_RA stimer_set(&uip_ds6_timer_ra, 2); /* wait to have a link local IP address */ #endif /* UIP_ND6_SEND_RA */ #else /* UIP_CONF_ROUTER */ etimer_set(&uip_ds6_timer_rs, random_rand() % (UIP_ND6_MAX_RTR_SOLICITATION_DELAY * CLOCK_SECOND)); #endif /* UIP_CONF_ROUTER */ etimer_set(&uip_ds6_timer_periodic, UIP_DS6_PERIOD); return; }
const ipv6_addr_t *stack_add_prefix(int iface, const ipv6_addr_t *prefix, uint8_t prefix_len) { ipv6_addr_t addr = IPV6_ADDR_UNSPECIFIED; netdev2_t *netdev = (netdev2_t *)&netdevs[iface]; (void)iface; netdev->driver->get(netdev, NETOPT_IPV6_IID, &addr.u64[1], sizeof(addr.u64[1])); ipv6_addr_init_prefix(&addr, prefix, prefix_len); return (ipv6_addr_t *)&(uip_ds6_addr_add((uip_ipaddr_t *)&addr, 0, ADDR_MANUAL)->ipaddr); }
/*---------------------------------------------------------------------------*/ PROCESS_THREAD(example_servreg_server_process, ev, data) { uip_ipaddr_t ipaddr; PROCESS_BEGIN(); /* Set a global address. */ uip_ip6addr(&ipaddr, UIP_DS6_DEFAULT_PREFIX, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); servreg_hack_register(188, &ipaddr); PROCESS_END(); }
static void set_global_address(void) { uip_ipaddr_t ipaddr; uip_ip6addr(&ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 0); uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); /* set server address */ uip_ip6addr(&server_ipaddr, 0xaaaa, 0, 0, 0, 0, 0, 0, 1); //uip_ip6addr(&server_ipaddr, 0xfe80, 0, 0, 0,0x0212, 0x7401, 1, 0x0101); }
/*------------------------------------------- | Name:uip_sock_init | Description: | Parameters: | Return Type: | Comments: | See: ---------------------------------------------*/ int uip_sock_init(void) { #if defined (USE_UIP) int i; socketList = (socket_t*)&_socketList; socksconn_state_list = (struct socksconn_state*)&_socksconn_state_list; uip_init(); #if UIP_CONF_IPV6 { uip_ip6addr_t ip6addr; memcpy(uip_lladdr.addr, "\x00\x0c\x29\x28\x23\x45", 6); // Set in zigbeestack.cpp (UID) uip_ip6addr(&ip6addr, 0xfe80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0002); uip_sethostaddr(&ip6addr); uip_ipaddr_copy(&uip_hostaddr, &ip6addr); tcpip_init(); // rpl_init() is called inside tcpip_init() clock_init(); uip_ds6_addr_add(&ip6addr, 0, ADDR_MANUAL); } #endif //ethernet #if defined(USE_IF_ETHERNET) #if !UIP_CONF_IPV6 uip_arp_init(); #endif #endif for(i=0; i<MAX_SOCKET; i++) { #if UIP_CONF_IPV6 socketList[i].addr_in.sin6_port=0; #else socketList[i].addr_in.sin_port=0; #endif socketList[i].socksconn=NULL; socketList[i].desc = -1; } for(i=0; i<UIP_CONNS; i++) { socksconn_state_list[i].hsocks=NULL; uip_conns[i].appstate.state = &socksconn_state_list[i]; } for(;i<(UIP_CONNS+UIP_UDP_CONNS);i++){ socksconn_state_list[i].hsocks=NULL; uip_udp_conns[i-UIP_CONNS].appstate.state = &socksconn_state_list[i]; } #else return -1; #endif return 0; }
/*---------------------------------------------------------------------------*/ static void net_init(uip_ipaddr_t *br_prefix) { uip_ipaddr_t global_ipaddr; if(br_prefix) { /* We are RPL root. Will be set automatically as TSCH pan coordinator via the tsch-rpl module */ memcpy(&global_ipaddr, br_prefix, 16); uip_ds6_set_addr_iid(&global_ipaddr, &uip_lladdr); uip_ds6_addr_add(&global_ipaddr, 0, ADDR_AUTOCONF); rpl_set_root(RPL_DEFAULT_INSTANCE, &global_ipaddr); rpl_set_prefix(rpl_get_any_dag(), br_prefix, 64); rpl_repair_root(RPL_DEFAULT_INSTANCE); } NETSTACK_MAC.on(); }
/*---------------------------------------------------------------------------*/ void set_prefix_64(uip_ipaddr_t *prefix_64) { rpl_dag_t *dag; uip_ipaddr_t ipaddr; memcpy(&prefix, prefix_64, 16); memcpy(&ipaddr, prefix_64, 16); prefix_set = 1; uip_ds6_set_addr_iid(&ipaddr, &uip_lladdr); uip_ds6_addr_add(&ipaddr, 0, ADDR_AUTOCONF); dag = rpl_set_root(RPL_DEFAULT_INSTANCE, &ipaddr); if(dag != NULL) { rpl_set_prefix(dag, &prefix, 64); PRINTF("created a new RPL dag\n"); } }