Hi,
I'm experiencing udp checksum error while forwarding packets in  
multihop network.
I've modified UDPEcho to get RSSI and LQI in a multihop network using  
getRssi() and getLqi() provide by CC2420Packet interface.
I'm testing the application in a basic network:
telosb.0 is acting as IPBaseStation
telosb.1 is the first hop (directly connected to base station)
telosb.2 can reach the base station only hopping through telosb_1
when telos.1 receive packet from telosb.2, it read rssi and lqi and  
write those values in empty fields (nx_uint16) inside the received  
packet before forward it to the base station. (I'm using blip stack)
Wireshark (connected to tun0) shows me udp packets sent from telosb.2  
and its payload is correctly modified by telosb.1 but checksum is  
incorrect (caused by UDP checksum offload).
Moreover, after less than 100 packets sent, network freeze; motes  
don't send packets anymore.
I cannot understand what I'm doing wrong so I post the code below.
Could you have a look and give me suggestions?

Many thanks

Davide

------ CONFIGURATION  
-----------------------------------------------------------------
#include <6lowpan.h>
#include "DemoReading.h"

configuration AppC {

} implementation {
    components MainC, LedsC;
    components AppP;

    AppP.Boot -> MainC;
    AppP.Leds -> LedsC;

    components RandomC;
    AppP.Random -> RandomC;

    components IPDispatchC;
    AppP.RadioControl -> IPDispatchC;

    components new UdpSocketC() as Report;

    AppP.Report -> Report;

    components new TimerMilliC() as ReportTimer;
    AppP.ReportTimer -> ReportTimer;

    components UdpC;

    components CC2420Ieee154MessageC;
    AppP.CC2420Packet -> CC2420Ieee154MessageC.CC2420Packet;
    AppP.Receive -> CC2420Ieee154MessageC.Ieee154Receive;
}


--------
IMPLEMENTATION
------------------------------------------------------------------------------------------------


module AppP {
    uses {
      interface Boot;
      interface SplitControl as RadioControl;

      interface Leds;

      interface UDP as Report; // sensor data
      interface Timer<TMilli> as ReportTimer;

      interface CC2420Packet;
      interface Receive;
    }
}

implementation {

    bool timerReportStarted;

    struct sockaddr_in6 report_dest;

    nx_struct hreport report;

    event void Boot.booted() {
      call RadioControl.start();

      timerReportStarted = FALSE;

         report.idrssi = 0x00;
         report.rssi = 0xFF; //INVALID_SIGNAL_VALUE;
         report.idlqi = 0x00;
         report.lqi = 0xFF; //INVALID_SIGNAL_VALUE;

          report_dest.sin6_port = hton16(APP_PORT);
          inet_pton6(REPORT_DEST, &report_dest.sin6_addr);
          call ReportTimer.startPeriodic(1024 * 7);//APP_PERIOD);

          call Report.bind(7011);//APP_PORT);
          call Status.bind(7010);//STATS_PORT);
    }

    event void RadioControl.startDone(error_t e) {}
    event void RadioControl.stopDone(error_t e) {}


    event void Report.recvfrom(struct sockaddr_in6 *from, void *data,
uint16_t len, struct ip_metadata *meta) {}

    event message_t * Receive.receive(message_t *msg, void *payload,
uint8_t len){

                 Udp_PaKet *temp_payload = payload;

                 temp_payload->idrssi = 0x2;
                 temp_payload->rssi = call CC2420Packet.getRssi(msg);
                 temp_payload->idlqi = 0x3;
                 temp_payload->lqi = call CC2420Packet.getLqi(msg);

             }
         }

      return msg;
    }


    event void ReportTimer.fired(){
         call Report.sendto(&report_dest, &report, sizeof(report))
    }

}



--------
DemoReading
.h
------------------------------------------------------------------------------------------------

/*
// SENT UDP PAYLOAD
typedef nx_struct hreport{
     nx_uint8_t idvolt;
     nx_uint16_t volt;
     nx_uint8_t idrssi;
     nx_uint16_t rssi;//nx_uint8_t
     nx_uint8_t idlqi;
     nx_uint16_t lqi;//nx_uint8_t
}hreport;

// PAYLOAD RECEIVED IN CC2420 RECEIVER
typedef nx_struct Udp_PaKet{
     nx_uint32_t part1;
     nx_uint32_t part2;
     nx_uint32_t part3;
     nx_uint16_t part4;

     nx_uint8_t idrssi;
     nx_uint16_t rssi;//nx_uint8_t
     nx_uint8_t idlqi;
     nx_uint16_t lqi;//nx_uint8_t

} Udp_PaKet;


*/
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to