[Click] Is DirectIPLookup work in kernel mode?

Marko Zec zec at icir.org
Thu May 19 12:12:30 EDT 2005


On Thursday 19 May 2005 18:08, Marko Zec wrote:
> On Thursday 19 May 2005 16:09, Alexander Sotnikov wrote:
> > Hi
> > Is DirectIPLookoop work in kernel mode? Or any fast lookup scheme?
> > Radix  "appear' to work but kernel panic after several minutes of
> > running or always crash after new config load
> > because i get "line 82:  failed to create element 'rt' "   with
> > current CVS version 1.5pre on 2.4.26 SMP
> > StaticIPLookup worg fine in place of DirectIPLookuo?
> > Any clue how to fix this?
>
> Alexander,
>
> DirectIPLookup should work fine in kernel mode, however it requires a
> huge amount of memory to operate even with small routing tables - the
> minimum footprint is 48 Bytes of RAM.  RangeIPLookup is even slightly
                       ^^^^^^^^

Of course I meant MBytes (48 megabytes), sorry for the typo.

Marko


> more memory-hungry than DirectIPLookup.  Can it be that you are just
> running out of kernel RAM?  Also, posting the kernel panic messages
> and / or the stack trace could help identifying the cause of the
> problem(s) you are observing.
>
> Marko
>
> > // fake-iprouter.click
> >
> > // This file is a network-independent version of the IP router
> > // configuration used in our SOSP paper.
> >
> > // The network sources (FromDevice or PollDevice elements) have
> > been // replaced with an InfiniteSource, which sends exactly the
> > packets we sent // in our tests. The ARPQueriers have been replaced
> > with EtherEncaps, and // the network sinks (ToDevice elements) have
> > been replaced with Discards. // Thus, you can play around with IP
> > routing -- benchmark our code, for // example -- even if you don't
> > have the Linux module or the pcap library.
> >
> >
> > // Kernel configuration for cone as a router between
> > // 18.26.4 (eth0) and 18.26.7 (eth1).
> > // Proxy ARPs for 18.26.7 on eth0.
> >
> > // eth1, 00:00:C0:AE:67:EF, 18.26.4.1
> > // eth2, 00:00:C0:4F:71:EF, 18.26.7.1
> >
> > // 0. ARP queries
> > // 1. ARP replies
> > // 2. IP
> > // 3. Other
> > // We need separate classifiers for each interface because
> > // we only want proxy ARP on eth0.
> > c0 :: Classifier(12/0806 20/0001,
> > 12/0806 20/0002,
> > 12/0800,
> > -);
> >
> > c1 :: Classifier(12/0806 20/0001,
> > 12/0806 20/0002,
> > 12/0800,
> > -);
> >
> >
> > fdev0 :: FromDevice(eth1);
> > fdev1 :: FromDevice(eth2);
> >
> > tdev0 :: ToDevice(eth1);
> > tdev1 :: ToDevice(eth2);
> >
> >
> > fdev0 -> [0]c0;
> > fdev1 -> [0]c1;
> >
> >
> > out0 :: Queue(200) -> tdev0;
> > out1 :: Queue(200) -> tdev1;
> > tol :: Discard;
> >
> > // An "ARP querier" for each interface.
> > arpq0 :: ARPQuerier(18.26.4.1, 00:00:C0:AE:67:EF);
> > arpq1 :: ARPQuerier(18.26.7.1, 00:00:C0:4F:71:EF);
> >
> > // Deliver ARP responses to ARP queriers as well as Linux.
> > t :: Tee(3);
> > c0[1] -> t;
> > c1[1] -> t;
> > t[0] -> tol;
> > t[1] -> [1]arpq0
> > t[2] -> [1]arpq1
> >
> > // Connect ARP outputs to the interface queues.
> > arpq0 -> out0;
> > arpq1 -> out1;
> >
> > // Proxy ARP on eth0 for 18.26.7, as well as cone's IP address.
> > ar0 :: ARPResponder(18.26.4.1 00:00:C0:AE:67:EF);
> > c0[0] -> ar0 -> out0;
> >
> > // Ordinary ARP on eth1.
> > ar1 :: ARPResponder(18.26.7.1 00:00:C0:4F:71:EF);
> > c1[0] -> ar1 -> out1;
> >
> > // IP routing table. Outputs:
> > // 0: packets for this machine.
> > // 1: packets for 18.26.4.
> > // 2: packets for 18.26.7.
> > // All other packets are sent to output 1, with 18.26.4.1 as the
> > gateway. rt :: DirectIPLookup(18.26.4.1/32 0,
> > 18.26.4.255/32 0,
> > 18.26.4.0/32 0,
> > 18.26.7.1/32 0,
> > 18.26.7.255/32 0,
> > 18.26.7.0/32 0,
> > 18.26.4.0/24 1,
> > 18.26.7.0/24 2,
> > 0.0.0.0/0 18.26.4.2 1);
> >
> > // Hand incoming IP packets to the routing table.
> > // CheckIPHeader checks all the lengths and length fields
> > // for sanity.
> > ip :: Strip(14)
> > -> CheckIPHeader(INTERFACES 18.26.4.1/24 18.26.7.1/24)
> > -> [0]rt;
> > c0[2] -> Paint(1) -> ip;
> > c1[2] -> Paint(2) -> ip;
> >
> > // IP packets for this machine.
> > // ToHost expects ethernet packets, so cook up a fake header.
> > rt[0] -> EtherEncap(0x0800, 1:1:1:1:1:1, 2:2:2:2:2:2) -> tol;
> >
> > // These are the main output paths; we've committed to a
> > // particular output device.
> > // Check paint to see if a redirect is required.
> > // Process record route and timestamp IP options.
> > // Fill in missing ip_src fields.
> > // Discard packets that arrived over link-level broadcast or
> > multicast. // Decrement and check the TTL after deciding to
> > forward. // Fragment.
> > // Send outgoing packets through ARP to the interfaces.
> > rt[1] -> DropBroadcasts
> > -> cp1 :: PaintTee(1)
> > -> gio1 :: IPGWOptions(18.26.4.1)
> > -> FixIPSrc(18.26.4.1)
> > -> dt1 :: DecIPTTL
> > -> fr1 :: IPFragmenter(300)
> > -> [0]arpq0;
> > rt[2] -> DropBroadcasts
> > -> cp2 :: PaintTee(2)
> > -> gio2 :: IPGWOptions(18.26.7.1)
> > -> FixIPSrc(18.26.7.1)
> > -> dt2 :: DecIPTTL
> > -> fr2 :: IPFragmenter(300)
> > -> [0]arpq1;
> >
> > // DecIPTTL[1] emits packets with expired TTLs.
> > // Reply with ICMPs. Rate-limit them?
> > dt1[1] -> ICMPError(18.26.4.1, timeexceeded) -> [0]rt;
> > dt2[1] -> ICMPError(18.26.4.1, timeexceeded) -> [0]rt;
> >
> > // Send back ICMP UNREACH/NEEDFRAG messages on big packets with DF
> > set. // This makes path mtu discovery work.
> > fr1[1] -> ICMPError(18.26.7.1, unreachable, needfrag) -> [0]rt;
> > fr2[1] -> ICMPError(18.26.7.1, unreachable, needfrag) -> [0]rt;
> >
> > // Send back ICMP Parameter Problem messages for badly formed
> > // IP options. Should set the code to point to the
> > // bad byte, but that's too hard.
> > gio1[1] -> ICMPError(18.26.4.1, parameterproblem) -> [0]rt;
> > gio2[1] -> ICMPError(18.26.4.1, parameterproblem) -> [0]rt;
> >
> > // Send back an ICMP redirect if required.
> > cp1[1] -> ICMPError(18.26.4.1, redirect, host) -> [0]rt;
> > cp2[1] -> ICMPError(18.26.7.1, redirect, host) -> [0]rt;
> >
> > // Unknown ethernet type numbers.
> > c0[3] -> Print(c3) -> Discard;
> > c1[3] -> Print(c3) -> Discard;
> >
> > _______________________________________________
> > click mailing list
> > 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