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 Nov 20, 2014
1 parent ac1ccc9 commit 5dca5d5
Show file tree
Hide file tree
Showing 3 changed files with 162 additions and 1 deletion.
72 changes: 72 additions & 0 deletions bridge/bridgeUtils.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,15 @@

#include "bridgeUtils.h"
#include "ethernet/ieee8021BridgeMib.h"
#include "ethernet/ieee8021QBridgeMib.h"
#include "ieee8021PbMib.h"
#include "ieee8021PbbMib.h"
#include "ethernet/ethernetUtils.h"
#include "if/ifUtils.h"
#include "if/ifMIB.h"

#include "lib/bitmap.h"

#include <stdbool.h>
#include <stdint.h>

Expand Down Expand Up @@ -376,6 +381,73 @@ ieee8021PbbILan_removeEntry (
return bRetCode;
}

bool
ieee8021PbCVidRegistrationRowStatus_update (
ieee8021PbCVidRegistrationEntry_t *poEntry, uint8_t u8RowStatus)
{
register bool bRetCode = false;

if ((poEntry->u8RowStatus == xRowStatus_active_c && u8RowStatus == xRowStatus_active_c) ||
(poEntry->u8RowStatus != xRowStatus_active_c && u8RowStatus != xRowStatus_active_c))
{
goto ieee8021PbCVidRegistrationRowStatus_update_success;
}

register ieee8021PbCepEntry_t *poIeee8021PbCepEntry = NULL;

if ((poIeee8021PbCepEntry = ieee8021PbCepTable_getByIndex (poEntry->u32BridgeBasePortComponentId, poEntry->u32BridgeBasePort)) == NULL)
{
goto ieee8021PbCVidRegistrationRowStatus_update_cleanup;
}

register ieee8021BridgeBaseEntry_t *poCComponent = NULL;

if ((poCComponent = ieee8021BridgeBaseTable_getByIndex (poIeee8021PbCepEntry->u32CComponentId)) == NULL)
{
goto ieee8021PbCVidRegistrationRowStatus_update_cleanup;
}

register ieee8021QBridgeVlanStaticEntry_t *poCVlanStaticEntry = NULL;

if ((poCVlanStaticEntry = ieee8021QBridgeVlanStaticTable_getByIndex (poIeee8021PbCepEntry->u32CComponentId, poEntry->u32CVid)) == NULL)
{
goto ieee8021PbCVidRegistrationRowStatus_update_cleanup;
}

register ieee8021PbEdgePortEntry_t *poIeee8021PbEdgePortEntry = NULL;

if ((poIeee8021PbEdgePortEntry = ieee8021PbEdgePortTable_getByIndex (poEntry->u32BridgeBasePortComponentId, poEntry->u32BridgeBasePort, poEntry->u32SVid)) != NULL &&
!ieee8021QBridgeVlanStaticTable_vHandler (
poIeee8021PbCepEntry->u32CComponentId, poEntry->u32CVid,
u8RowStatus == xRowStatus_active_c, poEntry->i32UntaggedPep == ieee8021PbCVidRegistrationUntaggedPep_true_c, 1, poIeee8021PbEdgePortEntry->u32PepPort))
{
goto ieee8021PbCVidRegistrationRowStatus_update_cleanup;
}

if (u8RowStatus == xRowStatus_active_c)
{
xBitmap_setBitRev (poCVlanStaticEntry->au8UntaggedPorts, poEntry->u32BridgeBasePort - 1, poEntry->i32UntaggedCep == ieee8021PbCVidRegistrationUntaggedCep_true_c);
}

if (!ieee8021QBridgeVlanStaticRowStatus_handler (poCComponent, poCVlanStaticEntry, u8RowStatus))
{
goto ieee8021PbCVidRegistrationRowStatus_update_cleanup;
}

if (poIeee8021PbEdgePortEntry != NULL)
{
u8RowStatus == xRowStatus_active_c ? poIeee8021PbEdgePortEntry->u32NumCVid++: poIeee8021PbEdgePortEntry->u32NumCVid--;
}

ieee8021PbCVidRegistrationRowStatus_update_success:

bRetCode = true;

ieee8021PbCVidRegistrationRowStatus_update_cleanup:

return bRetCode;
}

