void pgw_netstack_init(void) { NETSTACK_ETHERNET.init(); NETSTACK_MAC_ETH.init(); NETSTACK_RADIO.init(); memset(&radio_macLongAddr, 0, sizeof(rimeaddr_t)); // if(get_eui64_from_eeprom(tmp_addr.u8)); #if 1 params_get_radio_eui64(radio_macLongAddr.u8); #else radio_macLongAddr.u8[0] = 0x02; radio_macLongAddr.u8[1] = 0x11; radio_macLongAddr.u8[2] = 0x22; radio_macLongAddr.u8[3] = 0xFF; radio_macLongAddr.u8[4] = 0xFE; radio_macLongAddr.u8[5] = 0x77; radio_macLongAddr.u8[6] = 0x88; radio_macLongAddr.u8[7] = 0x77; #endif rf231_set_pan_addr(params_get_panid(), // 0xABCD params_get_panaddr(), // 0x0 (uint8_t*)&radio_macLongAddr.u8 ); // rf231_set_channel(params_get_channel()); //25 rf231_set_txpower(params_get_txpower()); // 0 NETSTACK_MAC_RADIO.init(); NETSTACK_6LOWPAN.init(); rf231_listen_channel(params_get_channel()); // 25 rf231_set_promiscuous_mode(1); NETSTACK_NETWORK_IPV4.init(); NETSTACK_NETWORK_IPV6.init(); NETSTACK_6LPGW.init(); }
static void set_rime_addr(void) { #if UIP_CONF_EUI64 rimeaddr_t addr; memset(&addr, 0, sizeof(rimeaddr_t)); if (params_get_eui64(addr.u8)) { PRINTA("Random EUI64 address generated\n"); } #if UIP_CONF_IPV6 memcpy(&uip_lladdr.addr, &addr.u8, sizeof(rimeaddr_t)); rimeaddr_set_node_addr(&addr); rf2xx_set_pan_addr(params_get_panid(), params_get_panaddr(), (uint8_t *)&addr.u8); #elif WITH_NODE_ID node_id = get_panaddr_from_eeprom(); addr.u8[1] = node_id&0xff; addr.u8[0] = (node_id&0xff00) >> 8; PRINTA("Node ID from eeprom: %X\n", node_id); uint16_t inv_node_id=((node_id & 0xff00) >> 8) + ((node_id & 0xff) << 8); // change order of bytes for rf23x rimeaddr_set_node_addr(&addr); rf2xx_set_pan_addr(params_get_panid(), inv_node_id, NULL); #else rimeaddr_set_node_addr(&addr); rf2xx_set_pan_addr(params_get_panid(), params_get_panaddr(), (uint8_t *)&addr.u8); #endif #if UIP_CONF_IPV6 PRINTA("EUI-64 MAC: %x-%x-%x-%x-%x-%x-%x-%x\n", addr.u8[0], addr.u8[1], addr.u8[2], addr.u8[3], addr.u8[4], addr.u8[5], addr.u8[6], addr.u8[7]); #else PRINTA("MAC address "); uint8_t i; for (i = sizeof(rimeaddr_t); i > 0; i--){ PRINTA("%x:", addr.u8[i-1]); } PRINTA("\n"); #endif #else rimeaddr_t addr; int i; memset(&addr, 0, sizeof(rimeaddr_t)); #if UIP_CONF_IPV6 memcpy(addr.u8, ds2401_id, sizeof(addr.u8)); #else if(node_id == 0) { for(i = 0; i < sizeof(rimeaddr_t); ++i) { addr.u8[i] = ds2401_id[7 - i]; } } else { addr.u8[0] = node_id & 0xff; addr.u8[1] = node_id >> 8; } #endif rimeaddr_set_node_addr(&addr); PRINTA("Rime started with address "); for(i = 0; i < sizeof(addr.u8) - 1; i++) { PRINTA("%d.", addr.u8[i]); } PRINTA("%d\n", addr.u8[i]); { uint8_t longaddr[8]; uint16_t shortaddr; shortaddr = (rimeaddr_node_addr.u8[0] << 8) + rimeaddr_node_addr.u8[1]; memset(longaddr, 0, sizeof(longaddr)); rimeaddr_copy((rimeaddr_t *)&longaddr, &rimeaddr_node_addr); PRINTA("MAC %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", longaddr[0], longaddr[1], longaddr[2], longaddr[3], longaddr[4], longaddr[5], longaddr[6], longaddr[7]); rf2xx_set_pan_addr(IEEE802154_PANID, shortaddr, longaddr); } #if UIP_CONF_IPV6 memcpy(&uip_lladdr.addr, ds2401_id, sizeof(uip_lladdr.addr)); #endif //rf2xx_set_channel(params_get_channel()); //rf2xx_set_txpower(params_get_txpower()); #endif rf2xx_set_channel(RF_CHANNEL); }