Replying to Henrik Nordstrom: Be advised, that you can encounter unexpected difficulties with wccp protocol starting from linux kernel 2.6.16. In this kernel code path which assings IP ID to UDP packets was changed; IP ID on packets leaving from unconnected datagram socket with DF set is always 0.
Cisco ios 12.4.7 and 12.4.8 (and I assume that all previous versions too) threating these packets as duplicates, and ingnores all except the first HIA. Although I haven't tested the exact pattern implemented in wccp2.c (I'm using my own python implementation), I think your results will be the same as mine. And it you do connect() on socket, the IP ID will be nonzero but you will lose incoming packets from hosts other than connected. I've implemented a workaround here. For the first time, I thought I can use n+1 sockets - one for each router in the view for sending, and another one bound to local port 2048 - for receiving. But after some initial testing I've discovered Cisco IOS violating not only ancient RFCs (RFC791) but it violates Cisco's own draft. I_See_you (and removal_query) packets are going to sending side of individual sockets - instead of port 2048 on my ost, as I expected. So, my current implementation which works with 2.6.16 kernel creates individual socket for each router in the view and using these for both sending and receiving. Hope this will avoid some debugging :) -- Paul P 'Stingray' Komkoff Jr // http://stingr.net/key <- my pgp key This message represents the official view of the voices in my head
