| // Copyright 2014 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. |
| Version = 6 // protocol version |
| HeaderLen = 40 // header length |
| // A Header represents an IPv6 base header. |
| Version int // protocol version |
| TrafficClass int // traffic class |
| FlowLabel int // flow label |
| PayloadLen int // payload length |
| NextHeader int // next header |
| HopLimit int // hop limit |
| Src net.IP // source address |
| Dst net.IP // destination address |
| func (h *Header) String() string { |
| return fmt.Sprintf("ver: %v, tclass: %#x, flowlbl: %#x, payloadlen: %v, nxthdr: %v, hoplim: %v, src: %v, dst: %v", h.Version, h.TrafficClass, h.FlowLabel, h.PayloadLen, h.NextHeader, h.HopLimit, h.Src, h.Dst) |
| // ParseHeader parses b as an IPv6 base header. |
| func ParseHeader(b []byte) (*Header, error) { |
| return nil, errors.New("header too short") |
| TrafficClass: int(b[0]&0x0f)<<4 | int(b[1])>>4, |
| FlowLabel: int(b[1]&0x0f)<<16 | int(b[2])<<8 | int(b[3]), |
| PayloadLen: int(b[4])<<8 | int(b[5]), |
| h.Src = make(net.IP, net.IPv6len) |
| h.Dst = make(net.IP, net.IPv6len) |