Monthly Archives: August 2005

DCCP Progresses

A lot of things were implemented since my latest entry here, let me mention some:

  • setsockopt and getsockopt for the packet size, that is used in the CCID3 transmit rate calculations and tested it using ttcp patched to support DCCP
  • mucho ccid3 polishing (timeval, usecs divisions, etc)
  • moved the loss interval code from ccid3 to loss_interval.c
  • moved the TFRC equation used to determine the sending rate according to RFC 3448 (TCP Friendly Rate Control) to tfrc_equation.c
  • moved more packet history code to packet_history.c
  • created a new module, dccp_tfrc_lib.ko, that for now is used only by ccid3.c but will be used to implement other CCIDs, such as the CCID3 VoIP variant
  • implemented dccp_poll, and tested it with netcat patched to support DCCP
  • implemented dccp_get_info, now its possible to get information such as the rcv and send RTT, etc using iproute2

I also setup a test network here at home with a router between the two machines where I run DCCP clients and servers, ttcp mostly so far and in the router I use the netem qdisc to induce packet loss and delay, I’m really liking netem so far, very handy.

The behaviour of this stack is very promising, with good results, mostly matching what is expected, interested readers can take a look at some OSTRA callgraphs and plottings, such as the one for the sending rate under high packet loss.

This entry somehow disappeared from my MySQL wordpress tables, so I restored it from google cache, unfortunately there were some comments in this entry but I didn’t took the time of restoring it from the cache, I’m sorry…

DCCP Milestone

Sent a message to the DCCP lists (at vger and IETF) reporting a milestone, the current implementation finally survives sending tons of data in a DCCP patched ttcp, the CLOSING timer is basicly implemented and now I’m working on providing more info thru inet_diag, so it seems this thing is in the right direction.

Sparse & DCCP

Got most of net/ sparse clean, Dave merged all the submitted patches and the last cases (related to put_cmsg et al) I’m discussing with Al Viro.

Also fixed a nasty bug in DCCP related to the draft pseudocode step 6, where we’re not using the updated SWL when receiving SYNC or SYNCACK packets. Also actually answer SYNC packets with SYNCACK ones, there is still some remaining case where a received SYNC is not eliciting an immediate SYNCACK packet, will investigate tomorrow.

Ostra + Kprobes

Spent some time on ostra after some weeks, this time making ostra-grep create .ostra.proto files with the target function prototypes so that ostra-create-kmodule can create the respective jprobes, there are still some problems with typedefs but with some minimal hand editing the generated kernel module works well. Now I’m trying to figure out how to access the function parameters in a kretprobe, will take a look at systemtap to see if they solve this in some way.

tcp_diag generalised

David came up with a proof-of-concept patch in the dccp at vger dot kernel dot org mailing list, mostly with what I was planning to do anyway, so I took from there and now there are 6 changesets doing this work waiting for review/merging at my latest tree.

UDP needs more thinking on how to properly make it use inet_diag, perhaps by passing the lookup function pointer in struct inet_diag_handler and marking this struct as handling non inet_connection_sock sockets so that it doesn’t try to mess with non existing fields of the cast passed udp_hashinfo, that would really be just a struct inet_ehash_bucket modified to have the ehash_size moved from inet_hashtables to it.

Merge day

Today what was done was mostly merging with Dave, and now all of the previously published changesets in all those dccp/net trees are in Dave’s 2.6.14.git tree.

I did several tests with iproute2 and tcp_diag.c generalised, seems rather easy to implement, so I’ll do it perhaps in some minutes.

Finally I’m getting in discussions about the code functionality, API to be defined, so, lets talk about it as much as possible.

tcp_diag and tp->ca_ops turn

I have been working now to remove the last TCP specific bits in net/ipv4/tcp_diag.c, and to accomplish this the TCP CA avoidance infrastructure will be moved to struct inet_connection_sock, antecipating something I planned to do anyway, i.e. to generalise this infrastructure to use it in DCCP and who knows, even turn it into a generic infrastructure for use by other protocols or even other unrelated kernel areas (whee, here I’m possibly going over the top, time will tell).

But this will have to wait till later today, time to have some sleep.

Ah, I also have fully read David Miller’s excellent pages documenting the struct sk_buff internals, and had some ideas… nah, lets leave this for later, after DCCP and TCP refactorings gets to a good shape.


This is perhaps one of the funniest areas in net/, with things like “death_lock” and “for_each_inmate”, I have moved all of this code to net/ipv4/inet_timewait_sock and now DCCP has TIMEWAIT sockets sharing hashdances and hangmens with TCP! 🙂

DCCP 2.6 tree!

Oysters, Shellfish and Ice cream!

Just got back from Estação Shopping, oysters are always good at Bombordo, but I had never tried shellfish (kinda boiled), yummy indeed, and to finish some fancy ice-cream, no wonder I’m way overweight, but nah, its good to get away from the keyboard for a while, Sarita likes it even more 8) And she bought so many wool threads that I guess she will knit for weeks.

iptables support for DCCP

Heh, thanks to Harald we already have basic DCCP iptables support, have to get used to work on non-legacy stuff 😉