Shared Definitions

Reference Documentation

Platform
Intel® PAC
Napatech SmartNIC
Content Type
Reference Information
Capture Software Version
Link™ Capture Software 12.8
Napatech Software Suite: Shared Definitions

This chapter specifies the syntax and semantics for some shared definitions.

The syntax for some shared definitions is shown below.

<Letter>                ::= 'a' | 'b' | 'c' | ... | 'z' | 'A' | 'B' | 'C' | ... | 'Z'
<Ascii char>            ::= 'a' | 'b' | 'c' | ... | 'z' | 'A' | 'B' | 'C' | ... | 'Z' |
                            '0' | ... | '9' | ' ' | '.' | '(' | ')' | '{' | '}' | '[' | ']' |
                            ',' | ';' | '=' | '<' | '>' | '!' | '_' | '-'
<Ascii char reduced>    ::= 'a' | 'b' | 'c' | ... | 'z' | 'A' | 'B' | 'C' | ... | 'Z' |
                            '0' | ... | '9' | '_' | '-'
<Number>                ::= '0' | '1' | ... | '9'

<Identifier> ::= <Letter> { <Ascii char reduced> }
<NtplId> ::= <32-bit value> <Priority> ::= '0' | '1' | '2' | ... | '62' <FrameLengthValue> ::= '0' | '1' | '2' | ... | 10000 | '0x0' | '0x1' | '0x2' | ... | '0x2710' <TrueFalseValue> ::= 'TRUE' | 'FALSE'
<StreamIdSpec> ::= <StreamIdSetSpec> | <StreamIdRangeSpec> | 'DROP' <StreamIdSetSpec> ::= <StreamId> [ ',' <StreamIdSetSpec> ] - Up to 32 StreamIDs <StreamIdRangeSpec> ::= '(' <StreamId> '..' <StreamId> ')' <StreamId> ::= '0' | '1' | '2' | ... | '255'
<PortNumberSpec> ::= <PortNumberSetSpec> | <PortNumberRangeSpec> <PortNumberSetSpec> ::= <PortNumber> [ ',' <PortNumberSetSpec> ] - Up to 8 port numbers <PortNumberRangeSpec> ::= '(' <PortNumber> '..' <PortNumber> ')' <PortNumber> ::= '0' | '1' | '2' | ... | '31'
<Number32BitSpec> ::= <Number32BitSetSpec> | <Number32BitRangeSpec> <Number32BitSetSpec> ::= <Number32Bit> [ ',' <Number32BitSetSpec> ] <Number32BitRangeSpec> ::= '(' <Number32Bit> '..' <Number32Bit> ')' <Number32Bit> ::= '0' | '1' | '2' | ... | '4294967295'
<MaskNumber> ::= '0' | '1' | '2' | ... | '15' <KeySetId> ::= '1' | '2' | ... | '15'
<EqualNotEqualTest> ::= '==' | '!=' <CompareOperator> ::= '==' | '!=' | '<' | '<=' | '>' | '>='
<IPv4AddrValue> ::= '[' <8-bit decimal value> '.' <8-bit decimal value> '.' <8-bit decimal value> '.' <8-bit decimal value> ']' <IPv4AddrMask> ::= '[' <8-bit hex value> '.' <8-bit hex value> '.' <8-bit hex value> '.' <8-bit hex value> ']' | '[' <8-bit hex value without 0x> '.' <8-bit hex value without 0x> '.' <8-bit hex value without 0x> '.' <8-bit hex value without 0x> ']' <IPv6AddrValue> ::= '[' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ']' | '[' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ']' <IPv6AddrMask> ::= '[' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ':' <16-bit hex value> ']' | '[' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ':' <16-bit hex value without 0x> ']'
<ProtocolField> ::= <ProtocolField8> | <ProtocolField11> | <ProtocolField15> <ProtocolField8> ::= <Identifier> | <ProtocolLocation8> '/' <Number>) <ProtocolField11> ::= <Identifier> | <ProtocolLocation11> '/' <Number>) <ProtocolField15> ::= <Identifier> | <ProtocolLocation15> '/' <Number>) <ProtocolLocation8> ::= <ProtocolOffset> '[' <8-bit signed value> ']' <ProtocolLocation11> ::= <ProtocolOffset> '[' <11-bit signed value> ']' <ProtocolLocation15> ::= <ProtocolOffset> '[' <15-bit signed value> ']' <ProtocolOffset> ::= 'StartOfFrame' | 'Layer2Header' | 'FirstVLAN' | 'FirstMPLS' | 'Layer3Header' | 'IdentificationField' | 'DestinationIp' | 'Layer4Header' | 'Layer4Payload' | 'TunnelPayload' | 'InnerLayer2Header' | 'InnerFirstVLAN' | 'InnerFirstMPLS' | 'InnerLayer3Header' | 'InnerIdentificationField' | 'InnerDestinationIp' | 'InnerLayer4Header' | 'InnerLayer4Payload' | 'EndOfFrame' | 'Layer3PayloadEnd' | 'InnerLayer3PayloadEnd'
<8-bit signed value> ::= '-128' | '-127' | ... | '-1' | '0' | '1' | ... | '127' <8-bit value> ::= <8-bit hex value> | <8-bit decimal value> <8-bit hex value> ::= '0x00' | '0x01' | '0x02' | ... | '0xFF' <8-bit hex value without 0x> ::= '00' | '01' | '02' | ... | 'FF' <8-bit decimal value> ::= '0' | '1' | '2' | ... | '255' <11-bit signed value> ::= '-1024' | '-1023' | ... | '-1' | '0' | '1' | ... | '1024' <15-bit signed value> ::= '-16384' | '-16383' | ... | '-1' | '0' | '1' | ... | '16383' <16-bit value> ::= <16-bit hex value> | <16-bit decimal value> <16-bit hex value> ::= '0x0000' | '0x0001' | ... | '0xFFFF' <16-bit hex value without 0x> ::= '0000' | '0001' | ... | 'FFFF' <16-bit decimal value> ::= '0' | '1' | '2' | ... | '65535' <32-bit value> ::= <32-bit hex value> | <32-bit decimal value> <32-bit hex value> ::= '0x00000000' | '0x00000001' | ... | '0xFFFFFFFF' <32-bit hex value witout 0x> ::= '00000000' | '00000001' | ... | 'FFFFFFFF' <32-bit decimal value> ::= '0' | '1' | '2' | ... | '4294967295' <HexString> ::= '0x' <HexDigitSpec> <HexDigitList> ::= <HexDigit> [ <HexDigitSpec> ] <HexDigit> ::= '0' | '1' | '2' | ... | '9' | 'A' | 'B' | ... | 'F' <BinaryString> ::= ''b' <BinaryDigitSpec> <BinaryDigitSpec> ::= <BinaryDigit> [ <BinaryDigitSpec> ] <BinaryDigit> ::= '0' | '1' <DescriptorLength> ::= '16' | '18' | '20' | ... | '64' <DeduplicationGroupNumber> ::= '0' | '1' | ... | '15' <MaskLength> ::= '1' | '2' | ... | '16'

