[Click] Problems using Click

Julián David Morillo Pozo jmorillo at ac.upc.edu
Thu Feb 3 10:21:02 EST 2005


Hello,

We are trying to comunicate two machines using user level CLICK, but some 
strange things are happening. We are using two directly connected machines 
that have flat IP addresses (10.0.0.1/32 and 10.0.0.4/32) and that act both 
as a router and as a host. In order to allow this behaviour, we are using the 
KernelTun element and every packet generated by the machine is routed to the 
tun0 device created by this element (this is the only route we have in the 
kernel forwarding table of both machines). 

We are able to ping from one machine to the other but we can not establish a 
tcp connection (ftp, ssh) between them. By executing tcpdump on the client 
machine (10.0.0.4/32) we have got the following:

tcpdump: listening on eth0
15:34:58.439506 10.0.0.1.35284 > 10.0.0.4.ftp: S 2110020349:2110020349(0) win 
6024 <mss 2008,sackOK,timestamp 590699432 0,nop,wscale 1> (DF)
15:34:58.439774 10.0.0.4.ftp > 10.0.0.1.35284: S 2069372027:2069372027(0) ack 
2110020350 win 5988 <mss 2008,sackOK,timestamp 619677506 590699432,nop,wscale 
0> (DF)
15:34:58.439948 10.0.0.1.35284 > 10.0.0.4.ftp: R 2110020350:2110020350(0) win 
0 (DF)

And at the same time, click shows the following error messages:

LinearIPLookup: no gw for 3205393
LinearIPLookup: no gw for 4215393

Everything works fine if we use regular kernel forwarding in the client 
machine (10.0.0.4/32).

The CLICK configuration we are using in the client is the following (in the 
server, the configuration is the same, just changing IP addresses):

============================================================
// Shared IP input path and routing table
_xorp_ip :: Strip(14)
    -> CheckIPHeader(INTERFACES 10.0.0.1/32)
    -> _xorp_rt :: LinearIPLookup(10.0.0.1/32 1, 10.0.0.4/32 0);

elementclass FixChecksums {
    input -> SetIPChecksum
          -> ipc :: IPClassifier(tcp, udp, -)
          -> SetTCPChecksum
          -> output;
    ipc[1] -> SetUDPChecksum -> output;
    ipc[2] -> output
}

tun :: KernelTun(172.16.0.1/24) -> Paint(0) -> _xorp_rt;


// ARP responses are copied to each ARPQuerier and the host.
_xorp_arpt :: Tee(2);

// Input and output paths for eth0
_xorp_c0 :: Classifier(12/0806 20/0001, 12/0806 20/0002, 12/0800, -);
FromDevice(eth0) -> _xorp_c0;
_xorp_out0 :: Queue(200) -> _xorp_to_device0 :: ToDevice(eth0);
_xorp_c0[0] -> _xorp_ar0 :: ARPResponder(10.0.0.1 00:0C:6E:F2:9B:6E) -> 
_xorp_out0;
_xorp_arpq0 :: ARPQuerier(10.0.0.1, 00:0C:6E:F2:9B:6E) -> _xorp_out0;
_xorp_c0[1] -> _xorp_arpt;
_xorp_arpt[0] -> [1]_xorp_arpq0;
_xorp_c0[2] -> Paint(1) -> _xorp_ip;
_xorp_c0[3] -> Print("eth0 non-IP") -> Discard;

// Local delivery
_xorp_arpt[1] -> Discard;
_xorp_rt[1] -> Discard;

// Forwarding path for eth0
_xorp_rt[0] -> DropBroadcasts -> _xorp_sw0 :: PaintSwitch();
_xorp_gio0 :: IPGWOptions(10.0.0.1)
    -> FixIPSrc(10.0.0.1)
    -> _xorp_dt0 :: DecIPTTL
    -> _xorp_fr0 :: IPFragmenter(1500)
    -> [0]_xorp_arpq0;

_xorp_sw0[0] -> StoreIPAddress(10.0.0.1,12) -> FixChecksums -> _xorp_fr0;
_xorp_sw0[1] -> _xorp_cp0 :: Tee(2) -> ICMPError(10.0.0.1, redirect, host) -> 
_xorp_rt;
_xorp_cp0[1] -> _xorp_gio0
_xorp_dt0[1] -> ICMPError(10.0.0.1, timeexceeded) -> _xorp_rt;
_xorp_fr0[1] -> ICMPError(10.0.0.1, unreachable, needfrag) -> _xorp_rt;
_xorp_gio0[1] -> ICMPError(10.0.0.1, parameterproblem) -> _xorp_rt;
==============================================================

Does anybody know what is the problem?

Cheers,
-- 
=============================================
Julián David Morillo Pozo
PhD Student - Computer Networking Group
Department of Computer Architecture   (DAC)
Polytechnical University of Catalonia (UPC)
Phone: +34-934017182   Fax: +34-934017055
URL: http://people.ac.upc.edu/jmorillo
=============================================




More information about the click mailing list