[Click] Using userlevel-click to forward packet

Luca Belforte luca.belforte at student.uclouvain.be
Sun Nov 22 09:25:47 EST 2009


Hello all,

I also have a problem delivering packet to "kernel"

I have a toHost, who work, but the ping or traceroute application
dosen't receive the information, but i see the exchange in click, if a
put some print.

Mycode:


_xorp_out2 :: ToHost(fake);

_xorp_rt4[2]  -> IPPrint("toHost1") -> EtherEncap(0x0800, 1:1:1:1:1:1,
2:2:2:2:2:2) -> _xorp_out2;
_xorp_arpt[2] -> IPPrint("toHost2") -> _xorp_out2;

and my config is

R1 (10.10.10.10) -------------------------------- (10.10.10.11) R2
When i ping 10.10.10.10 from R2, i see on click that R1 receive ICMP
Echo, and send a reply, R2 receive the ICMP Echo-Reply, and transmit to
host, the printed line is :

toHost1: icmp echo reply (with the ip address etc etc)

But the ping command, doesn't receive the ping answer, so i think the
packets are lost

How correctly deliver the packet to the host?

Thanks

Luca

Luca Belforte wrote:
> Hello,
>
> i added the following code:
>
>  FromHost(fake0) -> _xorp_c2 :: Classifier(
>     12/0800,        // [0] IPv4 packet
>     12/0806)    // [1] ARP request
>      _xorp_to_device2 :: ToHost(fake0);
>
>     // IPv4
>     _xorp_c2[0] -> Paint(1) -> _xorp_ip4;
>     _xorp_c2[1] -> ARPResponder(0.0.0.0/0 1:1:1:1:1:1) -> _xorp_to_device2;
>    
> but this doesn't help, I'm still having the same problem.
>
> Thanks
>
> Luca
>
> Cliff Frey wrote:
>   
>> Luca,
>>
>> Please respond to the mailing list so that other people can help out too.
>>
>> I believe that there is an example online:
>> http://read.cs.ucla.edu/click/examples/fromhost-tunnel.click
>>
>> In some cases you can get away with just using ToHost... like in most
>> of the other examples.
>>
>> On Thu, Nov 19, 2009 at 10:48 AM, Luca Belforte
>> <luca.belforte at student.uclouvain.be
>> <mailto:luca.belforte at student.uclouvain.be>> wrote:
>>
>>     Hello Cliff,
>>
>>     thanks, this sound what i was searching for. (Strange that the xorp
>>     generator script doesn't use it)
>>
>>     Did you have an example on how i can configure it?
>>
>>     Thanks
>>
>>     Luca
>>
>>
>>     Cliff Frey wrote:
>>     > Luca,
>>     >
>>     > You need to add a FromHost element to your config which will receive
>>     > packets from Linux, and a ToHost element that will deliver
>>     packets to
>>     > Linux.
>>     >
>>     > Cliff
>>     >
>>     > On Thu, Nov 19, 2009 at 10:10 AM, Luca Belforte
>>     > <luca.belforte at student.uclouvain.be
>>     <mailto:luca.belforte at student.uclouvain.be>
>>     > <mailto:luca.belforte at student.uclouvain.be
>>     <mailto:luca.belforte at student.uclouvain.be>>> wrote:
>>     >
>>     >     I put here my click configuration
>>     >
>>     >     I'm using click 1.7 because the 1.6 doesn't work with xorp
>>     >
>>     >     //
>>     >     // Generated by XORP FEA
>>     >     //
>>     >
>>     >
>>     >     // Shared IPv4 input path and routing table
>>     >
>>     >        _xorp_ip4 :: Strip(14)
>>     >       -> CheckIPHeader(INTERFACES 10.10.10.11/24
>>     <http://10.10.10.11/24>
>>     >     <http://10.10.10.11/24> 10.30.30.10/24
>>     <http://10.30.30.10/24> <http://10.30.30.10/24>)
>>     >       -> _xorp_rt4 :: LinearIPLookup(10.10.10.11/32
>>     <http://10.10.10.11/32>
>>     >     <http://10.10.10.11/32> 2, 10.30.30.10/32
>>     <http://10.30.30.10/32> <http://10.30.30.10/32> 2);
>>     >
>>     >
>>     >     // ARP responses are copied to each ARPQuerier and the host.
>>     >
>>     >        _xorp_arpt :: Tee(3);
>>     >
>>     >
>>     >     // Input and output paths for eth1
>>     >
>>     >        FromDevice(eth1, SNIFFER false) -> _xorp_c0 :: Classifier(
>>     >        12/0800,        // [0] IPv4 packet
>>     >        12/0806 20/0001,    // [1] ARP request
>>     >        12/0806 20/0002,    // [2] ARP reply
>>     >        12/86dd 20/3aff 54/87,    // [3] IPv6 ICMP ND solicitation
>>     >        12/86dd 20/3aff 54/88,    // [4] IPv6 ICMP ND advertisment
>>     >        12/86dd,        // [5] IPv6 packet
>>     >        -)            // [6] Unsupported protocol;
>>     >        _xorp_out0 :: Queue(200) -> _xorp_to_device0 ::
>>     ToDevice(eth1);
>>     >
>>     >        // IPv4
>>     >        _xorp_c0[0] -> Paint(1) -> _xorp_ip4;
>>     >        _xorp_c0[1] -> ARPResponder(10.10.10.11 8:0:27:23:1a:29) ->
>>     >     _xorp_out0;
>>     >        _xorp_arpq0 :: ARPQuerier(10.10.10.11, 8:0:27:23:1a:29) ->
>>     >     _xorp_out0;
>>     >        _xorp_c0[2] -> _xorp_arpt;
>>     >        _xorp_arpt[0] -> [1]_xorp_arpq0;
>>     >
>>     >        // Discard IPv6
>>     >        _xorp_c0[5] -> Discard;
>>     >        _xorp_c0[3] -> Discard;
>>     >        _xorp_c0[4] -> Discard;
>>     >
>>     >        // Unknown protocol
>>     >        _xorp_c0[6] -> Print("eth1 unknown protocol") -> Discard;
>>     >
>>     >
>>     >     // Input and output paths for eth2
>>     >
>>     >        FromDevice(eth2, SNIFFER false) -> _xorp_c1 :: Classifier(
>>     >        12/0800,        // [0] IPv4 packet
>>     >        12/0806 20/0001,    // [1] ARP request
>>     >        12/0806 20/0002,    // [2] ARP reply
>>     >        12/86dd 20/3aff 54/87,    // [3] IPv6 ICMP ND solicitation
>>     >        12/86dd 20/3aff 54/88,    // [4] IPv6 ICMP ND advertisment
>>     >        12/86dd,        // [5] IPv6 packet
>>     >        -)            // [6] Unsupported protocol;
>>     >        _xorp_out1 :: Queue(200) -> _xorp_to_device1 ::
>>     ToDevice(eth2);
>>     >
>>     >        // IPv4
>>     >        _xorp_c1[0] -> Paint(2) -> _xorp_ip4;
>>     >        _xorp_c1[1] -> ARPResponder(10.30.30.10 8:0:27:2b:ed:3f) ->
>>     >     _xorp_out1;
>>     >        _xorp_arpq1 :: ARPQuerier(10.30.30.10, 8:0:27:2b:ed:3f) ->
>>     >     _xorp_out1;
>>     >        _xorp_c1[2] -> _xorp_arpt;
>>     >        _xorp_arpt[1] -> [1]_xorp_arpq1;
>>     >
>>     >        // Discard IPv6
>>     >        _xorp_c1[5] -> Discard;
>>     >        _xorp_c1[3] -> Discard;
>>     >        _xorp_c1[4] -> Discard;
>>     >
>>     >        // Unknown protocol
>>     >        _xorp_c1[6] -> Print("eth2 unknown protocol") -> Discard;
>>     >
>>     >
>>     >     // Local delivery
>>     >
>>     >        _xorp_toh :: Discard;
>>     >
>>     >        // IPv4
>>     >        _xorp_rt4[2] -> EtherEncap(0x0800, 1:1:1:1:1:1,
>>     2:2:2:2:2:2) ->
>>     >     _xorp_toh;
>>     >        _xorp_arpt[2] -> _xorp_toh;
>>     >
>>     >
>>     >     // Forwarding path for eth1
>>     >
>>     >        // IPv4
>>     >        _xorp_rt4[0] -> DropBroadcasts
>>     >        -> _xorp_cp0 :: PaintTee(1)
>>     >        -> _xorp_gio0 :: IPGWOptions(10.10.10.11)
>>     >        -> FixIPSrc(10.10.10.11)
>>     >        -> _xorp_dt0 :: DecIPTTL
>>     >        -> _xorp_fr0 :: IPFragmenter(1500)
>>     >        -> [0]_xorp_arpq0;
>>     >        _xorp_dt0[1] -> ICMPError(10.10.10.11, timeexceeded) ->
>>     _xorp_rt4;
>>     >        _xorp_fr0[1] -> ICMPError(10.10.10.11, unreachable,
>>     needfrag) ->
>>     >     _xorp_rt4;
>>     >        _xorp_gio0[1] -> ICMPError(10.10.10.11, parameterproblem) ->
>>     >     _xorp_rt4;
>>     >        _xorp_cp0[1] -> ICMPError(10.10.10.11, redirect, host) ->
>>     >     _xorp_rt4;
>>     >
>>     >
>>     >     // Forwarding path for eth2
>>     >
>>     >        // IPv4
>>     >        _xorp_rt4[1] -> DropBroadcasts
>>     >        -> _xorp_cp1 :: PaintTee(2)
>>     >        -> _xorp_gio1 :: IPGWOptions(10.30.30.10)
>>     >        -> FixIPSrc(10.30.30.10)
>>     >        -> _xorp_dt1 :: DecIPTTL
>>     >        -> _xorp_fr1 :: IPFragmenter(1500)
>>     >        -> [0]_xorp_arpq1;
>>     >        _xorp_dt1[1] -> ICMPError(10.30.30.10, timeexceeded) ->
>>     _xorp_rt4;
>>     >        _xorp_fr1[1] -> ICMPError(10.30.30.10, unreachable,
>>     needfrag) ->
>>     >     _xorp_rt4;
>>     >        _xorp_gio1[1] -> ICMPError(10.30.30.10, parameterproblem) ->
>>     >     _xorp_rt4;
>>     >        _xorp_cp1[1] -> ICMPError(10.30.30.10, redirect, host) ->
>>     >     _xorp_rt4;
>>     >
>>     >
>>     >     And here we can see the correct routing table:
>>     >     10.10.10.11/32 <http://10.10.10.11/32>
>>     <http://10.10.10.11/32>        -        2
>>     >     10.30.30.10/32 <http://10.30.30.10/32>
>>     <http://10.30.30.10/32>        -        2
>>     >     10.10.10.0/24 <http://10.10.10.0/24> <http://10.10.10.0/24>
>>            -        0
>>     >     10.30.30.0/24 <http://10.30.30.0/24> <http://10.30.30.0/24>
>>            -        1
>>     >     10.20.20.0/24 <http://10.20.20.0/24> <http://10.20.20.0/24>
>>            10.10.10.10    0
>>     >
>>     >     (the subnet 10.20.20.0/24 <http://10.20.20.0/24>
>>     <http://10.20.20.0/24> come from the
>>     >     other router connected)
>>     >
>>     >     So click know it.
>>     >
>>     >     But if i do a :
>>     >
>>     >     ping 10.20.20.10 (who exist) i have the following message:
>>     >     connect: Network is unreachable
>>     >
>>     >     The connect command doesn't know the click route :(
>>     >
>>     >     I really don't know what do
>>     >
>>     >     Thanks
>>     >
>>     >     Luca
>>     >
>>     >     Luca Belforte wrote:
>>     >     > Hi Beyers,
>>     >     >
>>     >     > yes theoretically, but my problem is different. If y
>>     delete all
>>     >     the ip
>>     >     > route in the kernel (ip route flush all) so I'm sure the
>>     kernel
>>     >     can't
>>     >     > help. Then ping command doesn't work.
>>     >     >
>>     >     > My question is more how force click to process the who coming
>>     >     from the
>>     >     > system itself? (like a ping or traceroute command)
>>     >     >
>>     >     > Or opposite how to be sure that click process it?
>>     >     >
>>     >     > thanks
>>     >     >
>>     >     > Luca
>>     >     >
>>     >     > Beyers Cronje wrote:
>>     >     >
>>     >     >> Hi Luca,
>>     >     >>
>>     >     >> Theoretically using FromDevice with "SNIFFER false" then
>>     the kernel
>>     >     >> should not process the packets.
>>     >     >>
>>     >     >> Beyers
>>     >     >>
>>     >     >> On Wed, Nov 18, 2009 at 10:08 PM, Luca Belforte
>>     >     >> <luca.belforte at student.uclouvain.be
>>     <mailto:luca.belforte at student.uclouvain.be>
>>     >     <mailto:luca.belforte at student.uclouvain.be
>>     <mailto:luca.belforte at student.uclouvain.be>>
>>     >     >> <mailto:luca.belforte at student.uclouvain.be
>>     <mailto:luca.belforte at student.uclouvain.be>
>>     >     <mailto:luca.belforte at student.uclouvain.be
>>     <mailto:luca.belforte at student.uclouvain.be>>>> wrote:
>>     >     >>
>>     >     >>     Hello,
>>     >     >>
>>     >     >>     i have a xorp+click installation, who works, click
>>     receive
>>     >     the correct
>>     >     >>     routes.
>>     >     >>     But if i want to do a ping, or traceroute it still
>>     use the
>>     >     kernel
>>     >     >>     route
>>     >     >>     informations.
>>     >     >>     I tried to disable the SNIFFING mode, but without
>>     success.
>>     >     >>
>>     >     >>     How can i use click to route packet coming from the
>>     system?
>>     >     >>
>>     >     >>     Thanks in advance
>>     >     >>
>>     >     >>     Luca
>>     >     >>     _______________________________________________
>>     >     >>     click mailing list
>>     >     >>     click at amsterdam.lcs.mit.edu
>>     <mailto:click at amsterdam.lcs.mit.edu>
>>     >     <mailto:click at amsterdam.lcs.mit.edu
>>     <mailto:click at amsterdam.lcs.mit.edu>>
>>     >     <mailto:click at amsterdam.lcs.mit.edu
>>     <mailto:click at amsterdam.lcs.mit.edu>
>>     >     <mailto:click at amsterdam.lcs.mit.edu
>>     <mailto:click at amsterdam.lcs.mit.edu>>>
>>     >     >>     https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>>     >     >>
>>     >     >>
>>     >     >>
>>     >     > _______________________________________________
>>     >     > click mailing list
>>     >     > click at amsterdam.lcs.mit.edu
>>     <mailto:click at amsterdam.lcs.mit.edu>
>>     <mailto:click at amsterdam.lcs.mit.edu
>>     <mailto:click at amsterdam.lcs.mit.edu>>
>>     >     > https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>>     >     >
>>     >     >
>>     >     _______________________________________________
>>     >     click mailing list
>>     >     click at amsterdam.lcs.mit.edu
>>     <mailto:click at amsterdam.lcs.mit.edu>
>>     <mailto:click at amsterdam.lcs.mit.edu
>>     <mailto:click at amsterdam.lcs.mit.edu>>
>>     >     https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>>     >
>>     >
>>
>>
>>     
> _______________________________________________
> click mailing list
> click at amsterdam.lcs.mit.edu
> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>
>   


More information about the click mailing list