mirror of
https://github.com/golang/net.git
synced 2026-03-31 18:37:08 +09:00
icmp: add support for multi-part messages
ICMP extension structures allow a few existing ICMP error messages to convey extra information for troubleshooting; especially the root cause of why the original datagram could not be delivered. This CL adds generic support for ICMP extension stuructures to DstUnreach, TimeExceeded and ParamProb structs. Specific extensions such as MPLS label-stack, interface and next-hop identification will be inplemneted in separate followup CLs. Change-Id: I90798c135bdf76b806e2dde2bdd57c2c11d7e7e9
This commit is contained in:
@@ -7,7 +7,8 @@ package icmp
|
||||
// A DstUnreach represents an ICMP destination unreachable message
|
||||
// body.
|
||||
type DstUnreach struct {
|
||||
Data []byte // data
|
||||
Data []byte // data, known as original datagram field
|
||||
Extensions []Extension // extensions
|
||||
}
|
||||
|
||||
// Len implements the Len method of MessageBody interface.
|
||||
|
||||
16
icmp/extension.go
Normal file
16
icmp/extension.go
Normal file
@@ -0,0 +1,16 @@
|
||||
// Copyright 2015 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package icmp
|
||||
|
||||
// An Extension represents an ICMP extension.
|
||||
type Extension interface {
|
||||
// Len returns the length of ICMP extension.
|
||||
Len() int
|
||||
|
||||
// Marshal returns the binary enconding of ICMP extension.
|
||||
Marshal() ([]byte, error)
|
||||
}
|
||||
|
||||
const extensionVersion = 2
|
||||
@@ -7,6 +7,7 @@
|
||||
// ICMPv4 and ICMPv6.
|
||||
//
|
||||
// ICMPv4 and ICMPv6 are defined in RFC 792 and RFC 4443.
|
||||
// Multi-part message support for ICMP is defined in RFC 4884.
|
||||
package icmp // import "golang.org/x/net/icmp"
|
||||
|
||||
import (
|
||||
|
||||
@@ -8,8 +8,9 @@ import "golang.org/x/net/internal/iana"
|
||||
|
||||
// A ParamProb represents an ICMP parameter problem message body.
|
||||
type ParamProb struct {
|
||||
Pointer uintptr // offset within the data where the error was detected
|
||||
Data []byte // data
|
||||
Pointer uintptr // offset within the data where the error was detected
|
||||
Data []byte // data, known as original datagram field
|
||||
Extensions []Extension // extensions
|
||||
}
|
||||
|
||||
// Len implements the Len method of MessageBody interface.
|
||||
|
||||
@@ -6,7 +6,8 @@ package icmp
|
||||
|
||||
// A TimeExceeded represents an ICMP time exceeded message body.
|
||||
type TimeExceeded struct {
|
||||
Data []byte // data
|
||||
Data []byte // data, known as original datagram field
|
||||
Extensions []Extension // extensions
|
||||
}
|
||||
|
||||
// Len implements the Len method of MessageBody interface.
|
||||
|
||||
Reference in New Issue
Block a user