📄 lcm_rsock.c
字号:
{ return FALSE; } if (ip->ip_chHLen < 5) { return FALSE; } if( AOS_NTOHS(ip->ip_usOff) &(~IP_DF) ) { return FALSE; } if( IPPROTO_UDP == ip->ip_chPr ) { udp = (UDPHDR_S*)((U8*)ip + ip->ip_chHLen * 4); dst_port = AOS_NTOHS(udp->uh_usDPort); } else if( IPPROTO_TCP == ip->ip_chPr ) { tcp = (TCPHDR_S*)((U8*)ip + ip->ip_chHLen * 4); dst_port = AOS_NTOHS(tcp->usDstPort); } else { return FALSE; } if( rsock_is_reservport( dst_port) ) { return TRUE; } return FALSE;}U32 rsock_rapid_recv_from_eth( MBUF_S* pstMBuf ){ p2p_trans_input_handle(pstMBuf); return AOS_SUCC;}#if( CONFIG_BOARD_GMPU == TRUE )VOID rsock_update_gateway( U32 ulParamid, S8 *szParamStr ){ U32 ulIpAddr; if( 0 == aos_strtoipaddr(szParamStr, &ulIpAddr) ) { if( PARAM_SYS_FE0_GAGEWAY_IP == ulParamid ) { g_ulRsGateWay[0] = AOS_HTONL(ulIpAddr); } else if( PARAM_SYS_FE1_GATEWAY_IP == ulParamid ) { g_ulRsGateWay[1] = AOS_HTONL(ulIpAddr); } }}#endifS8 *rsock_get_state( RSOCK s ){ rsock_t *rs; rs = &g_pstRsock[s]; if( RSOCK_PROTO_TCP == rs->proto ) { if( rs->tcp_state < RSOCK_STATE_BUTT ) { return g_astRsockStateStr[rs->tcp_state]; } else { return "Error"; } } else { return (rs->connected ? "estb" :"init"); }}S8 *rsock_get_tcp_signal( U8 flags ){ static S8 str[64]; str[0] = 0; if( LCM_TCP_FIN & flags ) { aos_strcat( str, "fin" ); } if( LCM_TCP_SYN & flags ) { if( 0 != aos_strlen(str) ) { aos_strcat( str, "_" ); } aos_strcat( str, "syn" ); } if( LCM_TCP_RESET & flags ) { if( 0 != aos_strlen(str) ) { aos_strcat( str, "_" ); } aos_strcat( str, "reset" ); } if( LCM_TCP_PUSH & flags ) { if( 0 != aos_strlen(str) ) { aos_strcat( str, "_" ); } aos_strcat( str, "push" ); } if( LCM_TCP_URGENT & flags ) { if( 0 != aos_strlen(str) ) { aos_strcat( str, "_" ); } aos_strcat( str, "urgent" ); } if( LCM_TCP_ECN_ECHO & flags ) { if( 0 != aos_strlen(str) ) { aos_strcat( str, "_" ); } aos_strcat( str, "ecn-echo" ); } if( LCM_TCP_CWR & flags ) { if( 0 != aos_strlen(str) ) { aos_strcat( str, "_" ); } aos_strcat( str, "cwr" ); } if( LCM_TCP_ACK & flags ) { if( 0 != aos_strlen(str) ) { aos_strcat( str, "_" ); } aos_strcat( str, "ack" ); } return str;}VOID rsock_show_rsock_proc(U32 argc, S8 *argv[ ] ){ S8 szBuf[128]; U32 ulIndex = 0, ulCurLine=0, showFlag = 255, showIp = 0; S32 r, r_s, r_e; U32 r_total=0, r_show=0, ref_total=0, ref_show=0; rsock_t *rs; aos_atol(argv[0], (S32*)&ulIndex); if( argc < 3 || argv[2][0] == '?' ) { cli_out_string( ulIndex, "\r\n Syntax:\r\n show rsock [all|tcp|udp|rid|resource] {ipaddr|id}\r\n" ); return; } r_s = 0; r_e = MAX_RSOCK_NUM; if( 0 == aos_stricmp( argv[2], "all" ) ) { showFlag = 0; } else if( 0 == aos_stricmp( argv[2], "tcp" ) ) { showFlag = 1; } else if( 0 == aos_stricmp( argv[2], "udp" ) ) { showFlag = 2; } else if( 0 == aos_stricmp( argv[2], "rid" ) ) { showFlag = 3; } else if( 0 == aos_stricmp( argv[2], "resource" ) ) { goto rsock_show_resource; } else { cli_out_string( ulIndex, "\r\n Syntax:\r\n show rsock [all|tcp|udp|rid|resource] {ipaddr|id}\r\n" ); } if( argc > 3 ) { if( 3 == showFlag ) { showFlag = 0; if( aos_atol(argv[3], &r_s) || r_s < 0 || r_s >= MAX_RSOCK_NUM ) { cli_out_string( ulIndex, "\r\n rid invalid!\r\n" ); return; } } else { if( aos_strtoipaddr(argv[3], &showIp) ) { cli_out_string( ulIndex, "\r\n ip address invalid!\r\n" ); return; } showIp = AOS_HTONL(showIp); } } cli_out_string( ulIndex, "\r\n rid proto state ref seq ack noack lport port ip\r\n" ); cli_out_string( ulIndex, "\r\n-------------------------------------------------------------------------------\r\n" ); for( r = r_s; r < r_e; r++ ) { rs = &g_pstRsock[r]; if( !rs->init ) { continue; } r_total++; ref_total += rs->ref; if( 0 == (r_total % 500 ) ) { clear_watch_dog(); } if( ( 255 == showFlag ) || ( 1 == showFlag && RSOCK_PROTO_TCP != rs->proto ) || ( 2 == showFlag && RSOCK_PROTO_UDP != rs->proto ) || (showIp && (showIp != rs->peer_ip) ) ) { continue; } r_show++; ref_show += rs->ref; aos_snprintf( szBuf, 128,"%5d %5s %8s %5d %10u %10u %5d %5d %5d %A\r\n", r, (rs->proto == RSOCK_PROTO_TCP ? "TCP":"UDP"), rsock_get_state(r), rs->ref, rs->tcp_seq, rs->tcp_ack, rs->tcp_ack-rs->tcp_last_ack, rs->lcl_port, rs->peer_port, rs->peer_ip ); if( CLI_DISPLAY_STOP == cli_out_string_wait( ulIndex, szBuf, &ulCurLine) ) { showFlag = 255; } } aos_snprintf( szBuf, 128,"Total rsock:%u ref:%u, Show rsock:%u ref:%u, Try syn:%u protect delete:%u\r\n", r_total, ref_total, r_show, ref_show, g_ulRsockProtectNum1, g_ulRsockProtectNum2 ); cli_out_string( ulIndex, szBuf ); return;rsock_show_resource: { U32 i,j,len = 0,n = 0, port; U32 tcp_total = 0, tcp_wait_free = 0, udp_total = 0; lcm_port_t *pPort; struct aos_list *node, *next; cli_out_string( ulIndex, "\r\nallocated TCP ports(maybe includes mgcp,sip,lcm port)\r\n" ); cli_out_string( ulIndex, "-------------------------------------------------------------------------------\r\n" ); for( i = 0; i < RSOCK_TCP_PORT_ARY_NUM; i++ ) { for( j = 0; j < 32; j++ ) { if( g_pTcpPortAllocFlag[i] & ( 1L << j ) ) { port = (g_usRsockBasePort + (i << 5 ) + j); if( FALSE == lcm_is_port_reserved_for_app(port) ) { len +=aos_sprintf( &szBuf[len], "%6d ", port ); } else { len +=aos_sprintf( &szBuf[len], "*%5d ", port ); } n++; tcp_total++; if( n >= 11 ) { cli_out_string( ulIndex, szBuf ); cli_out_string( ulIndex, "\r\n" ); len = 0; n = 0; } } } } if( n ) { cli_out_string( ulIndex, szBuf ); cli_out_string( ulIndex, "\r\n" ); } cli_out_string( ulIndex, "-------------------------------------------------------------------------------\r\n" ); cli_out_string( ulIndex, "Tcp Wait Free ports\r\n" ); cli_out_string( ulIndex, "-------------------------------------------------------------------------------\r\n" ); len = 0; n = 0; for( node = g_stLcmPortWaitFreeList.next; node != &g_stLcmPortWaitFreeList; node = next ) { next = node->next; pPort = aos_list_entry(node, lcm_port_t, node); len +=aos_sprintf( &szBuf[len], "%5d-%3d ", pPort->usPort, pPort->expire ); n++; tcp_wait_free++; if( n >= 8 ) { cli_out_string( ulIndex, szBuf ); cli_out_string( ulIndex, "\r\n" ); len = 0; n = 0; } } if( n ) { cli_out_string( ulIndex, szBuf ); cli_out_string( ulIndex, "\r\n" ); } cli_out_string( ulIndex, "-------------------------------------------------------------------------------\r\n" ); cli_out_string( ulIndex, "allocated UDP ports(maybe includes mgcp,sip,lcm port)\r\n" ); cli_out_string( ulIndex, "-------------------------------------------------------------------------------\r\n" ); len = 0; n = 0; for( i = 0; i < RSOCK_UDP_PORT_ARY_NUM; i++ ) { for( j = 0; j < 32; j++ ) { if( g_UdpPortAllocFlag[i] & ( 1L << j ) ) { port = (g_usRsockBasePort + (i << 5 ) + j); if( FALSE == lcm_is_port_reserved_for_app(port) ) { len +=aos_sprintf( &szBuf[len], "%6d ", port ); } else { len +=aos_sprintf( &szBuf[len], "*%5d ", port ); } n++; udp_total++; if( n >= 11 ) { cli_out_string( ulIndex, szBuf ); cli_out_string( ulIndex, "\r\n" ); len = 0; n = 0; } } } } if( n ) { cli_out_string( ulIndex, szBuf ); cli_out_string( ulIndex, "\r\n" ); } cli_out_string( ulIndex, "-------------------------------------------------------------------------------\r\n" ); aos_sprintf( szBuf, "Tcp allocated:%u, wait free:%u ; Udp allocated:%u\r\n", tcp_total, tcp_wait_free, udp_total ); cli_out_string( ulIndex, szBuf ); cli_out_string( ulIndex, "-------------------------------------------------------------------------------\r\n" ); } }#if( CONFIG_BOARD_GMPU == TRUE )VOID rsock_gateway_proc(U32 argc, S8 *argv[ ] ){ S8 szBuf[128], szParam[64]; U32 ulIndex = 0, ulParamId, ulIpAddress; S8 *szSyntax = "\r\n Syntax: ip gateway {fe0|fe1|show} {a.b.c.d}\r\n \r\n"; aos_atol(argv[0], (S32*)&ulIndex); if( argc < 3 ) { cli_out_string( ulIndex, szSyntax ); return; } if( 0 == aos_stricmp( argv[2], "fe0" ) ) { ulParamId = PARAM_SYS_FE0_GAGEWAY_IP; } else if( 0 == aos_stricmp( argv[2], "fe1" ) ) { ulParamId = PARAM_SYS_FE1_GATEWAY_IP; } else if( 0 == aos_stricmp( argv[2], "show" ) ) { if( DB_SUCC != db_get_sys_pub_param_value( PARAM_SYS_FE0_GAGEWAY_IP, szParam ) ) { aos_strcpy( szParam, "not config" ); } aos_sprintf( szBuf, "\r\n FE0 gateway : %s\r\n", szParam ); cli_out_string( ulIndex, szBuf ); if( DB_SUCC != db_get_sys_pub_param_value( PARAM_SYS_FE1_GATEWAY_IP, szParam ) ) { aos_strcpy( szParam, "not config" ); } aos_sprintf( szBuf, " FE1 gateway : %s\r\n", szParam ); cli_out_string( ulIndex, szBuf ); return; } else { cli_out_string( ulIndex, szSyntax ); return; } if( argc != 4 ) { cli_out_string( ulIndex, szSyntax ); return; } if( 0 != aos_strtoipaddr( argv[3], &ulIpAddress ) ) { cli_out_string( ulIndex, "\r\n ip address invalid\r\n" ); return; } aos_ipaddrtostr( ulIpAddress, szParam ); if( PARAM_SYS_FE0_GAGEWAY_IP == ulParamId ) { db_update_sys_pub_param_value( ulParamId, "FE0 gateway ip address", szParam ); } else { db_update_sys_pub_param_value( ulParamId, "FE1 gateway ip address", szParam ); } }#endifRSOCK g_TestRsock = NULL_RSOCK;VOID lcm_rsock_test_task(){ U32 peerIp; U16 peerPort; MBUF_S *mbuf; aos_strtoipaddr("172.16.55.2", &peerIp); peerIp = AOS_HTONL(peerIp); peerPort = 4990; g_TestRsock = rsock_init( RSOCK_PROTO_TCP, peerIp, peerPort, 20000, U32_BUTT, 0, NULL ); if( NULL_RSOCK == g_TestRsock ) { aos_printf( 0, "rsock_init fail" ); return; } while( !rsock_is_connect(g_TestRsock) ) { aos_printf( 0, "Connecting...." ); rsock_connect(g_TestRsock); aos_task_delay( 1000 ); } aos_printf( 0, "Connected" ); mbuf = mbuf_create( 128, 100, MBUF_TYPE_DATA, MPE_RSOCK ); if( NULL == mbuf ) { return; } rsock_send( g_TestRsock, mbuf ); aos_task_delay(1000); mbuf = mbuf_create( 128, 100, MBUF_TYPE_DATA, MPE_RSOCK ); if( NULL == mbuf ) { return; } rsock_send( g_TestRsock, mbuf ); rsock_close(g_TestRsock); g_TestRsock = NULL_RSOCK;}VOID lcm_start_rsock_test(){ U32 tid; aos_task_create( "rstest", 1024, TASK_PRIO_NORMAL, AOS_TASK_NOPREEMPT, (VOID(*)(VOID*))lcm_rsock_test_task, 0, &tid ); }VOID rsock_resource_show(){ struct aos_list *node; U32 count; count = 0; for( node = g_FreeRsockList.next; node != &g_FreeRsockList; node= node->next) { if( (++count%500) == 0 ) { clear_watch_dog(); } } aos_printf(0, "\r\nFree rsock Block Num: %u/%u", count, MAX_RSOCK_NUM); }#endif#ifdef __cplusplus}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -