In the following code segment, sensor nodes transmits data to sink or base station (node 0) (TCL part). When the data arrives at routing layer, destination address of the packet is changed to the corresponding clusterhead of the sensor. Clusterhead waits till the data arrival from its cluster members and then it aggregates and forwards the data to basestation either in single or multiple hops (C++ part).
set now [$ns now]
for {set i 1} {$i < $val(nn) } { incr i } {
set udp [new Agent/UDP]
$ns attach-agent $node_($i) $udp
set cbr [new Application/Traffic/CBR]
$cbr set packetSize_ 100
$cbr set interval_ 0.1
$cbr attach-agent $udp
set null [new Agent/Null]
$ns attach-agent $node_(0) $null
$ns connect $udp $null
$ns at [expr $now+$i*0.1] "$cbr start"
$ns at [expr ($now+0.1)+$i*0.1] "$cbr stop"
}
if(received_count[index]>=member_count[index] && ch_bs[index] == 0) {
ch_bs[index]=1;
printf("All data received by CH %d time %f \n",index,CURRENT_TIME);
Packet *p = Packet::alloc();
struct hdr_cmn *ch = HDR_CMN(p);
struct hdr_ip *ih = HDR_IP(p);
ch->ptype() = PT_CBR;
ch->size() = IP_HDR_LEN + 100;
ch->iface() = -2;
ch->error() = 0;
ch->addr_type() = NS_AF_NONE;
ch->prev_hop_ = index;
ih->saddr() = index;
ih->dst_ = temp_original;
ih->ttl_ = NETWORK_DIAMETER;
printf("CH %d is sending aggregated data to BS time %f \n",index,CURRENT_TIME);
}