summaryrefslogtreecommitdiffhomepage
path: root/dhcpv6
diff options
context:
space:
mode:
authorChristopher Koch <chrisko@google.com>2019-03-04 13:30:57 -0800
committerinsomniac <insomniacslk@users.noreply.github.com>2019-03-11 21:54:10 -0700
commit509f500742c67a3fbfa009df77986fb0977ad5f0 (patch)
treee91b5594fd0f191242a29d0ef154fc07d004948a /dhcpv6
parentafbaa1460f929a04c6e198b387174e70f0f9c903 (diff)
dhcpv6: standardize GetInnerMessage
Diffstat (limited to 'dhcpv6')
-rw-r--r--dhcpv6/dhcpv6.go2
-rw-r--r--dhcpv6/dhcpv6message.go5
-rw-r--r--dhcpv6/dhcpv6relay.go10
3 files changed, 12 insertions, 5 deletions
diff --git a/dhcpv6/dhcpv6.go b/dhcpv6/dhcpv6.go
index 3c5e193..c8c4292 100644
--- a/dhcpv6/dhcpv6.go
+++ b/dhcpv6/dhcpv6.go
@@ -16,6 +16,8 @@ type DHCPv6 interface {
String() string
Summary() string
IsRelay() bool
+ GetInnerMessage() (*Message, error)
+
GetOption(code OptionCode) []Option
GetOneOption(code OptionCode) Option
AddOption(Option)
diff --git a/dhcpv6/dhcpv6message.go b/dhcpv6/dhcpv6message.go
index c367d36..afd252d 100644
--- a/dhcpv6/dhcpv6message.go
+++ b/dhcpv6/dhcpv6message.go
@@ -206,6 +206,11 @@ func (m Message) Type() MessageType {
return m.MessageType
}
+// GetInnerMessage returns the message itself.
+func (m *Message) GetInnerMessage() (*Message, error) {
+ return m, nil
+}
+
// AddOption adds an option to this message.
func (m *Message) AddOption(option Option) {
m.Options.Add(option)
diff --git a/dhcpv6/dhcpv6relay.go b/dhcpv6/dhcpv6relay.go
index 497ef64..1506dc4 100644
--- a/dhcpv6/dhcpv6relay.go
+++ b/dhcpv6/dhcpv6relay.go
@@ -91,21 +91,21 @@ func (r *RelayMessage) IsRelay() bool {
}
// GetInnerMessage recurses into a relay message and extract and return the
-// inner Message. Return nil if none found (e.g. not a relay message).
-func (r *RelayMessage) GetInnerMessage() (DHCPv6, error) {
+// inner Message. Return nil if none found (e.g. not a relay message).
+func (r *RelayMessage) GetInnerMessage() (*Message, error) {
var (
p DHCPv6
err error
)
p = r
for {
- if !p.IsRelay() {
- return p, nil
- }
p, err = DecapsulateRelay(p)
if err != nil {
return nil, err
}
+ if m, ok := p.(*Message); ok {
+ return m, nil
+ }
}
}