Skip to content

Commit

Permalink
[nes]: ETHERNET changes ...
Browse files Browse the repository at this point in the history
  • Loading branch information
nes-repo committed Feb 22, 2015
1 parent fdf1f39 commit 9ae180d
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 136 deletions.
2 changes: 2 additions & 0 deletions ethernet/ieee8021BridgeMib.h
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,8 @@ typedef struct ieee8021BridgeBasePortEntry_t
uint8_t au8Name[32];
size_t u16Name_len; /* # of uint8_t elements */

neIeee8021BridgeBasePortEntry_t oNe;

uint8_t u8RowStatus;
struct ieee8021BridgeBasePortEntry_t *pOldEntry;

Expand Down
167 changes: 39 additions & 128 deletions ethernet/neIeee8021BridgeMIB.c
Original file line number Diff line number Diff line change
Expand Up @@ -477,44 +477,23 @@ neIeee8021BridgeBasePortTable_init (void)
/* Initialise the contents of the table here */
}

static int8_t
neIeee8021BridgeBasePortTable_BTreeNodeCmp (
xBTree_Node_t *pNode1, xBTree_Node_t *pNode2, xBTree_t *pBTree)
{
register neIeee8021BridgeBasePortEntry_t *pEntry1 = xBTree_entry (pNode1, neIeee8021BridgeBasePortEntry_t, oBTreeNode);
register neIeee8021BridgeBasePortEntry_t *pEntry2 = xBTree_entry (pNode2, neIeee8021BridgeBasePortEntry_t, oBTreeNode);

return
(pEntry1->u32ComponentId < pEntry2->u32ComponentId) ||
(pEntry1->u32ComponentId == pEntry2->u32ComponentId && pEntry1->u32Port < pEntry2->u32Port) ? -1:
(pEntry1->u32ComponentId == pEntry2->u32ComponentId && pEntry1->u32Port == pEntry2->u32Port) ? 0: 1;
}

xBTree_t oNeIeee8021BridgeBasePortTable_BTree = xBTree_initInline (&neIeee8021BridgeBasePortTable_BTreeNodeCmp);

/* create a new row in the table */
neIeee8021BridgeBasePortEntry_t *
neIeee8021BridgeBasePortTable_createEntry (
uint32_t u32ComponentId,
uint32_t u32Port)
{
register neIeee8021BridgeBasePortEntry_t *poEntry = NULL;
register ieee8021BridgeBasePortEntry_t *poPort = NULL;

if ((poEntry = xBuffer_cAlloc (sizeof (*poEntry))) == NULL)
if ((poPort = ieee8021BridgeBasePortTable_getByIndex (u32ComponentId, u32Port)) == NULL)
{
return NULL;
}
poEntry = &poPort->oNe;

poEntry->u32ComponentId = u32ComponentId;
poEntry->u32Port = u32Port;
if (xBTree_nodeFind (&poEntry->oBTreeNode, &oNeIeee8021BridgeBasePortTable_BTree) != NULL)
{
xBuffer_free (poEntry);
return NULL;
}
poEntry->i32OperState = neIeee8021BridgeBasePortOperState_disabled_c;


xBTree_nodeAdd (&poEntry->oBTreeNode, &oNeIeee8021BridgeBasePortTable_BTree);
return poEntry;
}

Expand All @@ -523,63 +502,35 @@ neIeee8021BridgeBasePortTable_getByIndex (
uint32_t u32ComponentId,
uint32_t u32Port)
{
register neIeee8021BridgeBasePortEntry_t *poTmpEntry = NULL;
register xBTree_Node_t *poNode = NULL;
register ieee8021BridgeBasePortEntry_t *poPort = NULL;

if ((poTmpEntry = xBuffer_cAlloc (sizeof (*poTmpEntry))) == NULL)
if ((poPort = ieee8021BridgeBasePortTable_getByIndex (u32ComponentId, u32Port)) == NULL)
{
return NULL;
}

poTmpEntry->u32ComponentId = u32ComponentId;
poTmpEntry->u32Port = u32Port;
if ((poNode = xBTree_nodeFind (&poTmpEntry->oBTreeNode, &oNeIeee8021BridgeBasePortTable_BTree)) == NULL)
{
xBuffer_free (poTmpEntry);
return NULL;
}

xBuffer_free (poTmpEntry);
return xBTree_entry (poNode, neIeee8021BridgeBasePortEntry_t, oBTreeNode);
return &poPort->oNe;
}

