Browse Source

ipv4: clarify the format used by raw IP socket

On BSD variants, for some historical reason, the data format used by raw
IP socket may differ from the IPv4 wire format. This change clarifies
that input and output of Header type must conform to the raw IP socket
format.

Change-Id: I6ca363f7ea9a3d7645ee81b588785204dee00cba
Reviewed-on: https://go-review.googlesource.com/128215
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Mikio Hara 7 years ago
parent
commit
b6095f65a0
1 changed files with 12 additions and 0 deletions
  1. 12 0
      ipv4/header.go

+ 12 - 0
ipv4/header.go

@@ -51,6 +51,10 @@ func (h *Header) String() string {
 }
 
 // Marshal returns the binary encoding of h.
+//
+// The returned slice is in the format used by a raw IP socket on the
+// local system.
+// This may differ from the wire format, depending on the system.
 func (h *Header) Marshal() ([]byte, error) {
 	if h == nil {
 		return nil, errInvalidConn
@@ -98,6 +102,10 @@ func (h *Header) Marshal() ([]byte, error) {
 }
 
 // Parse parses b as an IPv4 header and stores the result in h.
+//
+// The provided b must be in the format used by a raw IP socket on the
+// local system.
+// This may differ from the wire format, depending on the system.
 func (h *Header) Parse(b []byte) error {
 	if h == nil || len(b) < HeaderLen {
 		return errHeaderTooShort
@@ -149,6 +157,10 @@ func (h *Header) Parse(b []byte) error {
 }
 
 // ParseHeader parses b as an IPv4 header.
+//
+// The provided b must be in the format used by a raw IP socket on the
+// local system.
+// This may differ from the wire format, depending on the system.
 func ParseHeader(b []byte) (*Header, error) {
 	h := new(Header)
 	if err := h.Parse(b); err != nil {