blob: bdd08ad94e9bbe492fce28bba76d5aca43293c6b [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2019 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
///////////////////////////////////////////////////////////////////////////////
//
// File: NDP_Types.ttcn
// Rev: R1B
// Prodnr: CNL 113 632
// Updated: 2009-02-25
// Contact: http://ttcn.ericsson.se
// Reference: RFC 4861
module NDP_Types {
import from General_Types all;
external function f_enc_PDU_NDP(
in PDU_NDP pdu,
in OCT16 srcaddr := '00000000000000000000000000000000'O,
in OCT16 dstaddr := '00000000000000000000000000000000'O
) return octetstring
external function f_dec_PDU_NDP(in octetstring stream) return PDU_NDP
with { extension "prototype(convert)" extension "decode(RAW)" }
external function f_NDP_verify_checksum(
in octetstring data,
in OCT16 srcaddr := '00000000000000000000000000000000'O,
in OCT16 dstaddr := '00000000000000000000000000000000'O
) return boolean
//NDP Options================================
type record SourceLinkLayerAddress
{
INT1 optionType(1),
INT1 lengthField, //encoder calculates(units of 8 bytes), use dummy value
octetstring linkLayerAddrValue
}with{
variant "PRESENCE (optionType = 1)"
variant (lengthField) "LENGTHTO (optionType,lengthField,linkLayerAddrValue)";
variant (lengthField) "UNIT (64)";
variant (linkLayerAddrValue) "PADDING(64)";
}
type record TargetLinkLayerAddress
{
INT1 optionType(2),
INT1 lengthField, //encoder calculates(units of 8 bytes), use dummy value
octetstring linkLayerAddrValue
}with{
variant "PRESENCE (optionType = 2)"
variant (lengthField) "LENGTHTO (optionType,lengthField,linkLayerAddrValue)";
variant (lengthField) "UNIT (64)";
variant (linkLayerAddrValue) "PADDING(64)";
}
type record PrefixInformation
{
INT1 optionType(3),
INT1 lengthField(4),
INT1 prefixLength,
BIT6 reserved1, //0
BIT1 aBit,
BIT1 lBit,
integer validLifetime (0..4294967295),
integer preferredLifetime (0..4294967295),
OCT4 reserved2, //0
OCT16 prefix
} with {
variant "PRESENCE (optionType = 3)"
variant (validLifetime) "FIELDLENGTH(32)";
variant (validLifetime) "BYTEORDER(last)";
variant (preferredLifetime) "FIELDLENGTH(32)";
variant (preferredLifetime) "BYTEORDER(last)";
}
type record RedirectedHeader
{
INT1 optionType(4),
INT1 lengthField, //encoder calculates(units of 8 bytes), use dummy value
OCT6 reserved, //0
octetstring iP_HeaderandData
}with{
variant "PRESENCE (optionType = 4)"
variant (lengthField) "LENGTHTO (optionType,lengthField,reserved,iP_HeaderandData)";
variant (lengthField) "UNIT (64)";
variant (iP_HeaderandData) "PADDING(64)";
}
type record MTU
{
INT1 optionType(5),
INT1 lengthField(1),
OCT2 reserved, //0
integer mTU_Value (0..4294967295)
} with {
variant "PRESENCE (optionType = 5)"
variant (mTU_Value) "FIELDLENGTH(32)";
variant (mTU_Value) "BYTEORDER(last)";
}
type set of RSM_Option RSM_Options;
type union RSM_Option
{
SourceLinkLayerAddress sourceLinkLayerAddress
};
type set of RAM_Option RAM_Options;
type union RAM_Option
{
SourceLinkLayerAddress sourceLinkLayerAddress,
MTU mTU,
PrefixInformation prefixInformation
};
type set of NSM_Option NSM_Options;
type union NSM_Option
{
SourceLinkLayerAddress sourceLinkLayerAddress
};
type set of NAM_Option NAM_Options;
type union NAM_Option
{
TargetLinkLayerAddress targetLinkLayerAddress
}
type set of REM_Option REM_Options
type union REM_Option
{
TargetLinkLayerAddress targetLinkLayerAddress,
RedirectedHeader redirectedHeader
}
// NDP Messages======================================
//RFC 4861 4.1
type record NDP_RouterSolicitation
{
INT1 typeField (133),
INT1 code(0),
OCT2 checksum, // ICMPv6 checksum
OCT4 reserved,
RSM_Options rSM_Options optional
}with {
variant "PRESENCE (typeField = 133)";
};
//RFC 4861 4.2
type record NDP_RouterAdvertisement
{
INT1 typeField (134),
INT1 code(0),
OCT2 checksum, // ICMPv6 checksum
INT1 curHopLimit,
BIT6 reserved,
BIT1 oBit,
BIT1 mBit,
integer routerLifetime (0..65535),
integer reachableTime (0..4294967295),
integer retransTimer (0..4294967295),
RAM_Options rAM_Options optional
} with {
variant "PRESENCE (typeField = 134)";
variant (routerLifetime) "FIELDLENGTH(16)";
variant (routerLifetime) "BYTEORDER(last)";
variant (reachableTime) "FIELDLENGTH(32)";
variant (reachableTime) "BYTEORDER(last)";
variant (retransTimer) "FIELDLENGTH(32)";
variant (retransTimer) "BYTEORDER(last)";
};
//RFC 4861 4.3
type record NDP_NeighborSolicitation
{
INT1 typeField (135),
INT1 code(0),
OCT2 checksum, // ICMPv6 checksum
OCT4 reserved,
OCT16 targetAddress,
NSM_Options nSM_Options optional
} with {
variant "PRESENCE (typeField = 135)";
};
//RFC 4861 4.4
type record NDP_NeighborAdvertisement
{
INT1 typeField (136),
INT1 code(0),
OCT2 checksum, // ICMPv6 checksum
BIT5 reserved1,
BIT1 oBit,
BIT1 sBit,
BIT1 rBit,
OCT3 reserved2,
OCT16 targetAddress,
NAM_Options nAM_Options optional
} with {
variant "PRESENCE (typeField = 136)";
};
//RFC 4861 4.5
type record NDP_Redirect
{
INT1 typeField (137),
INT1 code(0),
OCT2 checksum, // ICMPv6 checksum
OCT4 reserved,
OCT16 targetAddress,
OCT16 destinationAddress,
REM_Options rEM_Options optional
} with {
variant "PRESENCE (typeField = 137)";
};
type union PDU_NDP
{
NDP_RouterSolicitation routerSolicitation,
NDP_RouterAdvertisement routerAdvertisement,
NDP_NeighborSolicitation neighborSolicitation,
NDP_NeighborAdvertisement neighborAdvertisement,
NDP_Redirect redirect
} with { variant""}
} with{ encode "RAW"}