void icmpv6echo_receive(OpenQueueEntry_t* msg) { OpenQueueEntry_t* reply; msg->owner = COMPONENT_ICMPv6ECHO; switch(msg->l4_sourcePortORicmpv6Type) { case IANA_ICMPv6_ECHO_REQUEST: openserial_printInfo(COMPONENT_ICMPv6ECHO,ERR_RCVD_ECHO_REQUEST, (errorparameter_t)0, (errorparameter_t)0); // get a new openqueuEntry_t for the echo reply reply = openqueue_getFreePacketBuffer(COMPONENT_ICMPv6ECHO); if (reply==NULL) { openserial_printError(COMPONENT_ICMPv6ECHO,ERR_NO_FREE_PACKET_BUFFER, (errorparameter_t)1, (errorparameter_t)0); openqueue_freePacketBuffer(msg); return; } // take ownership over reply reply->creator = COMPONENT_ICMPv6ECHO; reply->owner = COMPONENT_ICMPv6ECHO; // copy payload from msg to (end of) reply packetfunctions_reserveHeaderSize(reply,msg->length); memcpy(reply->payload,msg->payload,msg->length); // copy source of msg in destination of reply memcpy(&(reply->l3_destinationAdd),&(msg->l3_sourceAdd),sizeof(open_addr_t)); // free up msg openqueue_freePacketBuffer(msg); msg = NULL; // administrative information for reply reply->l4_protocol = IANA_ICMPv6; reply->l4_sourcePortORicmpv6Type = IANA_ICMPv6_ECHO_REPLY; ((ICMPv6_ht*)(reply->payload))->type = reply->l4_sourcePortORicmpv6Type; packetfunctions_calculateChecksum(reply,(uint8_t*)&(((ICMPv6_ht*)(reply->payload))->checksum));//do last icmpv6echo_vars.busySending = TRUE; if (icmpv6_send(reply)!=E_SUCCESS) { icmpv6echo_vars.busySending = FALSE; openqueue_freePacketBuffer(reply); } break; case IANA_ICMPv6_ECHO_REPLY: openserial_printInfo(COMPONENT_ICMPv6ECHO,ERR_RCVD_ECHO_REPLY, (errorparameter_t)0, (errorparameter_t)0); openqueue_freePacketBuffer(msg); break; default: openserial_printError(COMPONENT_ICMPv6ECHO,ERR_UNSUPPORTED_ICMPV6_TYPE, (errorparameter_t)msg->l4_sourcePortORicmpv6Type, (errorparameter_t)2); openqueue_freePacketBuffer(msg); break; } }
void openstack_init(void) { //===== drivers openserial_init(); //===== stack //-- cross-layer idmanager_init(); // call first since initializes EUI64 and isDAGroot openqueue_init(); openrandom_init(); opentimers_init(); //-- 02a-TSCH adaptive_sync_init(); ieee154e_init(); //-- 02b-RES schedule_init(); sixtop_init(); neighbors_init(); //===== applications openapps_init(); openserial_printInfo( COMPONENT_OPENWSN,ERR_BOOTED, (errorparameter_t)0, (errorparameter_t)0 ); }
void openstack_init(OpenMote* self) { //===== drivers openserial_init(self); //===== stack //-- cross-layer idmanager_init(self); // call first since initializes EUI64 and isDAGroot openqueue_init(self); openrandom_init(self); opentimers_init(self); //-- 02a-TSCH adaptive_sync_init(self); ieee154e_init(self); //-- 02b-RES schedule_init(self); sixtop_init(self); neighbors_init(self); //-- 03a-IPHC openbridge_init(self); iphc_init(self); //-- 03b-IPv6 forwarding_init(self); icmpv6_init(self); icmpv6echo_init(self); icmpv6rpl_init(self); //-- 04-TRAN opentcp_init(self); openudp_init(self); opencoap_init(self); // initialize before any of the CoAP applications //===== applications openapps_init(self); openserial_printInfo(self, COMPONENT_OPENWSN,ERR_BOOTED, (errorparameter_t)0, (errorparameter_t)0 ); }