[Click] Problem with DSR routing

Tae-Seok Kim taesuk.kim at gmail.com
Thu Mar 6 03:45:32 EST 2008


Hi,

I got a routing problem with Click + DSR(ETX metric) on my testbed  
when a packet needs to be transmitted over multi-hop path.
For example, router A and router B are not able to see each other, and  
several routers are physically located between them enabling multi-hop  
transmission scenario between router A and B.
But here is the problem, whenever router A pings router B, then it  
always fails, but ping between router A and its one-hop neighbor is  
successful (same results with router B).
In consequence, data transmission from router A to router B (realized  
by iperf command) brings up the error message:

"connect failed: No route to host"

I have installed the latest Click by giving --disable-linuxmodule
--enable-grid --enable-userlevel --enable-wifi --enable-analysis
as the configuration options.

Then I did make and make install and then generated the dsr.click file
using the make-dsdv-config.pl -a 192.168.20.x --metric etx -i ath0 -u >
/tmp/dsr.click, and run this file on all the router in testbed (I  
attach one of the configure file that I use below).
If there is someone who ran into this kind of error and resolved it,  
then any comments will be very appreciated.
Thanks,
TS

= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
========================================================================
AddressInfo(me0 192.168.1.13);
AddressInfo(my_ether 00:02:6F:3E:21:F6);

rt_q2 :: SimpleQueue(10); // just ahead of todevice

dsr_ls :: LinkStat(ETH my_ether, SIZE 148) -> rt_q0 :: Queue(5);

dsr_lt :: LinkTable(IP me0);

metric :: ETXMetric(dsr_ls);
dsr_rt :: DSRRouteTable(me0, dsr_lt, OUTQUEUE rt_q2, USE_BLACKLIST 1,  
METRIC metric);

dsr_arp :: DSRArpTable(me0, my_ether);

in1 :: FromDevice(ath0, PROMISC 0);

dsr_filter :: HostEtherFilter(my_ether,1);


in_cl :: Classifier(12/7FFE, -);
in_cl[0] -> dsr_ls;

cs::ControlSocket(TCP, 7777);

// [1]dsr_arp takes incoming packets, and passes them through
// unchanged to output 1, adding entries to an ARP table

in1 -> in_cl;
in_cl[1] -> dsr_filter; // non-probes

// packets destined for this host

kt :: KernelTun(me0/24);

kt -> icmp_cl :: Classifier(20/0302, -);

icmp_cl[0] -> Discard; // icmp 'protocol not supported'
icmp_cl[1] -> IPPrint(0rt, CONTENTS true, NBYTES 128) ->
[0]dsr_rt[0] -> CheckIPHeader ->
                 IPPrint(rt0, CONTENTS true, NBYTES 128) ->
                 setup_cl :: IPClassifier(udp port 8022, -);

setup_cl[0] -> Print(setup) -> Discard;
setup_cl[1] -> kt;

ls_prio :: PrioSched -> ToDevice(ath0);



dsr_filter[0] -> CheckIPHeader(14) -> [2]dsr_arp;

// drop packets with my ethernet source address
dsr_filter[1] -> // Print(Mine) ->
                  Discard;

dsr_arp[2] -> Print(_in, NBYTES 192) ->
               Strip(14) ->
               IPPrint ->
               CheckIPHeader() ->
               MarkIPHeader() ->
               GetIPAddress(16) ->
	      DSR_class :: Classifier(09/C8, -);  // DSR packets

DSR_class[0] -> // Print(DSR) ->
                 [1]dsr_rt;
DSR_class[1] -> // Print(Other) ->
                 Discard;


// packets to send out on the wireless; dsr_arp puts on the ethernet
// header based on its ARP table
td_prio :: PrioSched;
dsr_rt[1] -> rt_q1 :: Queue(20) -> [0]td_prio;
dsr_rt[2] -> rt_q2 -> [1]td_prio;
td_prio -> [0]dsr_arp;

Idle -> [1] dsr_arp [1] -> Idle;

rt_q0 -> [0]ls_prio;

dsr_arp[0] -> Print(out, NBYTES 192) ->
               [1]ls_prio;

// packet spewer for throughput tests.
spew :: RatedSource(ACTIVE false, RATE 700, DATA  
'00000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000')
         -> Strip(42) // 14 + 20 + 8 = 42
                      // (eth + ip + udp)
         -> seq :: IncrementSeqNo(FIRST 0, OFFSET 0)
         -> SetIPAddress(me0)
         -> StoreIPAddress(4)
         -> udp :: UDPIPEncap(me0, 1111, 0.0.0.0, 8021)
         -> CheckIPHeader
         -> GetIPAddress(16)
         -> [0]dsr_rt;

// setup the DSR source route
setup :: RatedSource(ACTIVE false, RATE 1, DATA 'xxx')
         -> SetIPAddress(me0)
         -> StoreIPAddress(4)
         -> udp2 :: UDPIPEncap(me0, 1111, 0.0.0.0, 8022)
         -> CheckIPHeader
         -> GetIPAddress(16)
         -> [0]dsr_rt;

poke :: PokeHandlers(pause,
              write setup.active true,
              wait 5,
              write setup.active false,
              wait 5,
                      write spew.active true,
              wait 30,
                      write spew.active false,
                      loop);

setup_poke :: PokeHandlers(pause, write setup.active true, wait 5,  
write setup.active false, loop);


Idle -> [2]dsr_rt;
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
========================================================================





More information about the click mailing list