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

📄 sr.h

📁 Vitual Ring Routing 管你知不知道
💻 H
字号:
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil -*- (for GNU Emacs)
//
// (c) Microsoft Corporation. All rights reserved. 
//
// This file is part of the Microsoft Virtual Ring Routing distribution.
// You should have received a copy of the Microsoft Research Shared Source
// license agreement (MSR-SSLA) for this software; see the file "license.txt".
// If not, please see http://research.microsoft.com/vrr/license.htm,
// or write to Microsoft Research, One Microsoft Way, Redmond, WA 98052-6399.
//
// This file is derived from the Microsoft Research Mesh Connectivity Layer,
// available under the MSR-SSLA license, and downloadable from
// http://research.microsoft.com/mesh/.
//

#ifndef __SR_H__
#define __SR_H__

#include "route.h"

//
// Generic form of internal option representation.
// All internal option formats must match these initial fields.
//
typedef struct _InternalOption InternalOption;
typedef struct _InternalOption {
    InternalOption *Next;
    VRROption Opt;
};


typedef struct _InternalAcknowledgementRequest InternalAcknowledgementRequest;
struct _InternalAcknowledgementRequest {
    InternalAcknowledgementRequest *next;
    AcknowledgementRequest opt;
};

typedef struct _InternalAcknowledgement InternalAcknowledgement;
struct _InternalAcknowledgement {
    InternalAcknowledgement *next;
    Acknowledgement opt;
};

typedef struct _InternalProbe InternalProbe;
struct _InternalProbe {
    InternalProbe *Next;
    Probe Opt;
};

typedef struct _InternalProbeReply InternalProbeReply;
struct _InternalProbeReply {
    InternalProbeReply *Next;
    ProbeReply Opt;
};

typedef struct _InternalVrrHello InternalVrrHello;
struct _InternalVrrHello {
    InternalVrrHello *Next;
    VrrHello Opt;
};

typedef struct _InternalVrrSetup InternalVrrSetup;
struct _InternalVrrSetup {
    InternalVrrSetup *Next;
    VrrSetup Opt;
};

typedef struct _InternalVrrTearDown InternalVrrTearDown;
struct _InternalVrrTearDown {
    InternalVrrTearDown *Next;
    VrrTearDown Opt;
};

typedef struct _InternalVrrSetupReq InternalVrrSetupReq;
struct _InternalVrrSetupReq {
    InternalVrrSetupReq *Next;
    VrrSetupReq Opt;
};

typedef struct _SRPacket SRPacket;
struct _SRPacket {
    SRPacket *Next;

    PhysicalAddress EtherDest;
    PhysicalAddress EtherSource;
    VirtualAddress Dest;
    VirtualAddress Source;
    VirtualAddress Origin;
    uchar HopCount;
    uchar IV[VRR_IV_LENGTH];
    unsigned long FrameSeqNo;

    //
    // If you add a new option type, be sure to update
    // SROptionLength and PbackPacketSize as well as
    // SRPacketToPkt, SRPacketFromPkt etc.
    //
    InternalAcknowledgementRequest *ackreq;
    InternalAcknowledgement *ack;
    InternalProbe *Probe;
    InternalProbeReply *ProbeReply;
    InternalVrrHello *VrrHello;
    InternalVrrSetup *VrrSetup;
    InternalVrrTearDown *VrrTearDown;
    InternalVrrSetupReq *VrrSetupReq;
    
    TxToken Token;

    //
    // The encrypted payload carried in this SRPacket.
    // Packet may be NULL, for example for an Ack or a Route Request,
    // in which case PayloadOffset should be zero.
    //
    NDIS_PACKET *Packet;
    uint PacketLength;          // Valid on the receive path.
    uint PayloadOffset;

    ProtocolAdapter *PA;
    void (*FreePacket)(ProtocolAdapter *PA, NDIS_PACKET *Packet);

    //
    // Used by ProtocolForwardRequest.
    //
    void (*TransmitComplete)(MiniportAdapter *VA, SRPacket *Srp, NDIS_STATUS Status);
    uint ForwardCount;
    NDIS_STATUS ForwardStatus;
};


extern void 
SRPacketFree(SRPacket *Srp);

extern void
SRFreeOptionList(InternalOption *List);

extern uint
SROptionListLength(InternalOption *List);

extern boolint
IsFixedDestSRP(const SRPacket *srp);

extern NDIS_STATUS
SRPacketFromPkt(MiniportAdapter *VA, NDIS_PACKET *Packet, SRPacket **pSRP);

extern NDIS_STATUS
SRPacketToPkt(MiniportAdapter *VA, const SRPacket *Srp, NDIS_PACKET **pPacket);

extern NDIS_STATUS
SRPacketToProbe(
    MiniportAdapter *VA,
    SRPacket *SRP,
    NDIS_PACKET **pPacket);

extern NDIS_STATUS
CheckPacket(MiniportAdapter *VA, NDIS_PACKET *Packet);

extern boolint
SRPContainsMessages(const SRPacket *srp);


#endif /* __SR_H__ */

⌨️ 快捷键说明

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