📄 cli.c
字号:
un32NbToken++;
*out_pun32AdapterNb = atoi (pToken);
}
else if (un32NbToken == 1)
{
PTBX_CHAR pSubToken;
un32NbToken++;
/* Check which trunk has been selected */
un32Trunk = atoi (pToken);
*out_pun32TrunkFirst = un32Trunk;
/* Parse the next token */
pSubToken = strchr (pToken, '-');
if( pSubToken++ )
un32TrunkTop = atoi (pSubToken);
else
un32TrunkTop = un32Trunk;
un32TrunkCnt = un32TrunkTop - un32Trunk + 1;
*out_pun32TrunkCnt = un32TrunkCnt;
}
else
{
un32NbToken++;
*out_pun32TimeslotNb = atoi (pToken);
}
/* Parse the next token */
pToken = strtok (NULL, ",");
}
/* Validate the adapter */
if (*out_pun32AdapterNb == (TBX_UINT32)-1)
{
*out_pun32TrunkFirst = (TBX_UINT32)-1;
*out_pun32TrunkCnt = (TBX_UINT32)1;
*out_pun32TimeslotNb = (TBX_UINT32)-1;
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
if (*out_pun32AdapterNb >= g_AppContext->un32NbAdapter)
{
TB640_FSK_DISPLAY_PRINT ("Invalid adapter selected (%d)\n", *out_pun32AdapterNb);
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Invalid selection");
}
pAdapterInfo = &(g_AppContext->ahAdapterInfo [*out_pun32AdapterNb]);
/* Validate the trunk */
if (*out_pun32TrunkFirst == (TBX_UINT32)-1)
{
*out_pun32TrunkCnt = (TBX_UINT32)1;
*out_pun32TimeslotNb = (TBX_UINT32)-1;
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
pTrunkInfo = &pAdapterInfo->aTrunkInfo [0];
while( un32TrunkCnt-- )
{
if (un32Trunk >= TB640_FSK_MAX_SUPPORTED_TRUNKS_PER_ADAPTER)
{
TB640_FSK_DISPLAY_PRINT ("Invalid trunk selected (%d)\n", un32Trunk);
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Invalid selection");
}
pTrunkInfo = &pAdapterInfo->aTrunkInfo [un32Trunk];
if (pTrunkInfo->fActivated == TBX_FALSE)
{
TB640_FSK_DISPLAY_PRINT ("Invalid trunk selected (%d)\n", un32Trunk);
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Invalid selection");
}
un32Trunk++;
}
/* Validate the timeslot */
if (*out_pun32TimeslotNb == (TBX_UINT32)-1)
{
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
if (*out_pun32TimeslotNb >= TB640_FSK_MAX_TIMESLOT_IN_TRUNK)
{
TB640_FSK_DISPLAY_PRINT ("Invalid timeslot selected (%d)\n", *out_pun32TimeslotNb);
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Invalid selection");
}
pTrunkResInfo = &(pTrunkInfo->aResourceInfo [*out_pun32TimeslotNb]);
if (pTrunkResInfo->hVPResource == (TB640_RESOURCE_HANDLE)NULL)
{
TB640_FSK_DISPLAY_PRINT ("Invalid timeslot selected (%d)\n", *out_pun32TimeslotNb);
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Invalid selection");
}
/* End of the code (skip to cleanup) */
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
/*---------------------------------------------------------------------------------------------------------------------------
| Error handling section
*--------------------------------------------------------------------------------------------------------------------------*/
ERROR_HANDLING
{
}
/*---------------------------------------------------------------------------------------------------------------------------
| Cleanup section
*--------------------------------------------------------------------------------------------------------------------------*/
CLEANUP
{
}
RETURN;
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640FskAdapterTrunkTimeslotLaunchAction : This function launches an action for specified
| adapter/trunk/timeslot.
| -1 can be used for "all" adapter, trunk or timeslot.
|
| out_pun32AdapterNb: Adapter number to display
|
| Note : ~
|
| Return : TBX_RESULT_OK
| TBX_RESULT_FAIL
|
*------------------------------------------------------------------------------------------------------------------------------*/
TBX_VOID TB640FskAdapterTrunkTimeslotLaunchAction (
IN PFCT_TB640_FSK_CMDLINE_ACTION in_pFctAction,
IN TBX_UINT32 in_un32FctParam,
IN TBX_UINT32 in_pun32AdapterNb,
IN TBX_UINT32 in_pun32TrunkNb,
IN TBX_UINT32 in_pun32TimeslotNb)
{
TBX_UINT32 un32Count;
TBX_UINT32 un32Count2;
TBX_UINT32 un32Count3;
PTB640_FSK_ADAPTER_INFO pAdapterInfo;
PTB640_FSK_TRUNK_INFO pTrunkInfo;
PTB640_FSK_TRUNK_RESOURCE_INFO pTrunkResInfo;
for (un32Count=0; un32Count<g_AppContext->un32NbAdapter; un32Count++)
{
if( in_pun32AdapterNb == -1 )
pAdapterInfo = &(g_AppContext->ahAdapterInfo [un32Count]);
else
pAdapterInfo = &(g_AppContext->ahAdapterInfo [in_pun32AdapterNb]);
for (un32Count2=0; un32Count2<pAdapterInfo->un32NbTrunk; un32Count2++)
{
if( in_pun32TrunkNb == -1 )
pTrunkInfo = &(pAdapterInfo->aTrunkInfo [un32Count2]);
else
pTrunkInfo = &(pAdapterInfo->aTrunkInfo [in_pun32TrunkNb]);
for (un32Count3=0; un32Count3<TB640_FSK_MAX_TIMESLOT_IN_TRUNK; un32Count3++)
{
if( in_pun32TimeslotNb == -1 )
pTrunkResInfo = &(pTrunkInfo->aResourceInfo [un32Count3]);
else
pTrunkResInfo = &(pTrunkInfo->aResourceInfo [in_pun32TimeslotNb]);
in_pFctAction
(
in_un32FctParam,
pAdapterInfo - g_AppContext->ahAdapterInfo,
pTrunkInfo->un8Trunk,
pTrunkResInfo->un8Timeslot
);
if( in_pun32TimeslotNb != -1 ) break;
}
if( in_pun32TrunkNb != -1 ) break;
}
if( in_pun32AdapterNb != -1 ) break;
}
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640FskPrintTimeslotHistory: This function prints the loggued history of a timeslot
|
| in_un32AdapterIdx: Adapter index
| in_un32TrunkIdx: Trunk index of the targeted timeslot
| in_un32TimeslotIdx: Timeslot index to print the history of
|
| Note : ~
|
| Return : No return value
|
*------------------------------------------------------------------------------------------------------------------------------*/
TBX_VOID
TB640FskPrintTimeslotHistory (
IN TBX_UINT32 in_un32AdapterIdx,
IN TBX_UINT32 in_un32TrunkIdx,
IN TBX_UINT32 in_un32TimeslotIdx)
{
TBX_UINT32 un32Size;
TBX_UINT32 un32Count;
TBX_UINT32 un32HistoryReadIdx;
TBX_UINT32 un32HistoryWriteIdx;
PTB640_FSK_ADAPTER_INFO pAdapterInfo;
PTB640_FSK_TRUNK_INFO pTrunkInfo;
PTB640_FSK_TRUNK_RESOURCE_INFO pTrunkResInfo;
PTB640_FSK_HISTORY_ENTRY paHistoryEntry;
PTB640_FSK_HISTORY_ENTRY pEntry;
/*---------------------------------------------------------------------------------------------------------------------------
| Code section
*--------------------------------------------------------------------------------------------------------------------------*/
CODE
{
TB640FskLock( in_un32AdapterIdx, in_un32TrunkIdx );
/* Initialize local variables */
pAdapterInfo = &(g_AppContext->ahAdapterInfo [in_un32AdapterIdx]);
pTrunkInfo = &(pAdapterInfo->aTrunkInfo [in_un32TrunkIdx]);
pTrunkResInfo = &(pTrunkInfo->aResourceInfo [in_un32TimeslotIdx]);
paHistoryEntry = NULL;
/* Allocate a temporary buffer */
un32Size = sizeof(TB640_FSK_HISTORY_ENTRY) * TB640_FSK_NB_HISTORY_FOR_TIMESLOT;
paHistoryEntry = malloc (un32Size);
if (paHistoryEntry == NULL)
{
TBX_EXIT_ERROR(TBX_RESULT_OUT_OF_MEMORY, 0, "Unable to allocate memory for temporary buffer");
}
/* Copy the log buffer */
un32HistoryReadIdx = pTrunkResInfo->un32HistoryReadIdx;
un32HistoryWriteIdx = pTrunkResInfo->un32HistoryWriteIdx;
memcpy (paHistoryEntry, pTrunkResInfo->aHistoryEntry, un32Size);
/* Print the state history */
un32Count = 0;
TB640_FSK_LOG (TRACE_LEVEL_4, "------------- State history of Adp:%02d Trk:%02d, Ts:%02d ---------------\n", \
in_un32AdapterIdx, pTrunkResInfo->un8Trunk, pTrunkResInfo->un8Timeslot);
while ((un32HistoryReadIdx != un32HistoryWriteIdx) && (un32Count < TB640_FSK_NB_HISTORY_FOR_TIMESLOT))
{
/* Print the history entry */
pEntry = &(paHistoryEntry [un32HistoryReadIdx]);
TB640_FSK_LOG (TRACE_LEVEL_4, "Timestamp:0x%08X, CurState:0x%04X, Event:0x%08X\n", \
pEntry->un32Timestamp, pEntry->CurrentState, pEntry->un32Event);
/* Go to the next history entry */
if (++un32HistoryReadIdx >= TB640_FSK_NB_HISTORY_FOR_TIMESLOT)
{
un32HistoryReadIdx = 0;
}
un32Count++;
}
TB640_FSK_LOG (TRACE_LEVEL_4, "------------------------------- Done ------------------------------\n");
/* End of the code (skip to cleanup) */
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
/*---------------------------------------------------------------------------------------------------------------------------
| Error handling section
*--------------------------------------------------------------------------------------------------------------------------*/
ERROR_HANDLING
{
/* Print error message */
TB640_FSK_LOG (TRACE_LEVEL_ALWAYS, "%s (Result = 0x%08X, %s, line %d)\n", TBX_ERROR_DESCRIPTION, TBX_ERROR_RESULT, __FILE__, TBX_ERROR_LINE);
}
/*---------------------------------------------------------------------------------------------------------------------------
| Cleanup section
*--------------------------------------------------------------------------------------------------------------------------*/
CLEANUP
{
/* Free allocated buffers */
if (paHistoryEntry != NULL)
{
free (paHistoryEntry);
paHistoryEntry = NULL;
}
TB640FskUnlock( in_un32AdapterIdx, in_un32TrunkIdx );
}
RETURN_VOID;
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640FskDisplayAdapterStats: This function displays the adapter's statistic and state to the screen
|
| in_un32AdapterNb: Adapter number to display
|
| Note : ~
|
| Return : TBX_RESULT_OK
| TBX_RESULT_FAIL
|
*------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT
TB640FskDisplayAdapterStats (
IN TBX_UINT32 in_un32AdapterNb)
{
TBX_RESULT Result;
TBX_CHAR aszAdapterName [TB640_FSK_CLI_MAX_LINE_SIZE];
TBX_CHAR aTimeslotState [TB640_FSK_CLI_COLUMN_SIZE*10];
TBX_BOOL fIpAddr0Available;
TBX_BOOL fIpAddr1Available;
TBX_UINT32 un32StringIndex;
TBX_UINT32 un32TrunkIndex;
TBX_UINT32 un32TrunkResourceMaxIndex;
TBX_UINT32 un32TrunkResourceIndex;
TBX_UINT32 un32TrunkNb;
TBX_UINT32 un32NbColumn;
PTB640_FSK_ADAPTER_INFO pAdapterInfo;
PTB640_FSK_TRUNK_INFO pTrunkInfo;
PTB640_FSK_TRUNK_RESOURCE_INFO pTrunkResourceInfo;
#ifdef TB640_FSK_USE_INTERHOST_SIMULATION
TBX_HOST_INFO HostInfo;
#else
TBX_ADAPTER_INFO AdapterInfo;
#endif
/*---------------------------------------------------------------------------------------------------------------------------
| Code section
*--------------------------------------------------------------------------------------------------------------------------*/
CODE
{
/* Initialize local variables */
pAdapterInfo = &(g_AppContext->ahAdapterInfo [in_un32AdapterNb]);
un32TrunkNb = 0;
/* Get the adapter network redundancy state */
#ifdef TB640_FSK_USE_INTERHOST_SIMULATION
{
Result = TBXGetRemoteHostInfo
(
g_AppContext->hTbxLib,
pAdapterInfo->hAdapter,
&HostInfo
);
if( TBX_RESULT_FAILURE( Result ) )
{
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to get remote host info");
}
TBXGetNetworkRedundancyState
(
g_AppContext->hTbxLib,
pAdapterInfo->hAdapter,
NULL,
&fIpAddr0Available,
&fIpAddr1Available
);
/* Format header line */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -