X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcm%2Fcm_tpt.h;fp=src%2Fcm%2Fcm_tpt.h;h=9d9089350ce3feb358b52b3505af111f5735643a;hb=d349ae65e1495488772f87e5cfa1ae71d9eab075;hp=0000000000000000000000000000000000000000;hpb=829bbd114f1c3dc00c1da47bca0a8207c049df3f;p=o-du%2Fl2.git diff --git a/src/cm/cm_tpt.h b/src/cm/cm_tpt.h new file mode 100755 index 000000000..9d9089350 --- /dev/null +++ b/src/cm/cm_tpt.h @@ -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. # +################################################################################ +*******************************************************************************/ + +/********************************************************************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__ */ + + +/********************************************************************30** + End of file +*********************************************************************31*/