rtmp.h
来自「Ralink RT61 SoftAP Driver source code. 」· C头文件 代码 · 共 1,769 行 · 第 1/5 页
H
1,769 行
#define INC_COUNTER(Val) (Val.QuadPart++)
#define INC_COUNTER64(Val) (Val.QuadPart++)
#define MIN_NET_DEVICE_FOR_AID 0x00 //0x00~0x3f
#define MIN_NET_DEVICE_FOR_MBSSID 0x00 //0x00,0x10,0x20,0x30
#define MIN_NET_DEVICE_FOR_WDS 0x10 //0x40,0x50,0x60,0x70
#define MIN_NET_DEVICE_FOR_APCLI 0x20
#ifdef RTL865X_FAST_PATH
/* reserve cb: 0~3, 28~47 */
#define CB_OFF 28
#else
#define CB_OFF 0
#endif
#define RTMP_SET_PACKET_FRAGMENTS(_p, number) ((_p)->cb[10+CB_OFF] = number)
#define RTMP_GET_PACKET_FRAGMENTS(_p) ((_p)->cb[10+CB_OFF])
#define RTMP_SET_PACKET_RTS(_p, number) ((_p)->cb[11+CB_OFF] = number)
#define RTMP_GET_PACKET_RTS(_p) ((_p)->cb[11+CB_OFF])
#define RTMP_SET_PACKET_SOURCE(_p, pktsrc) ((_p)->cb[12+CB_OFF] = pktsrc)
#define RTMP_GET_PACKET_SOURCE(_p) ((_p)->cb[12+CB_OFF])
#define RTMP_SET_PACKET_TXRATE(_p, rate) ((_p)->cb[13+CB_OFF] = rate)
#define RTMP_GET_PACKET_TXRATE(_p) ((_p)->cb[13+CB_OFF])
#define RTMP_SET_PACKET_UP(_p, _prio) ((_p)->cb[14+CB_OFF] = _prio)
#define RTMP_GET_PACKET_UP(_p) ((_p)->cb[14+CB_OFF])
#define RTMP_SET_PACKET_NET_DEVICE_MBSSID(_p, idx) ((_p)->cb[15+CB_OFF] = idx)
#define RTMP_SET_PACKET_NET_DEVICE_WDS(_p, idx) ((_p)->cb[15+CB_OFF] = (idx + MIN_NET_DEVICE_FOR_WDS))
#define RTMP_SET_PACKET_NET_DEVICE_APCLI(_p, idx) ((_p)->cb[15+CB_OFF] = (idx + MIN_NET_DEVICE_FOR_APCLI))
#define RTMP_GET_PACKET_NET_DEVICE(_p) ((_p)->cb[15+CB_OFF])
#define RTMP_SET_PACKET_AID(_p, idx) ((_p)->cb[16+CB_OFF] = idx)
#define RTMP_GET_PACKET_AID(_p) ((_p)->cb[16+CB_OFF])
#define RTMP_SET_PACKET_MOREDATA(_p, _morebit) ((_p)->cb[17+CB_OFF] = _morebit)
#define RTMP_GET_PACKET_MOREDATA(_p) ((_p)->cb[17+CB_OFF])
#define PKTSRC_NDIS 0x7f
#define PKTSRC_DRIVER 0x0f
#define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
{ \
NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
}
// if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
// else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
// else remove the LLC/SNAP field from the result Ethernet frame
// Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
// Note:
// _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
// _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
#define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
{ \
char LLC_Len[2]; \
\
_pRemovedLLCSNAP = NULL; \
if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
{ \
PUCHAR pProto = _pData + 6; \
\
if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
{ \
LLC_Len[0] = (UCHAR)(_DataSize / 256); \
LLC_Len[1] = (UCHAR)(_DataSize % 256); \
MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
} \
else \
{ \
MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
_pRemovedLLCSNAP = _pData; \
_DataSize -= LENGTH_802_1_H; \
_pData += LENGTH_802_1_H; \
} \
} \
else \
{ \
LLC_Len[0] = (UCHAR)(_DataSize / 256); \
LLC_Len[1] = (UCHAR)(_DataSize % 256); \
MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
} \
}
#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
#define COPY_MAC_ADDR(Addr1, Addr2) memcpy((Addr1), (Addr2), MAC_ADDR_LEN)
#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
#define RELEASE_NDIS_PACKET(_pAd, _pSkb) \
{ \
if (RTMP_GET_PACKET_SOURCE(_pSkb) == PKTSRC_NDIS) \
{ \
RTMPFreeSkbBuffer(_pSkb); \
_pAd->RalinkCounters.PendingNdisPacketCount --; \
} \
else \
RTMPFreeSkbBuffer(_pSkb); \
}
//
// Register set pair for initialzation register set definition
//
typedef struct _RTMP_REG_PAIR
{
ULONG Register;
ULONG Value;
} RTMP_REG_PAIR, *PRTMP_REG_PAIR;
typedef struct _BBP_REG_PAIR
{
UCHAR Register;
UCHAR Value;
} BBP_REG_PAIR, *PBBP_REG_PAIR;
//
// Register set pair for initialzation register set definition
//
typedef struct _RTMP_RF_REGS
{
UCHAR Channel;
ULONG R1;
ULONG R2;
ULONG R3;
ULONG R4;
} RTMP_RF_REGS, *PRTMP_RF_REGS;
//
// Data buffer for DMA operation, the buffer must be contiguous physical memory
// Both DMA to / from CPU use the same structure.
//
typedef struct _RTMP_DMABUF
{
ULONG AllocSize;
PVOID AllocVa; // TxBuf virtual address
dma_addr_t AllocPa; // TxBuf physical address
struct sk_buff *pSkb;
} RTMP_DMABUF, *PRTMP_DMABUF;
//
// Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
// contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
// which won't be released, driver has to wait until upper layer return the packet
// before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
// to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
// which driver should ACK upper layer when the tx is physically done or failed.
//
typedef struct _RTMP_DMACB
{
ULONG AllocSize; // Control block size
PVOID AllocVa; // Control block virtual address
dma_addr_t AllocPa; // Control block physical address
RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
} RTMP_DMACB, *PRTMP_DMACB;
typedef struct _RTMP_TX_BUF
{
PQUEUE_ENTRY Next;
UCHAR Index;
ULONG AllocSize; // Control block size
PVOID AllocVa; // Control block virtual address
dma_addr_t AllocPa; // Control block physical address
} RTMP_TXBUF, *PRTMP_TXBUF;
typedef struct _RTMP_TX_RING
{
RTMP_DMACB Cell[TX_RING_SIZE];
UINT CurTxIndex;
UINT NextTxDmaDoneIndex;
} RTMP_TX_RING, *PRTMP_TX_RING;
typedef struct _RTMP_RX_RING
{
RTMP_DMACB Cell[RX_RING_SIZE];
UINT CurRxIndex;
} RTMP_RX_RING, *PRTMP_RX_RING;
typedef struct _RTMP_MGMT_RING
{
RTMP_DMACB Cell[MGMT_RING_SIZE];
UINT CurTxIndex;
UINT NextTxDmaDoneIndex;
} RTMP_MGMT_RING, *PRTMP_MGMT_RING;
//
// Statistic counter structure
//
typedef struct _COUNTER_802_3
{
// General Stats
ULONG GoodTransmits;
ULONG GoodReceives;
ULONG TxErrors;
ULONG RxErrors;
ULONG RxNoBuffer;
// Ethernet Stats
ULONG RcvAlignmentErrors;
ULONG OneCollision;
ULONG MoreCollisions;
} COUNTER_802_3, *PCOUNTER_802_3;
typedef struct _COUNTER_802_11 {
ULONG Length;
ULONG TransmittedFragmentCount;
ULONG MulticastTransmittedFrameCount;
ULONG FailedCount;
ULONG RetryCount;
ULONG MultipleRetryCount;
ULONG RTSSuccessCount;
ULONG RTSFailureCount;
ULONG ACKFailureCount;
ULONG FrameDuplicateCount;
ULONG ReceivedFragmentCount;
ULONG MulticastReceivedFrameCount;
ULONG FCSErrorCount;
} COUNTER_802_11, *PCOUNTER_802_11;
typedef struct _COUNTER_RALINK {
ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
ULONG BeenDisassociatedCount;
ULONG BadCQIAutoRecoveryCount;
ULONG PoorCQIRoamingCount;
ULONG MgmtRingFullCount;
ULONG RxCount;
ULONG RxRingErrCount;
ULONG KickTxCount;
ULONG TxRingErrCount;
ULONG RealFcsErrCount;
ULONG PendingNdisPacketCount;
ULONG OneSecOsTxCount[NUM_OF_TX_RING];
ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
ULONG OneSecTxDoneCount;
ULONG OneSecTxAggregationCount;
ULONG OneSecRxAggregationCount;
ULONG OneSecTxNoRetryOkCount;
ULONG OneSecTxRetryOkCount;
ULONG OneSecTxFailCount;
ULONG OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
ULONG OneSecRxOkCnt; // RX without error
ULONG OneSecRxFcsErrCnt; // CRC error
ULONG OneSecBeaconSentCnt;
} COUNTER_RALINK, *PCOUNTER_RALINK;
typedef struct _COUNTER_DRS {
// to record the each TX rate's quality. 0 is best, the bigger the worse.
USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
UCHAR PER[MAX_LEN_OF_SUPPORTED_RATES];
UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
ULONG CurrTxRateStableTime; // # of second in current TX rate
BOOLEAN fNoisyEnvironment;
UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
} COUNTER_DRS, *PCOUNTER_DRS;
//
// Arcfour Structure Added by PaulWu
//
typedef struct _ARCFOUR
{
UINT X;
UINT Y;
UCHAR STATE[256];
} ARCFOURCONTEXT, *PARCFOURCONTEXT;
typedef struct PACKED _IV_CONTROL_
{
union PACKED
{
struct PACKED
{
UCHAR rc0;
UCHAR rc1;
UCHAR rc2;
union PACKED
{
struct PACKED
{
#ifdef BIG_ENDIAN
UCHAR KeyID:2;
UCHAR ExtIV:1;
UCHAR Rsvd:5;
#else
UCHAR Rsvd:5;
UCHAR ExtIV:1;
UCHAR KeyID:2;
#endif
} field;
UCHAR Byte;
} CONTROL;
} field;
ULONG word;
} IV16;
ULONG IV32;
} TKIP_IV, *PTKIP_IV;
typedef struct _CIPHER_KEY {
UCHAR Mac[6]; // as lookup key, for pairwise key only
UCHAR BssId[6];
UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
UCHAR KeyLen; // Key length for each key, 0: entry is invalid
UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
UCHAR RxMic[8];
UCHAR TxMic[8];
UCHAR TxTsc[6]; // 48bit TSC value
UCHAR RxTsc[6]; // 48bit TSC value
UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
} CIPHER_KEY, *PCIPHER_KEY;
typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
ULONG RcvPktNumWhenEvaluate;
BOOLEAN FirstPktArrivedWhenEvaluate;
struct timer_list RxAntDiversityTimer;
} SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
typedef struct _VIRTUAL_ADAPTER
{
struct net_device *RtmpDev;
struct net_device *VirtualDev;
} VIRTUAL_ADAPTER, PVIRTUAL_ADAPTER;
typedef struct _MAC_TABLE_ENTRY {
BOOLEAN Valid;
BOOLEAN RetryTimerRunning;
// record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
UCHAR CMTimerRunning;
UCHAR RSNIE_Len;
UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
UCHAR ANonce[32];
UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
UCHAR PTK[64];
UCHAR ReTryCounter;
struct timer_list RetryTimer;
NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
NDIS_802_11_WEP_STATUS WepStatus;
WPA_STATE WpaState;
GTK_STATE GTKState;
USHORT PortSecured;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?