📄 sr.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 + -