Changeset 553
- Timestamp:
- 04/27/08 22:13:08 (3 weeks ago)
- Files:
-
- nano-RK/projects/network_stack_new/NGPack.c (modified) (14 diffs)
- nano-RK/projects/network_stack_new/NetworkLayer.h (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
nano-RK/projects/network_stack_new/NGPack.c
r454 r553 32 32 dest[0] = *( (uint8_t*)(&(n -> addr)) + 1 ); 33 33 dest[1] = *( (uint8_t*)(&(n -> addr)) ); 34 35 //dest[2] = *( (uint8_t*)(&(n -> lastSeqNo)) + 1 ); 36 //dest[3] = *( (uint8_t*)(&(n -> lastSeqNo)) ); 37 34 38 } 35 39 else // BIG_ENDIAN … … 37 41 dest[0] = *( (uint8_t*)(&(n -> addr)) ); 38 42 dest[1] = *( (uint8_t*)(&(n -> addr)) + 1 ); 43 44 //dest[2] = *( (uint8_t*)(&(n -> lastSeqNo)) ); 45 //dest[3] = *( (uint8_t*)(&(n -> lastSeqNo)) + 1 ); 39 46 } 40 47 … … 195 202 dest[2] = *( (uint8_t*)(&(m -> dest)) ); 196 203 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) 200 209 pack_RouteReplyElement(dest + j, &(m -> rre[i])); 201 210 … … 223 232 dest[9] = *( (uint8_t*)(&(pkt -> prevprevHop)) ); 224 233 225 234 dest[10] = *( (uint8_t*)(&(pkt -> seqNo)) + 1 ); 235 dest[11] = *( (uint8_t*)(&(pkt -> seqNo)) ); 226 236 } 227 237 else // BIG_ENDIAN … … 241 251 dest[8] = *( (uint8_t*)(&(pkt -> prevprevHop)) ); 242 252 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; 249 262 250 263 return; … … 312 325 dest[0] = *( (uint8_t*)(&(n -> battery)) + 1 ); 313 326 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 314 344 } 315 345 else // BIG_ENDIAN … … 317 347 dest[0] = *( (uint8_t*)(&(n -> battery)) ); 318 348 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; 323 373 324 374 return; … … 520 570 *( (uint8_t*)(&(n -> addr)) ) = src[1]; 521 571 *( (uint8_t*)(&(n -> addr)) + 1 ) = src[0]; 572 573 //*( (uint8_t*)(&(n -> lastSeqNo)) ) = src[3]; 574 //*( (uint8_t*)(&(n -> lastSeqNo)) + 1 ) = src[2]; 522 575 } 523 576 else // BIG ENDIAN … … 525 578 *( (uint8_t*)(&(n -> addr)) ) = src[0]; 526 579 *( (uint8_t*)(&(n -> addr)) + 1 ) = src[1]; 580 581 //*( (uint8_t*)(&(n -> lastSeqNo)) ) = src[2]; 582 //*( (uint8_t*)(&(n -> lastSeqNo)) + 1 ) = src[3]; 527 583 } 528 584 … … 687 743 } 688 744 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) 690 748 unpack_RouteReplyElement( &(m -> rre[i]), src + j); 691 749 … … 730 788 *( (uint8_t*)(&(n -> battery)) ) = src[1]; 731 789 *( (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 732 807 } 733 808 else // BIG_ENDIAN … … 735 810 *( (uint8_t*)(&(n -> battery)) ) = src[0]; 736 811 *( (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 743 837 return; 744 838 } … … 786 880 *( (uint8_t*)(&(pkt -> prevprevHop)) + 1 ) = src[8]; 787 881 882 *( (uint8_t*)(&(pkt -> seqNo)) ) = src[11]; 883 *( (uint8_t*)(&(pkt -> seqNo)) + 1 ) = src[10]; 884 788 885 } 789 886 else // BIG_ENDIAN … … 804 901 *( (uint8_t*)(&(pkt -> prevprevHop)) + 1 ) = src[9]; 805 902 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]; 812 911 813 912 return; nano-RK/projects/network_stack_new/NetworkLayer.h
r466 r553 11 11 #include "NWStackConfig.h" 12 12 #include <stdint.h> 13 #include <nrk_stats.h> 13 14 #include "TransportLayerUDP.h" 14 15 … … 39 40 // sizes of various object types 40 41 #define SIZE_NODE_ADDR 2 // size of a sensor node address 41 #define MAX_NETWORK_PAYLOAD 64// maximum size of network packet payload42 #define MAX_NETWORK_PAYLOAD 70 // maximum size of network packet payload 42 43 #define SIZE_NEIGHBOR (SIZE_NODE_ADDR + 3) // size of the Neighbor struct 43 44 #define SIZE_NEIGHBORLIST (SIZE_NODE_ADDR + MAX_NGBS * SIZE_NEIGHBOR + 1) // size of the NeigborList struct … … 46 47 #define SIZE_MSG_NGB_LIST SIZE_NEIGHBORLIST 47 48 48 #define SIZE_NW_PACKET_HEADER (5 * SIZE_NODE_ADDR + 4)49 #define SIZE_NW_PACKET_HEADER (5 * SIZE_NODE_ADDR + 6) 49 50 #define SIZE_NW_PACKET (SIZE_NW_PACKET_HEADER + MAX_NETWORK_PAYLOAD) 50 51 … … 54 55 55 56 #define SIZE_ROUTE_REPLY_ELEMENT (SIZE_NODE_ADDR * 2 + 1) 56 #define NUM_ROUTE_REPLY_ELEMENTS 857 #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) 58 59 #define SIZE_MSG_ROUTE_REQUEST (SIZE_NODE_ADDR * 2) 59 60 60 #define SIZE_NODE_STATE 1 2// size of one entry in the table of node state values61 #define SIZE_NODE_STATE 19 // size of one entry in the table of node state values 61 62 #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 62 67 63 68 #define SIZE_MSG_SEND_NW_INFO (SIZE_NODE_ADDR + SIZE_NODE_ADDR * MAX_SUBNET_SIZE + 1) … … 95 100 96 101 /***************************** DATA STRUCTURES *****************************************/ 102 /* This structure stores the sequence number cache */ 103 typedef struct 104 { 105 uint16_t addr; 106 uint16_t seqNo; 107 uint32_t timestamp; 108 }SequenceNoCacheEntry; 109 110 typedef struct 111 { 112 SequenceNoCacheEntry snce[NUM_ENTRIES_SNC]; 113 int8_t count; 114 }SequenceNoCache; 97 115 98 116 /* This structure stores information about one neighbor */ … … 103 121 int8_t lastReport; // last time the node reported 104 122 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 Neighbor106 //uint32_t num_pkts_sent; // holds the number of packets sent by this neighbor107 123 }Neighbor; 108 124 … … 141 157 // bit 6,5: Type of Tlayer 142 158 // 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 144 160 int8_t length; // actual length of payload 145 161 int8_t prio; // priority of this packet 146 //uint32_t seq_no;// sequence number of this packet162 uint16_t seqNo; // sequence number of this packet 147 163 uint8_t data[MAX_NETWORK_PAYLOAD]; // payload 148 164 }NW_Packet; … … 183 199 uint16_t dg; // address of the default gateway 184 200 uint16_t dest; // destination address 201 uint8_t seq_no; // seq number of this message 185 202 RouteReplyElement rre[NUM_ROUTE_REPLY_ELEMENTS]; 186 203 }Msg_RouteReply; … … 196 213 typedef struct 197 214 { 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) 202 225 }NodeState; 203 226 … … 279 302 */ 280 303 281 int8_t sendToGateway(uint8_t *buf, int 8_t len);304 int8_t sendToGateway(uint8_t *buf, int16_t len); 282 305 /* 283 306 This function sends the message pointed to by its parameter to the attached gateway device … … 475 498 476 499 void initialise_node_state(); 500 void initialise_SeqNoCache(); 501 477 502 int8_t get_continue_sending_ngblist(); 478 503 void set_continue_sending_ngblist(int8_t); 479 504 int8_t get_continue_sending_nodeinfo(); 480 505 void set_continue_sending_nodeinfo(int8_t); 506 void set_continue_sending_hello(int8_t); 507 int8_t get_continue_sending_hello(); 481 508 482 509 int8_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); 510 int8_t process_Msg_RouteReply(Msg_RouteReply *mrr); 486 511 int8_t process_Msg_NwInfoAcquired(Msg_NwInfoAcquired *); 487 512 int8_t process_Msg_SendNwInfo(Msg_SendNwInfo *); … … 506 531 void build_Msg_Hello(Msg_Hello *m); 507 532 533 void add_to_SeqNoCache(uint16_t addr, uint16_t seqNo); 534 void clear_SeqNoCache(); 535 int8_t search_SeqNoCache(uint16_t addr, uint16_t *seqNo, uint32_t *timestamp); 536 int8_t process_SeqNo(NW_Packet *pkt); 537 508 538 509 539