neIeee8021BridgeBasePortEntry_t *
neIeee8021BridgeBasePortTable_getNextIndex (
uint32_t u32ComponentId,
uint32_t u32Port)
{
register neIeee8021BridgeBasePortEntry_t *poTmpEntry = NULL;
register xBTree_Node_t *poNode = NULL;

if ((poTmpEntry = xBuffer_cAlloc (sizeof (*poTmpEntry))) == NULL)
{
return NULL;
}
register ieee8021BridgeBasePortEntry_t *poPort = NULL;

poTmpEntry->u32ComponentId = u32ComponentId;
poTmpEntry->u32Port = u32Port;
if ((poNode = xBTree_nodeFindNext (&poTmpEntry->oBTreeNode, &oNeIeee8021BridgeBasePortTable_BTree)) == NULL)
if ((poPort = ieee8021BridgeBasePortTable_getNextIndex (u32ComponentId, u32Port)) == NULL)
{
xBuffer_free (poTmpEntry);
return NULL;
}

xBuffer_free (poTmpEntry);
return xBTree_entry (poNode, neIeee8021BridgeBasePortEntry_t, oBTreeNode);
return &poPort->oNe;
}

/* remove a row from the table */
void
neIeee8021BridgeBasePortTable_removeEntry (neIeee8021BridgeBasePortEntry_t *poEntry)
{
if (poEntry == NULL ||
xBTree_nodeFind (&poEntry->oBTreeNode, &oNeIeee8021BridgeBasePortTable_BTree) == NULL)
{
return; /* Nothing to remove */
}

xBTree_nodeRemove (&poEntry->oBTreeNode, &oNeIeee8021BridgeBasePortTable_BTree);
xBuffer_free (poEntry); /* XXX - release any other internal resources */
return;
}

Expand All @@ -589,7 +540,7 @@ neIeee8021BridgeBasePortTable_getFirst (
void **my_loop_context, void **my_data_context,
netsnmp_variable_list *put_index_data, netsnmp_iterator_info *mydata)
{
*my_loop_context = xBTree_nodeGetFirst (&oNeIeee8021BridgeBasePortTable_BTree);
*my_loop_context = xBTree_nodeGetFirst (&oIeee8021BridgeBasePortTable_BTree);
return neIeee8021BridgeBasePortTable_getNext (my_loop_context, my_data_context, put_index_data, mydata);
}

Expand All @@ -598,20 +549,20 @@ neIeee8021BridgeBasePortTable_getNext (
void **my_loop_context, void **my_data_context,
netsnmp_variable_list *put_index_data, netsnmp_iterator_info *mydata)
{
neIeee8021BridgeBasePortEntry_t *poEntry = NULL;
ieee8021BridgeBasePortEntry_t *poEntry = NULL;
netsnmp_variable_list *idx = put_index_data;

if (*my_loop_context == NULL)
{
return NULL;
}
poEntry = xBTree_entry (*my_loop_context, neIeee8021BridgeBasePortEntry_t, oBTreeNode);
poEntry = xBTree_entry (*my_loop_context, ieee8021BridgeBasePortEntry_t, oBTreeNode);

snmp_set_var_typed_integer (idx, ASN_UNSIGNED, poEntry->u32ComponentId);
idx = idx->next_variable;
snmp_set_var_typed_integer (idx, ASN_UNSIGNED, poEntry->u32Port);
*my_data_context = (void*) poEntry;
*my_loop_context = (void*) xBTree_nodeGetNext (&poEntry->oBTreeNode, &oNeIeee8021BridgeBasePortTable_BTree);
*my_loop_context = (void*) xBTree_nodeGetNext (&poEntry->oBTreeNode, &oIeee8021BridgeBasePortTable_BTree);
return put_index_data;
}

