diff --git a/hack/packetgen/templates/length.tmpl b/hack/packetgen/templates/length.tmpl new file mode 100644 index 0000000000000000000000000000000000000000..28dfc0a814c4ffc84d3e9dae91609bf61c94207f --- /dev/null +++ b/hack/packetgen/templates/length.tmpl @@ -0,0 +1,35 @@ +{{$name := index . 0 -}} +{{$pointer := index . 1 -}} +{{$value := index . 2 -}} + +{{if some $value.Map -}} + {{$ifaceName := printf "%s%s" $name $value.Map.Name -}} + + {{$prefixPointer := printf "%s.%s()" $pointer $ifaceName -}} + + {{template "length" (list $name $prefixPointer $value.Map.Prefix)}} + + length += {{$pointer}}.Length() +{{else if some $value.Remaining -}} + +{{else if some $value.Basic -}} + +{{else if some $value.Array -}} + +{{else if some $value.Struct -}} + {{$structName := printf "%s%s" $name $value.Struct.Name -}} + + {{range $field := $value.Struct.Fields -}} + {{$fieldPointer := printf "%s.%s" $pointer $field.Name -}} + + {{template "length" (list $structName $fieldPointer $field)}} + {{end -}} +{{else if some $value.LengthPrefixedSlice -}} + +{{else if some $value.NullableLengthPrefixedSlice -}} + +{{else if some $value.ZeroByteTerminatedSlice -}} + +{{else if some $value.ZeroTerminatedSlice -}} + +{{end -}} diff --git a/hack/packetgen/templates/packets.tmpl b/hack/packetgen/templates/packets.tmpl index 78311a7ccf56e1c37620593921efc75d8f863a9a..3d7a962dbb68a0e0bd9699688231185f54a81737 100644 --- a/hack/packetgen/templates/packets.tmpl +++ b/hack/packetgen/templates/packets.tmpl @@ -24,6 +24,12 @@ const ( type {{$name}} {{template "type" (list $name $packet)}} + func (T *{{$name}}) Length() (length int) { + {{template "length" (list $name "(*T)" $packet)}} + + return + } + func (T *{{$name}}) ReadFrom(decoder *fed.Decoder) (err error) { {{if some $packet.Type -}} if decoder.Type() != {{$name}}Type { diff --git a/hack/packetgen/templates/preType.tmpl b/hack/packetgen/templates/preType.tmpl index 2f63581966b62af91b41c9863f6442f7d99e772f..8d50f4c6fa325aaaa2c02ce80fcbe5306ab872d2 100644 --- a/hack/packetgen/templates/preType.tmpl +++ b/hack/packetgen/templates/preType.tmpl @@ -15,6 +15,12 @@ return {{$item.Type}} } + func (T *{{$itemName}}) Length() (length int) { + {{template "length" (list $name "(*T)" $item)}} + + return + } + func (T *{{$itemName}}) ReadFrom(decoder *fed.Decoder) (err error) { {{template "decode" (list $itemName "(*T)" $item)}} @@ -32,6 +38,7 @@ type {{$ifaceName}} interface{ {{$ifaceName}}() {{template "type" (list $name $value.Map.Prefix)}} + Length() int ReadFrom(decoder *fed.Decoder) error WriteTo(encoder *fed.Encoder) error }