Hi! On 16:41 Sun 16 Aug , Richard Sailer wrote: > Hi, > > > If reordering causes TCP to believe packets are lost, there will > > probably be other issues as well, like sending of useless retransmits. I would > > rather try to detect this kind of reordering and ignore dupacks and rely only > > on timeouts to detect loss. > Well this is exactly how TCP-PR works :). > But maybe this misunderstanding is my fault for writing a much to long > and detailed mail. I will try to write shorter mails in future. > > == About: Doing this inside Congestion control (CC) == > > Well I think sending retransmit is part of CC. > Strictly CC is "everything done to adapt the amount of data sent to the > transmission capacity of the network". But I'm not entirely sure if > saying retransmission is part of this is 100% correct. > > Well in the end practically it doesn't matter how one classifies the > "not sending of retransmits" it has to be implemented. This is what confused me: To me congestion control is only about adapting the send speed. > And from an implementation point of view I think you are right. > None of the existing CC modules interferes with reacting on DUPACKs > or sending retransmits. > Also looking at the function pointer interface for modules > /tcp_congestion_ops/ : > > struct tcp_congestion_ops { > struct list_head list; > u32 key; > u32 flags; > > /* initialize private data (optional) */ > void (*init)(struct sock *sk); > /* cleanup private data (optional) */ > void (*release)(struct sock *sk); > > /* return slow start threshold (required) */ > u32 (*ssthresh)(struct sock *sk); > /* do new cwnd calculation (required) */ > void (*cong_avoid)(struct sock *sk, u32 ack, u32 acked); > /* call before changing ca_state (optional) */ > void (*set_state)(struct sock *sk, u8 new_state); > /* call when cwnd event occurs (optional) */ > void (*cwnd_event)(struct sock *sk, enum tcp_ca_event ev); > /* call when ack arrives (optional) */ > void (*in_ack_event)(struct sock *sk, u32 flags); > /* new value of cwnd after loss (optional) */ > u32 (*undo_cwnd)(struct sock *sk); > /* hook for packet ack accounting (optional) */ > void (*pkts_acked)(struct sock *sk, u32 num_acked, s32 rtt_us); > /* get info for inet_diag (optional) */ > size_t (*get_info)(struct sock *sk, u32 ext, int *attr, > union tcp_cc_info *info); > > char name[TCP_CA_NAME_MAX]; > struct module *owner; > }; > > doesn't look that promising. > Well there is (*cwnd_event) which be meaningfull in > "not reducing cwnd after a retransmission has been sent" > and perhaps even for "not stopping the timer". > But I'm not sure if sending retransmit packets can be prevented > from here. > Currently it looks like I will have to make some further parts > of tcp_input.c and tcp_output.c available for CC modules. > But I have to look deeper into this the next few days to know and do > this for sure. This is what I meant when I said congestion control is probably not what you want to mess with. -Michi -- programing a layer 3+4 network protocol for mesh networks see http://michaelblizek.twilightparadox.com _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies