Changeset 553

Show
Ignore:
Timestamp:
04/27/08 22:13:08 (3 weeks ago)
Author:
ayb
Message:

Added

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • nano-RK/projects/network_stack_new/NGPack.c

    r454 r553  
    3232                dest[0] = *( (uint8_t*)(&(n -> addr)) + 1 ); 
    3333                dest[1] = *( (uint8_t*)(&(n -> addr)) ); 
     34                 
     35                //dest[2] = *( (uint8_t*)(&(n -> lastSeqNo)) + 1 ); 
     36                //dest[3] = *( (uint8_t*)(&(n -> lastSeqNo)) ); 
     37                 
    3438        }        
    3539        else //  BIG_ENDIAN 
     
    3741                dest[0] = *( (uint8_t*)(&(n -> addr)) ); 
    3842                dest[1] = *( (uint8_t*)(&(n -> addr)) + 1 ); 
     43                 
     44                //dest[2] = *( (uint8_t*)(&(n -> lastSeqNo)) ); 
     45                //dest[3] = *( (uint8_t*)(&(n -> lastSeqNo)) + 1 ); 
    3946        } 
    4047         
     
    195202                dest[2] = *( (uint8_t*)(&(m -> dest)) ); 
    196203                dest[3] = *( (uint8_t*)(&(m -> dest)) + 1 ); 
    197         }                 
    198          
    199         for(i = 0, j = 4; i < NUM_ROUTE_REPLY_ELEMENTS; i++, j += SIZE_ROUTE_REPLY_ELEMENT) 
     204        }        
     205         
     206        dest[4] = m -> seq_no;    
     207         
     208        for(i = 0, j = 5; i < NUM_ROUTE_REPLY_ELEMENTS; i++, j += SIZE_ROUTE_REPLY_ELEMENT) 
    200209                pack_RouteReplyElement(dest + j, &(m -> rre[i])); 
    201210                 
     
    223232                dest[9] = *( (uint8_t*)(&(pkt -> prevprevHop)) ); 
    224233                 
    225                          
     234                dest[10] = *( (uint8_t*)(&(pkt -> seqNo)) + 1 ); 
     235                dest[11] = *( (uint8_t*)(&(pkt -> seqNo)) ); 
    226236        } 
    227237        else // BIG_ENDIAN 
     
    241251                dest[8] = *( (uint8_t*)(&(pkt -> prevprevHop)) ); 
    242252                dest[9] = *( (uint8_t*)(&(pkt -> prevprevHop)) + 1 ); 
    243         } 
    244          
    245         dest[10] = pkt -> ttl; 
    246         dest[11] = pkt -> type; 
    247         dest[12] = pkt -> length; 
    248         dest[13] = pkt -> prio; 
     253                 
     254                dest[10] = *( (uint8_t*)(&(pkt -> seqNo)) ); 
     255                dest[11] = *( (uint8_t*)(&(pkt -> seqNo)) + 1 ); 
     256        } 
     257         
     258        dest[12] = pkt -> ttl; 
     259        dest[13] = pkt -> type; 
     260        dest[14] = pkt -> length; 
     261        dest[15] = pkt -> prio; 
    249262         
    250263        return; 
     
    312325                dest[0] = *( (uint8_t*)(&(n -> battery)) + 1 ); 
    313326                dest[1] = *( (uint8_t*)(&(n -> battery)) ); 
     327                 
     328                dest[2] = *( (uint8_t*)(&(n -> timestamp)) + 3 ); 
     329                dest[3] = *( (uint8_t*)(&(n -> timestamp)) + 2 ); 
     330                dest[4] = *( (uint8_t*)(&(n -> timestamp)) + 1 ); 
     331                dest[5] = *( (uint8_t*)(&(n -> timestamp)) ); 
     332                 
     333                dest[6] = *( (uint8_t*)(&(n -> active_time)) + 3 ); 
     334                dest[7] = *( (uint8_t*)(&(n -> active_time)) + 2 ); 
     335                dest[8] = *( (uint8_t*)(&(n -> active_time)) + 1 ); 
     336                dest[9] = *( (uint8_t*)(&(n -> active_time)) ); 
     337                 
     338                dest[10] = *( (uint8_t*)(&(n -> bytesSent)) + 1 ); 
     339                dest[11] = *( (uint8_t*)(&(n -> bytesSent)) ); 
     340                 
     341                dest[12] = *( (uint8_t*)(&(n -> bytesReceived)) + 1 ); 
     342                dest[13] = *( (uint8_t*)(&(n -> bytesReceived)) ); 
     343                 
    314344        } 
    315345        else // BIG_ENDIAN 
     
    317347                dest[0] = *( (uint8_t*)(&(n -> battery)) ); 
    318348                dest[1] = *( (uint8_t*)(&(n -> battery)) + 1 ); 
    319         } 
    320         dest[2] = n -> tx_queue_size; 
    321         dest[3] = n -> rx_queue_size; 
    322         pack_nrk_time_t(dest + 4, &(n -> timestamp)); 
     349                 
     350                dest[2] = *( (uint8_t*)(&(n -> timestamp)) ); 
     351                dest[3] = *( (uint8_t*)(&(n -> timestamp)) + 1 ); 
     352                dest[4] = *( (uint8_t*)(&(n -> timestamp)) + 2 ); 
     353                dest[5] = *( (uint8_t*)(&(n -> timestamp)) + 3 ); 
     354                 
     355                dest[6] = *( (uint8_t*)(&(n -> active_time)) ); 
     356                dest[7] = *( (uint8_t*)(&(n -> active_time)) + 1 ); 
     357                dest[8] = *( (uint8_t*)(&(n -> active_time)) + 2 ); 
     358                dest[9] = *( (uint8_t*)(&(n -> active_time)) + 3 ); 
     359                 
     360                 
     361                dest[10] = *( (uint8_t*)(&(n -> bytesSent)) ); 
     362                dest[11] = *( (uint8_t*)(&(n -> bytesSent)) + 1 ); 
     363                 
     364                dest[12] = *( (uint8_t*)(&(n -> bytesReceived)) ); 
     365                dest[13] = *( (uint8_t*)(&(n -> bytesReceived)) + 1 ); 
     366        }        
     367         
     368        dest[14] = n -> total_pkts_inserted; 
     369        dest[15] = n -> total_wait_time; 
     370        dest[16] = n -> total_ack_time; 
     371        dest[17] = n -> tx_queue_size; 
     372        dest[18] = n -> rx_queue_size; 
    323373         
    324374        return; 
     
    520570                *( (uint8_t*)(&(n -> addr)) ) = src[1]; 
    521571                *( (uint8_t*)(&(n -> addr)) + 1 ) = src[0]; 
     572                 
     573                //*( (uint8_t*)(&(n -> lastSeqNo)) ) = src[3]; 
     574                //*( (uint8_t*)(&(n -> lastSeqNo)) + 1 ) = src[2]; 
    522575        } 
    523576        else // BIG ENDIAN  
     
    525578                *( (uint8_t*)(&(n -> addr)) ) = src[0]; 
    526579                *( (uint8_t*)(&(n -> addr)) + 1 ) = src[1]; 
     580                 
     581                //*( (uint8_t*)(&(n -> lastSeqNo)) ) = src[2]; 
     582                //*( (uint8_t*)(&(n -> lastSeqNo)) + 1 ) = src[3]; 
    527583        } 
    528584         
     
    687743        } 
    688744         
    689         for(i = 0, j = 4; i < NUM_ROUTE_REPLY_ELEMENTS; i++, j += SIZE_ROUTE_REPLY_ELEMENT) 
     745        m -> seq_no = src[4]; 
     746         
     747        for(i = 0, j = 5; i < NUM_ROUTE_REPLY_ELEMENTS; i++, j += SIZE_ROUTE_REPLY_ELEMENT) 
    690748                unpack_RouteReplyElement( &(m -> rre[i]), src + j); 
    691749                 
     
    730788                *( (uint8_t*)(&(n -> battery)) ) = src[1]; 
    731789                *( (uint8_t*)(&(n -> battery)) + 1 ) = src[0]; 
     790                 
     791                *( (uint8_t*)(&(n -> timestamp)) ) = src[5]; 
     792                *( (uint8_t*)(&(n -> timestamp)) + 1 ) = src[4]; 
     793                *( (uint8_t*)(&(n -> timestamp)) + 2 ) = src[3]; 
     794                *( (uint8_t*)(&(n -> timestamp)) + 3 ) = src[2]; 
     795                 
     796                *( (uint8_t*)(&(n -> active_time)) ) = src[9]; 
     797                *( (uint8_t*)(&(n -> active_time)) + 1 ) = src[8]; 
     798                *( (uint8_t*)(&(n -> active_time)) + 2 ) = src[7]; 
     799                *( (uint8_t*)(&(n -> active_time)) + 3 ) = src[6]; 
     800                 
     801                *( (uint8_t*)(&(n -> bytesSent)) ) = src[11]; 
     802                *( (uint8_t*)(&(n -> bytesSent)) + 1 ) = src[10]; 
     803                 
     804                *( (uint8_t*)(&(n -> bytesReceived)) ) = src[13]; 
     805                *( (uint8_t*)(&(n -> bytesReceived)) + 1 ) = src[12]; 
     806                 
    732807        } 
    733808        else  // BIG_ENDIAN 
     
    735810                *( (uint8_t*)(&(n -> battery)) ) = src[0]; 
    736811                *( (uint8_t*)(&(n -> battery)) + 1 ) = src[1]; 
    737         } 
    738          
    739         n -> tx_queue_size = src[2]; 
    740         n -> rx_queue_size = src[3]; 
    741         unpack_nrk_time_t( &(n -> timestamp), src + 4); 
    742          
     812                 
     813                *( (uint8_t*)(&(n -> timestamp)) ) = src[2]; 
     814                *( (uint8_t*)(&(n -> timestamp)) + 1 ) = src[3]; 
     815                *( (uint8_t*)(&(n -> timestamp)) + 2) = src[4]; 
     816                *( (uint8_t*)(&(n -> timestamp)) + 3 ) = src[5]; 
     817                 
     818                *( (uint8_t*)(&(n -> active_time)) ) = src[6]; 
     819                *( (uint8_t*)(&(n -> active_time)) + 1 ) = src[7]; 
     820                *( (uint8_t*)(&(n -> active_time)) + 2) = src[8]; 
     821                *( (uint8_t*)(&(n -> active_time)) + 3 ) = src[9]; 
     822                                 
     823                *( (uint8_t*)(&(n -> bytesSent)) ) = src[10]; 
     824                *( (uint8_t*)(&(n -> bytesSent)) + 1 ) = src[11]; 
     825                 
     826                *( (uint8_t*)(&(n -> bytesReceived)) ) = src[12]; 
     827                *( (uint8_t*)(&(n -> bytesReceived)) + 1 ) = src[13]; 
     828                 
     829        } 
     830         
     831        n -> total_pkts_inserted = src[14]; 
     832        n -> total_wait_time = src[15]; 
     833        n -> total_ack_time = src[16]; 
     834        n -> tx_queue_size = src[17]; 
     835        n -> rx_queue_size = src[18]; 
     836                 
    743837        return; 
    744838} 
     
    786880                *( (uint8_t*)(&(pkt -> prevprevHop)) + 1 ) = src[8]; 
    787881                 
     882                *( (uint8_t*)(&(pkt -> seqNo)) ) = src[11]; 
     883                *( (uint8_t*)(&(pkt -> seqNo)) + 1 ) = src[10]; 
     884                 
    788885        } 
    789886        else  // BIG_ENDIAN 
     
    804901                *( (uint8_t*)(&(pkt -> prevprevHop)) + 1 ) = src[9]; 
    805902                 
    806         } 
    807          
    808         pkt -> ttl = src[10]; 
    809         pkt -> type = src[11]; 
    810         pkt -> length = src[12]; 
    811         pkt -> prio = src[13]; 
     903                *( (uint8_t*)(&(pkt -> seqNo)) ) = src[10]; 
     904                *( (uint8_t*)(&(pkt -> seqNo)) + 1 ) = src[11]; 
     905                         
     906        } 
     907        pkt -> ttl = src[12]; 
     908        pkt -> type = src[13]; 
     909        pkt -> length = src[14]; 
     910        pkt -> prio = src[15]; 
    812911         
    813912        return; 
  • nano-RK/projects/network_stack_new/NetworkLayer.h

    r466 r553  
    1111#include "NWStackConfig.h" 
    1212#include <stdint.h> 
     13#include <nrk_stats.h> 
    1314#include "TransportLayerUDP.h" 
    1415 
     
    3940// sizes of various object types 
    4041#define SIZE_NODE_ADDR 2                                                        // size of a sensor node address 
    41 #define MAX_NETWORK_PAYLOAD 64                                               // maximum size of network packet payload 
     42#define MAX_NETWORK_PAYLOAD 70                                                // maximum size of network packet payload 
    4243#define SIZE_NEIGHBOR (SIZE_NODE_ADDR + 3)                 // size of the Neighbor struct 
    4344#define SIZE_NEIGHBORLIST (SIZE_NODE_ADDR + MAX_NGBS * SIZE_NEIGHBOR + 1)       // size of the NeigborList struct        
     
    4647#define SIZE_MSG_NGB_LIST SIZE_NEIGHBORLIST 
    4748 
    48 #define SIZE_NW_PACKET_HEADER (5 * SIZE_NODE_ADDR + 4)   
     49#define SIZE_NW_PACKET_HEADER (5 * SIZE_NODE_ADDR + 6)   
    4950#define SIZE_NW_PACKET (SIZE_NW_PACKET_HEADER + MAX_NETWORK_PAYLOAD) 
    5051 
     
    5455 
    5556#define SIZE_ROUTE_REPLY_ELEMENT (SIZE_NODE_ADDR * 2 + 1) 
    56 #define NUM_ROUTE_REPLY_ELEMENTS 8 
    57 #define SIZE_MSG_ROUTE_REPLY (SIZE_NODE_ADDR * 2 + SIZE_ROUTE_REPLY_ELEMENT * NUM_ROUTE_REPLY_ELEMENTS) 
     57#define NUM_ROUTE_REPLY_ELEMENTS 5 
     58#define SIZE_MSG_ROUTE_REPLY (SIZE_NODE_ADDR * 2 + 1 + SIZE_ROUTE_REPLY_ELEMENT * NUM_ROUTE_REPLY_ELEMENTS) 
    5859#define SIZE_MSG_ROUTE_REQUEST (SIZE_NODE_ADDR * 2) 
    5960 
    60 #define SIZE_NODE_STATE 12    // size of one entry in the table of node state values 
     61#define SIZE_NODE_STATE 19    // size of one entry in the table of node state values 
    6162#define SIZE_NODE_STATE_QUEUE (2 + SIZE_NODE_STATE * MAX_STATE_VALUES) 
     63 
     64// related to SeqNoCache 
     65#define NUM_ENTRIES_SNC 5 
     66#define SNC_TIMEOUT 5 
    6267 
    6368#define SIZE_MSG_SEND_NW_INFO (SIZE_NODE_ADDR + SIZE_NODE_ADDR * MAX_SUBNET_SIZE + 1) 
     
    95100 
    96101/***************************** DATA STRUCTURES *****************************************/ 
     102/* This structure stores the sequence number cache */ 
     103typedef struct 
     104{ 
     105        uint16_t addr; 
     106        uint16_t seqNo; 
     107        uint32_t timestamp; 
     108}SequenceNoCacheEntry; 
     109 
     110typedef struct 
     111{ 
     112        SequenceNoCacheEntry snce[NUM_ENTRIES_SNC]; 
     113        int8_t count; 
     114}SequenceNoCache; 
    97115 
    98116/* This structure stores information about one neighbor */ 
     
    103121        int8_t lastReport;                      // last time the node reported 
    104122        int8_t isNew;                           // flag to indicate if the neighbor appeared newly 
    105         //uint32_t num_pkts_rcvd;               // holds the number of packets received from this Neighbor 
    106         //uint32_t num_pkts_sent;     // holds the number of packets sent by this neighbor 
    107123}Neighbor; 
    108124 
     
    141157                                                                                                        // bit 6,5:   Type of Tlayer  
    142158                                                                                                        // bit 4,3,2,1: type of NW_CONTROL; HELLO, NGB_LIST, ROUTE_CONFIG 
    143                                                                                                         // bit 0: unused, always set to 0         
     159                                                                                                        // bit 0: unused, always set to 0     
    144160        int8_t length;                                                          // actual length of payload 
    145161        int8_t prio;                                                            // priority of this packet 
    146         //uint32_t seq_no;                                                    // sequence number of this packet  
     162        uint16_t seqNo;                                                               // sequence number of this packet  
    147163        uint8_t data[MAX_NETWORK_PAYLOAD];                      // payload 
    148164}NW_Packet; 
     
    183199        uint16_t dg;                            // address of the default gateway 
    184200        uint16_t dest;                          // destination address 
     201        uint8_t seq_no;                         // seq number of this message 
    185202        RouteReplyElement rre[NUM_ROUTE_REPLY_ELEMENTS]; 
    186203}Msg_RouteReply; 
     
    196213typedef struct 
    197214{ 
    198         uint16_t battery;                       // reports the battery level of the node 
    199         int8_t tx_queue_size;           // running average of the size of the transmit queue (in use) 
    200         int8_t rx_queue_size;           // running average of the size of the receive queue (in use) 
    201         nrk_time_t timestamp;           // timestamp of the record collection 
     215        uint16_t battery;                               // reports the battery level of the node 
     216        uint32_t timestamp;                             // timestamp of the record collection 
     217        uint32_t active_time;                   // active time of the node 
     218        uint16_t bytesSent;                             // total number of bytes sent by the node 
     219        uint16_t bytesReceived;                 // total number of bytes received by the node 
     220        uint8_t total_pkts_inserted;    // count of packets inserted 
     221        uint8_t total_wait_time;                // total wait time of packets in queue 
     222        uint8_t total_ack_time;                 // total acknowledgment time 
     223        int8_t tx_queue_size;                   // Size of the transmit queue (in use) 
     224        int8_t rx_queue_size;                   // Size of the receive queue (in use) 
    202225}NodeState; 
    203226 
     
    279302*/ 
    280303 
    281 int8_t sendToGateway(uint8_t *buf, int8_t len); 
     304int8_t sendToGateway(uint8_t *buf, int16_t len); 
    282305/* 
    283306This function sends the message pointed to by its parameter to the attached gateway device 
     
    475498 
    476499void initialise_node_state(); 
     500void initialise_SeqNoCache(); 
     501 
    477502int8_t get_continue_sending_ngblist(); 
    478503void set_continue_sending_ngblist(int8_t); 
    479504int8_t get_continue_sending_nodeinfo(); 
    480505void set_continue_sending_nodeinfo(int8_t); 
     506void set_continue_sending_hello(int8_t); 
     507int8_t get_continue_sending_hello(); 
    481508 
    482509int8_t get_eviction_index(); 
    483 int8_t sent_route_request(uint16_t dest); 
    484 int8_t remove_from_dest_requests(uint16_t dest); 
    485 void process_Msg_RouteReply(Msg_RouteReply *mrr); 
     510int8_t process_Msg_RouteReply(Msg_RouteReply *mrr); 
    486511int8_t process_Msg_NwInfoAcquired(Msg_NwInfoAcquired *); 
    487512int8_t process_Msg_SendNwInfo(Msg_SendNwInfo *); 
     
    506531void build_Msg_Hello(Msg_Hello *m); 
    507532 
     533void add_to_SeqNoCache(uint16_t addr, uint16_t seqNo); 
     534void clear_SeqNoCache(); 
     535int8_t search_SeqNoCache(uint16_t addr, uint16_t *seqNo, uint32_t *timestamp); 
     536int8_t process_SeqNo(NW_Packet *pkt); 
     537 
    508538 
    509539