Expand All @@ -620,11 +571,11 @@ neIeee8021BridgeBasePortTable_get (
void **my_data_context,
netsnmp_variable_list *put_index_data, netsnmp_iterator_info *mydata)
{
neIeee8021BridgeBasePortEntry_t *poEntry = NULL;
ieee8021BridgeBasePortEntry_t *poEntry = NULL;
register netsnmp_variable_list *idx1 = put_index_data;
register netsnmp_variable_list *idx2 = idx1->next_variable;

poEntry = neIeee8021BridgeBasePortTable_getByIndex (
poEntry = ieee8021BridgeBasePortTable_getByIndex (
*idx1->val.integer,
*idx2->val.integer);
if (poEntry == NULL)
Expand All @@ -647,6 +598,7 @@ neIeee8021BridgeBasePortTable_mapper (
netsnmp_request_info *request;
netsnmp_table_request_info *table_info;
neIeee8021BridgeBasePortEntry_t *table_entry;
register ieee8021BridgeBasePortEntry_t *poEntry = NULL;
void *pvOldDdata = NULL;
int ret;

Expand All @@ -658,13 +610,14 @@ neIeee8021BridgeBasePortTable_mapper (
case MODE_GET:
for (request = requests; request != NULL; request = request->next)
{
table_entry = (neIeee8021BridgeBasePortEntry_t*) netsnmp_extract_iterator_context (request);
poEntry = (ieee8021BridgeBasePortEntry_t*) netsnmp_extract_iterator_context (request);
table_info = netsnmp_extract_table_info (request);
if (table_entry == NULL)
if (poEntry == NULL)
{
netsnmp_set_request_error (reqinfo, request, SNMP_NOSUCHINSTANCE);
continue;
}
table_entry = &poEntry->oNe;

switch (table_info->colnum)
{
Expand All @@ -688,8 +641,9 @@ neIeee8021BridgeBasePortTable_mapper (
case MODE_SET_RESERVE1:
for (request = requests; request != NULL; request = request->next)
{
table_entry = (neIeee8021BridgeBasePortEntry_t*) netsnmp_extract_iterator_context (request);
poEntry = (ieee8021BridgeBasePortEntry_t*) netsnmp_extract_iterator_context (request);
table_info = netsnmp_extract_table_info (request);
table_entry = &poEntry->oNe;

switch (table_info->colnum)
{
Expand All @@ -712,74 +666,38 @@ neIeee8021BridgeBasePortTable_mapper (
case MODE_SET_RESERVE2:
for (request = requests; request != NULL; request = request->next)
{
table_entry = (neIeee8021BridgeBasePortEntry_t*) netsnmp_extract_iterator_context (request);
poEntry = (ieee8021BridgeBasePortEntry_t*) netsnmp_extract_iterator_context (request);
table_info = netsnmp_extract_table_info (request);
register netsnmp_variable_list *idx1 = table_info->indexes;
register netsnmp_variable_list *idx2 = idx1->next_variable;
if (poEntry == NULL)
{
netsnmp_set_request_error (reqinfo, request, SNMP_NOSUCHINSTANCE);
continue;
}
table_entry = &poEntry->oNe;

switch (table_info->colnum)
{
case NEIEEE8021BRIDGEBASEPORTADMINFLAGS:
if (table_entry == NULL)
{
if (/* TODO */ TOBE_REPLACED != TOBE_REPLACED)
{
netsnmp_set_request_error (reqinfo, request, SNMP_ERR_INCONSISTENTVALUE);
return SNMP_ERR_NOERROR;
}

table_entry = neIeee8021BridgeBasePortTable_createEntry (
*idx1->val.integer,
*idx2->val.integer);
if (table_entry != NULL)
{
netsnmp_insert_iterator_context (request, table_entry);
netsnmp_request_add_list_data (request, netsnmp_create_data_list (ROLLBACK_BUFFER, table_entry, &xBuffer_free));
}
else
{
netsnmp_set_request_error (reqinfo, request, SNMP_ERR_RESOURCEUNAVAILABLE);
return SNMP_ERR_NOERROR;
}
}
break;
default:
if (table_entry == NULL)
if (poEntry->u8RowStatus == xRowStatus_active_c || poEntry->u8RowStatus == xRowStatus_notReady_c)
{
netsnmp_set_request_error (reqinfo, request, SNMP_NOSUCHINSTANCE);
netsnmp_set_request_error (reqinfo, request, SNMP_ERR_RESOURCEUNAVAILABLE);
return SNMP_ERR_NOERROR;
}
break;
}
}
break;

case MODE_SET_FREE:
for (request = requests; request != NULL; request = request->next)
{
pvOldDdata = netsnmp_request_get_list_data (request, ROLLBACK_BUFFER);
table_entry = (neIeee8021BridgeBasePortEntry_t*) netsnmp_extract_iterator_context (request);
table_info = netsnmp_extract_table_info (request);
if (table_entry == NULL || pvOldDdata == NULL)
{
continue;
}

switch (table_info->colnum)
{
case NEIEEE8021BRIDGEBASEPORTADMINFLAGS:
neIeee8021BridgeBasePortTable_removeEntry (table_entry);
netsnmp_request_remove_list_entry (request, ROLLBACK_BUFFER);
break;
}
}
break;

case MODE_SET_ACTION:
for (request = requests; request != NULL; request = request->next)
{
pvOldDdata = netsnmp_request_get_list_data (request, ROLLBACK_BUFFER);
table_entry = (neIeee8021BridgeBasePortEntry_t*) netsnmp_extract_iterator_context (request);
poEntry = (ieee8021BridgeBasePortEntry_t*) netsnmp_extract_iterator_context (request);
table_info = netsnmp_extract_table_info (request);
table_entry = &poEntry->oNe;

switch (table_info->colnum)
{
Expand Down Expand Up @@ -809,26 +727,19 @@ neIeee8021BridgeBasePortTable_mapper (
for (request = requests; request != NULL; request = request->next)
{
pvOldDdata = netsnmp_request_get_list_data (request, ROLLBACK_BUFFER);
table_entry = (neIeee8021BridgeBasePortEntry_t*) netsnmp_extract_iterator_context (request);
poEntry = (ieee8021BridgeBasePortEntry_t*) netsnmp_extract_iterator_context (request);
table_info = netsnmp_extract_table_info (request);
if (table_entry == NULL || pvOldDdata == NULL)
if (poEntry == NULL || pvOldDdata == NULL)
{
continue;
}
table_entry = &poEntry->oNe;

switch (table_info->colnum)
{
case NEIEEE8021BRIDGEBASEPORTADMINFLAGS:
if (pvOldDdata == table_entry)
{
neIeee8021BridgeBasePortTable_removeEntry (table_entry);
netsnmp_request_remove_list_entry (request, ROLLBACK_BUFFER);
}
else
{
memcpy (table_entry->au8AdminFlags, ((xOctetString_t*) pvOldDdata)->pData, ((xOctetString_t*) pvOldDdata)->u16Len);
table_entry->u16AdminFlags_len = ((xOctetString_t*) pvOldDdata)->u16Len;
}
memcpy (table_entry->au8AdminFlags, ((xOctetString_t*) pvOldDdata)->pData, ((xOctetString_t*) pvOldDdata)->u16Len);
table_entry->u16AdminFlags_len = ((xOctetString_t*) pvOldDdata)->u16Len;
break;
}
}
Expand Down
16 changes: 8 additions & 8 deletions ethernet/neIeee8021BridgeMIB.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ enum
typedef struct neIeee8021BridgeBaseEntry_t
{
/* Index values */
uint32_t u32ComponentId;
// uint32_t u32ComponentId;

/* Column values */
uint32_t u32ChassisId;
Expand All @@ -80,10 +80,10 @@ typedef struct neIeee8021BridgeBaseEntry_t
size_t u16AdminFlags_len; /* # of uint8_t elements */
int32_t i32OperState;

xBTree_Node_t oBTreeNode;
// xBTree_Node_t oBTreeNode;
} neIeee8021BridgeBaseEntry_t;

extern xBTree_t oNeIeee8021BridgeBaseTable_BTree;
// extern xBTree_t oNeIeee8021BridgeBaseTable_BTree;

/* neIeee8021BridgeBaseTable table mapper */
void neIeee8021BridgeBaseTable_init (void);
Expand Down Expand Up @@ -130,18 +130,18 @@ enum
typedef struct neIeee8021BridgeBasePortEntry_t
{
/* Index values */
uint32_t u32ComponentId;
uint32_t u32Port;
// uint32_t u32ComponentId;
// uint32_t u32Port;

/* Column values */
uint8_t au8AdminFlags[2];
uint8_t au8AdminFlags[1];
size_t u16AdminFlags_len; /* # of uint8_t elements */
int32_t i32OperState;

xBTree_Node_t oBTreeNode;
// xBTree_Node_t oBTreeNode;
} neIeee8021BridgeBasePortEntry_t;

extern xBTree_t oNeIeee8021BridgeBasePortTable_BTree;
// extern xBTree_t oNeIeee8021BridgeBasePortTable_BTree;

/* neIeee8021BridgeBasePortTable table mapper */
void neIeee8021BridgeBasePortTable_init (void);
Expand Down

0 comments on commit 9ae180d

Please sign in to comment.