[Epic-ID: ODUHIGH-463][Task-ID: ODUHIGH-496] Create setup with 2 GNB with SCTP associ...
[o-du/l2.git] / src / cu_stub / cu_stub_sctp.h
1 /*******************************************************************************
2 ################################################################################
3 #   Copyright (c) [2017-2019] [Radisys]                                        #
4 #                                                                              #
5 #   Licensed under the Apache License, Version 2.0 (the "License");            #
6 #   you may not use this file except in compliance with the License.           #
7 #   You may obtain a copy of the License at                                    #
8 #                                                                              #
9 #       http://www.apache.org/licenses/LICENSE-2.0                             #
10 #                                                                              #
11 #   Unless required by applicable law or agreed to in writing, software        #
12 #   distributed under the License is distributed on an "AS IS" BASIS,          #
13 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
14 #   See the License for the specific language governing permissions and        #
15 #   limitations under the License.                                             #
16 ################################################################################
17 *******************************************************************************/
18
19 /* This file contains all SCTP related functionality */
20
21 #ifndef __CU_SCTP_H__
22 #define __CU_SCTP_H__
23
24 #define MAX_RETRY 5
25 #define MAX_IPV6_LEN 16
26 #define MAX_DU_SUPPORTED 2
27 #define MAX_REMOTE_CU_SUPPORTED 1
28 #define MAX_ASSOC_SUPPORTED (MAX_DU_SUPPORTED + MAX_REMOTE_CU_SUPPORTED)
29
30 /* Global variable declaration */
31 uint8_t   socket_type;      /* Socket type */
32
33 typedef enum
34 {
35    F1_INTERFACE,
36    XN_INTERFACE
37 }InterfaceType;
38
39 typedef enum
40 {
41    SERVER,
42    CLIENT
43 }NodeType;
44
45 typedef struct
46 {
47    S16              numFd;
48    uint16_t         port;   
49    uint32_t         flag;
50    Buffer           *mBuf;
51    MsgLen           bufLen; 
52    CmInetNetAddr    addr;
53    CmInetFdSet      readFd;
54    CmInetSctpSndRcvInfo   info;
55    CmInetSctpNotification ntfy;
56 }sctpSockPollParams;
57
58 typedef struct
59 {
60    InterfaceType    intf;             /* F1 or Xn Interface */
61    uint32_t         destId;           /* For F1 interface, this is DU ID. For Xn, this is remote CU ID */
62    uint16_t         destPort;         /* DU PORTS */
63    Bool             bReadFdSet;
64    CmInetFd         sockFd;           /* Socket file descriptor */
65    CmInetAddr       peerAddr;
66    CmInetNetAddrLst destAddrLst;      /* Remote IP address list */
67    CmInetNetAddr    destIpNetAddr;    /* Remote IP network address */ 
68    Bool             connUp;           /* Is connection up */
69 }CuSctpAssocCb;
70
71 typedef struct ipAddr
72 {
73  Bool      ipV4Pres;
74  uint32_t  ipV4Addr;
75  Bool      ipV6Pres;
76  uint8_t   ipV6Addr[MAX_IPV6_LEN];
77 }SctpIpAddr;
78
79 typedef struct sctpDestInfo
80 {
81    SctpIpAddr  destIpAddr;
82    uint16_t    destPort;
83 }SctpDestInfo;
84
85 typedef struct sctpCfgPerIntf
86 {
87    uint16_t       port;
88    NodeType       localNodeType; /* Local node acts as Server or client while establishing SCTP assoc */
89    uint8_t        numDestNode; 
90    SctpDestInfo   destCb[MAX_ASSOC_SUPPORTED];
91 }SctpCfgPerIntf;
92
93 typedef struct cuSctpParams
94 {
95    SctpIpAddr     localIpAddr;
96    SctpCfgPerIntf f1SctpInfo;
97    SctpCfgPerIntf xnSctpInfo;
98 }CuSctpParams;
99
100 typedef struct
101 {
102    CuSctpParams     sctpCfg;
103    CmInetNetAddrLst localAddrLst;
104    CmInetFd         f1LstnSockFd;       /* Listening Socket file descriptor for F1 association */
105    CmInetFd         xnLstnSockFd;       /* Listening Socket file descriptor for Xn association */
106    NodeType         localXnNodeType;    /* Local node acts as Server or client while establishing SCTP assoc at Xn interface */
107    uint8_t          numAssoc;
108    CuSctpAssocCb    assocCb[MAX_ASSOC_SUPPORTED];
109 }SctpGlobalCb;
110
111 SctpGlobalCb sctpCb;
112
113 uint8_t sctpActvInit();
114 uint8_t sctpStartReq();
115 uint8_t sctpSend(InterfaceType intf, uint32_t destId, Buffer *mBuf);
116 uint8_t sctpCfgReq();
117
118 uint8_t fillAddrLst(CmInetNetAddrLst *addrLstPtr, SctpIpAddr *ipAddr);
119 uint8_t fillDestNetAddr(CmInetNetAddr *destAddrPtr, SctpIpAddr *dstIpPtr);
120 uint8_t sctpSetSockOpts(CmInetFd *sock_Fd);
121 uint8_t sctpSockPoll();
122 uint8_t sctpAccept(CmInetFd *lstnSockFd, CuSctpAssocCb *assocCb);
123 uint8_t processPolling(sctpSockPollParams *pollParams, CuSctpAssocCb *assocCb, uint32_t *timeoutPtr, CmInetMemInfo *memInfo);
124 #endif
125
126 /**********************************************************************
127          End of file
128  **********************************************************************/