⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ixethdb_p.h

📁 Uboot源码,非常通用的bootloader.适用于各种平台的Linux系统引导.
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef IX_NDEBUG#define IX_ETH_DB_NPE_MSG_HISTORY_DEPTH (100)#define LOG_NPE_MSG(msg) \    do { \        UINT32 npeMsgHistoryIndex = (npeMsgHistoryLen++) % IX_ETH_DB_NPE_MSG_HISTORY_DEPTH; \        npeMsgHistory[npeMsgHistoryIndex][0] = msg.data[0]; \        npeMsgHistory[npeMsgHistoryIndex][1] = msg.data[1]; \    } while (0);#else#define LOG_NPE_MSG() /* nothing */#endif/* ----------- Data -------------- *//* typedefs */typedef UINT32 (*HashFunction)(void *entity);typedef BOOL (*MatchFunction)(void *reference, void *entry);typedef void (*FreeFunction)(void *entry);/** * basic component of a hash table */typedef struct HashNode_t{    void *data;                                 /**< specific data */    struct HashNode_t *next;                    /**< used for bucket chaining */    __mempool__ struct HashNode_t *nextFree;    /**< memory pool management */    __lock__ IxOsalFastMutex lock;              /**< node lock */} HashNode;/** * @brief hash table iterator definition * * an iterator is an object which can be used * to browse a hash table */typedef struct{    UINT32 bucketIndex;     /**< index of the currently iterated bucket */    HashNode *previousNode; /**< reference to the previously iterated node within the current bucket */    HashNode *node;         /**< reference to the currently iterated node */} HashIterator;/** * definition of a MAC descriptor (a database record) */typedef enum{    IX_ETH_DB_WIFI_AP_TO_STA = 0x0,    IX_ETH_DB_WIFI_AP_TO_AP  = 0x1} IxEthDBWiFiRecordType;typedef union{    struct    {        UINT32 age;        BOOL staticEntry; /**< TRUE if this address is static (doesn't age) */    } filteringData;    struct    {        UINT32 age;        BOOL staticEntry;        UINT32 ieee802_1qTag;      } filteringVlanData;    struct    {        IxEthDBWiFiRecordType type;  /**< AP_TO_AP (0x1) or AP_TO_STA (0x0) */        UINT32 gwAddressIndex; /**< used only when linearizing the entries for NPE usage */        UINT8 gwMacAddress[IX_IEEE803_MAC_ADDRESS_SIZE];        __alignment__ UINT8 reserved2[2];    } wifiData;} IxEthDBRecordData;typedef struct MacDescriptor_t{    UINT8 macAddress[IX_IEEE803_MAC_ADDRESS_SIZE];    __alignment__ UINT8 reserved1[2];    UINT32 portID;    IxEthDBRecordType type;    IxEthDBRecordData recordData;    /* used for internal operations, such as NPE linearization */    void *internal;    /* custom user data */    void *user;    __mempool__ struct MacDescriptor_t *nextFree;   /**< memory pool management */    __smartpointer__ UINT32 refCount;               /**< smart pointer reference counter */} MacDescriptor;/** * hash table definition */typedef struct{    HashNode *hashBuckets[NUM_BUCKETS];    UINT32 numBuckets;    __lock__ IxOsalFastMutex bucketLocks[NUM_BUCKETS];    HashFunction entryHashFunction;    MatchFunction *matchFunctions;    FreeFunction freeFunction;} HashTable;typedef enum{    IX_ETH_DB_MAC_KEY       = 1,    IX_ETH_DB_MAC_PORT_KEY  = 2,    IX_ETH_DB_MAC_VLAN_KEY  = 3,    IX_ETH_DB_MAX_KEY_INDEX = 3} IxEthDBSearchKeyType;typedef struct MacTreeNode_t{    __smartpointer__  MacDescriptor *descriptor;    struct MacTreeNode_t *left, *right;    __mempool__ struct MacTreeNode_t *nextFree;} MacTreeNode;typedef IxEthDBStatus (*IxEthDBPortUpdateHandler)(IxEthDBPortId portID, IxEthDBRecordType type);typedef void (*IxEthDBNoteWriteFn)(void *address, MacTreeNode *node);typedef struct{    BOOL updateEnabled;                         /**< TRUE if updates are enabled for port */    BOOL userControlled;                        /**< TRUE if the user has manually used ixEthDBPortUpdateEnableSet */    BOOL treeInitialized;                       /**< TRUE if the NPE has received an initial tree */    IxEthDBPortUpdateHandler updateHandler;     /**< port update handler routine */    void *npeUpdateZone;                        /**< port update memory zone */    void *npeGwUpdateZone;                      /**< port update memory zone for gateways */    void *vlanUpdateZone;                       /**< port update memory zone for VLAN tables */    MacTreeNode *searchTree;                    /**< internal search tree, in MacTreeNode representation */    BOOL searchTreePendingWrite;                /**< TRUE if searchTree holds a tree pending write to the port */} PortUpdateMethod;typedef struct{    IxEthDBPortId portID;                   /**< port ID */    BOOL enabled;                           /**< TRUE if the port is enabled */    BOOL agingEnabled;                      /**< TRUE if aging on this port is enabled */    BOOL initialized;    IxEthDBPortMap dependencyPortMap;       /**< dependency port map for this port */    PortUpdateMethod updateMethod;          /**< update method structure */    BOOL macAddressUploaded;                /**< TRUE if the MAC address was uploaded into the port */    UINT32 maxRxFrameSize;                  /**< maximum Rx frame size for this port */    UINT32 maxTxFrameSize;                  /**< maximum Rx frame size for this port */    UINT8 bbsid[6];    __alignment__ UINT8 reserved[2];    UINT32 frameControlDurationID;          /**< Frame Control - Duration/ID WiFi control */    IxEthDBVlanTag vlanTag;                  /**< default VLAN tag for port */    IxEthDBPriorityTable priorityTable;     /**< QoS <=> internal priority mapping */    IxEthDBVlanSet vlanMembership;    IxEthDBVlanSet transmitTaggingInfo;    IxEthDBFrameFilter frameFilter;    IxEthDBTaggingAction taggingAction;    UINT32 npeFrameFilter;    UINT32 npeTaggingAction;    IxEthDBFirewallMode firewallMode;    BOOL srcAddressFilterEnabled;    BOOL stpBlocked;    IxEthDBFeature featureCapability;    IxEthDBFeature featureStatus;    UINT32 ixEthDBTrafficClassAQMAssignments[IX_IEEE802_1Q_QOS_PRIORITY_COUNT];    UINT32 ixEthDBTrafficClassCount;    UINT32 ixEthDBTrafficClassAvailable;    __lock__ IxOsalMutex npeAckLock;} PortInfo;/* list of port information structures indexed on port Ids */extern IX_ETH_DB_PUBLIC PortInfo ixEthDBPortInfo[IX_ETH_DB_NUMBER_OF_PORTS];typedef enum{    IX_ETH_DB_ADD_FILTERING_RECORD    = 0xFF0001,    IX_ETH_DB_REMOVE_FILTERING_RECORD = 0xFF0002} PortEventType;typedef struct{    UINT32 eventType;    IxEthDBPortId portID;    IxEthDBMacAddr macAddr;    BOOL staticEntry;} PortEvent;typedef struct{    PortEvent queue[EVENT_QUEUE_SIZE];    UINT32 base;    UINT32 length;} PortEventQueue;typedef struct{    IxEthDBPortId portID; /**< originating port */    MacDescriptor *macDescriptors[MAX_ELT_SIZE]; /**< addresses to be synced into db */    UINT32 addressCount; /**< number of addresses */} TreeSyncInfo;typedef struct{    MacTreeNode *nodes[MAX_ELT_SIZE];    UINT32 offsets[MAX_ELT_SIZE];    UINT32 nodeCount;} MacTreeNodeStack;/* Prototypes *//* ----------- Memory management -------------- */IX_ETH_DB_PUBLIC void ixEthDBInitMemoryPools(void);IX_ETH_DB_PUBLIC HashNode* ixEthDBAllocHashNode(void);IX_ETH_DB_PUBLIC void ixEthDBFreeHashNode(HashNode *);IX_ETH_DB_PUBLIC __smartpointer__ MacDescriptor* ixEthDBAllocMacDescriptor(void);IX_ETH_DB_PUBLIC __smartpointer__ MacDescriptor* ixEthDBCloneMacDescriptor(MacDescriptor *macDescriptor);IX_ETH_DB_PUBLIC __smartpointer__ void ixEthDBFreeMacDescriptor(MacDescriptor *);IX_ETH_DB_PUBLIC __smartpointer__ MacTreeNode* ixEthDBAllocMacTreeNode(void);IX_ETH_DB_PUBLIC __smartpointer__ MacTreeNode* ixEthDBCloneMacTreeNode(MacTreeNode *);IX_ETH_DB_PUBLIC __smartpointer__ void ixEthDBFreeMacTreeNode(MacTreeNode *);IX_ETH_DB_PUBLIC void ixEthDBPoolFreeMacTreeNode(MacTreeNode *);IX_ETH_DB_PUBLIC UINT32 ixEthDBSearchTreeUsageGet(MacTreeNode *tree);IX_ETH_DB_PUBLIC int ixEthDBShowMemoryStatus(void);/* Hash Table */IX_ETH_DB_PUBLIC void ixEthDBInitHash(HashTable *hashTable, UINT32 numBuckets, HashFunction entryHashFunction, MatchFunction *matchFunctions, FreeFunction freeFunction);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBAddHashEntry(HashTable *hashTable, void *entry);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBRemoveHashEntry(HashTable *hashTable, int keyType, void *reference);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBSearchHashEntry(HashTable *hashTable, int keyType, void *reference, HashNode **searchResult);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBPeekHashEntry(HashTable *hashTable, int keyType, void *reference);IX_ETH_DB_PUBLIC void ixEthDBReleaseHashNode(HashNode *node);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBInitHashIterator(HashTable *hashTable, HashIterator *iterator);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBIncrementHashIterator(HashTable *hashTable, HashIterator *iterator);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBRemoveEntryAtHashIterator(HashTable *hashTable, HashIterator *iterator);IX_ETH_DB_PUBLIC void ixEthDBReleaseHashIterator(HashIterator *iterator);/* API Support */IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBPortAddressSet(IxEthDBPortId portID, IxEthDBMacAddr *macAddr);IX_ETH_DB_PUBLIC void ixEthDBMaximumFrameSizeAckCallback(IxNpeMhNpeId npeID, IxNpeMhMessage msg);/* DB Core functions */IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBInit(void);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBAdd(MacDescriptor *newRecordTemplate, IxEthDBPortMap updateTrigger);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBRemove(MacDescriptor *templateRecord, IxEthDBPortMap updateTrigger);IX_ETH_DB_PUBLIC HashNode* ixEthDBSearch(IxEthDBMacAddr *macAddress, IxEthDBRecordType typeFilter);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBPeek(IxEthDBMacAddr *macAddress, IxEthDBRecordType typeFilter);/* Learning support */IX_ETH_DB_PUBLIC UINT32 ixEthDBAddressCompare(UINT8 *mac1, UINT8 *mac2);IX_ETH_DB_PUBLIC BOOL ixEthDBAddressMatch(void *reference, void *entry);IX_ETH_DB_PUBLIC UINT32 ixEthDBEntryXORHash(void *macDescriptor);IX_ETH_DB_PUBLIC UINT32 ixEthDBKeyXORHash(void *macAddress);/* Port updates */IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBNPEUpdateHandler(IxEthDBPortId portID, IxEthDBRecordType type);IX_ETH_DB_PUBLIC void ixEthDBUpdatePortLearningTrees(IxEthDBPortMap triggerPorts);IX_ETH_DB_PUBLIC void ixEthDBNPEAccessRequest(IxEthDBPortId portID);IX_ETH_DB_PUBLIC void ixEthDBUpdateLock(void);IX_ETH_DB_PUBLIC void ixEthDBUpdateUnlock(void);IX_ETH_DB_PUBLIC MacTreeNode* ixEthDBQuery(MacTreeNode *searchTree, IxEthDBPortMap query, IxEthDBRecordType recordFilter, UINT32 maximumEntries);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBFirewallUpdate(IxEthDBPortId portID, void *address, UINT32 epDelta);/* Init/unload */IX_ETH_DB_PUBLIC void ixEthDBPortSetAckCallback(IxNpeMhNpeId npeID, IxNpeMhMessage msg);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBEventProcessorInit(void);IX_ETH_DB_PUBLIC void ixEthDBPortInit(IxEthDBPortId portID);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBPortEnable(IxEthDBPortId portID);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBPortDisable(IxEthDBPortId portID);IX_ETH_DB_PUBLIC void ixEthDBNPEUpdateAreasInit(void);IX_ETH_DB_PUBLIC UINT32 ixEthDBMatchMethodsRegister(MatchFunction *matchFunctions);IX_ETH_DB_PUBLIC UINT32 ixEthDBRecordSerializeMethodsRegister(void);IX_ETH_DB_PUBLIC UINT32 ixEthDBUpdateTypeRegister(BOOL *typeArray);IX_ETH_DB_PUBLIC void ixEthDBNPEUpdateAreasUnload(void);IX_ETH_DB_PUBLIC void ixEthDBFeatureCapabilityScan(void);IX_ETH_DB_PUBLIC UINT32 ixEthDBKeyTypeRegister(UINT32 *keyType);/* Event processing */IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBDefaultEventCallbackEnable(IxEthDBPortId portID, BOOL enable);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBTriggerAddPortUpdate(IxEthDBMacAddr *macAddr, IxEthDBPortId portID, BOOL staticEntry);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBTriggerRemovePortUpdate(IxEthDBMacAddr *macAddr, IxEthDBPortId portID);IX_ETH_DB_PUBLIC void ixEthDBNPEEventCallback(IxNpeMhNpeId npeID, IxNpeMhMessage msg);/* NPE adaptor */IX_ETH_DB_PUBLIC void ixEthDBGetMacDatabaseCbk(IxNpeMhNpeId npeID, IxNpeMhMessage msg);IX_ETH_DB_PUBLIC void ixEthDBNpeMsgAck(IxNpeMhNpeId npeID, IxNpeMhMessage msg);IX_ETH_DB_PUBLIC void ixEthDBNPESyncScan(IxEthDBPortId portID, void *eltBaseAddress, UINT32 eltSize);IX_ETH_DB_PUBLIC void ixEthDBNPETreeWrite(IxEthDBRecordType type, UINT32 totalSize, void *baseAddress, MacTreeNode *tree, UINT32 *blocks, UINT32 *startIndex);IX_ETH_DB_PUBLIC void ixEthDBNPEGatewayNodeWrite(void *address, MacTreeNode *node);/* Other public API functions */IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBStartLearningFunction(void);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBStopLearningFunction(void);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBPortUpdateEnableSet(IxEthDBPortId portID, BOOL enableUpdate);/* Maximum Tx/Rx public functions */IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBFilteringPortMaximumRxFrameSizeSet(IxEthDBPortId portID, UINT32 maximumRxFrameSize);IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBFilteringPortMaximumTxFrameSizeSet(IxEthDBPortId portID, UINT32 maximumTxFrameSize);/* VLAN-related */IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBPortVlanTableSet(IxEthDBPortId portID, IxEthDBVlanSet portVlanTable, IxEthDBVlanSet vlanSet);/* Record search */IX_ETH_DB_PUBLIC BOOL ixEthDBAddressRecordMatch(void *untypedReference, void *untypedEntry);IX_ETH_DB_PUBLIC BOOL ixEthDBVlanRecordMatch(void *untypedReference, void *untypedEntry);IX_ETH_DB_PUBLIC BOOL ixEthDBPortRecordMatch(void *untypedReference, void *untypedEntry);IX_ETH_DB_PUBLIC BOOL ixEthDBNullMatch(void *reference, void *entry);IX_ETH_DB_PUBLIC HashNode* ixEthDBPortSearch(IxEthDBMacAddr *macAddress, IxEthDBPortId portID, IxEthDBRecordType typeFilter);IX_ETH_DB_PUBLIC HashNode* ixEthDBVlanSearch(IxEthDBMacAddr *macAddress, IxEthDBVlanId vlanID, IxEthDBRecordType typeFilter);/* Utilities */IX_ETH_DB_PUBLIC const char* mac2string(const unsigned char *mac);IX_ETH_DB_PUBLIC void showHashInfo(void);IX_ETH_DB_PUBLIC int ixEthDBAnalyzeHash(void);IX_ETH_DB_PUBLIC const char* errorString(IxEthDBStatus error);IX_ETH_DB_PUBLIC int numHashElements(void);IX_ETH_DB_PUBLIC void zapHashtable(void);IX_ETH_DB_PUBLIC BOOL ixEthDBCheckSingleBitValue(UINT32 value);/* Single Eth NPE Check */IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBSingleEthNpeCheck(IxEthDBPortId portId);#endif /* IxEthDB_p_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -