📄 ixatmcodeletmain.c
字号:
/* 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 + -