[Click] [CLICK] HELP!!!! PROBLEMS WITH DSDV in USER LEVEL

kamaldeep R.V kamaldeeprv at gmail.com
Fri Nov 24 17:46:04 EST 2006


I have 3 wireless Routers ,with IP addresses 192.168.20.1 ,192.168.20.2 and
192.168.20.3 respectively.[router 1 can see router 2, and router 3 can see
router2, but router1 cannot see
router3]
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 dsdv.click file
using the make-dsdv-config.pl -a 192.168.20.x --metric etx -i ath0 -u >
/tmp/dsdv.click

but after i run click on the 3 routers i am able to ping single hop but not
multi hop.
And when i do "printf 'read nb.rtes\nquit\n' | nc localhost 7777" on router
3 i am able to see the entry for router 1 and router2 with hops 2 and 1
respectively, and their corresponding
ETX metric values.








// This file automatically generated at Tue Nov 14 22:08:05 EST 2006 with
the following command:
// make-dsdv-config.pl --metric etx -i ath0 -a 192.168.20.3 -u

// this configuration performs routing lookup *after* the interface
// queue, and only works with one interface.

AddressInfo(me 192.168.20.3 00:14:6C:15:D6:BA);

elementclass TTLChecker {
  // expects grid packets with MAC headers --- place on output path to
  // decrement the IP TTL for next hop and provide traceroute support.
  //
  // push -> push
  //
  // output [0] passes through the Grid MAC packets
  //
  // output [1] produces ICMP error packets to be passed back to IP
  // routing layer

  input -> cl :: Classifier(19/03, -);
  cl [1] -> output; // don't try to dec ttl for non-IP packets...

  cl [0]
    -> MarkIPHeader(82)
    -> cl2 :: IPClassifier(src host != me, -);

  cl2 [0]-> dec :: DecIPTTL; // only decrement ttl for packets we don't
originate
  cl2 [1] -> output;

  dec [0] -> output;
  dec [1] -> ICMPError(me, 11, 0) -> [1] output;
};

li :: GridLocationInfo2(0, 0, LOC_GOOD false);

elementclass FixupGridHeaders {
  $li | // LocationInfo element
  input
-> FixSrcLoc($li)
    -> SetGridChecksum
    -> output;
};

elementclass ToGridDev {
  // push, no output
  $dev |
  input -> cl :: Classifier(
                            12/7ffe, // LinkStat 1
                            12/7ffd, // LinkStat 2
                            19/02,
                           19/03 );
  prio :: PrioSched;
  cl [0] -> probe_counter :: Counter -> probe_q :: Queue(5) -> [0] prio;
  cl [1] -> probe_counter;
  cl [2] -> route_counter :: Counter -> route_q :: Queue(5) ->
FixupGridHeaders(li) -> [1] prio;
  cl [3] ->  data_counter :: Counter ->  data_q :: Queue(5)
    -> data_counter_out :: Counter
    -> tr :: TimeRange
  -> lr :: LookupLocalGridRoute2(me:eth, me:ip, nb)
    -> FixupGridHeaders(li)
    -> data_counter_out2 :: Counter
    -> tr2 :: TimeRange
    -> [2] prio;
  prio
    -> dev_counter :: Counter
    -> t :: PullTee
    -> ToDevice($dev);
  t [1] -> SetTimestamp -> Discard;
};

elementclass FromGridDev {
  // push, no input
  // `Grid' packets on first output
  // `LinkStat' packets on second output
  $dev, $mac |
  FromDevice($dev, PROMISC false)
    -> t :: Tee
    -> HostEtherFilter($mac, DROP_OWN true)
 -> cl :: Classifier(12/7fff, 12/7ffe, 12/7ffd, -);
  cl [0]  // `Grid' packets
    -> ck :: CheckGridHeader
    -> [0] output;
  cl [1]  // `LinkStat 1' packets
    -> [1] output;
  cl [2]  // `LinkStat 2' packets
    -> [1] output;
  cl [3] // everything else
    -> [2] output;
  t [1] -> Discard;
  ck [1] -> Print('Bad Grid header received', TIMESTAMP true, NBYTES 166) ->
Discard;
};

elementclass GridLoad {
  // push, no input

  // DATASIZE should be the size of the desired UDP packet (including
  // ethernet, Grid, and IP headers), plus 2 for alignment.  It must
  // be at least 120.  Most of this is stripped off to be re-used
 // encapsulation.
  src :: InfiniteSource(ACTIVE false, DATASIZE 120)
    -> Strip(112) // 14 + 60 + 8 + 20 + 8 + 2 = 112
                  // (eth + grid + grid_encap + ip + udp + 2 for alignment)
    -> seq :: IncrementSeqNo(FIRST 0, OFFSET 0)
    -> SetIPAddress(me)
    -> StoreIPAddress(4)
    -> udp :: UDPIPEncap(me, 1111, 0.0.0.0, 8021)
    -> count :: Counter
    -> tr :: TimeRange
    -> output;

  ph :: PokeHandlers;
}

ls2 :: Idle;
ls :: LinkStat(ETH me:eth, SIZE 148 );
metric :: ETXMetric(ls );

nb :: DSDVRouteTable(60000, 15000, 7500, 1000,
                     me:eth, me:ip,
                     MAX_HOPS 100,
                     METRIC metric,
                     VERBOSE false

                     );

grid_demux :: Classifier(19/03,    // encapsulated (data) packets
                         19/02);   // route advertisement packets

arp_demux :: Classifier(12/0806 20/0001, // arp queries
                        12/0800);        // IP packets

// handles IP packets with no extra encapsulation
ip_demux :: IPClassifier(dst host me,    // ip for us
                         dst net me/24); // ip for Grid network

// handles IP packets with Grid data encapsulation
grid_data_demux :: IPClassifier(dst host me,    // ip for us
 dst net me/24); // ip for Grid network

// dev0
dev0 :: ToGridDev(ath0);
from_dev0 :: FromGridDev(ath0, me:eth)
from_dev0 [0] -> Paint(0) -> grid_demux
from_dev0 [1] -> Paint(0) -> probe_cl :: Classifier(12/7ffe, 12/7ffd);

probe_cl [0] -> ls ->  probe_switch :: Switch(0) -> dev0;
probe_cl [1] -> ls2 -> probe_switch;

// support for traceroute
dec_ip_ttl :: TTLChecker -> dev0;
dec_ip_ttl [1] -> ip_demux;

grid_demux [0] -> CheckIPHeader( , 82) -> grid_data_demux;
grid_demux [1] -> nb -> dev0;

ip_input :: CheckIPHeader -> GetIPAddress(16) -> ip_demux;
;
to_host_encap :: KernelTun(me/24, HEADROOM 68, MTU 1432) -> ip_input;

// not needed in userlevel
Idle -> arp_demux [0] -> Idle;
arp_demux [1] -> Idle;

from_dev0 [2] -> Discard;

ControlSocket(tcp, 7777);

ip_demux [0] -> to_host_encap;  // loopback packet sent by us, required on
BSD userlevel
ip_demux [1] -> GridEncap(me:eth, me:ip) -> dec_ip_ttl;   // forward packet
sent by us

grid_data_demux [0] -> Strip(82) -> to_host_encap;  // receive packet from
net for us
grid_data_demux [1] -> dec_ip_ttl;                                // forward
packet from net for someone else


// UDP packet generator
load :: GridLoad -> ip_input;


More information about the click mailing list