SCTP 提供信息的可靠传输。在LTE eNB 中,S1 Control Plane interface上的S1-AP协议信息,以及X2 Control Plane interface上的X2-AP协议信息,利用SCTP进行传输。MME建立SCTP Server,监听来自于eNB的SCTP连接。eNB初始化后,则建立一个Sctp client,并与相应的MME建立连接。连接建立之后,MME和eNB可通过SCTP connection发送/接收数据。
安装
> lsmod | grep sctp
测试:
run SCTP server in one terminal,
>sctp_darn –H 0 –P 2500 –l
run SCTP client in another terminal,
>sctp_darn –H 0 –P 2600 –h 127.0.0.1 –p 2500 –s
./config,
make
make install //install the -lsctp
Note:
若内核不提供支持,可编译配置内核,以支持sctp。
Make menuconfig (CONFIG_IP_SCTP=m, CONFIG_SCTP_DBG_MSG=y, CONFIG_SCTP_DBG_OBJCNT=y)
编程
主要函数:
client
》socket( AF_INET, SOCK_STREAM, IPPROTO_SCTP )
》bind( listenSock, (struct sockaddr *)&servaddr, sizeof(servaddr) ) //server
》setsockopt( connSock, IPPROTO_SCTP, SCTP_INITMSG,
&initmsg, sizeof(initmsg) )
》listen( listenSock, 5 ) //server
》connect( connSock, (struct sockaddr *)&servaddr, sizeof(servaddr) ) //client
》accept( listenSock, (struct sockaddr *)NULL, (int *)NULL ) //server
》sctp_recvmsg( connSock, (void *)buffer, sizeof(buffer),
(struct sockaddr *)NULL, 0, &sndrcvinfo, &flags )
》sctp_sendmsg( connSock, (void *)buffer, (size_t)strlen(buffer),
NULL, 0, 0, 0, LOCALTIME_STREAM, 0, 0 )
》close(connSock)
编译选项
》gcc –Wall –o xxx xxx.c –L/usr/local/lib –lsctp
》 ./xxx