Re: [ns] recv function not called in aodv for destination node
Dear Amar, I think you have confused with between mac::recv() and aodv::recv() 1. mac::recv() able to listen every packet in a channel as long as it is above CSThresh and decode a packet if it is above RXThresh. 2.This is not the same for aodv::recv(), you would need to understand, how a)AODV protocol works and the components of AODV Table built at nodes b)wireless mobile node schematic in the NS2 manual. 3.Not every packet received by mac::recv() is sent upstack to aodv::recv(), only those need to be forwarded will be sent to aodv::recv(). Thus the final destination node would not go through aodv:recv but the data packet received by mac:recv will be directly sent to AGT via LL using uptarget_ 4.If you yet to understand this, let me illustrate this in a small scenario. We have 3 nodes (N3, N4 and N5) arranged in series. N5 sends one packet to N3. You will see something as below, Node: _5 _ recvd data packet at time: 11.5, PacketType: 61, UID: 4 Node: _4 _ recvd data packet at time: 11.501782848, PacketType: 61, UID: 4 if you invoke the below at aodv::recv(), if(DATA_PACKET(ch-ptype())) {fprintf(stdout,\nNode: _%i _ recvd data packet at time: %.9lf, PacketType: %i, UID: %i, index, CURRENT_TIME, ch-ptype(), ch-uid());} You will see the destination node, i.e N3 is missing. 5. Do compare this with your trace file results, Line#01 - s 11.5 _5_ AGT --- 4 Poisson 1500 [0 0 0 0 Y Y] --- [5:1 3:1 32 0 0] Line#02 - r 11.5 _5_ RTR --- 4 Poisson 1500 [0 0 0 0 Y Y] --- [5:1 3:1 32 0 0] Line#03 - s 11.5 _5_ RTR --- 4 Poisson 1520 [0 0 0 0 Y Y] --- [5:1 3:1 30 2 4] Line#04 - s 11.500435000 _5_ MAC --- 4 Poisson 1578 [13a 4 5 800 Y Y] --- [5:1 3:1 30 2 4] Line#05 - r 11.501757848 _4_ MAC --- 4 Poisson 1520 [13a 4 5 800 Y Y] --- [5:1 3:1 30 2 4] Line#06 - s 11.501767848 _4_ MAC --- 0 ACK 38 [0 5 4 0 Y Y] Line#07 - r 11.501782848 _4_ RTR --- 4 Poisson 1520 [13a 4 5 800 Y Y] --- [5:1 3:1 30 2 4] Line#08 - f 11.501782848 _4_ RTR --- 4 Poisson 1520 [13a 4 5 800 Y Y] --- [5:1 3:1 29 1 3] Line#09 - r 11.502072515 _5_ MAC --- 0 ACK 38 [0 5 4 0 Y Y] Line#10 - s 11.502481848 _4_ MAC --- 4 Poisson 1578 [13a 3 4 800 Y Y] --- [5:1 3:1 29 1 3] Line#11 - r 11.503804697 _3_ MAC --- 4 Poisson 1520 [13a 3 4 800 Y Y] --- [5:1 3:1 29 1 3] Line#12 - s 11.503814697 _3_ MAC --- 0 ACK 38 [0 4 3 0 Y Y] Line#13 - r 11.503829697 _3_ AGT --- 4 Poisson 1520 [13a 3 4 800 Y Y] --- [5:1 3:1 29 1 3] Line#14 - r 11.504119364 _4_ MAC --- 0 ACK 38 [0 4 3 0 Y Y] You will see RTR (i.e AODV) is received only by the source node and the intermediary nodes (where forward event need to be executed) except the destination node. 6. In case you like to know if a destination node received a packet, you can do so by comparing a packet's destination ip address with the node_id of a node receiving the packet Good Luck. rgds Saravanan K On Wed, Feb 6, 2013 at 3:51 PM, AmarNath Patra amarnath.pa...@gmail.com wrote: Hello Everyone, If I add the following statement in the beginning of the code in the function, AODV::recv(Packet *p, Handler*), in aodv.cc : if(DATA_PACKET(ch-ptype())) { printf(\nNode: _%i _ recvd data packet at time: %.4lf, index, CURRENT_TIME); } Then it prints for all active nodes except for the destination. Why is it happening? If not in this function/file, then where can I check whether the destination received a data packet? I just tried to implement the NULL agent's recv function in c++ source code, and added the above statement in it. Here the print function gets executed for the case of destination node. Is this correct? Can't I recognize the/a destination node in the aodv,cc file itself? -amar
Re: [ns] recv function not called in aodv for destination node
Amar, Correction on Line #6, 6. In case you like to know if a destination node received a packet, you can do so by comparing a packet's destination ip address with the node_id of a node receiving the packet ***at MAC layer*** rgds Saravanan K On Thu, Feb 7, 2013 at 2:19 PM, Saravanan Kandasamy svana...@gmail.com wrote: Dear Amar, I think you have confused with between mac::recv() and aodv::recv() 1. mac::recv() able to listen every packet in a channel as long as it is above CSThresh and decode a packet if it is above RXThresh. 2.This is not the same for aodv::recv(), you would need to understand, how a)AODV protocol works and the components of AODV Table built at nodes b)wireless mobile node schematic in the NS2 manual. 3.Not every packet received by mac::recv() is sent upstack to aodv::recv(), only those need to be forwarded will be sent to aodv::recv(). Thus the final destination node would not go through aodv:recv but the data packet received by mac:recv will be directly sent to AGT via LL using uptarget_ 4.If you yet to understand this, let me illustrate this in a small scenario. We have 3 nodes (N3, N4 and N5) arranged in series. N5 sends one packet to N3. You will see something as below, Node: _5 _ recvd data packet at time: 11.5, PacketType: 61, UID: 4 Node: _4 _ recvd data packet at time: 11.501782848, PacketType: 61, UID: 4 if you invoke the below at aodv::recv(), if(DATA_PACKET(ch-ptype())) {fprintf(stdout,\nNode: _%i _ recvd data packet at time: %.9lf, PacketType: %i, UID: %i, index, CURRENT_TIME, ch-ptype(), ch-uid());} You will see the destination node, i.e N3 is missing. 5. Do compare this with your trace file results, Line#01 - s 11.5 _5_ AGT --- 4 Poisson 1500 [0 0 0 0 Y Y] --- [5:1 3:1 32 0 0] Line#02 - r 11.5 _5_ RTR --- 4 Poisson 1500 [0 0 0 0 Y Y] --- [5:1 3:1 32 0 0] Line#03 - s 11.5 _5_ RTR --- 4 Poisson 1520 [0 0 0 0 Y Y] --- [5:1 3:1 30 2 4] Line#04 - s 11.500435000 _5_ MAC --- 4 Poisson 1578 [13a 4 5 800 Y Y] --- [5:1 3:1 30 2 4] Line#05 - r 11.501757848 _4_ MAC --- 4 Poisson 1520 [13a 4 5 800 Y Y] --- [5:1 3:1 30 2 4] Line#06 - s 11.501767848 _4_ MAC --- 0 ACK 38 [0 5 4 0 Y Y] Line#07 - r 11.501782848 _4_ RTR --- 4 Poisson 1520 [13a 4 5 800 Y Y] --- [5:1 3:1 30 2 4] Line#08 - f 11.501782848 _4_ RTR --- 4 Poisson 1520 [13a 4 5 800 Y Y] --- [5:1 3:1 29 1 3] Line#09 - r 11.502072515 _5_ MAC --- 0 ACK 38 [0 5 4 0 Y Y] Line#10 - s 11.502481848 _4_ MAC --- 4 Poisson 1578 [13a 3 4 800 Y Y] --- [5:1 3:1 29 1 3] Line#11 - r 11.503804697 _3_ MAC --- 4 Poisson 1520 [13a 3 4 800 Y Y] --- [5:1 3:1 29 1 3] Line#12 - s 11.503814697 _3_ MAC --- 0 ACK 38 [0 4 3 0 Y Y] Line#13 - r 11.503829697 _3_ AGT --- 4 Poisson 1520 [13a 3 4 800 Y Y] --- [5:1 3:1 29 1 3] Line#14 - r 11.504119364 _4_ MAC --- 0 ACK 38 [0 4 3 0 Y Y] You will see RTR (i.e AODV) is received only by the source node and the intermediary nodes (where forward event need to be executed) except the destination node. 6. In case you like to know if a destination node received a packet, you can do so by comparing a packet's destination ip address with the node_id of a node receiving the packet Good Luck. rgds Saravanan K On Wed, Feb 6, 2013 at 3:51 PM, AmarNath Patra amarnath.pa...@gmail.com wrote: Hello Everyone, If I add the following statement in the beginning of the code in the function, AODV::recv(Packet *p, Handler*), in aodv.cc : if(DATA_PACKET(ch-ptype())) { printf(\nNode: _%i _ recvd data packet at time: %.4lf, index, CURRENT_TIME); } Then it prints for all active nodes except for the destination. Why is it happening? If not in this function/file, then where can I check whether the destination received a data packet? I just tried to implement the NULL agent's recv function in c++ source code, and added the above statement in it. Here the print function gets executed for the case of destination node. Is this correct? Can't I recognize the/a destination node in the aodv,cc file itself? -amar
[ns] recv function not called in aodv for destination node
Hello Everyone, If I add the following statement in the beginning of the code in the function, AODV::recv(Packet *p, Handler*), in aodv.cc : if(DATA_PACKET(ch-ptype())) { printf(\nNode: _%i _ recvd data packet at time: %.4lf, index, CURRENT_TIME); } Then it prints for all active nodes except for the destination. Why is it happening? If not in this function/file, then where can I check whether the destination received a data packet? I just tried to implement the NULL agent's recv function in c++ source code, and added the above statement in it. Here the print function gets executed for the case of destination node. Is this correct? Can't I recognize the/a destination node in the aodv,cc file itself? -amar