summaryrefslogtreecommitdiff
path: root/lru.go
blob: e0a386fc79b7fbf376d508735eb55cd5f09cbffb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import "encoding/binary"

const (
	// FNV-1a
	offset32 = uint32(2166136261)
	prime32  = uint32(16777619)
)

func hashPacket(p PacketTruncated) uint32 {
	h := offset32
	b := make([]byte, 12)
	binary.BigEndian.PutUint32(b[0:4], p.To)
	binary.BigEndian.PutUint32(b[4:8], p.From)
	binary.BigEndian.PutUint32(b[8:12], p.ID)
	for ; len(b) >= 4; b = b[4:] {
		h = (h ^ uint32(b[0])) * prime32
		h = (h ^ uint32(b[1])) * prime32
		h = (h ^ uint32(b[2])) * prime32
		h = (h ^ uint32(b[3])) * prime32
	}
	return h
}