/** * @brief remove a record from the Ethernet database * * @param templateRecord template record used to determine * what record is to be removed * @param updateTrigger port map containing the update triggers * resulting from this update operation * * This function will examine the template record it receives * and attempts to delete a record of the same type and containing * the same keys as the template record. If deletion is successful * and the record type is registered for automatic port updates the * port will also be set in the updateTrigger port map, so that the * client can perform an update of the port. * * @retval IX_ETH_DB_SUCCESS removal was successful * @retval IX_ETH_DB_NO_SUCH_ADDR the record with the given MAC address was not found * @retval IX_ETH_DB_BUSY database busy, cannot remove due to locking * * @internal */ IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBRemove(MacDescriptor *templateRecord, IxEthDBPortMap updateTrigger) { IxEthDBStatus result; PortInfo *portInfo; TEST_FIXTURE_INCREMENT_DB_CORE_ACCESS_COUNTER; BUSY_RETRY_WITH_RESULT(ixEthDBRemoveHashEntry(&dbHashtable, ixEthDBKeyType[templateRecord->type], templateRecord), result); if (result != IX_ETH_DB_SUCCESS) { return IX_ETH_DB_NO_SUCH_ADDR; /* not found */ } portInfo = &ixEthDBPortInfo[templateRecord->portID]; if (templateRecord->type == IX_ETH_DB_WIFI_RECORD) { /* decrement the wifi records counter when entry is deleted from the database for the port */ portInfo->wifiRecordsCount = portInfo->wifiRecordsCount - 1; } if (templateRecord->type == IX_ETH_DB_FIREWALL_RECORD || templateRecord->type == IX_ETH_DB_MASKED_FIREWALL_RECORD) { /* decrement the firewall records counter when entry is deleted from the database for the port */ portInfo->fwRecordsCount = portInfo->fwRecordsCount - 1; } /* trigger add/remove update if required by type */ if (updateTrigger != NULL &&ixEthDBPortUpdateRequired[templateRecord->type]) { /* add new port to update list */ JOIN_PORT_TO_MAP(updateTrigger, templateRecord->portID); } return IX_ETH_DB_SUCCESS; }
/** * @brief remove a record from the Ethernet database * * @param templateRecord template record used to determine * what record is to be removed * @param updateTrigger port map containing the update triggers * resulting from this update operation * * This function will examine the template record it receives * and attempts to delete a record of the same type and containing * the same keys as the template record. If deletion is successful * and the record type is registered for automatic port updates the * port will also be set in the updateTrigger port map, so that the * client can perform an update of the port. * * @retval IX_ETH_DB_SUCCESS removal was successful * @retval IX_ETH_DB_NO_SUCH_ADDR the record with the given MAC address was not found * @retval IX_ETH_DB_BUSY database busy, cannot remove due to locking * * @internal */ IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBRemove(MacDescriptor *templateRecord, IxEthDBPortMap updateTrigger) { IxEthDBStatus result; TEST_FIXTURE_INCREMENT_DB_CORE_ACCESS_COUNTER; BUSY_RETRY_WITH_RESULT(ixEthDBRemoveHashEntry(&dbHashtable, ixEthDBKeyType[templateRecord->type], templateRecord), result); if (result != IX_ETH_DB_SUCCESS) { return IX_ETH_DB_NO_SUCH_ADDR; /* not found */ } /* trigger add/remove update if required by type */ if (updateTrigger != NULL &&ixEthDBPortUpdateRequired[templateRecord->type]) { /* add new port to update list */ JOIN_PORT_TO_MAP(updateTrigger, templateRecord->portID); } return IX_ETH_DB_SUCCESS; }