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

📄 headers.h

📁 Vitual Ring Routing 管你知不知道
💻 H
📖 第 1 页 / 共 5 页
字号:
    ZeroListEntry *Prev;
    
    VirtualAddress Address;    // Address of node to which we are sending SetupRequests.
    Time Timeout;              // Remaining lifetime iff ACTIVE, else time it expired.
    uint SeqNo;                // Sequence number assigned at partition representative node.
    uchar State;
};

struct ZeroList {
    KSPIN_LOCK Lock;
    ZeroListEntry *FirstZLE;
    ZeroListEntry *LastZLE;
};

__inline ZeroListEntry *
SentinelZLE(ZeroList *ZL)
{
    return (ZeroListEntry *) &ZL->FirstZLE;
}

extern void
ZeroListInit(ZeroList *ZL);

extern void
ZeroListCleanup(
    MiniportAdapter *VA);

extern Time
ZeroListTimeout(
    MiniportAdapter *VA,
    Time Now);

extern ZeroListEntry *
UpdateZLE(
    MiniportAdapter *VA,
    VirtualAddress Address,
    uint SeqNo);

extern void
UpdateLocalZeroListEntry(
    MiniportAdapter *VA);

extern void
EmitHelloZeroList(
    MiniportAdapter *VA,
    VrrHello *Hello);

extern void
ReceiveHelloZeroList(
    MiniportAdapter *VA,
    VrrHello *Hello,
    VirtualAddress NextHop,
    VRRIf LocIF,
    Time Now);

//
// Functionality in pktindex.c
//
struct PacketIndex {
    KSPIN_LOCK Lock;
    PacketIndexEntry *FirstPXE;
    PacketIndexEntry *LastPXE;
};

__inline PacketIndexEntry *
SentinelPXE(PacketIndex *PX)
{
    return (PacketIndexEntry *) &PX->FirstPXE;
}

extern void
PacketIndexInit(PacketIndex *PX);

extern PacketIndexEntry *
FindPXE(
    PacketIndex *PX,
    VirtualAddress Origin,
    uint FrameSeqNo,
    uchar Type);

extern uint 
UpdatePacketIndex(
    MiniportAdapter *VA,
    VirtualAddress Origin,
    uint FrameSeqNo,
    uchar HopCount,
    VirtualAddress Source,
    VirtualAddress Dest,
    VRRIf LocIF,
    uchar Type);

extern void
PacketIndexCleanup(
    MiniportAdapter *VA);

extern Time
PacketIndexTimeout(
    MiniportAdapter *VA,
    Time Now);

//
// Functionality in broadcast.c
//
struct BroadcastList {
    KSPIN_LOCK Lock;
    BroadcastListEntry *FirstBLE;
    BroadcastListEntry *LastBLE;
};

__inline BroadcastListEntry *
SentinelBLE(BroadcastList *BL)
{
    return (BroadcastListEntry *) &BL->FirstBLE;
}

extern void
BroadcastListInit(BroadcastList *BL);

extern BroadcastListEntry *
FindBLE(
    BroadcastList *BL,
    VirtualAddress Origin,
    uint FrameSeqNo);

extern uint 
IsBroadcastRelay(
    MiniportAdapter *VA);

extern uint 
UpdateBroadcastList(
    MiniportAdapter *VA,
    VirtualAddress Origin,
    uint FrameSeqNo,
    uchar HopCount,
    VirtualAddress Source,
    VirtualAddress EthDest,
    uint Forward,
    uchar Buffer[],
    uint BufferLen);

extern void
BroadcastListCleanup(
    MiniportAdapter *VA);

extern Time
BroadcastListTimeout(
    MiniportAdapter *VA,
    Time Now);


//
// Functionality in setupreq.c
//
extern void
ReceiveSetupReq(
    MiniportAdapter *VA,
    ProtocolAdapter *PA,
    InternalVrrSetupReq *InternalSetupReq,
    SRPacket *srp);
    
extern InternalVrrSetupReq *
CreateSetupReqOpt(
    MiniportAdapter *VA,
    VirtualAddress Dest,
    uchar Type,
    VirtualAddress Proxy,
    uint FrameSeqNo,
    VirtualAddress Target,
    AddressList *SRcAntiRoute);

extern boolint
JoinSendSetupReq(
    MiniportAdapter *VA,
    VirtualAddress Dest,
    VirtualAddress Proxy,
    uint FrameSeqNo,
    AddressList *SRcAntiRoute);

//
// Functionality in send.c
//
extern void
VrrBroadcastComplete(
    MiniportAdapter *VA,
    NDIS_PACKET *Packet,
    NDIS_STATUS Status);

extern void
VrrBroadcastHello(
    MiniportAdapter *VA,
    SRPacket *srp);

