package ipv6
import (
"encoding/binary"
"fmt"
"net"
)
const (
Version = 6
HeaderLen = 40
)
type Header struct {
Version int
TrafficClass int
FlowLabel int
PayloadLen int
NextHeader int
HopLimit int
Src net .IP
Dst net .IP
}
func (h *Header ) String () string {
if h == nil {
return "<nil>"
}
return fmt .Sprintf ("ver=%d tclass=%#x flowlbl=%#x payloadlen=%d nxthdr=%d hoplim=%d src=%v dst=%v" , h .Version , h .TrafficClass , h .FlowLabel , h .PayloadLen , h .NextHeader , h .HopLimit , h .Src , h .Dst )
}
func ParseHeader (b []byte ) (*Header , error ) {
if len (b ) < HeaderLen {
return nil , errHeaderTooShort
}
h := &Header {
Version : int (b [0 ]) >> 4 ,
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 (binary .BigEndian .Uint16 (b [4 :6 ])),
NextHeader : int (b [6 ]),
HopLimit : int (b [7 ]),
}
h .Src = make (net .IP , net .IPv6len )
copy (h .Src , b [8 :24 ])
h .Dst = make (net .IP , net .IPv6len )
copy (h .Dst , b [24 :40 ])
return h , nil
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .