From 63b16a5d5cfd3b41f596daccd56d32b2548ec119 Mon Sep 17 00:00:00 2001 From: Andrey Konovalov Date: Wed, 25 Jan 2017 16:18:05 +0100 Subject: prog, sys: add csum type, embed checksums for ipv4 packets This change adds a `csum[kind, type]` type. The only available kind right now is `ipv4`. Using `csum[ipv4, int16be]` in `ipv4_header` makes syzkaller calculate and embed correct checksums into ipv4 packets. --- sysgen/sysgen.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'sysgen') diff --git a/sysgen/sysgen.go b/sysgen/sysgen.go index 6906c7697..bfead2088 100644 --- a/sysgen/sysgen.go +++ b/sysgen/sysgen.go @@ -500,6 +500,19 @@ func generateArg( byteSize = decodeByteSizeType(typ) } fmt.Fprintf(out, "&LenType{%v, Buf: \"%v\", ByteSize: %v}", intCommon(size, bigEndian, bitfieldLen), a[0], byteSize) + case "csum": + if want := 2; len(a) != want { + failf("wrong number of arguments for %v arg %v, want %v, got %v", typ, name, want, len(a)) + } + size, bigEndian, bitfieldLen := decodeIntType(a[1]) + var kind string + switch a[0] { + case "ipv4": + kind = "CsumIPv4" + default: + failf("unknown checksum kind '%v'", a[0]) + } + fmt.Fprintf(out, "&CsumType{%v, Kind: %v}", intCommon(size, bigEndian, bitfieldLen), kind) case "flags": canBeArg = true size := uint64(ptrSize) -- cgit mrf-deployment