Files
lneto/internal/prand.go
T
Pat Whittingslow 64b2647a5e tcp: retransmit logic rollback (#61)
* 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
2026-03-26 11:48:02 -03:00

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
}