Changeset 544

Show
Ignore:
Timestamp:
04/26/08 19:29:27 (3 weeks ago)
Author:
agr
Message:

SAMPL neighbor list packets

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • nano-RK/projects/SAMPL/app_pkt_handlers/stats_pkt.c

    r541 r544  
    8989uint8_t stats_pkt_add( STATS_PKT_T *p, uint8_t *buf, uint8_t index ) 
    9090{ 
    91    if((index+1)*STATS_PKT_SIZE+STATS_PKT_SIZE>MAX_PKT_PAYLOAD ) return (index*STATS_PKT_SIZE+STATS_PKT_SIZE); 
     91   if((index+1)*STATS_PKT_SIZE>MAX_PKT_PAYLOAD ) return (index*STATS_PKT_SIZE); 
    9292   buf[index*STATS_PKT_SIZE]= p->mac_addr; 
    9393   buf[index*STATS_PKT_SIZE+1]= (p->rx_pkts>>8)&0xff; 
  • nano-RK/projects/SAMPL/client/globals.h

    r537 r544  
    1010uint8_t admin_debug_flag; 
    1111int8_t mobile_reserve; 
     12uint16_t neighborlist_ttl; 
    1213 
    1314 
  • nano-RK/projects/SAMPL/client/main.c

    r537 r544  
    183183  route_table_init(); 
    184184 
    185   // 100 ms by default 
     185  // Default neighbor list TTL is 10 minutes 
     186  neighborlist_ttl=600; 
     187 
     188// 100 ms by default 
    186189  last_flood_check_rate = 100; 
    187190  // Setup some default values 
     
    360363      // Set the reply address for the gateway (mac=0) to last-hop with no ttl timeout 
    361364        route_table_set( GATEWAY_MAC, ds_pkt.last_hop_mac, 0 ); 
     365        // Add neighbor, with timeout 
     366        route_table_set( ds_pkt.last_hop_mac, ds_pkt.last_hop_mac, neighborlist_ttl ); 
     367        // Insert RSSI from neighbor  
     368        route_table_value_set(ds_pkt.last_hop_mac, 0, ds_pkt.rssi ); 
     369 
    362370         if(ds_pkt.ctrl_flags & ENCRYPT != 0) 
    363371         { 
     
    385393   // Upstream Packet to Aggregate 
    386394    else if (ff_state == FLOOD_ACTIVE_STATE && upstream == 1) { 
     395        // Add neighbor, with timeout 
     396        route_table_set( us_pkt.last_hop_src_mac, us_pkt.last_hop_src_mac, neighborlist_ttl ); 
     397        // Insert RSSI from neighbor  
     398        route_table_value_set(us_pkt.last_hop_src_mac, 0, us_pkt.rssi ); 
     399 
    387400      if ( us_pkt_in.seq_num == last_flood_seq_num && check_subnet( us_pkt_in.subnet_mac, my_subnet_mac)==1 ) { 
    388401        if ((last_flood_ctrl & TREE_FILTER) != 0) { 
  • nano-RK/projects/SAMPL/client/makefile

    r538 r544  
    3232SRC += ../app_pkt_handlers/stats_pkt.c 
    3333SRC += ../app_pkt_handlers/trace.c 
     34SRC += ../app_pkt_handlers/neighbor_pkt.c 
    3435SRC += ../app_pkt_handlers/eeprom_data.c 
    3536SRC += ../app_pkt_handlers/control_pkt.c 
  • nano-RK/projects/SAMPL/client/nrk_cfg.h

    r540 r544  
    4646#define NRK_MAX_RESOURCE_CNT           2 
    4747 
     48#define ROUTE_TABLE_SIZE        15 
     49#define ROUTE_TABLE_VALUES      1 
     50 
     51 
    4852// 1 reserve for bmac 
    4953// 1 reserve for mobile nodes 
  • nano-RK/src/net/route_table/route_table.c

    r428 r544  
    1313for(i=0; i<ROUTE_TABLE_SIZE; i++ ) 
    1414        { 
    15         route_table[i].valid=0;        
     15        route_table[i].flags=0;        
    1616        route_table[i].dst=0;    
    1717        route_table[i].next_hop=0;       
     
    4141                    else 
    4242                        { 
    43                         route_table[i].valid=0; 
     43                        route_table[i].flags=0; 
    4444                        route_table[i].ttl=0; 
    4545                        route_table[i].dst=0; 
     
    6363                        route_table[i].next_hop=next_hop; 
    6464                        route_table[i].ttl=ttl; 
    65                         route_table[i].valid=1
     65                        route_table[i].flags|=VALID_MASK
    6666                        return NRK_OK; 
    6767                } 
     
    7373           route_table[found].next_hop=next_hop; 
    7474           route_table[found].ttl=ttl; 
    75            route_table[found].valid=1
     75           route_table[found].flags|=VALID_MASK
    7676           return NRK_OK; 
    7777        } 
     
    8686        if(route_table[i].dst==dst) 
    8787                { 
    88                   route_table[i].valid=0; 
     88                  route_table[i].flags=0; 
    8989                  route_table[i].dst=0; 
    9090                  route_table[i].ttl=0; 
     
    103103for(i=0; i<ROUTE_TABLE_SIZE; i++ ) 
    104104        { 
    105         if(route_table[i].valid==1 && route_table[i].dst==dst) 
     105        if((route_table[i].flags & VALID_MASK)!=0 && route_table[i].dst==dst) 
    106106                  return (route_table[i].next_hop); 
    107107        } 
     
    116116for(i=0; i<ROUTE_TABLE_SIZE; i++ ) 
    117117        { 
    118         if(route_table[i].valid==1 && route_table[i].dst==dst ) 
     118        if((route_table[i].flags & VALID_MASK )!=0 && route_table[i].dst==dst ) 
    119119                { 
    120120                   route_table[i].value[value_index]=value;      
     
    131131for(i=0; i<ROUTE_TABLE_SIZE; i++ ) 
    132132        { 
    133         if(route_table[i].valid==1 && route_table[i].dst==dst!=0) 
     133        if((route_table[i].flags & VALID_MASK) !=0 && route_table[i].dst==dst!=0) 
    134134                { 
    135135                   return (route_table[i].value[value_index]); 
     
    139139} 
    140140 
     141// This function returns the next valid index including 
     142// the entered value. 
     143// 
     144// For example if index 0 and 4 are valid 
     145// route_table_get_next_valid_index(0) returns 0 
     146// route_table_get_next_valid_index(1) returns 4 
     147// route_table_get_next_valid_index(4) returns 4 
     148// route_table_get_next_valid_index(5) returns -1  
     149int8_t route_table_get_next_valid_index(uint8_t start_index) 
     150{ 
     151uint8_t i; 
     152if(start_index>=ROUTE_TABLE_VALUES ) return NRK_ERROR; 
     153for(i=start_index; i<ROUTE_TABLE_SIZE; i++ ) 
     154        if((route_table[i].flags & VALID_MASK) !=0 ) 
     155                   return i;  
     156return NRK_ERROR; 
     157} 
    141158 
     159uint16_t route_table_get_dst_by_index(int8_t index) 
     160{ 
     161if(index>=ROUTE_TABLE_VALUES ) return 0; 
     162return route_table[index].dst; 
    142163 
     164} 
  • nano-RK/src/net/route_table/route_table.h

    r428 r544  
    1414#endif 
    1515 
     16#define VALID_MASK              0x01 
     17#define EXTENDED_ADDRESS_MASK   0x02 
     18 
     19 
    1620typedef struct route_type { 
    1721uint16_t dst; 
    1822uint16_t next_hop; 
    1923uint16_t ttl;  
    20 int8_t valid;  
     24int8_t flags;  
    2125int8_t value[ROUTE_TABLE_VALUES];  
    2226} route_table_t; 
     
    2529 
    2630int8_t route_table_init(); 
    27 int8_t route_table_set( uint16_t dst, uint16_t next_hop, uint16_t ttl ); 
     31int8_t route_table_set( uint16_t dst, uint16_t next_hop, uint16_t ttl); 
    2832int8_t route_table_clr( uint16_t dst); 
    2933uint16_t route_table_get( uint16_t dst); 
     
    3337int8_t route_table_value_get(uint16_t dst, uint8_t value_index); 
    3438 
     39// Use these functions to help do neighbor list tabulation 
     40int8_t route_table_get_next_valid_index(uint8_t start_index); 
     41uint16_t route_table_get_dst_by_index(int8_t index); 
     42 
    3543#endif