Documentation ¶
Overview ¶
Package fibrechannel implements marshaling and unmarshaling of Fibre Channel frames.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrInvalidFrame is returned when one of the following occur: // - an invalid SOF or EOF sequence is detected // - a payload does not end on a word (4 byte) boundary // - no Header is present when attempting to binary marshal a Frame ErrInvalidFrame = errors.New("invalid frame") // ErrInvalidCRC is returned when Frame.UnmarshalBinary detects an incorrect // CRC checksum in a byte slice for a Frame. ErrInvalidCRC = errors.New("invalid frame checksum") )
Functions ¶
This section is empty.
Types ¶
type EOF ¶
type EOF byte
A EOF is an End-of-Frame byte, which appears at the end of a Fibre Channel frame.
const ( EOFn EOF = 0x41 // Normal (not last frame of sequence) EOFt EOF = 0x42 // Terminate (last frame of sequence) EOFrt EOF = 0x44 EOFdt EOF = 0x46 // Disconnect-terminate class-1 EOFni EOF = 0x49 // Normal-invalid EOFdti EOF = 0x4e // Disconnect-terminate-invalid EOFrti EOF = 0x4f EOFa EOF = 0x50 // Abort )
EOF constants which indicate continuation or termination.
type Frame ¶
type Frame struct { // SOF specifies the Start-of-Frame byte contained in this Frame. SOF SOF // Header specifies a Fibre Channel header, which contains metadata // regarding this Frame. Header *Header // Payload is a variable length data payload encapsulated by this Frame. // Payload is automatically padded to the next word (4 byte) boundary when // marshaled into binary form. Payload []byte // EOF specifies the End-of-Frame byte contained in this Frame. EOF EOF }
A Frame is a Fibre Channel frame. A Frame contains information such as SOF and EOF bytes, a header, and payload data.
func (*Frame) MarshalBinary ¶
MarshalBinary allocates a byte slice and marshals a Frame into binary form.
Frame.Header must not be nil, or ErrInvalidFrame will be returned.
func (*Frame) UnmarshalBinary ¶
UnmarshalBinary unmarshals a byte slice into a Frame.
If the byte slice does not contain enough data to unmarshal a valid Frame, io.ErrUnexpectedEOF is returned.
If an invalid SOF or EOF sequence is detected, or a payload does not end on a word (4 byte) boundary, ErrInvalidFrame is returned.
If the CRC checksum present in the byte slice does not match the one computed by UnmarshalBinary, ErrInvalidCRC is returned.
type Header ¶
type Header struct { // RoutingControl (R_CTL) identifies a frame's type and information category. RoutingControl RoutingControl // DestinationID (D_ID) identifies a frame's destination. DestinationID [3]byte // Priority (CS_CTL/PRI or Class Specific Control) identifies the priority // of traffic contained in a frame. Priority byte // SourceID (S_ID) identifies a frame's source. SourceID [3]byte // Type identifies the type of traffic contained in a frame. Type byte // FrameControl (F_CTL) contains a variety of frame options. FrameControl [3]byte // SequenceID (SEQ_ID) identifies which sequence a frame belongs to. SequenceID uint8 // DataFieldControl (DF_CTL) indicates the presence of optional headers // and their size. DataFieldControl byte // SequenceCount (SEQ_CNT) identifies a frame's number within a sequence. SequenceCount uint16 // OriginatorExchangeID (OX_ID) is an ID assigned by an initiator, used to // group related sequences. OriginatorExchangeID uint16 // ResponderExchangeID (RX_ID) is an ID assigned by a target, also used to // group related sequences. ResponderExchangeID uint16 // Parameter is used as a relative offset in sequences. Parameter uint32 }
A Header is a Fibre Channel header. A Header contains metadata regarding a Frame.
func (*Header) MarshalBinary ¶
MarshalBinary allocates a byte slice and marshals a Frame into binary form.
MarshalBinary never returns an error.
func (*Header) UnmarshalBinary ¶
UnmarshalBinary unmarshals a byte slice into a Header.
If the byte slice does not contain exactly enough data to unmarshal a valid Header, io.ErrUnexpectedEOF is returned.
type RoutingControl ¶
type RoutingControl byte
A RoutingControl is a byte which appears in the R_CTL field of a Fibre Channel header.
const ( RoutingControlDeviceDataUncategorized RoutingControl = 0x00 RoutingControlDeviceDataSolicitedData RoutingControl = 0x01 RoutingControlDeviceDataUnsolicitiedControl RoutingControl = 0x02 RoutingControlDeviceDataSolicitedControl RoutingControl = 0x03 RoutingControlDeviceDataUnsolicitedData RoutingControl = 0x04 RoutingControlDeviceDataDataDescriptor RoutingControl = 0x05 RoutingControlDeviceDataUnsolicitedCommand RoutingControl = 0x06 RoutingControlDeviceDataCommandStatus RoutingControl = 0x07 )
RoutingControl constants which indicate different frame types and information categories.
func (RoutingControl) String ¶
func (i RoutingControl) String() string
type SOF ¶
type SOF byte
A SOF is a Start-of-Frame byte, which appears at the beginning of a Fibre Channel frame.
const ( SOFf SOF = 0x28 // Start fabric SOFi2 SOF = 0x2d // Start class 2 SOFi3 SOF = 0x2e // Start class 3 SOFi4 SOF = 0x29 // Start class 4 SOFn2 SOF = 0x35 // Normal (continue) class 2 SOFn3 SOF = 0x36 // Normal (continue) class 3 SOFn4 SOF = 0x31 // Normal (continue) class 4 SOFc4 SOF = 0x39 )
SOF constants which indicate different types of Frame traffic.