📄 config.c
字号:
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to activate trunks");
}
/* Allocate trunk resources */
result = TB640FskAllocateTrunkResources ();
if (TBX_RESULT_FAILURE (result))
{
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to allocate trunk resources");
}
/* Allocate VP resource on each adapters */
result = TB640FskAllocateVPResources ();
if (TBX_RESULT_FAILURE (result))
{
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to allocate VP resources");
}
/* Connect everything */
result = TB640FskCreateConnections ();
if (TBX_RESULT_FAILURE (result))
{
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to connect resources");
}
}
#endif
/* Allocate the async lib operation contexts */
result = TB640FskAllocateAsyncOpContexts ();
if (TBX_RESULT_FAILURE (result))
{
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to create asynchronous operation contexts");
}
/* 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
{
}
RETURN;
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640FskCleanSystem: This function desallocates and free the trunks, stacks, VP resources and operation librairies
| that were (maybe partially) opened by TB640FskConfigureSystem().
|
| ~ : No arguments used
|
| Note : ~
|
| Return : TBX_RESULT_OK
| TBX_RESULT_FAIL
|
*------------------------------------------------------------------------------------------------------------------------------*/
TBX_RESULT
TB640FskCleanSystem (void)
{
TBX_RESULT result;
TBX_UINT32 un32AdapIdx;
TBX_UINT32 un32OpLibIdx;
PTB640_FSK_ADAPTER_INFO pAdapterInfo;
/*---------------------------------------------------------------------------------------------------------------------------
| Code section
*--------------------------------------------------------------------------------------------------------------------------*/
CODE
{
/* Initialize local variables */
/* Check if the TBX library was opened */
if (g_AppContext->hTbxLib == (TBX_LIB_HANDLE)NULL)
{
/* Nothing to do (library hasn't been opened */
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
/* Destroy asynchronous operation contexts */
TB640FskFreeAsyncOpContexts ();
/* Close the operation libraries */
for (un32AdapIdx=0; un32AdapIdx<g_AppContext->un32NbAdapter; un32AdapIdx++)
{
pAdapterInfo = &(g_AppContext->ahAdapterInfo [un32AdapIdx]);
for (un32OpLibIdx=0; un32OpLibIdx<pAdapterInfo->un32NbOperationLib; un32OpLibIdx++)
{
if (pAdapterInfo->ahOperationLib [un32OpLibIdx] != (TBX_ASYNC_LIB_HANDLE)NULL)
{
/* Close the library */
result = TBXAsyncClose (pAdapterInfo->ahOperationLib [un32OpLibIdx]);
if (TBX_RESULT_FAILURE (result))
{
TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to close operation library");
}
pAdapterInfo->ahOperationLib [un32OpLibIdx] = NULL;
}
}
}
/* Destroy the transiant calls semaphore */
if( g_AppContext->TransientCallsSem )
{
TBX_SEM_DESTROY (&(g_AppContext->TransientCallsSem));
}
if (g_AppContext->un32TransientCalls > 0)
{
TB640_FSK_LOG (TRACE_LEVEL_4, "%d VP resources were still used when you exited the application.\n", g_AppContext->un32TransientCalls);
TB640_FSK_LOG (TRACE_LEVEL_4, "This could results in resource leak(s)\n");
}
#ifdef TB640_FSK_USE_INTERHOST_SIMULATION
{
}
#else
{
/* Destroy connections */
TB640FskDestroyConnections ();
/* Free VP resource on each adapters */
TB640FskFreeVPResources ();
/* Free trunk resources */
TB640FskFreeTrunkResources ();
/* Put trunks in maintenance mode */
TB640FskMaintenanceTrunks ();
/* Free trunks */
TB640FskFreeTrunks ();
}
#endif
/* Closed opened adapters */
TB640FskCloseAdapters ();
/* Destroy the operation lib semaphores */
for (un32AdapIdx=0; un32AdapIdx<g_AppContext->un32NbAdapter; un32AdapIdx++)
{
pAdapterInfo = &(g_AppContext->ahAdapterInfo [un32AdapIdx]);
for (un32OpLibIdx=0; un32OpLibIdx<pAdapterInfo->un32NbOperationLib; un32OpLibIdx++)
{
if( pAdapterInfo->Lock.aOperationLibSem[ un32OpLibIdx ] != (TBX_SEM)TBX_HANDLE_INVALID )
{
TBX_SEM_DESTROY (&(pAdapterInfo->Lock.aOperationLibSem[ un32OpLibIdx ]));
}
}
}
/* Close the TBX library */
TBXCloseLib (g_AppContext->hTbxLib);
g_AppContext->hTbxLib = (TBX_LIB_HANDLE)TBX_HANDLE_INVALID;
/* Destroy stress-test statistics semaphore */
TBX_SEM_DESTROY (&g_StressStatsSem);
/* 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
{
}
RETURN;
}
/*--------------------------------------------------------------------------------------------------------------------------------
| Utility functions
*------------------------------------------------------------------------------------------------------------------------------*/
static void
TB640FskGetAdapterIpAddresses(
IN PTBX_ADAPTER_INFO in_pAdapterInfo,
OUT TBX_CHAR out_szIpAddresses[ 256 ]
)
{
out_szIpAddresses [0] = '\0';
if( in_pAdapterInfo->szIpAddress0[0] != 0 && in_pAdapterInfo->szIpAddress1[0] != '\0' )
{
sprintf
(
out_szIpAddresses,
"%s, %s, redundant ethernet",
in_pAdapterInfo->szIpAddress0,
in_pAdapterInfo->szIpAddress1
);
}
else if( in_pAdapterInfo->szIpAddress0[0] != 0 )
{
sprintf
(
out_szIpAddresses,
"%s",
in_pAdapterInfo->szIpAddress0
);
}
else if( in_pAdapterInfo->szIpAddress1[0] != 0 )
{
sprintf
(
out_szIpAddresses,
"%s",
in_pAdapterInfo->szIpAddress1
);
}
return;
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| TB640FskCheckAdapterFeatures:
|
| ~ : No arguments used
|
| Note : ~
|
| Return :
|
*------------------------------------------------------------------------------------------------------------------------------*/
#define SET_FEATURE_MISMATCH_AND_RESULT(featureId, aMismatch, result ) \
do { \
aMismatch[featureId] = TBX_TRUE; \
result = TBX_RESULT_NOT_SUPPORTED_BY_LICENSE; \
} while(0)
#define SET_TRUNK_MISMATCH_AND_RESULT(featureId, aMismatch, result, fTrunkMismatch ) \
do { \
aMismatch[featureId] = TBX_TRUE; \
result = TBX_RESULT_NOT_SUPPORTED_BY_LICENSE; \
fTrunkMismatch = TBX_TRUE; \
} while(0)
#define STR_TOKEN_SIZE 20
#define STR_TOKEN_LINE_SIZE 80
/* This size should be sufficient for to log adapter info and Licence features unmatching configuration (max 40 lignes de 80 char. */
#define STR_LOG_BUFFER_LICENSE_FEATURE_SIZE (40*80)
/* This size should be sufficient for to log Trunk configuration unmatching license features (max 70 ligne de 80 char.) */
#define STR_LOG_BUFFER_TRUNK_CONFIG_SIZE (80*80)
TBX_UINT32 g_au32TrunkTypeToFeatureId[TB640_TRUNK_TYPE_LAST] = {
(TBX_UINT32)NULL,
TBX_FEATURE_TYPE_TRUNK_E1,
TBX_FEATURE_TYPE_TRUNK_T1,
TBX_FEATURE_TYPE_TRUNK_J1 };
PTBX_CHAR g_apszTrunkTypeString[TB640_TRUNK_TYPE_LAST] = { NULL, "E1", "T1", "J1" };
TBX_RESULT
TB640FskCheckAdapterFeatures (
IN PTB640_FSK_ADAPTER_INFO pAdapterInfo)
{
TBX_RESULT_API apiResult = TBX_RESULT_API_OK;
TBX_RESULT result = TBX_RESULT_OK;
TBX_UINT32 un32AdapIdx = 0;
TBX_UINT32 un32FeatureId = 0;
TBX_UINT32 u32NbTrunkPrint = 0;
TBX_BOOL fTrunkMismatch = TBX_FALSE;
PTB640_FSK_TRUNK_INFO pTrunkInfo;
PTBX_CHAR pszToken;
TBX_CHAR szTrunkLine[STR_TOKEN_LINE_SIZE];
TBX_CHAR szAdapterIPAddresses[256];
PTBX_CHAR pszLogBufferLicenseFeature = NULL;
PTBX_CHAR pszLogBufferTrunkConfig = NULL;
TBX_BOOL af32FeatureMismatch[TBX_FEATURE_TYPE_LAST];
TBX_UINT32 aun32TrunkCount[TB640_TRUNK_TYPE_LAST];
TBX_UINT32 un32NbChannel = 0;
/*---------------------------------------------------------------------------------------------------------------------------
| Code section
*--------------------------------------------------------------------------------------------------------------------------*/
CODE
{
/*---------------------------------------------------------------------------------------------------------------------------
| Initialize af32FeatureMismatch and aun32TrunkCount
*--------------------------------------------------------------------------------------------------------------------------*/
memset(af32FeatureMismatch, TBX_FALSE, sizeof(af32FeatureMismatch));
memset(aun32TrunkCount, 0, sizeof(aun32TrunkCount));
/*---------------------------------------------------------------------------------------------------------------------------
| Allocate pszLogBuffer
*--------------------------------------------------------------------------------------------------------------------------*/
pszLogBufferLicenseFeature = (PTBX_CHAR)calloc( STR_LOG_BUFFER_LICENSE_FEATURE_SIZE, sizeof(TBX_CHAR) );
if( !pszLogBufferLicenseFeature )
{
TBX_EXIT_ERROR(TBX_RESULT_OUT_OF_MEMORY, 0, "Failed to allocate the licence feature log buffer");
}
pszLogBufferTrunkConfig = (PTBX_CHAR)calloc( STR_LOG_BUFFER_TRUNK_CONFIG_SIZE, sizeof(TBX_CHAR) );
if( !pszLogBufferTrunkConfig )
{
TBX_EXIT_ERROR(TBX_RESULT_OUT_OF_MEMORY, 0, "Failed to allocate the trunk config log buffer");
}
/*---------------------------------------------------------------------------------------------------------------------------
| Retreive Active Features and adapter info
*--------------------------------------------------------------------------------------------------------------------------*/
if( pAdapterInfo->hAdapter != (TBX_ADAPTER_HANDLE)NULL )
{
/* Retreive the list of active feature from adapter */
apiResult = RetrieveActiveFeatures( NULL,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -