From 9bc7c59221d0bbe8cffd80311b077469c0edf6ca Mon Sep 17 00:00:00 2001 From: Johannes Kimmel Date: Tue, 14 Dec 2021 05:47:41 +0100 Subject: [PATCH] prepare SubTLV handling in PacketDecoder --- main.go | 2 +- tlv/tlv.go | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index f9c68ec..414f469 100644 --- a/main.go +++ b/main.go @@ -90,7 +90,6 @@ func run(opt options) error { var s tlv.PacketDecoder s.Reset(b, src) for s.Scan() { - var subtlv []byte switch t := s.TLV().(type) { case tlv.NextHop: fmt.Printf("%12s %s\n", t.T(), t.Address) @@ -122,6 +121,7 @@ func run(opt options) error { fmt.Println("got nil TLV") } } + subtlv := s.SubTLV() for len(subtlv) > 0 { switch tlv.SubType(subtlv[0]) { case tlv.SubTypeSourcePrefix: diff --git a/tlv/tlv.go b/tlv/tlv.go index 0b0a845..d70fa62 100644 --- a/tlv/tlv.go +++ b/tlv/tlv.go @@ -36,6 +36,10 @@ type TLV interface { type SubType uint8 +func (s SubType) IsMandatory() bool { + return s >= 128 +} + const ( SubTypePad1 = SubType(0) SubTypePadN = SubType(1) @@ -244,6 +248,12 @@ func (s *PacketDecoder) TLV() TLV { } return s.tlv } +func (s *PacketDecoder) SubTLV() []byte { + if s.err != nil { + return nil + } + return s.subtlv +} func (s *PacketDecoder) Err() error { return s.err }