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

📄 ixatmcodeletmain.c

📁 有关ARM开发板上的IXP400网络驱动程序的源码以。
💻 C
📖 第 1 页 / 共 2 页
字号:
    /* Setup aalType */     ixAtmCodeletAalType = aalType;    /* The type of mode - Utopia, Software, Remote or OAM Ping mode */    switch (modeType)    {        case IX_ATMCODELET_UTOPIA_LOOPBACK_8VBR_8CBR_16UBR:		/* Setup to have 8VBR, 8CBR, 16 UBR VCs */		ixAtmUtilsAtmRtVcsSet();        case IX_ATMCODELET_UTOPIA_LOOPBACK:	    if (IX_SUCCESS != ixAtmCodeletMainUtopiaLoopbackRun())	    {		IX_ATMCODELET_LOG ("Error Setting Utopia Loopback\n");		ixAtmUtilsAtmRtVcsUnset();		return IX_FAIL;	    }	    break;	case IX_ATMCODELET_SOFTWARE_LOOPBACK_8VBR_8CBR_16UBR:		/* Setup to have 8VBR, 8CBR, 16 UBR VCs */		ixAtmUtilsAtmRtVcsSet();	case IX_ATMCODELET_SOFTWARE_LOOPBACK:	    if (IX_SUCCESS != ixAtmCodeletMainSoftwareLoopbackRun())	    {		IX_ATMCODELET_LOG ("Error Setting Software Loopback\n");		ixAtmUtilsAtmRtVcsUnset();		return IX_FAIL;	    }	    /* Port rate for Software loopback */	    ixAtmCodeletPortRateModify(0,IX_ATM_CODELET_SWLOOPBACK_PORT_RATE);	    if (ixAtmCodeletSoftwareLoopbackThreadCreate() != IX_SUCCESS)	    {		IX_ATMCODELET_LOG("Unable to create thread for software loopback\n");	    }	    break;	case IX_ATMCODELET_REMOTE_LOOPBACK_8VBR_8CBR_16UBR:		/* Setup to have 8VBR. 8CBR, 16 UBR VCs */		ixAtmUtilsAtmRtVcsSet();	case IX_ATMCODELET_REMOTE_LOOPBACK:	    if (IX_SUCCESS != ixAtmCodeletMainRemoteLoopbackRun())	    {		IX_ATMCODELET_LOG ("Error Setting Remote Loopback\n");		ixAtmUtilsAtmRtVcsUnset();		return IX_FAIL;	    }	    /* Port rate for Remote loopback */	    ixAtmCodeletPortRateModify(0,IX_ATM_CODELET_REMOTELOOPBACK_PORT_RATE);	    break;	case IX_ATMCODELET_UTOPIA_LOOPBACK_PERFORM_OAM_PING_F4F5:	    /* OAM Performs F4 and F5 in Utopia Loopback mode */	    ixAtmCodeletOamPingF4F5Enabled = TRUE;	    if (IX_SUCCESS != ixAtmCodeletMainUtopiaLoopbackRun())	    {		IX_ATMCODELET_LOG ("Error Setting Utopia Loopback\n");		return IX_FAIL;	    }	   	    IX_ATMCODELET_LOG ("\nOAM Ping for F4 & F5 cells in Utopia Loopback\n");	    break;	case IX_ATMCODELET_SOFTWARE_LOOPBACK_PERFORM_OAM_PING_F4F5:	    /* OAM Performs F4 and F5 in Software loopback mode */	    if (IX_SUCCESS != ixAtmCodeletMainSoftwareLoopbackRun())	    {		IX_ATMCODELET_LOG ("Error Setting Utopia Loopback\n");		return IX_FAIL;	    }	    	   	    IX_ATMCODELET_LOG ("\nOAM Ping for F4 & F5 cells in Software Loopback\n");	    ixAtmCodeletOamPingF4F5Enabled = TRUE;	    if (ixAtmCodeletSoftwareLoopbackThreadCreate() != IX_SUCCESS)	    {		IX_ATMCODELET_LOG("Unable to create thread for software loopback\n");	    }	    break;	 	default:	    IX_ATMCODELET_LOG ("Invalid modeType\n"); 	    ixAtmCodeletMainUsage();	    return IX_FAIL;    }    return IX_SUCCESS;}/*------------------------------------------------------------ *          PRIVATE functions  *------------------------------------------------------------*/PRIVATE voidixAtmCodeletOamPingF4F5CellsRun(void){    IX_ATMCODELET_LOG ("\nInitiate OAM F4 End-to-End loopback ping");    IX_ATMCODELET_LOG ("\nPort = 0, VPI = 1, numCells = 10\n");    ixOamCodeletOamF4EtePing(0,1,10);     ixOamCodeletShow();    IX_ATMCODELET_LOG ("\nInitiate OAM F4 Segment loopback ping");    IX_ATMCODELET_LOG ("\nPort = 0, VPI = 1, numCells = 10\n");    ixOamCodeletOamF4SegPing(0,1,10);     ixOamCodeletShow();        IX_ATMCODELET_LOG ("\nInitiate OAM F5 End-to-End loopback ping");    IX_ATMCODELET_LOG ("\nPort = 0, VPI = 1, VCI = 34, numCells = 10\n");    ixOamCodeletOamF5EtePing(0,1,34,10);     ixOamCodeletShow();       IX_ATMCODELET_LOG ("\nInitiate OAM F5 Segment loopback ping");    IX_ATMCODELET_LOG ("\nPort = 0, VPI = 1, VCI = 34, numCells = 10\n");    ixOamCodeletOamF5SegPing(0,1,34,10);     ixOamCodeletShow();}PRIVATE IX_STATUSixAtmCodeletSoftwareLoopbackThreadCreate(void){    IxOsalThread tid;    IxOsalThreadAttr threadAttr;    char *pThreadName = "SW Loopback Statistics";    threadAttr.name = pThreadName;    threadAttr.stackSize = IX_ATMCODELET_QMGR_DISPATCHER_THREAD_STACK_SIZE;    threadAttr.priority = IX_ATMCODELET_QMGR_DISPATCHER_PRIORITY;    /* Create thread for displaying stats & perform OAM ping in software loopback */       if (ixOsalThreadCreate(&tid,			   &threadAttr,			    (IxOsalVoidFnVoidPtr) ixAtmCodeletSoftwareLoopbackStatsShowTask, 			   NULL) != IX_SUCCESS)     { 	IX_ATMCODELET_LOG ("Error spawning ixAtmCodeletSwLoopbackStatsShowTask task\n"); 	return IX_FAIL;     }  	     if(IX_SUCCESS != ixOsalThreadStart(&tid))    {        IX_ATMCODELET_LOG ("Error starting thread\n");         return IX_FAIL;    }    return IX_SUCCESS;}/* To display stats and/or perform OAM ping F4 and F5 for Software Loopback */PRIVATE voidixAtmCodeletSoftwareLoopbackStatsShowTask(void){    UINT32 t0, t1, tlapse;    t0 = ixOsalTimestampGet(); /* get the initial time stamp value */	     while (1)    {	t1 = ixOsalTimestampGet(); /* get the next time stamp */
	tlapse = (t1 > t0 )? (t1 - t0): (0xFFFFFFFF) - t1 + t0;
		
	if( tlapse > (MAX_TIME_LIMIT_IN_SEC*ixOsalTimestampResolutionGet()))
	{	  	    ixAtmCodeletShow(); /* Display the statistics*/	    /* If OAM Ping F4 and F5 is used then enabled is TRUE */	    if (ixAtmCodeletOamPingF4F5Enabled)	    {		ixAtmCodeletOamPingF4F5CellsRun();	    }	    t0 = ixOsalTimestampGet(); /* get t0 time stamp value */	}      ixOsalSleep (0);    }}/*   SduSend task for AAL5. */PRIVATE voidixAtmCodeletAal5SduSendTask (void){   UINT32 t0, t1, tlapse;    static char stillRunning[] = "|/-\\";    static int  stillRunningIndex = 0;    t0 = ixOsalTimestampGet(); /* get the initial time stamp value */    while (TRUE)    {	IX_ATMCODELET_LOG ("\rSending Multiple %u Aal5 Packets...%c",			   AAL5_PACKET_SEND_COUNT,			   stillRunning[stillRunningIndex++ & 3]);	/* Send some Aal5 Cpcs SDUs */	if (IX_SUCCESS != ixAtmCodeletAal5CpcsSdusSend (AAL5_CPCS_SDU_SEND_LENGTH,							AAL5_PACKET_SEND_COUNT))	{	    IX_ATMCODELET_LOG ("Failed to send SDUs\n");	    return;	} 	t1 = ixOsalTimestampGet(); /* get the next time stamp */	   	tlapse = (t1 > t0 )? (t1 - t0): (0xFFFFFFFF) - t1 + t0;
		
	if( tlapse > (MAX_TIME_LIMIT_IN_SEC*ixOsalTimestampResolutionGet()))	{	   	    ixAtmCodeletShow(); /* Display the statistics*/	    /* If OAM Ping F4 and F5 is used then enabled is TRUE */	    if (ixAtmCodeletOamPingF4F5Enabled)	    {		ixAtmCodeletOamPingF4F5CellsRun();	    }	    t0 = ixOsalTimestampGet(); /* get t0 time stamp value */	}           ixOsalSleep (0);    }}/*   SduSend task for AAL0_48 and AAL_52. */PRIVATE voidixAtmCodeletAal0SduSendTask (void){    UINT32 t0, t1, tlapse;    static char stillRunning[] = "|/-\\";    static int  stillRunningIndex = 0;    /* get the initial time stamp value */    t0 = ixOsalTimestampGet();    while (TRUE)    {	IX_ATMCODELET_LOG ("\rSending Multiple %u Aal0 Packets...%c",			   AAL5_PACKET_SEND_COUNT,			   stillRunning[stillRunningIndex++ & 3]);	/* Send some Aal0 Packets */	if (IX_SUCCESS != ixAtmCodeletAal0PacketsSend (AAL0_CELLS_SEND_LENGTH, 						       AAL0_PACKET_SEND_COUNT))	{	    IX_ATMCODELET_LOG ("Failed to send SDUs\n");	    return;	}	t1 = ixOsalTimestampGet(); /* get the next time stamp */	tlapse = (t1 > t0 )? (t1 - t0): (0xFFFFFFFF) - t1 + t0;
		
	if( tlapse > (MAX_TIME_LIMIT_IN_SEC*ixOsalTimestampResolutionGet()))
	{
	    ixAtmCodeletShow(); /* Display the statistics*/	    /* If OAM Ping F4 and F5 is used then enabled is TRUE */	    if (ixAtmCodeletOamPingF4F5Enabled)	    {		ixAtmCodeletOamPingF4F5CellsRun();	    }	    t0 = ixOsalTimestampGet(); /* get t0 time stamp value */	}    ixOsalSleep (0);    }}PRIVATE voidixAtmCodeletMainUsage (void){    printf("\nUsage :");    printf("\n ixAtmCodeletMain (modeType, aalType)");    printf("\n");	        printf("\n  modeType : 0 = Utopia Loopback Mode 32 UBR");    printf("\n             1 = Utopia Loopback Mode 8VBR, 8CBR, 16UBR");    printf("\n             2 = Software Loopback Mode 32 UBR");    printf("\n             3 = Software Loopback Mode 8VBR, 8CBR, 16UBR");    printf("\n             4 = Remote Loopback Mode 32 UBR");    printf("\n             5 = Remote Loopback 8VBR, 8CBR, 16UBR");    printf("\n             6 = F4 & F5 cells OAM Ping in UTOPIA Loopback mode");    printf("\n             7 = F4 & F5 cells OAM Ping in Software Loopback mode");    printf("\n");    printf("\n  aalType  : 1 = AAL5                                   ");    printf("\n             2 = AAL0_48                                ");     printf("\n             3 = AAL0_52                                ");    printf("\n");}#ifdef __winceint readNumber(void){    char line[256];    gets(line);    return atoi(line);}int wmain(int argc, WCHAR **argv){	IxAtmCodeletMode atmCodeletModeTypeTest;	IxAtmCodeletAalType atmCodeletAalTypeTest;    BOOL atmCodeletRun = TRUE;	BOOL testStarted = FALSE;	IX_STATUS retVal = IX_FAIL;    while(atmCodeletRun)    {		if (!testStarted)		{		    printf("\n");		    printf("************* ATM Codelet *********************************\n");		    printf("\n  Mode Type: 0 = Utopia Loopback Mode 32 UBR");		    printf("\n             1 = Utopia Loopback Mode 8VBR, 8CBR, 16UBR");		    printf("\n             2 = Software Loopback Mode 32 UBR");		    printf("\n             3 = Software Loopback Mode 8VBR, 8CBR, 16UBR");		    printf("\n             4 = Remote Loopback Mode 32 UBR");		    printf("\n             5 = Remote Loopback 8VBR, 8CBR, 16UBR");		    printf("\n             6 = F4 & F5 cells OAM Ping in UTOPIA Loopback mode");		    printf("\n             7 = F4 & F5 cells OAM Ping in Software Loopback mode");		    printf("\n\n");		    printf("\n  AAL Type:  1 = AAL5\n");		    printf("\n             2 = AAL0_48\n"); 		    printf("\n             3 = AAL0_52\n");		    printf("\n");		    printf("\n");		    printf("100. Exit ATM Codelet\n");		    printf("\n");		    printf("\nEnter Mode Type: ");		}		do		{			atmCodeletModeTypeTest = (IxAtmCodeletMode)readNumber();			if (atmCodeletModeTypeTest == 100)			{				printf("\n\nExiting Codelet \n\n");				return 0;			}			else if (atmCodeletModeTypeTest >= IX_ATMCODELET_INVALID_MODE)			{				printf("\nInvalid Mode Type Entered!. Please enter a correct mode type: \n");			}			else			{				break;			}		}while(1);		printf("\nEnter AAL Type: ");        do		{			atmCodeletAalTypeTest = (IxAtmCodeletAalType)readNumber();			if ((atmCodeletAalTypeTest <= ixAtmCodeletAalTypeInvalid) || 				(atmCodeletAalTypeTest >= ixAtmCodeletAalTypeMax))			{				printf("\nInvalid AAL Type Entered!. Please enter a correct AAL type: \n");			}			else			{				break;			}		}while(1);        retVal = ixAtmCodeletMain(atmCodeletModeTypeTest, atmCodeletAalTypeTest);		if (retVal == IX_SUCCESS)		{			testStarted = TRUE;		}		else		{			testStarted = FALSE;		}    }    return 0;}#endif              

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -