Skip to content

Commit

Permalink
[nes]: IF + ETHERNET + BRIDGE changes ...
Browse files Browse the repository at this point in the history
  • Loading branch information
nes-repo committed Nov 23, 2014
1 parent d37a292 commit 378159f
Show file tree
Hide file tree
Showing 7 changed files with 263 additions and 39 deletions.
120 changes: 93 additions & 27 deletions bridge/bridgeUtils.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,37 +182,58 @@ ieee8021PbVlanStaticRowStatus_handler (

bool
ieee8021PbILan_createEntry (
ieee8021BridgeBasePortEntry_t *poCnpPortEntry,
ieee8021BridgeBasePortEntry_t *poPepPortEntry)
ieee8021BridgeBaseEntry_t *poSComponent, ieee8021BridgeBasePortEntry_t *poCnpPort,
ieee8021BridgeBaseEntry_t *poCComponent, ieee8021BridgeBasePortEntry_t *poPepPort)
{
register bool bRetCode = false;
register bool bPhyLocked = false;
ifData_t *poPepIfData = NULL;
register ifStackEntry_t *poPepIfStackEntry = NULL;
register ieee8021BridgeILanIfEntry_t *poILanIfEntry = NULL;
register ieee8021BridgePhyData_t *poPepPhyData = NULL;
register ieee8021BridgePhyData_t *poCnpPhyData = NULL;
register ieee8021BridgeILanIfEntry_t *poCnpILanEntry = NULL;

if (poCnpPortEntry == NULL || poPepPortEntry == NULL)
if (poCnpPort == NULL || poPepPort == NULL)
{
goto ieee8021PbILan_createEntry_cleanup;
}

if (!ifData_createReference (poPepPortEntry->u32IfIndex, ifType_bridge_c, xAdminStatus_up_c, true, false, false, &poPepIfData))
if (!ifData_createReference (ifIndex_zero_c, ifType_bridge_c, xAdminStatus_up_c, true, false, false, &poPepIfData))
{
goto ieee8021PbILan_createEntry_cleanup;
}

if ((poILanIfEntry = ieee8021BridgeILanIfTable_createExt (ifIndex_zero_c)) == NULL ||
!ieee8021BridgeILanIfRowStatus_handler (poILanIfEntry, xRowStatus_active_c))
if ((poCnpILanEntry = ieee8021BridgeILanIfTable_createRegister (ifIndex_zero_c)) == NULL)
{
goto ieee8021PbILan_createEntry_cleanup;
}

if (!ifStackTable_createRegister (poPepIfData->u32Index, poCnpILanEntry->u32IfIndex))
{
goto ieee8021PbILan_createEntry_cleanup;
}

if ((poPepIfStackEntry = ifStackTable_createExt (poPepIfData->u32Index, poILanIfEntry->u32IfIndex)) == NULL || !ifStackStatus_handler (poPepIfStackEntry, xRowStatus_active_c))
ieee8021BridgePhyData_wrLock ();
bPhyLocked = true;

if ((poPepPhyData = ieee8021BridgePhyData_createExt (poPepIfData->u32Index, 0)) == NULL)
{
goto ieee8021PbILan_createEntry_cleanup;
}

poPepPortEntry->u32IfIndex = poPepIfData->u32Index;
poCnpPortEntry->u32IfIndex = poILanIfEntry->u32IfIndex;
if ((poCnpPhyData = ieee8021BridgePhyData_createExt (poCnpILanEntry->u32IfIndex, 0)) == NULL)
{
goto ieee8021PbILan_createEntry_cleanup;
}

if (!ieee8021BridgePhyData_attachComponent (poCComponent, poPepPort, poPepPhyData))
{
goto ieee8021PbILan_createEntry_cleanup;
}

if (!ieee8021BridgePhyData_attachComponent (poSComponent, poCnpPort, poCnpPhyData))
{
goto ieee8021PbILan_createEntry_cleanup;
}

bRetCode = true;

Expand All @@ -222,52 +243,97 @@ ieee8021PbILan_createEntry (

if (!bRetCode)
{
poPepIfStackEntry != NULL ? ifStackTable_removeExt (poPepIfStackEntry): false;
if (poPepPhyData != NULL && poPepPort->u32IfIndex == poPepPhyData->u32IfIndex)
{
ieee8021BridgePhyData_detachComponent (poPepPort, poPepPhyData);
ieee8021BridgePhyData_removeExt (poPepPhyData);
}
poPepIfData != NULL ? ifData_removeReference (poPepIfData->u32Index, true, false, true): false;
poILanIfEntry != NULL ? ieee8021BridgeILanIfTable_removeExt (poILanIfEntry): false;
if (poCnpPhyData != NULL && poCnpPort->u32IfIndex == poCnpPhyData->u32IfIndex)
{
ieee8021BridgePhyData_detachComponent (poCnpPort, poCnpPhyData);
ieee8021BridgePhyData_removeExt (poCnpPhyData);
}
poCnpILanEntry != NULL ? ieee8021BridgeILanIfTable_removeRegister (poCnpILanEntry->u32IfIndex): false;
}

bPhyLocked ? ieee8021BridgePhyData_unLock (): false;

return bRetCode;
}

bool
ieee8021PbILan_removeEntry (
ieee8021BridgeBasePortEntry_t *poCnpPortEntry,
ieee8021BridgeBasePortEntry_t *poPepPortEntry)
ieee8021BridgeBaseEntry_t *poSComponent, ieee8021BridgeBasePortEntry_t *poCnpPort,
ieee8021BridgeBaseEntry_t *poCComponent, ieee8021BridgeBasePortEntry_t *poPepPort)
{
register bool bRetCode = false;
ieee8021BridgeILanIfEntry_t *poILanIfEntry = NULL;

if (poPepPortEntry->u32IfIndex == 0)

ieee8021BridgePhyData_wrLock ();

if (poPepPort->u32IfIndex != 0)
{
register ieee8021BridgePhyData_t *poPepPhyData = NULL;

if ((poPepPhyData = ieee8021BridgePhyData_getByIndex (poPepPort->u32IfIndex, 0)) == NULL ||
!ieee8021BridgePhyData_detachComponent (poPepPort, poPepPhyData) ||
!ieee8021BridgePhyData_removeExt (poPepPhyData))
{
goto ieee8021PbILan_removeEntry_phyCleanup;
}
}

if (poCnpPort->u32IfIndex != 0)
{
register ieee8021BridgePhyData_t *poCnpPhyData = NULL;

if ((poCnpPhyData = ieee8021BridgePhyData_getByIndex (poCnpPort->u32IfIndex, 0)) == NULL ||
!ieee8021BridgePhyData_detachComponent (poCnpPort, poCnpPhyData) ||
!ieee8021BridgePhyData_removeExt (poCnpPhyData))
{
goto ieee8021PbILan_removeEntry_phyCleanup;
}
}

bRetCode = true;

ieee8021PbILan_removeEntry_phyCleanup:

ieee8021BridgePhyData_unLock ();
if (!bRetCode)
{
goto ieee8021PbILan_removeEntry_cleanup;
}
bRetCode = false;


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

if (!ifData_removeReference (poPepPortEntry->u32IfIndex, true, false, true))
if (!ifData_removeReference (poPepPort->u32IfIndex, true, false, true))
{
goto ieee8021PbILan_removeEntry_cleanup;
}

ieee8021PbILan_removeEntry_cnpIf:

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

if ((poILanIfEntry = ieee8021BridgeILanIfTable_getByIndex (poCnpPortEntry->u32IfIndex)) != NULL)
if (!ieee8021BridgeILanIfTable_removeRegister (poCnpPort->u32IfIndex))
{
if (!ieee8021BridgeILanIfRowStatus_handler (poILanIfEntry, xRowStatus_destroy_c) ||
!ieee8021BridgeILanIfTable_removeExt (poILanIfEntry))
{
goto ieee8021PbILan_removeEntry_cleanup;
}
goto ieee8021PbILan_removeEntry_success;
}

ieee8021PbILan_removeEntry_success:

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

bRetCode = true;

Expand Down
8 changes: 4 additions & 4 deletions bridge/bridgeUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,12 @@ bool
uint8_t u8RowStatus);
bool
ieee8021PbILan_createEntry (
ieee8021BridgeBasePortEntry_t *poCnpPortEntry,
ieee8021BridgeBasePortEntry_t *poPepPortEntry);
ieee8021BridgeBaseEntry_t *poSComponent, ieee8021BridgeBasePortEntry_t *poCnpPort,
ieee8021BridgeBaseEntry_t *poCComponent, ieee8021BridgeBasePortEntry_t *poPepPort);
bool
ieee8021PbILan_removeEntry (
ieee8021BridgeBasePortEntry_t *poCnpPortEntry,
ieee8021BridgeBasePortEntry_t *poPepPortEntry);
ieee8021BridgeBaseEntry_t *poSComponent, ieee8021BridgeBasePortEntry_t *poCnpPort,
ieee8021BridgeBaseEntry_t *poCComponent, ieee8021BridgeBasePortEntry_t *poPepPort);
bool
ieee8021PbbILan_createEntry (
ieee8021BridgeBasePortEntry_t *poCbpPortEntry,
Expand Down
20 changes: 12 additions & 8 deletions bridge/ieee8021PbMib.c
Original file line number Diff line number Diff line change
Expand Up @@ -1052,9 +1052,11 @@ ieee8021PbEdgePortTable_createHier (
goto ieee8021PbEdgePortTable_createHier_cleanup;
}

register ieee8021BridgeBaseEntry_t *pCComponent = NULL;
register ieee8021BridgeBaseEntry_t *poCComponent = NULL;
register ieee8021BridgeBaseEntry_t *poSComponent = NULL;

if ((pCComponent = ieee8021BridgeBaseTable_getByIndex (poIeee8021PbCepEntry->u32CComponentId)) == NULL)
if ((poCComponent = ieee8021BridgeBaseTable_getByIndex (poIeee8021PbCepEntry->u32CComponentId)) == NULL ||
(poSComponent = ieee8021BridgeBaseTable_getByIndex (poEntry->u32BridgeBasePortComponentId)) == NULL)
{
goto ieee8021PbEdgePortTable_createHier_cleanup;
}
Expand Down Expand Up @@ -1089,7 +1091,7 @@ ieee8021PbEdgePortTable_createHier (

register ieee8021BridgeBasePortEntry_t *poPepPortEntry = NULL;

if ((poPepPortEntry = ieee8021BridgeBasePortTable_createExt (pCComponent, poIeee8021PbCnpEntry->u32BridgeBasePort)) == NULL)
if ((poPepPortEntry = ieee8021BridgeBasePortTable_createExt (poCComponent, poIeee8021PbCnpEntry->u32BridgeBasePort)) == NULL)
{
goto ieee8021PbEdgePortTable_createHier_cleanup;
}
Expand All @@ -1098,7 +1100,7 @@ ieee8021PbEdgePortTable_createHier (
poIeee8021PbCnpEntry->u32CComponentId = poIeee8021PbCepEntry->u32CComponentId;
poIeee8021PbCnpEntry->u32SVid = poEntry->u32SVid;

if (!ieee8021PbILan_createEntry (poCnpPortEntry, poPepPortEntry))
if (!ieee8021PbILan_createEntry (poSComponent, poCnpPortEntry, poCComponent, poPepPortEntry))
{
goto ieee8021PbEdgePortTable_createHier_cleanup;
}
Expand Down Expand Up @@ -1127,9 +1129,11 @@ ieee8021PbEdgePortTable_removeHier (
goto ieee8021PbEdgePortTable_removeHier_success;
}

register ieee8021BridgeBaseEntry_t *pCComponent = NULL;
register ieee8021BridgeBaseEntry_t *poCComponent = NULL;
register ieee8021BridgeBaseEntry_t *poSComponent = NULL;

if ((pCComponent = ieee8021BridgeBaseTable_getByIndex (poIeee8021PbCepEntry->u32CComponentId)) == NULL)
if ((poCComponent = ieee8021BridgeBaseTable_getByIndex (poIeee8021PbCepEntry->u32CComponentId)) == NULL ||
(poSComponent = ieee8021BridgeBaseTable_getByIndex (poEntry->u32BridgeBasePortComponentId)) == NULL)
{
goto ieee8021PbEdgePortTable_removeHier_cleanup;
}
Expand All @@ -1143,12 +1147,12 @@ ieee8021PbEdgePortTable_removeHier (
goto ieee8021PbEdgePortTable_removeHier_cleanup;
}

if (!ieee8021PbILan_removeEntry (poCnpPortEntry, poPepPortEntry))
if (!ieee8021PbILan_removeEntry (poSComponent, poCnpPortEntry, poCComponent, poPepPortEntry))
{
goto ieee8021PbEdgePortTable_removeHier_cleanup;
}

if (!ieee8021BridgeBasePortTable_removeExt (pCComponent, poPepPortEntry))
if (!ieee8021BridgeBasePortTable_removeExt (poCComponent, poPepPortEntry))
{
goto ieee8021PbEdgePortTable_removeHier_cleanup;
}
Expand Down
60 changes: 60 additions & 0 deletions ethernet/ieee8021BridgeMib.c
Original file line number Diff line number Diff line change
Expand Up @@ -6503,6 +6503,66 @@ ieee8021BridgeILanIfTable_removeEntry (ieee8021BridgeILanIfEntry_t *poEntry)
return;
}

ieee8021BridgeILanIfEntry_t *
ieee8021BridgeILanIfTable_createRegister (
uint32_t u32IfIndex)
{
bool bRetCode = false;
register ieee8021BridgeILanIfEntry_t *poEntry = NULL;

ieee8021Bridge_wrLock ();

if ((poEntry = ieee8021BridgeILanIfTable_createExt (u32IfIndex)) == NULL)
{
goto ieee8021BridgeILanIfTable_createRegister_cleanup;
}

if (!ieee8021BridgeILanIfRowStatus_handler (poEntry, xRowStatus_active_c))
{
goto ieee8021BridgeILanIfTable_createRegister_cleanup;
}

bRetCode = true;

ieee8021BridgeILanIfTable_createRegister_cleanup:

!bRetCode && poEntry != NULL ? ieee8021BridgeILanIfTable_removeExt (poEntry): false;
ieee8021Bridge_unLock ();

return bRetCode ? poEntry: NULL;
}

bool
ieee8021BridgeILanIfTable_removeRegister (
uint32_t u32IfIndex)
{
bool bRetCode = false;
register ieee8021BridgeILanIfEntry_t *poEntry = NULL;

ieee8021Bridge_wrLock ();

if ((poEntry = ieee8021BridgeILanIfTable_getByIndex (u32IfIndex)) == NULL)
{
goto ieee8021BridgeILanIfTable_removeRegister_success;
}

if (!ieee8021BridgeILanIfRowStatus_handler (poEntry, xRowStatus_destroy_c) ||
!ieee8021BridgeILanIfTable_removeExt (poEntry))
{
goto ieee8021BridgeILanIfTable_removeRegister_cleanup;
}

ieee8021BridgeILanIfTable_removeRegister_success:

bRetCode = true;

ieee8021BridgeILanIfTable_removeRegister_cleanup:

ieee8021Bridge_unLock ();

return bRetCode;
}

ieee8021BridgeILanIfEntry_t *
ieee8021BridgeILanIfTable_createExt (
uint32_t u32IfIndex)
Expand Down
4 changes: 4 additions & 0 deletions ethernet/ieee8021BridgeMib.h
Original file line number Diff line number Diff line change
Expand Up @@ -1054,6 +1054,10 @@ ieee8021BridgeILanIfEntry_t * ieee8021BridgeILanIfTable_getByIndex (
ieee8021BridgeILanIfEntry_t * ieee8021BridgeILanIfTable_getNextIndex (
uint32_t u32IfIndex);
void ieee8021BridgeILanIfTable_removeEntry (ieee8021BridgeILanIfEntry_t *poEntry);
ieee8021BridgeILanIfEntry_t * ieee8021BridgeILanIfTable_createRegister (
uint32_t u32IfIndex);
bool ieee8021BridgeILanIfTable_removeRegister (
uint32_t u32IfIndex);
ieee8021BridgeILanIfEntry_t * ieee8021BridgeILanIfTable_createExt (
uint32_t u32IfIndex);
bool ieee8021BridgeILanIfTable_removeExt (ieee8021BridgeILanIfEntry_t *poEntry);
Expand Down

0 comments on commit 378159f

Please sign in to comment.