Release A code commit
[o-du/l2.git] / src / cm / cm_tpt.h
diff --git a/src/cm/cm_tpt.h b/src/cm/cm_tpt.h
new file mode 100755 (executable)
index 0000000..9d90893
--- /dev/null
@@ -0,0 +1,341 @@
+/*******************************************************************************
+################################################################################
+#   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*/