| /////////////////////////////////////////////////////////////////////////////// |
| // |
| // 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"} |