📄 ixatmdtxcfginfo.c
字号:
} break; case IX_ATMDACC_PORT_DOWN_PENDING: if (requestedState == IX_ATMD_PORT_ENABLED) { returnStatus = IX_FAIL; } else if (requestedState == IX_ATMD_PORT_DISABLED) { returnStatus = IX_ATMDACC_WARNING; } break; case IX_ATMDACC_PORT_DOWN: if (requestedState == IX_ATMD_PORT_ENABLED) { ixAtmdAccPortDescriptor[port].status = IX_ATMDACC_PORT_UP; /* Are we guaranteed this will succeed */ if (ixAtmdAccUtilNpeMsgSend(IX_NPE_A_MSSG_ATM_TX_ENABLE, port, NPE_IGNORE) != IX_SUCCESS) { /* rollback the state change */ ixAtmdAccPortDescriptor[port].status = IX_ATMDACC_PORT_DOWN; returnStatus = IX_FAIL; } /* end of if(ixAtmdAccUtilNpeMsgSend) */ } /* end of if(requestedState) */ else if (requestedState == IX_ATMD_PORT_DISABLED) { returnStatus = IX_ATMDACC_WARNING; } break; default: IX_ATMDACC_ENSURE(0,"\nInvalid port state"); returnStatus = IX_FAIL; break; } /* end of switch(ixAtmdAccPortDescriptor) */ return returnStatus;}/* ----------------------------------------------------------* Handle port setup initiated by PortMgmt*/voidixAtmdAccTxPortSetupNotifyHandler(unsigned int numPort){ ixAtmdAccTxNumPortConfigured = numPort;}/* -------------------------------------------------* Check that the port is enabled*/BOOLixAtmdAccTxPortEnabledQuery(IxAtmLogicalPort port){ if (ixAtmdAccPortDescriptor[port].status == IX_ATMDACC_PORT_UP) { return TRUE; } return FALSE;}/* -------------------------------------------------* Check that the port is disabled*/BOOLixAtmdAccTxPortDisabledQuery(IxAtmLogicalPort port){ if (ixAtmdAccPortDescriptor[port].status == IX_ATMDACC_PORT_DOWN) { return TRUE; } return FALSE;}/* -------------------------------------------------* regsiter with the scheduler and obtain* a scheduler Id*/IX_STATUSixAtmdAccTxCfgSchVcIdGet (IxAtmLogicalPort port, unsigned int vpi, unsigned int vci, IxAtmConnId connId, IxAtmSchedulerVcId *schedulerVcIdPtr){ return (*ixAtmdAccPortDescriptor[port].schVcIdGet) (port, vpi, vci, connId, schedulerVcIdPtr);}/* --------------------------------------------------* Clear scheduler demand for this connection*/voidixAtmdAccTxCfgVcDemandCancel (IxAtmConnId connId, IxAtmLogicalPort port, IxAtmSchedulerVcId schedulerVcId){ unsigned int txId; IxAtmdAccTxVcDescriptor *vcDescriptor; txId = IX_ATMDACC_TX_VC_INDEX_GET (connId); vcDescriptor = &ixAtmdAccTxVcDescriptor[txId]; /* check if the connId has been invalidated * in this case demand will already have been cleared * so we do nothing */ if(connId == vcDescriptor->connId) { /* invoke the scheduler demand clear callback */ (*ixAtmdAccPortDescriptor[port].schDemandClear) (port, schedulerVcId); } return;}/* --------------------------------------------------* Clear scheduler demand for this connection*/voidixAtmdAccTxCfgVcDemandClear (IxAtmConnId connId){ unsigned int txId; IxAtmdAccTxVcDescriptor *vcDescriptor; txId = IX_ATMDACC_TX_VC_INDEX_GET (connId); vcDescriptor = &ixAtmdAccTxVcDescriptor[txId]; /* check if the connId has been invalidated * in this case demand will already have been cleared * so we do nothing */ if(connId != vcDescriptor->connId) { /* invoke the scheduler demand clear callback */ (*ixAtmdAccPortDescriptor[vcDescriptor->port].schDemandClear) (vcDescriptor->port, vcDescriptor->schedulerVcId); } return;}/* ---------------------------------------------------------* display the tx configuration*/voidixAtmdAccTxCfgInfoStatsShow (void){ int port; unsigned int vc; IX_STATUS returnStatus; unsigned int numEntries; printf("\n"); IX_ATMDACC_FULL_STATS( printf ("Tx Low Default callback count .. : %10u (should be 0)\n", ixAtmdAccTxLowDefaultCallbackCount); printf("\n"); ); /* iterate through the VCs displaying interesting things */ for (vc = 0; vc < IX_ATM_MAX_NUM_AAL_OAM_TX_VCS; vc++) { if (IX_ATMDACC_TX_VC_INUSE (ixAtmdAccTxVcDescriptor[vc].connId)) { IX_ATMDACC_TX_QUEUE *txSwQueue = &ixAtmdAccTxVcDescriptor[vc].queue; char *stringAalType = "???????"; switch(ixAtmdAccTxVcDescriptor[vc].npeAalType) { case IX_NPE_A_AAL_TYPE_5: stringAalType = "AAL5 "; break; case IX_NPE_A_AAL_TYPE_0_48: stringAalType = "AAL0_48"; break; case IX_NPE_A_AAL_TYPE_0_52: stringAalType = "AAL0_52"; break; case IX_NPE_A_AAL_TYPE_OAM: stringAalType = "OAM "; break; case IX_NPE_A_AAL_TYPE_INVALID: default: break; } /* display data about VC */ printf ("Tx Channel %u %s connId %8.8x schedulerId %d\n", vc, stringAalType, ixAtmdAccTxVcDescriptor[vc].connId, ixAtmdAccTxVcDescriptor[vc].schedulerVcId); printf (" TxId %2u Port %2u Vpi %3u Vci %5u userId %8.8x\n", vc, ixAtmdAccTxVcDescriptor[vc].port, ixAtmdAccTxVcDescriptor[vc].vpi, ixAtmdAccTxVcDescriptor[vc].vci, ixAtmdAccTxVcDescriptor[vc].callbackId); printf (" Descriptor head %10u >= mid %10u >= tail %10u\n", txSwQueue->head, txSwQueue->mid, txSwQueue->tail); IX_ATMDACC_FULL_STATS( printf (" Tx Submit Overflow %10u (should be 0)\n", ixAtmdAccTxVcDescriptor[vc].txSubmitOverloadedCount); printf (" Tx Submit rejected %10u (should be 0)\n", ixAtmdAccTxVcDescriptor[vc].txVcPduSubmitFailureCount); ); if (IX_ATMDACC_TXQ_OVERLOADED(txSwQueue)) { printf(" Sw queue is full\n"); } if (IX_ATMDACC_TXQ_SCHEDULE_PENDING(txSwQueue)) { printf(" %u pdus need more scheduling\n", txSwQueue->mid - txSwQueue->tail); } if (IX_ATMDACC_TXQ_RECYCLE_PENDING(txSwQueue)) { printf(" %u Pdus still in use in the NPE or txDone queue\n", txSwQueue->size - (txSwQueue->head - txSwQueue->tail)); } } /* end of if(IX_ATMDACC_TX_VC_INUSE) */ } /* end of for(vc) */ printf("\n"); for (port = 0; port < IX_UTOPIA_MAX_PORTS; port++) { char *statusString = "?"; switch (ixAtmdAccPortDescriptor[port].status) { case IX_ATMDACC_PORT_DOWN: statusString = "Down"; break; case IX_ATMDACC_PORT_UP: statusString = "Up"; break; case IX_ATMDACC_PORT_DOWN_PENDING: statusString = "Down pending"; break; } /* end of switch(ixAtmdAccPortDescriptor) */ printf ("Port %2u status %s TxQueue %2u TxThreshold %2u\n", port, statusString, ixAtmdAccPortDescriptor[port].txQueueId, ixAtmdAccPortDescriptor[port].txQueueThreshold); IX_ATMDACC_FULL_STATS( /* display port stats */ if ((ixAtmdAccTxTransportStats[port].dataCellScheduledCount == 0) && (ixAtmdAccTxTransportStats[port].idleCellScheduledCount == 0)) { printf(" No Tx traffic\n"); } else { printf (" Tx Process invoke .............. : %10u\n", ixAtmdAccTxTransportStats[port].txProcessInvokeCount); printf (" Tx Process failed .............. : %10u (should be 0)\n", ixAtmdAccTxTransportStats[port].txProcessFailedCount); printf (" Tx Pdu scheduled ............... : %10u\n", ixAtmdAccTxTransportStats[port].pduScheduledCount); printf (" Tx Data Cell Scheduled ......... : %10u\n", ixAtmdAccTxTransportStats[port].dataCellScheduledCount); printf (" Tx Idle cell Scheduled.......... : %10u\n", ixAtmdAccTxTransportStats[port].idleCellScheduledCount); printf (" Tx Scheduled during disconnect . : %10u\n", ixAtmdAccTxTransportStats[port].disconnectScheduledCount); printf (" Tx Over Scheduled .............. : %10u (should be 0)\n", ixAtmdAccTxTransportStats[port].overScheduledCellCount); printf (" Tx Zero cell Scheduled.......... : %10u (should be 0)\n", ixAtmdAccTxTransportStats[port].zeroCellCount); printf (" Tx UnderScheduled............... : %10u (should be 0)\n", ixAtmdAccTxTransportStats[port].txProcessUnderscheduledCount); printf (" Tx Wrong connId Scheduled....... : %10u (should be 0)\n", ixAtmdAccTxTransportStats[port].wrongConnIdScheduledCount); }); /* get the current number of entries */ returnStatus = ixQMgrQNumEntriesGet (ixAtmdAccPortDescriptor[port].txQueueId, &numEntries); /* read again the number of entries */ if (returnStatus == IX_QMGR_WARNING) { returnStatus = ixQMgrQNumEntriesGet (ixAtmdAccPortDescriptor[port].txQueueId, &numEntries); } /* end of if(returnStatus) */ if (returnStatus != IX_SUCCESS) { printf (" Tx Queue level ................. : N/A\n"); } else { printf (" Tx Queue level ................. : %10u\n", numEntries); } /* end of if-else(returnStatus) */ } /* end of for(port) */ IX_ATMDACC_FULL_STATS( printf ("Tx Done queue ............................. : %10u\n", IX_NPE_A_QMQ_ATM_TX_DONE); printf ("Tx Done Dispatch invoke ................... : %10u\n", ixAtmdAccTxDoneDispatchStats.invokeCount); printf ("Tx Done Dispatch failed ................... : %10u (should be 0)\n", ixAtmdAccTxDoneDispatchStats.failedCount); printf ("Tx Done descriptors missing ............... : %10u (should be 0)\n", ixAtmdAccTxDoneDispatchStats.descriptorOrderErrorCount); printf ("Tx Done Pdu received ................... : %10u\n", ixAtmdAccTxDoneDispatchStats.pduCount); printf ("Tx Done TxDisableAck received ............. : %10u\n", ixAtmdAccTxDoneDispatchStats.ackCount); printf ("Tx Done Max pdu per dispatch .............. : %10u\n", ixAtmdAccTxDoneDispatchStats.maxPduPerDispatch); printf ("Tx Done Default callback count ............ : %10u (should be 0)\n", ixAtmdAccTxDoneDefaultCallbackCount); ); returnStatus = ixQMgrQNumEntriesGet (IX_NPE_A_QMQ_ATM_TX_DONE, &numEntries); /* read again the number of entries, if needed */ if (returnStatus == IX_QMGR_WARNING) { returnStatus = ixQMgrQNumEntriesGet (IX_NPE_A_QMQ_ATM_TX_DONE, &numEntries); } if (returnStatus == IX_QMGR_WARNING) { printf ("Tx Done Queue level ........................ N/A\n"); } else { printf ("Tx Done Queue level ....................... : %10u\n", numEntries); } printf("\n");}/* ---------------------------------------------------------* display the tx configuration*/voidixAtmdAccTxCfgInfoPortShow (IxAtmLogicalPort port){ char *statusString = "?"; switch (ixAtmdAccPortDescriptor[port].status) { case IX_ATMDACC_PORT_DOWN: statusString = "DOWN"; break; case IX_ATMDACC_PORT_UP: statusString = "Up"; break; case IX_ATMDACC_PORT_DOWN_PENDING: statusString = "DOWN PENDING"; break; } /* end of switch(ixAtmdAccPortDescriptor) */ printf ("Port %2u status %s\n", port, statusString);}/* ---------------------------------------------------------* display the tx configuration*/voidixAtmdAccTxCfgInfoChannelShow (IxAtmLogicalPort port){ unsigned int vc; /* iterate through the VCs for this port */ for (vc = 0; vc < IX_ATM_MAX_NUM_AAL_OAM_TX_VCS; vc++) { if (IX_ATMDACC_TX_VC_INUSE (ixAtmdAccTxVcDescriptor[vc].connId)) { if (ixAtmdAccTxVcDescriptor[vc].port == port) { IX_ATMDACC_TX_QUEUE *txSwQueue = &ixAtmdAccTxVcDescriptor[vc].queue; char *stringAalType = "???????"; switch(ixAtmdAccTxVcDescriptor[vc].npeAalType) { case IX_NPE_A_AAL_TYPE_5: stringAalType = "AAL5 "; break; case IX_NPE_A_AAL_TYPE_0_48: stringAalType = "AAL0_48"; break; case IX_NPE_A_AAL_TYPE_0_52: stringAalType = "AAL0_52"; break; case IX_NPE_A_AAL_TYPE_OAM: stringAalType = "OAM "; break; case IX_NPE_A_AAL_TYPE_INVALID: default: break; } /* display data about VC */ printf (" Tx Channel %2u %s ConnId 0x%8.8x UserId 0x%8.8x\n", vc, stringAalType, ixAtmdAccTxVcDescriptor[vc].connId, ixAtmdAccTxVcDescriptor[vc].callbackId); /* display data about VC */ printf (" Vpi %3u Vci %5u PDUsTx %10u PDUsTxd %10u\n", ixAtmdAccTxVcDescriptor[vc].vpi, ixAtmdAccTxVcDescriptor[vc].vci, txSwQueue->mid, txSwQueue->tail); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -