--- /dev/null
+/*******************************************************************************
+################################################################################
+# Copyright (c) [2017-2019] [Radisys] #
+# #
+# Licensed under the Apache License, Version 2.0 (the "License"); #
+# you may not use this file except in compliance with the License. #
+# You may obtain a copy of the License at #
+# #
+# http://www.apache.org/licenses/LICENSE-2.0 #
+# #
+# Unless required by applicable law or agreed to in writing, software #
+# distributed under the License is distributed on an "AS IS" BASIS, #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
+# See the License for the specific language governing permissions and #
+# limitations under the License. #
+################################################################################
+*******************************************************************************/
+\f
+/********************************************************************20**
+
+ Name: common transport file
+
+ Type: header file
+
+ Desc: common file for transport related data structures
+
+ File: cm_tpt.h
+
+*********************************************************************21*/
+#ifndef __CMTPTH__
+#define __CMTPTH__
+
+#include "cm_inet.h"
+#ifdef CM_AAL
+#include "cm_atm.h"
+#endif
+
+/* network address table size */
+#define CM_MAX_NET_ADDR 16
+
+/* network address sizes */
+
+#define CM_IPV4ADDR_SIZE CM_INET_IPV4ADDR_SIZE
+#define CM_IPV6ADDR_SIZE CM_INET_IPV6ADDR_SIZE
+
+/* network address sizes */
+#define CM_IPV4PORT_SIZE CM_INET_IPV4PORT_SIZE
+#define CM_IPV6PORT_SIZE CM_INET_IPV4PORT_SIZE
+
+/* "type" in network address */
+#define CM_NETADDR_NOTPRSNT 0
+#define CM_NETADDR_IPV4 CM_INET_IPV4ADDR_TYPE
+#define CM_NETADDR_IPV6 CM_INET_IPV6ADDR_TYPE
+
+/* "type" in transport address */
+#define CM_TPTADDR_NOTPRSNT 0
+#define CM_TPTADDR_IPV4 CM_INET_IPV4ADDR_TYPE
+#define CM_TPTADDR_IPV6 CM_INET_IPV6ADDR_TYPE
+#define CM_TPTADDR_AAL 3
+
+#define CM_MAX_SOCK_OPTS 8
+
+/* "type" in transport parameters */
+#define CM_TPTPARAM_NOTPRSNT 0
+#define CM_TPTPARAM_SOCK 1
+#define CM_TPTPARAM_AAL 2
+#define CM_TPTPARAM_TLS 3
+/*cm_tpt_h_001.main_14 Updated for TUCL 2.1 Release (Kernel SCTP Support) */
+#ifdef CM_LKSCTP
+#define CM_TPTPARAM_SCTP 4
+#endif
+
+#define CM_INPORT_ANY 0
+
+#ifdef __CMINETH__ /* Put cm_inet dependencies here */
+
+/* "level" in Socket Options */
+#define CM_SOCKOPT_LEVEL_SOCKET CM_INET_LEVEL_SOCKET
+#define CM_SOCKOPT_LEVEL_IP CM_INET_LEVEL_IP
+#define CM_SOCKOPT_LEVEL_TCP CM_INET_LEVEL_TCP
+/*cm_tpt_h_001.main_14 Updated for TUCL 2.1 Release (Kernel SCTP Support) */
+#ifdef CM_LKSCTP
+#define CM_SOCKOPT_LEVEL_SCTP CM_INET_LEVEL_SCTP
+#endif
+/* cm_tpt_h_001.main_16: Added new macro to support filter for ICMP messages */
+#ifdef CM_ICMP_FILTER_SUPPORT
+#ifdef SS_LINUX
+#define CM_SOCKOPT_LEVEL_RAW CM_INET_LEVEL_RAW
+#endif
+#endif
+
+/* "option" in Socket Options */
+#define CM_SOCKOPT_OPT_BLOCK CM_INET_OPT_BLOCK
+#define CM_SOCKOPT_OPT_REUSEADDR CM_INET_OPT_REUSEADDR
+#define CM_SOCKOPT_OPT_RX_BUF_SIZE CM_INET_OPT_RX_BUF_SIZE
+#define CM_SOCKOPT_OPT_TX_BUF_SIZE CM_INET_OPT_TX_BUF_SIZE
+#define CM_SOCKOPT_OPT_ADD_MCAST_MBR CM_INET_OPT_ADD_MCAST_MBR
+#define CM_SOCKOPT_OPT_DRP_MCAST_MBR CM_INET_OPT_DRP_MCAST_MBR
+#define CM_SOCKOPT_OPT_TCP_NODELAY CM_INET_OPT_TCP_NODELAY
+#define CM_SOCKOPT_OPT_MCAST_LOOP CM_INET_OPT_MCAST_LOOP
+#define CM_SOCKOPT_OPT_MCAST_IF CM_INET_OPT_MCAST_IF
+#define CM_SOCKOPT_OPT_MCAST_TTL CM_INET_OPT_MCAST_TTL
+#define CM_SOCKOPT_OPT_BROADCAST CM_INET_OPT_BROADCAST
+/* added KEEPALIVE socket option for TCP socket */
+#define CM_SOCKOPT_OPT_KEEPALIVE CM_INET_OPT_KEEPALIVE
+#ifdef CM_INET2
+#define CM_SOCKOPT_OPT_HDRINCLD CM_INET_OPT_HDR_INCLD
+#define CM_SOCKOPT_OPT_DONTFRAGMENT CM_INET_OPT_DONTFRAGMENT
+#define CM_SOCKOPT_OPT_TOS CM_INET_OPT_TOS
+#define CM_SOCKOPT_OPT_TTL CM_INET_OPT_TTL
+
+#ifdef IPV6_SUPPORTED
+/* "level" in Socket Options */
+#define CM_SOCKOPT_LEVEL_IPV6 CM_INET_LEVEL_IPV6
+
+/* "option" in Socket Options */
+#define CM_SOCKOPT_OPT_ADD_MCAST6_MBR CM_INET_OPT_ADD_MCAST6_MBR
+#define CM_SOCKOPT_OPT_DRP_MCAST6_MBR CM_INET_OPT_DRP_MCAST6_MBR
+#define CM_SOCKOPT_OPT_MCAST6_LOOP CM_INET_OPT_MCAST6_LOOP
+#define CM_SOCKOPT_OPT_MCAST6_IF CM_INET_OPT_MCAST6_IF
+#define CM_SOCKOPT_OPT_MCAST6_HOPS CM_INET_OPT_MCAST6_HOPS
+#define CM_SOCKOPT_OPT_IPV6_TTL CM_INET_OPT_IPV6_TTL
+
+/* added new IPv6 socket options for IPv6 extn hdrs */
+#ifdef IPV6_OPTS_SUPPORTED
+#define CM_SOCKOPT_OPT_RECVIPV6_HOPLIM CM_INET_OPT_RECVIPV6_HOPLIM
+#define CM_SOCKOPT_OPT_RECVIPV6_HBHOPT CM_INET_OPT_RECVIPV6_HBHOPTS
+#define CM_SOCKOPT_OPT_RECVIPV6_DSTOPTS CM_INET_OPT_RECVIPV6_DSTOPTS
+#define CM_SOCKOPT_OPT_RECVIPV6_RTHDR CM_INET_OPT_RECVIPV6_RTHDR
+#define CM_SOCKOPT_OPT_IP_ROUTER_ALERT6 CM_INET_OPT_IP_ROUTER_ALERT6
+#endif /* IPV6_OPTS_SUPPORTED */
+#define CM_SOCKOPT_OPT_IPV6_PKTINFO CM_INET_OPT_IPV6_PKTINFO
+#endif /* IPV6_SUPPORTED */
+
+/* added new IPv4 socket options for IPv4 IP options */
+#ifdef IPV4_OPTS_SUPPORTED
+#define CM_SOCKOPT_OPT_IP_OPTIONS CM_INET_OPT_IP_OPTIONS
+#define CM_SOCKOPT_OPT_IPV4_PKTINFO CM_INET_OPT_IPV4_PKTINFO
+#define CM_SOCKOPT_OPT_IP_ROUTER_ALERT CM_INET_OPT_IP_ROUTER_ALERT
+#endif /* IPV4_OPTS_SUPPORTED */
+
+/* sctp socket options */
+/*cm_tpt_h_001.main_14 Updated for TUCL 2.1 Release (Kernel SCTP Support) */
+#ifdef CM_LKSCTP
+#define CM_SOCKOPT_OPT_LINGER CM_INET_OPT_LINGER
+#define CM_SOCKOPT_OPT_SCTP_EVENTS CM_INET_OPT_SCTP_EVENTS
+#define CM_SOCKOPT_OPT_SCTP_PRIM_ADDR CM_INET_OPT_SCTP_PRIM_ADDR
+#define CM_SOCKOPT_OPT_SCTP_PEERADDR_PARAMS CM_INET_OPT_SCTP_PEERADDR_PARAMS
+#define CM_SOCKOPT_OPT_SCTP_GET_ASSOC_STA CM_INET_OPT_SCTP_GET_ASSOC_STA
+#define CM_SOCKOPT_OPT_SCTP_GET_PADDR_INFO CM_INET_OPT_SCTP_GET_PADDR_INFO
+/*cm_tpt_h_001.main_15 Updated for the support of configurable RTO parameters,
+ HBeat value Max retransmissions (Init, Path, Association)*/
+#define CM_SOCKOPT_OPT_SCTP_ASSOC_PARAMS CM_INET_OPT_SCTP_ASSOC_PARAMS
+#define CM_SOCKOPT_OPT_SCTP_RTO_INFO CM_INET_OPT_SCTP_RTO_INFO
+#define CM_SOCKOPT_OPT_SCTP_INIT_MSG CM_INET_OPT_SCTP_INIT_MSG
+#endif
+
+/* IP header masks */
+#define CM_DF_MASK 0x4000 /* Don't Fragment bit */
+#define CM_MF_MASK 0x2000 /* More Fragment bit */
+
+/* Protocol Values */
+#define CM_PROTOCOL_IP CM_INET_PROTO_IP /* IP protocol */
+#define CM_PROTOCOL_ICMP CM_INET_PROTO_ICMP /* ICMP protocol */
+#define CM_PROTOCOL_TCP CM_INET_PROTO_TCP /* TCP protocol */
+#define CM_PROTOCOL_UDP CM_INET_PROTO_UDP /* UDP protocol */
+#define CM_PROTOCOL_RAW CM_INET_PROTO_RAW /* Raw protocol */
+#define CM_PROTOCOL_SCTP CM_INET_PROTO_SCTP /* SCTP protocol */
+/*cm_tpt_h_001.main_14 Updated for TUCL 2.1 Release (Kernel SCTP Support) */
+#ifdef CM_LKSCTP
+#define CM_PROTOCOL_LKSCTP CM_INET_PROTO_SCTP /* SCTP protocol */
+#endif
+/* added new protocol */
+#define CM_PROTOCOL_RSVP CM_INET_PROTO_RSVP /* RSVP protocol */
+
+#ifdef IPV6_SUPPORTED
+#define CM_PROTOCOL_IPV6 CM_INET_PROTO_IPV6 /* IPV6 protocol */
+#define CM_PROTOCOL_ICMPV6 CM_INET_PROTO_ICMPV6 /* ICMP V6 protocol */
+#endif /* IPV6_SUPPORTED */
+
+#ifdef CM_TLS
+#define CM_PROTOCOL_TLS CM_PROTOCOL_TCP /* TLS runs over TCP */
+#endif
+
+/* Type of service parameters */
+#define CM_IPTOS_MIN_DELAY 0x10
+#define CM_IPTOS_MAX_TPUT 0x08
+#define CM_IPTOS_MAX_REL 0x04
+
+/* Maximum Error Types */
+#define CM_MAX_ICMP_ERROR 5
+/* cm_tpt_h_001.main_16: Added new macro to support filter for ICMP messages */
+#ifdef CM_ICMP_FILTER_SUPPORT
+#ifndef CM_MAX_ICMP_SOCKET
+#define CM_MAX_ICMP_SOCKET 5
+#endif
+#ifdef IPV6_SUPPORTED
+#define CM_MAX_ICMPV6_MSGTYPE 140
+#endif
+#endif
+
+/* ICMP Error Types */
+#define CM_ICMP_ET_DEST_UNREACHBLE 3
+#define CM_ICMP_ET_SRC_QUENCH 4
+#define CM_ICMP_ET_REDRCT 5
+#define CM_ICMP_ET_TIM_EXCEED 11
+#define CM_ICMP_ET_PARAM_PROB 12
+
+/* ICMPV6 Error Types */
+#ifdef IPV6_SUPPORTED
+#define CM_ICMP_ET_V6DEST_UNREACHABLE 1
+#define CM_ICMP_ET_V6PACKET_TOO_BIG 2
+#define CM_ICMP_ET_V6PACKET_TIME_EXCEEDED 3
+#define CM_ICMP_ET_V6PACKET_PARAM_PROB 4
+#endif /* IPV6_SUPPORTED */
+
+/* ICMP Error Codes - destination unreachable */
+#define CM_ICMP_EC_NWK_UNREACH 0
+#define CM_ICMP_EC_HST_UNREACH 1
+#define CM_ICMP_EC_PROTO_UNREACH 2
+#define CM_ICMP_EC_PORT_UNREACH 3
+#define CM_ICMP_EC_FRAG_REQ_DFSET 4
+#define CM_ICMP_EC_SRC_RUT_FAIL 5
+
+/* ICMP Error Codes - Source Quench */
+#define CM_ICMP_EC_SRC_QUENCH 4
+
+/* ICMP Error Codes - Redirect */
+#define CM_ICMP_EC_RDRCT_NWK 0
+#define CM_ICMP_EC_RDRCT_HST 1
+#define CM_ICMP_EC_RDRCT_TOSNWK 2
+#define CM_ICMP_EC_RDRCT_TOSHST 3
+
+/* ICMP Error codes - Time exceeded */
+#define CM_ICMP_EC_TTL_TRNST 0
+#define CM_ICMP_EC_TTL_REASM 1
+
+/* ICMP V6 Error codes */
+#ifdef IPV6_SUPPORTED
+/* Error codes - Destination unreachable */
+#define CM_ICMPV6_EC_NO_RTTO_DEST 0
+#define CM_ICMPV6_EC_ADMN_PROHIBIT 1
+#define CM_ICMPV6_EC_NOT_NEIGHBOR 2
+#define CM_ICMPV6_EC_ADDR_UNREACH 3
+#define CM_ICMPV6_EC_PORT_UNREACH 4
+
+/* Error codes - Time exceeded */
+#define CM_ICMPV6_EC_HOPLIM_EXCD 0
+#define CM_ICMPV6_EC_FRG_REASM_TM_EXCD 1
+
+/* Error codes - Paramter problem */
+#define CM_ICMPV6_EC_ERRHDR_FIELD 0
+#define CM_ICMPV6_EC_UNKNOWN_NXT_HDR 1
+#define CM_ICMPV6_EC_UNKNOWN_OPTION 2
+
+#endif /* IPV6_SUPPORTED */
+
+/* types of Filter parameter */
+#define CM_ICMP_NO_FILTER 0
+#define CM_ICMPVER4_FILTER CM_INET_IPV4ADDR_TYPE
+#define CM_ICMPVER6_FILTER CM_INET_IPV6ADDR_TYPE
+
+/* For all Error code in a particular Error type */
+#define CM_ALL_CODES_MASK 0xFFFFFFFF
+
+/* types of header parameter */
+#define CM_HDRPARM_NOTPRSNT 0
+#define CM_HDRPARM_IPV4 CM_INET_IPV4ADDR_TYPE
+#define CM_HDRPARM_IPV6 CM_INET_IPV6ADDR_TYPE
+/* added new define for ipHdrParm.type */
+#define CM_HDRPARM_ICMP6 1
+
+#define CM_IPV4_HDRLEN 20 /* Length of IP Header */
+#define CM_IPV6_HDRLEN 40 /* Length of IP Header */
+/* added new new define for IPv4 IP option */
+#define CM_IPV4_OPTS_MAXLEN 44 /* Max length of IPv4 Options */
+#endif /* CM_INET2 */
+
+#define CM_INADDR_ANY CM_INET_INADDR_ANY
+
+#define CM_SOCKOPT_ENABLE CM_INET_OPT_ENABLE
+#define CM_SOCKOPT_DISABLE CM_INET_OPT_DISABLE
+#endif /* __CMINETH__ */
+
+/* packing/unpacking functions */
+#define cmPkCmIpv4NetAddr(x, mBuf) SPkU32(x, mBuf)
+/* Moved all packing functions to cm_tpt from
+ * cm_inet.c files. Hence no #defines are required */
+#define cmUnpkCmIpv4NetAddr(x, mBuf) SUnpkU32(x, mBuf)
+
+/* added macro to free memory allocated for IPv6
+ * IPv6 extn hdrs*/
+#ifdef IPV6_OPTS_SUPPORTED
+#define CM_TPT_FREE_IPV6_HDRPARM(_region, _pool, _hdrParm) \
+{ \
+ CmIpv6HdrParm *_hdrParmIpv6; \
+ U8 numOpts; \
+ if (_hdrParm->type == CM_HDRPARM_IPV6) \
+ { \
+ _hdrParmIpv6 = &_hdrParm->u.hdrParmIpv6; \
+ if( _hdrParmIpv6->ipv6ExtHdr.hbhHdrPrsnt) \
+ { \
+ for(numOpts = _hdrParmIpv6->ipv6ExtHdr.hbhOptsArr.numHBHOpts; \
+ numOpts > 0; numOpts--) \
+ { \
+ SPutSBuf(_region, _pool, (Data *)_hdrParmIpv6->ipv6ExtHdr. \
+ hbhOptsArr.hbhOpts[numOpts - 1].value, (Size)(_hdrParmIpv6-> \
+ ipv6ExtHdr.hbhOptsArr.hbhOpts[numOpts - 1].length)); \
+ SPutSBuf(_region, _pool, (Data *)&_hdrParmIpv6->ipv6ExtHdr. \
+ hbhOptsArr.hbhOpts[numOpts - 1], \
+ (Size)sizeof(CmInetIpv6HBHHdr)); \
+ } \
+ } \
+ if(_hdrParmIpv6->ipv6ExtHdr.destOptsPrsnt) \
+ { \
+ for(numOpts = _hdrParmIpv6->ipv6ExtHdr.destOptsArr.numDestOpts; \
+ numOpts > 0; numOpts--) \
+ { \
+ SPutSBuf(_region, _pool, (Data *)_hdrParmIpv6->ipv6ExtHdr. \
+ destOptsArr.destOpts[numOpts - 1].value, (Size)(_hdrParmIpv6-> \
+ ipv6ExtHdr.destOptsArr.destOpts[numOpts - 1].length)); \
+ SPutSBuf(_region, _pool, (Data *)&_hdrParmIpv6->ipv6ExtHdr. \
+ destOptsArr.destOpts[numOpts - 1], \
+ (Size)sizeof(CmInetIpv6DestOptsHdr)); \
+ } \
+ } \
+ if( _hdrParmIpv6->ipv6ExtHdr.rtOptsPrsnt) \
+ { \
+ SPutSBuf(_region, _pool, \
+ (Data *)_hdrParmIpv6->ipv6ExtHdr.rtOpts.ipv6Addrs, \
+ (Size)(_hdrParmIpv6->ipv6ExtHdr.rtOpts.numAddrs * 16)); \
+ } \
+ } \
+}
+#endif /* IPV6_OPTS_SUPPORTED */
+#endif /* __CMTPTH__ */
+
+\f
+/********************************************************************30**
+ End of file
+*********************************************************************31*/