extern void
VrrBroadcastSRPComplete(
    MiniportAdapter *VA,
    SRPacket *srp,
    NDIS_STATUS Status);

extern boolint
GetPhysNeighborTxToken(
    MiniportAdapter *VA,
    VirtualAddress Dest,
    VRRIf LocIF,
    VRRIf RemIF,
    TxToken *Tok,
    uchar State);

extern void
SendTransmitComplete(
    MiniportAdapter *VA,
    NDIS_PACKET *Packet,
    NDIS_STATUS Status);


//
// Functionality on global.c
//
extern VrrGlobalState VrrGlobal;

extern void GlobalInit(MiniportAdapter *VA);
extern Time TimeSinceMidnight();
extern Time TimeoutInterval(Time MinTime, Time MaxTime);

extern InternalOption *
CopyInternalOption(
    MiniportAdapter *VA,
    InternalOption *Original);

//
// Functionality in miniport.c.
//

typedef union MetricParams {
    PktPairParams PktPair;
    WcettParams Wcett;
} MetricParams; 

extern struct MiniportAdapters {
    KSPIN_LOCK Lock;
    MiniportAdapter *VirtualAdapters;
} MiniportAdapters;

struct MiniportAdapter {                // VA:
    MiniportAdapter **Prev, *Next;

    uint Index;
    GUID Guid;

    NDIS_HANDLE MiniportHandle;
    NDIS_HANDLE ProtocolHandle;

    PDEVICE_OBJECT PhysicalDeviceObject;
    PDEVICE_OBJECT DeviceObject;

    KSPIN_LOCK Lock;
    ProtocolAdapter *PhysicalAdapters;
    uint NextPhysicalAdapterIndex;

    Time Timeout;
    KTIMER Timer;
    KDPC TimeoutDpc;
    uint TimeoutMinLoops;
    uint TimeoutMaxLoops;

    NeighborCache NC;
    NodeTable NT;
    RouteTable RT;
    PbackCache PCache;
    TearDownCache TDC;
    ProbeList PL;
    ZeroList ZL;
    PacketIndex PX;
    BroadcastList BL;
    MaintBuf *MaintBuf;

    SRPacket *ForwardList;
    SRPacket **ForwardLast;
    Time ForwardTime;

    VirtualAddress Address;
    VirtualAddress AddressDec;  // Address-1 in virtual address space.
    VirtualAddress AddressInc;  // Address+1 in virtual address space.

    boolint Snooping;           // Learn route info from overhead packets?
    
    boolint Crypto;             // Encrypt the packets? 
    uchar CryptoKeyMAC[CRYPTO_KEY_MAC_LENGTH];
    uchar CryptoKeyAES[AES_KEYSIZE_128];

    boolint ArtificialDrop;     // Simulate lossy links by dropping packets?

    Time LinkTimeout;           // How long do stale links live?

    NDIS_MEDIUM Medium;
    uint PacketFilter;
    uint LookAhead;
    uint MediumLinkSpeed;
    uint MediumMinPacketLen;
    uint MediumMaxPacketLen;
    uint MediumMacHeaderLen;
    uint MediumMaxFrameLen;

    NDIS_HANDLE PacketPool;
    NDIS_HANDLE BufferPool;
    uint CountPacketPoolFailure;

    //
    // Parameters for Metric being used. 
    // 

    MetricType MetricType;
    MetricParams MetricParams;

    boolint (*IsInfinite)(uint LinkMetric);
    uint (*ConvMetric)(uint LinkMetric);
    void (*InitLinkMetric)(MiniportAdapter *VA,
                           int SNode, Link *Link, Time Now);
    uint (*PathMetric)(MiniportAdapter *VA, Link **Hops, uint NumHops);
    uint RateAdmitThreshold;      // Admit link iff bandwidth better than this.
    uint RateEvictThreshold;      // Fail link if bandwidth drops below this.
    uint RssiAdmitThreshold;      // Admit link iff RSSI better than this.
    uint RssiEvictThreshold;      // Fail link if RSSI drops below this.

    uint DriverInitialized;       // We have received at least one Setup from our join attempts.
    uint DriverActive;            // We have (had) paths to (all) neighbours on VSetLeft and VSetRight.
    uint VrrAPIJoined;
    uint JoiningOnHold;           // Delay during reboot giving neighbours time to detect link failure.
    uint PartitionRepairEnabled;
    uint BroadcastRelay;
    uint BroadcastJitterMinMs;
    uint BroadcastJitterMaxMs;
    uint TxDropAllButHello;
    uint TxDropAllHello;
    uint VrrTraceNoiseLevel;
    Time DriverLoadTime;

