mirror of
https://github.com/soypat/lneto.git
synced 2026-08-08 17:03:40 +00:00
64b2647a5e
* tcp: remove retransmit logic entirely; add duplicate ack counting to ControlBlock * retransmit implemented in nice simple straightforward way * narrow down retransmission cases * remove old timing tests * add ControlBlock retransmit test * add failing handler test * reworking payload length semantic meaning in code * fix establish conn logic * clean up tests and add TCB dupack generation and test it * catch pending retransmit satisfy in test * add fuzz test for control block * bugfix: be more strict in what is considered dupack * add IncomingIsDupACK docs * limit queue of retransmits * protect retransmit overflow from incorrectly updating nxt
28 lines
640 B
Go
28 lines
640 B
Go
package internal
|
|
|
|
// Prand16 generates a pseudo random number from a seed.
|
|
func Prand16(seed uint16) uint16 {
|
|
// 16bit Xorshift https://en.wikipedia.org/wiki/Xorshift
|
|
seed ^= seed << 7
|
|
seed ^= seed >> 9
|
|
seed ^= seed << 8
|
|
return seed
|
|
}
|
|
|
|
// Prand32 generates a pseudo random number from a seed.
|
|
func Prand32[T ~uint32](seed T) T {
|
|
/* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" */
|
|
seed ^= seed << 13
|
|
seed ^= seed >> 17
|
|
seed ^= seed << 5
|
|
return seed
|
|
}
|
|
|
|
// Prand32 generates a pseudo random number from a seed.
|
|
func Prand64[T ~uint64](seed T) T {
|
|
seed ^= seed << 13
|
|
seed ^= seed >> 7
|
|
seed ^= seed << 17
|
|
return seed
|
|
}
|