-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi all,
I started to port the BSD-tcp stack to click. (4.4BSD-lite) you can fetch my tree from git clone http://www.net.t-labs.tu-berlin.de/~harald/git/click (build with --enable-local) It is at a very early stage! This is the intended mode of operation (with UDP as an example): *Statefull Side* *Stateless Side* FromDev -> |0 1| -> TCPtoUDP -> Checksum -> ToDev | TCPSpeaker| ToDev <- Checksums <- |0 1| <- UDPtoTCP <- FromDev TCPSpeaker accepts all incoming tcp-connections, does the handshakes, reorders and retransmits the packets on the statefull side It outputs in-order data-only packets. Same is true on the reverse direction: It accepts in-order data-only packets (seq-nr and flags are ignored) It establishes a connection and transmits the data, caring for congestion control, rec-windows ... Current status (probably incomplete list): * Seems to work on first glance. * Seems to handle delay/loss ok. * Seems to handle windows ok. * MSS support mostly broken (fixed hard at 1400 bytes) * Window scaling works * Timestamp works * SACK not implemented/not planned. * drops packets silently if flooded from stateless side. * No read-handlers for the statistics yet. * documentation is non-existent * compiles with zillions of warnings * Can only handle one connection at a time, but prepared for more. * lots of stupid variable names need refactoring * lots of noisy debug output that cannot be switched off I have several question on how to fix some of these points, I'll send a separate mail. here is my example test script: **snip tcptest.click** tun0 :: KernelTun (10.0.0.1/24); tun0q :: Queue -> tun0; ip_out_0 :: SetIPChecksum ( ) -> tun0q; tun1 :: KernelTun (10.0.1.1/24) ; tcps1:: TCPSpeaker(FLAGS 257); tun0 -> Queue -> DelayUnqueue(1000ms) // -> RandomSample(DROP 0.02) -> IPPrint(to[0], PAYLOAD ASCII) -> tcps1 ; tcps1[0] // -> IPPrint(from[0], PAYLOAD ASCII ) -> IPPrint(from[0]) -> SetTCPChecksum () -> Queue -> DelayUnqueue(1000ms) // -> RandomSample(DROP 0.02) -> ip_out_0; tcps1[1] -> IPPrint(direct-from[1]) -> TCPtoUDP () -> StoreIPAddress(10.0.1.2, 12) -> StoreIPAddress(10.0.1.1, 16) -> SetUDPChecksum() -> SetIPChecksum() -> IPPrint(from[1]) -> tun1 ; **snip** with this config, run in two seperate shells: version a: (tcp establishes connection) nc 10.0.0.2 5000 nc -l -u -p 5000 version b: (udp starts connection) nc 10.0.1.2 5000 nc -l -p 5000 type something in the first shell (the one without -l :) then type something on either side :) - - Harald Schiöberg Technische Universität Berlin | T-Laboratories | FG INET www: http://www.net.t-labs.tu-berlin.de Phone: +49-(0)30-8353-58476 | Fax: +49-(0)391 534 783 47 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFIc4wBJgyxs71kcx4RAkD7AKCX1MOCaV+rfXvtbEMWOPNAIsFrNgCg44Y+ Tg80Z1HMeF/mL9nTUy9yCFQ= =c+aI -----END PGP SIGNATURE----- _______________________________________________ click mailing list [email protected] https://amsterdam.lcs.mit.edu/mailman/listinfo/click