    VirtualAddress ExpectedVSet[VRR_MAX_VSET_SIZE];  // Testing aid: VSet known in advance in test rig.
    VirtualAddress CurrentVSet[VRR_MAX_VSET_SIZE];   // Testing aid: VSet known in advance in test rig.
    VirtualAddress RoutesVSet[VRR_MAX_VSET_SIZE];    // Testing aid: NULL unless exists VSetRoute.
    uint AddErrorVSet[VRR_MAX_VSET_SIZE];            // Testing aid: count times ExpVSet member rejected.
    uint RejExpBypass[REJ_EXP_BYPASS_COUNT];         // Testing aid: count ExpVSet error bypasses.
    uint TestExpectedVSet;                           // Switch enabling testing against ExpectedVSet;
    uint MsFirstJoinSetupReq;        // Time in ms at which first SetupReq(join) was sent.
    uint MsJoinToHeardExpectedVSet;  // Interval between MsFirstJoinSetupReq and hearing ExpectedVSet.
    uint MsJoinToPathsExpectedVSet;  // Interval between MsFirstJoinSetupReq and all ExpectedVSet paths intact.

    //
    // Counters for monitoring/debugging purposes.
    //
    uint CountSRNackSeqT;
    uint CountExitRing;
    uint CountExitExecCmd;
    uint CountExitNCE;
    uint CountExitNTE;
    uint CountSetActiveT;
    uint CountSetActiveF;
    uint CountMaxPLE;
    uint BootNode;
    uint MaxMsgTimeDelay;
    uint MaxMsgCountDelayed;
    uint CountMsQDropCritical;
    uint CountPnRepairSendSetup;
    uint CountHopCountExceeded;
    uint CountNTECloserThanSelf;
    uint CountXmit;
    uint CountXmitLocally;
    uint CountXmitQueueFull;
    uint CountRexmitQueueFull;
    uint CountXmitNoRoute;
    uint CountXmitMulticast;
    uint CountXmitMaintBuf;
    uint CountXmitForwardUnicast;
    uint CountXmitForwardQueueFull;
    uint CountXmitForwardBroadcast;
    uint CountXmitProbe;
    uint CountXmitProbeReply;
    uint CountSendHello;
    uint CountSendSetup;
    uint CountSendTearDown;
    uint CountSendSetupReq;
    uint CountSendSetupReqNack;
    uint CountFwdSetup;
    uint CountFwdTearDown;
    uint CountFwdSetupReq;
    uint CountMisroutedSetup;
    uint CountMisroutedSetupReq;
    uint CountMisroutedTearDown;
    uint CountSRDropHopCount;
    uint CountSRDropLoop;
    uint MaxPLESRcAntiRoute;
    uint MaxPLESRcAntiRouteRcv;
    uint CountFNHSRcAntiRoute;
    uint CountFNHsendSRleft;
    uint CountFNHsendSRright;
    uint CountRecv;
    uint CountRecvLocally;
    uint CountRecvLocallySalvaged;
    uint CountRecvBadMAC;
    uint CountRecvAckRequest;
    uint CountRecvAck;
    uint CountRecvDupAckReq;
    uint CountRecvProbe;
    uint CountRecvProbeReply;
    uint CountRecvHello;
    uint CountRecvSetup;
    uint CountRecvTearDown;
    uint CountRecvSetupReq;
    uint CountRecvSRleft;
    uint CountRecvSRright;
    uint CountGenSRleft;
    uint CountGenSRright;
    uint CountRecvRecursive;
    uint CountRecvEmpty;
    uint CountRecvSmall;
    uint CountRecvDecryptFailure;

    uint MinVersionSeen;
    uint MaxVersionSeen;

    uint TotalForwardingStall;          // Microseconds.

    uint ForwardNum;
    uint ForwardMax;
    uint CountForwardFast;
    uint CountForwardQueue;
    uint CountForwardDrop;

    VrrHelloParams VrrHelloParams;      // Hello member in MiniportAdapter (VA).
};

extern MiniportAdapter *
FindVirtualAdapterFromIndex(uint Index);

extern MiniportAdapter *
FindVirtualAdapterFromGuid(const GUID *Guid);

extern boolint
MiniportInit(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath);

extern void
MiniportReceivePacket(MiniportAdapter *VA, ProtocolAdapter *PA,
                      NDIS_PACKET *Original,
                      void (*FreePacket)(ProtocolAdapter *PA,
                                         NDIS_PACKET *Packet));

extern void
MiniportIndicateStatusConnected(MiniportAdapter *A);

extern void
MiniportIndicateStatusDisconnected(MiniportAdapter *A);

extern void
MiniportSendComplete(MiniportAdapter *VA, SRPacket *srp, NDIS_STATUS Status);

⌨️ 快捷键说明

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