A 'ProtocolField' is a range of bytes in a packet. It is specified by a starting point and a number of bits (in practice a multiplum of 8). E.g. 'Layer3Header[12]/32' specifies the source IP address in an IPv4 packet.

'ProtocolLocation' takes two parameters, a dynamic part - 'ProtocolOffset' and a static offset. E.g. Layer2Header[4] means 4 bytes into the layer 2 header.

'ProtocolOffset' is a symbolic reference to a particular offset in a packet. The actual value will be calculated at runtime. This is why this is often referred to as the dynamic offset.

Dynamic Offsets

OffsetPoints to
StartOfFrameStart of the frame
Layer2HeaderStart of the Layer 2 header, i.e. the DMAC field
FirstVLANFirst VLAN
FirstMPLSFirst MPLS
Layer3HeaderStart of the Layer 3 header
IdentificationFieldIPv4/v6 Identification field
DestinationIpIPv4/v6 destination IP address
Layer4HeaderStart of the Layer 4 header
Layer4PayloadFirst byte of the Layer 4 payload
Layer3PayloadEndAfter last byte of Layer 3 payload
EndOfFrameAfter the frame
TunnelPayloadFirst byte of the tunnelled data
InnerLayer2HeaderStart of the tunnelled Layer 2 header
InnerFirstVLANFirst tunnelled VLAN
InnerFirstMPLSFirst MPLS header
InnerLayer3HeaderStart of the tunnelled Layer 3 header
InnerIdentificationFieldFirst tunnelled IPv4/v6 Identification field
InnerDestinationIpFirst tunnelled IPv4/v6 destination IP address
InnerLayer4HeaderStart of the tunnelled Layer 4 header
InnerLayer4PayloadFirst byte of the tunnelled Layer 4 payload
InnerLayer3PayloadEndAfter the last byte of the Layer 3 payload

If the dynamic offsets refers to a field that is not present in the packet, the offset is still well-defined and points to the location where it would have otherwise have been. For example, if MPLS headers are present, 'FirstMPLS' will point to the first MPLS header, otherwise it will point to the 'Layer3Header' offset instead.