Skip to content

Commit

Permalink
[nes]: BRIDGE changes ...
Browse files Browse the repository at this point in the history
  • Loading branch information
nes-repo committed Oct 30, 2014
1 parent 71191fc commit f303eca
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 31 deletions.
146 changes: 115 additions & 31 deletions bridge/bridgeUtils.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,16 @@ ieee8021PbILan_createEntry (
ieee8021BridgeBasePortEntry_t *poPepPortEntry)
{
register bool bRetCode = false;
register ifStackEntry_t *poPepIfStackEntry = NULL;
register ifStackEntry_t *poCepIfStackEntry = NULL;
ifData_t *poPepIfData = NULL;
ifData_t *poCnpIfData = NULL;
ieee8021BridgeILanIfEntry_t *poILanIfEntry = NULL;
register ifStackEntry_t *poPepIfStackEntry = NULL;
register ieee8021BridgeILanIfEntry_t *poILanIfEntry = NULL;

if (!ifData_createReference (poPepPortEntry->u32IfIndex, ifType_bridge_c, xAdminStatus_up_c, true, false, false, &poPepIfData) ||
!ifData_createReference (poCnpPortEntry->u32IfIndex, ifType_bridge_c, xAdminStatus_up_c, true, false, false, &poCnpIfData))
if (poCnpPortEntry == NULL || poPepPortEntry == NULL)
{
goto ieee8021PbILan_createEntry_cleanup;
}

if (!ifData_createReference (poPepPortEntry->u32IfIndex, ifType_bridge_c, xAdminStatus_up_c, true, false, false, &poPepIfData))
{
goto ieee8021PbILan_createEntry_cleanup;
}
Expand All @@ -91,28 +93,24 @@ ieee8021PbILan_createEntry (
goto ieee8021PbILan_createEntry_cleanup;
}

if ((poPepIfStackEntry = ifStackTable_createExt (poPepIfData->u32Index, poILanIfEntry->u32IfIndex)) == NULL || !ifStackStatus_handler (poPepIfStackEntry, xRowStatus_active_c) ||
(poCepIfStackEntry = ifStackTable_createExt (poCnpIfData->u32Index, poILanIfEntry->u32IfIndex)) == NULL || !ifStackStatus_handler (poCepIfStackEntry, xRowStatus_active_c))
if ((poPepIfStackEntry = ifStackTable_createExt (poPepIfData->u32Index, poILanIfEntry->u32IfIndex)) == NULL || !ifStackStatus_handler (poPepIfStackEntry, xRowStatus_active_c))
{
goto ieee8021PbILan_createEntry_cleanup;
}

poPepPortEntry->u32IfIndex = poPepIfData->u32Index;
poCnpPortEntry->u32IfIndex = poCnpIfData->u32Index;
poCnpPortEntry->u32IfIndex = poILanIfEntry->u32IfIndex;

bRetCode = true;

ieee8021PbILan_createEntry_cleanup:

poPepIfData != NULL ? ifData_unLock (poPepIfData): false;
poCnpIfData != NULL ? ifData_unLock (poCnpIfData): false;

if (!bRetCode)
{
poPepIfStackEntry != NULL ? ifStackTable_removeExt (poPepIfStackEntry): false;
poCepIfStackEntry != NULL ? ifStackTable_removeExt (poCepIfStackEntry): false;
poPepIfData != NULL ? ifData_removeReference (poPepIfData->u32Index, true, false, true): false;
poCnpIfData != NULL ? ifData_removeReference (poCnpIfData->u32Index, true, false, true): false;
poILanIfEntry != NULL ? ieee8021BridgeILanIfTable_removeExt (poILanIfEntry): false;
}

Expand All @@ -125,17 +123,26 @@ ieee8021PbILan_removeEntry (
ieee8021BridgeBasePortEntry_t *poPepPortEntry)
{
register bool bRetCode = false;
register ifStackEntry_t *poIfStackEntry = NULL;
ieee8021BridgeILanIfEntry_t *poILanIfEntry = NULL;

if (poPepPortEntry->u32IfIndex == 0)
{
goto ieee8021PbILan_removeEntry_cnpIf;
}

if ((poIfStackEntry = ifStackTable_getNextIndex (poPepPortEntry->u32IfIndex, 0)) != NULL &&
poIfStackEntry->u32HigherLayer == poPepPortEntry->u32IfIndex &&
(poILanIfEntry = ieee8021BridgeILanIfTable_getByIndex (poIfStackEntry->u32LowerLayer)) != NULL)
if (!ifData_removeReference (poPepPortEntry->u32IfIndex, true, false, true))
{
goto ieee8021PbILan_removeEntry_cleanup;
}

ieee8021PbILan_removeEntry_cnpIf:

if (poCnpPortEntry->u32IfIndex == 0)
{
goto ieee8021PbILan_removeEntry_success;
}

if ((poILanIfEntry = ieee8021BridgeILanIfTable_getByIndex (poCnpPortEntry->u32IfIndex)) != NULL)
{
if (!ieee8021BridgeILanIfRowStatus_handler (poILanIfEntry, xRowStatus_destroy_c) ||
!ieee8021BridgeILanIfTable_removeExt (poILanIfEntry))
Expand All @@ -144,42 +151,119 @@ ieee8021PbILan_removeEntry (
}
}

if (!ifData_removeReference (poPepPortEntry->u32IfIndex, true, false, true))
ieee8021PbILan_removeEntry_success:

poPepPortEntry->u32IfIndex = 0;
poCnpPortEntry->u32IfIndex = 0;

bRetCode = true;

ieee8021PbILan_removeEntry_cleanup:

return bRetCode;
}

bool
ieee8021PbbILan_createEntry (
ieee8021BridgeBasePortEntry_t *poCbpPortEntry,
uint32_t u32PipIfIndex,
ieee8021BridgeBasePortEntry_t *poVipPortEntry)
{
register bool bRetCode = false;
ifData_t *poVipIfData = NULL;
register ifStackEntry_t *poVipIfStackEntry = NULL;
register ifStackEntry_t *poCbpIfStackEntry = NULL;
register ieee8021BridgeILanIfEntry_t *poILanIfEntry = NULL;

if (poCbpPortEntry == NULL || u32PipIfIndex == 0 || poVipPortEntry == NULL)
{
goto ieee8021PbILan_removeEntry_cleanup;
goto ieee8021PbbILan_createEntry_cleanup;
}

ieee8021PbILan_removeEntry_cnpIf:
if (!ifData_createReference (poVipPortEntry->u32IfIndex, ifType_bridge_c, xAdminStatus_up_c, true, false, false, &poVipIfData))
{
goto ieee8021PbbILan_createEntry_cleanup;
}

if (poCnpPortEntry->u32IfIndex == 0)
if ((poILanIfEntry = ieee8021BridgeILanIfTable_createExt (ifIndex_zero_c)) == NULL ||
!ieee8021BridgeILanIfRowStatus_handler (poILanIfEntry, xRowStatus_active_c))
{
goto ieee8021PbILan_removeEntry_success;
goto ieee8021PbbILan_createEntry_cleanup;
}

if ((poVipIfStackEntry = ifStackTable_createExt (poVipIfData->u32Index, u32PipIfIndex)) == NULL || !ifStackStatus_handler (poVipIfStackEntry, xRowStatus_active_c) ||
(poCbpIfStackEntry = ifStackTable_createExt (u32PipIfIndex, poILanIfEntry->u32IfIndex)) == NULL || !ifStackStatus_handler (poCbpIfStackEntry, xRowStatus_active_c))
{
goto ieee8021PbbILan_createEntry_cleanup;
}

poVipPortEntry->u32IfIndex = poVipIfData->u32Index;
poCbpPortEntry->u32IfIndex = poILanIfEntry->u32IfIndex;

bRetCode = true;

ieee8021PbbILan_createEntry_cleanup:

poVipIfData != NULL ? ifData_unLock (poVipIfData): false;

if (!bRetCode)
{
poVipIfStackEntry != NULL ? ifStackTable_removeExt (poVipIfStackEntry): false;
poCbpIfStackEntry != NULL ? ifStackTable_removeExt (poCbpIfStackEntry): false;
poVipIfData != NULL ? ifData_removeReference (poVipIfData->u32Index, true, false, true): false;
poILanIfEntry != NULL ? ieee8021BridgeILanIfTable_removeExt (poILanIfEntry): false;
}

return bRetCode;
}

bool
ieee8021PbbILan_removeEntry (
ieee8021BridgeBasePortEntry_t *poCbpPortEntry,
ieee8021BridgeBasePortEntry_t *poVipPortEntry)
{
register bool bRetCode = false;
ieee8021BridgeILanIfEntry_t *poILanIfEntry = NULL;

if (poVipPortEntry->u32IfIndex == 0)
{
goto ieee8021PbbILan_removeEntry_cbpIf;
}

if (!ifData_removeReference (poVipPortEntry->u32IfIndex, true, false, true))
{
goto ieee8021PbbILan_removeEntry_cleanup;
}

if ((poIfStackEntry = ifStackTable_getNextIndex (poCnpPortEntry->u32IfIndex, 0)) != NULL &&
poIfStackEntry->u32HigherLayer == poPepPortEntry->u32IfIndex &&
(poILanIfEntry = ieee8021BridgeILanIfTable_getByIndex (poIfStackEntry->u32LowerLayer)) != NULL)
ieee8021PbbILan_removeEntry_cbpIf:

if (poCbpPortEntry->u32IfIndex == 0)
{
goto ieee8021PbbILan_removeEntry_success;
}

if ((poILanIfEntry = ieee8021BridgeILanIfTable_getByIndex (poCbpPortEntry->u32IfIndex)) != NULL)
{
if (!ieee8021BridgeILanIfRowStatus_handler (poILanIfEntry, xRowStatus_destroy_c) ||
!ieee8021BridgeILanIfTable_removeExt (poILanIfEntry))
{
goto ieee8021PbILan_removeEntry_cleanup;
goto ieee8021PbbILan_removeEntry_cleanup;
}
}

if (!ifData_removeReference (poCnpPortEntry->u32IfIndex, true, false, true))
if (!ifData_removeReference (poCbpPortEntry->u32IfIndex, true, false, true))
{
goto ieee8021PbILan_removeEntry_cleanup;
goto ieee8021PbbILan_removeEntry_cleanup;
}

ieee8021PbILan_removeEntry_success:
ieee8021PbbILan_removeEntry_success:

poPepPortEntry->u32IfIndex = 0;
poCnpPortEntry->u32IfIndex = 0;
poVipPortEntry->u32IfIndex = 0;
poCbpPortEntry->u32IfIndex = 0;

bRetCode = true;

ieee8021PbILan_removeEntry_cleanup:
ieee8021PbbILan_removeEntry_cleanup:

return bRetCode;
}
Expand Down
9 changes: 9 additions & 0 deletions bridge/bridgeUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ bool
ieee8021PbILan_removeEntry (
ieee8021BridgeBasePortEntry_t *poCnpPortEntry,
ieee8021BridgeBasePortEntry_t *poPepPortEntry);
bool
ieee8021PbbILan_createEntry (
ieee8021BridgeBasePortEntry_t *poCbpPortEntry,
uint32_t u32PipIfIndex,
ieee8021BridgeBasePortEntry_t *poVipPortEntry);
bool
ieee8021PbbILan_removeEntry (
ieee8021BridgeBasePortEntry_t *poCbpPortEntry,
ieee8021BridgeBasePortEntry_t *poVipPortEntry);



Expand Down

0 comments on commit f303eca

Please sign in to comment.