⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcm_rsock.c

📁 abstract rtos
💻 C
📖 第 1 页 / 共 4 页
字号:
    {             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 + -