bool
ieee8021PbbVipToPipMappingRowStatus_update (
ieee8021PbbVipEntry_t *poIeee8021PbbVipEntry,
Expand Down
4 changes: 4 additions & 0 deletions bridge/bridgeUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ extern "C" {

#include "ethernet/ieee8021BridgeMib.h"
#include "ethernet/ieee8021QBridgeMib.h"
#include "ieee8021PbMib.h"
#include "ieee8021PbbMib.h"

#include <stdbool.h>
Expand Down Expand Up @@ -64,6 +65,9 @@ bool
ieee8021PbbILan_removeEntry (
ieee8021BridgeBasePortEntry_t *poCbpPortEntry,
ieee8021BridgeBasePortEntry_t *poVipPortEntry);
bool
ieee8021PbCVidRegistrationRowStatus_update (
ieee8021PbCVidRegistrationEntry_t *poEntry, uint8_t u8RowStatus);
bool
ieee8021PbbVipToPipMappingRowStatus_update (
ieee8021PbbVipEntry_t *poIeee8021PbbVipEntry,
Expand Down
87 changes: 86 additions & 1 deletion bridge/ieee8021PbMib.c
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,92 @@ bool
ieee8021PbCVidRegistrationRowStatus_handler (
ieee8021PbCVidRegistrationEntry_t *poEntry, uint8_t u8RowStatus)
{
return false;
register uint8_t u8RealStatus = u8RowStatus & xRowStatus_mask_c;
register ieee8021PbCepEntry_t *poIeee8021PbCepEntry = NULL;

if ((poIeee8021PbCepEntry = ieee8021PbCepTable_getByIndex (poEntry->u32BridgeBasePortComponentId, poEntry->u32BridgeBasePort)) == NULL)
{
goto ieee8021PbCVidRegistrationRowStatus_handler_cleanup;
}

if (poEntry->u8RowStatus == u8RealStatus)
{
goto ieee8021PbCVidRegistrationRowStatus_handler_success;
}
if (u8RowStatus & xRowStatus_fromParent_c &&
((u8RealStatus == xRowStatus_active_c && poEntry->u8RowStatus != xRowStatus_notReady_c) ||
(u8RealStatus == xRowStatus_notInService_c && poEntry->u8RowStatus != xRowStatus_active_c)))
{
goto ieee8021PbCVidRegistrationRowStatus_handler_success;
}


switch (u8RealStatus)
{
case xRowStatus_active_c:
{
register ieee8021QBridgeVlanStaticEntry_t *poSVlanStaticEntry = NULL;

if (poEntry->u32SVid == 0 ||
(poSVlanStaticEntry = ieee8021QBridgeVlanStaticTable_getByIndex (poEntry->u32BridgeBasePortComponentId, poEntry->u32SVid)) == NULL)
{
goto ieee8021PbCVidRegistrationRowStatus_handler_cleanup;
}

if (!(u8RowStatus & xRowStatus_fromParent_c) && poIeee8021PbCepEntry->u8RowStatus != xRowStatus_active_c)
{
u8RealStatus = xRowStatus_notReady_c;
}

/* TODO */

if (!ieee8021PbCVidRegistrationRowStatus_update (poEntry, u8RealStatus))
{
goto ieee8021PbCVidRegistrationRowStatus_handler_cleanup;
}

poEntry->u8RowStatus = u8RealStatus;
break;
}
case xRowStatus_notInService_c:
/* TODO */

if (!ieee8021PbCVidRegistrationRowStatus_update (poEntry, u8RealStatus))
{
goto ieee8021PbCVidRegistrationRowStatus_handler_cleanup;
}

poEntry->u8RowStatus =
poEntry->u8RowStatus == xRowStatus_active_c && (u8RowStatus & xRowStatus_fromParent_c) ? xRowStatus_notReady_c: xRowStatus_notInService_c;
break;

case xRowStatus_createAndGo_c:
goto ieee8021PbCVidRegistrationRowStatus_handler_cleanup;

case xRowStatus_createAndWait_c:
poEntry->u8RowStatus = xRowStatus_notInService_c;
break;

case xRowStatus_destroy_c:
/* TODO */

if (!ieee8021PbCVidRegistrationRowStatus_update (poEntry, u8RealStatus))
{
goto ieee8021PbCVidRegistrationRowStatus_handler_cleanup;
}

poEntry->u8RowStatus = xRowStatus_notInService_c;
break;
}

ieee8021PbCVidRegistrationRowStatus_handler_success:

return true;


ieee8021PbCVidRegistrationRowStatus_handler_cleanup:

return u8RowStatus & xRowStatus_fromParent_c;
}

/* example iterator hook routines - using 'getNext' to do most of the work */
Expand Down

0 comments on commit 5dca5d5

Please sign in to comment.