[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