Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
P
Pcap-Net
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Pcap-Net
Commits
cdb913a5
Commit
cdb913a5
authored
Apr 28, 2010
by
Brickner_cp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
GRE
parent
b9e2fbb1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
211 additions
and
92 deletions
+211
-92
WiresharkCompareTests.cs
PcapDotNet/src/PcapDotNet.Core.Test/WiresharkCompareTests.cs
+54
-13
RandomPacketsExtensions.cs
...c/PcapDotNet.Packets.TestUtils/RandomPacketsExtensions.cs
+57
-44
EthernetType.cs
PcapDotNet/src/PcapDotNet.Packets/Ethernet/EthernetType.cs
+4
-0
GreDatagram.cs
PcapDotNet/src/PcapDotNet.Packets/Gre/GreDatagram.cs
+92
-33
GreLayer.cs
PcapDotNet/src/PcapDotNet.Packets/Gre/GreLayer.cs
+4
-2
No files found.
PcapDotNet/src/PcapDotNet.Core.Test/WiresharkCompareTests.cs
View file @
cdb913a5
...
@@ -142,6 +142,14 @@ namespace PcapDotNet.Core.Test
...
@@ -142,6 +142,14 @@ namespace PcapDotNet.Core.Test
ethernetLayer
.
EtherType
=
EthernetType
.
None
;
ethernetLayer
.
EtherType
=
EthernetType
.
None
;
ipV4Layer
.
Protocol
=
null
;
ipV4Layer
.
Protocol
=
null
;
GreLayer
greLayer
=
random
.
NextGreLayer
();
GreLayer
greLayer
=
random
.
NextGreLayer
();
// GreLayer greLayer = new GreLayer
// {
// AcknowledgmentSequenceNumber = 10,
// ProtocolType = EthernetType.AppleTalk,
// //EthernetType.PointToPointProtocol,
// Key = 0,
// Version = GreVersion.EnhancedGre,
// };
// IEnumerable<ILayer> grePayloadLayers = random.NextIcmpPayloadLayers(icmpLayer);
// IEnumerable<ILayer> grePayloadLayers = random.NextIcmpPayloadLayers(icmpLayer);
return
PacketBuilder
.
Build
(
packetTimestamp
,
new
ILayer
[]
{
ethernetLayer
,
ipV4Layer
,
greLayer
});
return
PacketBuilder
.
Build
(
packetTimestamp
,
new
ILayer
[]
{
ethernetLayer
,
ipV4Layer
,
greLayer
});
...
@@ -173,7 +181,7 @@ namespace PcapDotNet.Core.Test
...
@@ -173,7 +181,7 @@ namespace PcapDotNet.Core.Test
private
static
void
ComparePacketsToWireshark
(
IEnumerable
<
Packet
>
packets
)
private
static
void
ComparePacketsToWireshark
(
IEnumerable
<
Packet
>
packets
)
{
{
string
pcapFilename
=
Path
.
GetTempPath
()
+
"temp.pcap"
;
string
pcapFilename
=
Path
.
GetTempPath
()
+
"temp.
"
+
new
Random
().
NextUShort
()
+
".
pcap"
;
PacketDumpFile
.
Dump
(
pcapFilename
,
new
PcapDataLink
(
DataLinkKind
.
Ethernet
),
PacketDevice
.
DefaultSnapshotLength
,
packets
);
PacketDumpFile
.
Dump
(
pcapFilename
,
new
PcapDataLink
(
DataLinkKind
.
Ethernet
),
PacketDevice
.
DefaultSnapshotLength
,
packets
);
// List<Packet> packetsList = new List<Packet>();
// List<Packet> packetsList = new List<Packet>();
// new OfflinePacketDevice(pcapFilename).Open().ReceivePackets(1000, packetsList.Add);
// new OfflinePacketDevice(pcapFilename).Open().ReceivePackets(1000, packetsList.Add);
...
@@ -851,31 +859,52 @@ namespace PcapDotNet.Core.Test
...
@@ -851,31 +859,52 @@ namespace PcapDotNet.Core.Test
if
(
field
.
Show
().
StartsWith
(
"Flags and version: "
))
if
(
field
.
Show
().
StartsWith
(
"Flags and version: "
))
{
{
XElement
[]
innerFields
=
field
.
Fields
().
ToArray
();
XElement
[]
innerFields
=
field
.
Fields
().
ToArray
();
Assert
.
AreEqual
(
8
,
innerFields
.
Length
);
bool
isEnhanced
=
greDatagram
.
ProtocolType
==
EthernetType
.
PointToPointProtocol
;
Assert
.
AreEqual
(
isEnhanced
?
9
:
8
,
innerFields
.
Length
,
"innerFields.Length"
);
foreach
(
var
innerField
in
innerFields
)
foreach
(
var
innerField
in
innerFields
)
{
{
innerField
.
AssertName
(
""
);
innerField
.
AssertName
(
""
);
}
}
innerFields
[
0
].
AssertShow
(
string
.
Format
(
"{0}... .... .... .... = {1}"
,
greDatagram
.
ChecksumPresent
.
ToInt
(),
int
currentInnerFieldIndex
=
0
;
innerFields
[
currentInnerFieldIndex
++].
AssertShow
(
string
.
Format
(
"{0}... .... .... .... = {1}"
,
greDatagram
.
ChecksumPresent
.
ToInt
(),
(
greDatagram
.
ChecksumPresent
?
"Checksum"
:
"No checksum"
)));
(
greDatagram
.
ChecksumPresent
?
"Checksum"
:
"No checksum"
)));
innerFields
[
1
].
AssertShow
(
string
.
Format
(
".{0}.. .... .... .... = {1}"
,
greDatagram
.
RoutingPresent
.
ToInt
(),
innerFields
[
currentInnerFieldIndex
++
].
AssertShow
(
string
.
Format
(
".{0}.. .... .... .... = {1}"
,
greDatagram
.
RoutingPresent
.
ToInt
(),
(
greDatagram
.
RoutingPresent
?
"Routing"
:
"No routing"
)));
(
greDatagram
.
RoutingPresent
?
"Routing"
:
"No routing"
)));
innerFields
[
2
].
AssertShow
(
string
.
Format
(
"..{0}. .... .... .... = {1}"
,
greDatagram
.
KeyPresent
.
ToInt
(),
innerFields
[
currentInnerFieldIndex
++
].
AssertShow
(
string
.
Format
(
"..{0}. .... .... .... = {1}"
,
greDatagram
.
KeyPresent
.
ToInt
(),
(
greDatagram
.
KeyPresent
?
"Key"
:
"No key"
)));
(
greDatagram
.
KeyPresent
?
"Key"
:
"No key"
)));
innerFields
[
3
].
AssertShow
(
string
.
Format
(
"...{0} .... .... .... = {1}"
,
greDatagram
.
SequenceNumberPresent
.
ToInt
(),
innerFields
[
currentInnerFieldIndex
++
].
AssertShow
(
string
.
Format
(
"...{0} .... .... .... = {1}"
,
greDatagram
.
SequenceNumberPresent
.
ToInt
(),
(
greDatagram
.
SequenceNumberPresent
?
"Sequence number"
:
"No sequence number"
)));
(
greDatagram
.
SequenceNumberPresent
?
"Sequence number"
:
"No sequence number"
)));
innerFields
[
4
].
AssertShow
(
string
.
Format
(
".... {0}... .... .... = {1}"
,
greDatagram
.
StrictSourceRoute
.
ToInt
(),
innerFields
[
currentInnerFieldIndex
++
].
AssertShow
(
string
.
Format
(
".... {0}... .... .... = {1}"
,
greDatagram
.
StrictSourceRoute
.
ToInt
(),
(
greDatagram
.
StrictSourceRoute
?
"Strict source route"
:
"No strict source route"
)));
(
greDatagram
.
StrictSourceRoute
?
"Strict source route"
:
"No strict source route"
)));
innerFields
[
5
].
AssertShow
(
string
.
Format
(
".... .{0} .... .... = Recursion control: {1}"
,
innerFields
[
currentInnerFieldIndex
++
].
AssertShow
(
string
.
Format
(
".... .{0} .... .... = Recursion control: {1}"
,
greDatagram
.
RecursionControl
.
ToBits
().
Skip
(
5
).
Select
(
b
=>
b
.
ToInt
()).
greDatagram
.
RecursionControl
.
ToBits
().
Skip
(
5
).
Select
(
b
=>
b
.
ToInt
()).
SequenceToString
(),
SequenceToString
(),
greDatagram
.
RecursionControl
));
greDatagram
.
RecursionControl
));
innerFields
[
6
].
AssertShow
(
string
.
Format
(
".... .... {0}... = Flags: {1}"
,
if
(
isEnhanced
)
greDatagram
.
Flags
.
ToBits
().
Skip
(
3
).
Select
(
b
=>
b
.
ToInt
()).
SequenceToString
().
{
Insert
(
4
,
" "
),
innerFields
[
currentInnerFieldIndex
++].
AssertShow
(
string
.
Format
(
".... .... {0}... .... = {1}"
,
greDatagram
.
Flags
));
greDatagram
.
AcknowledgmentSequenceNumberPresent
.
ToInt
(),
innerFields
[
7
].
AssertShow
(
string
.
Format
(
".... .... .... .{0} = Version: {1}"
,
(
greDatagram
.
AcknowledgmentSequenceNumberPresent
?
"Acknowledgment number"
:
"No acknowledgment number"
)));
innerFields
[
currentInnerFieldIndex
++].
AssertShow
(
string
.
Format
(
".... .... .{0}... = Flags: {1}"
,
greDatagram
.
Flags
.
ToBits
().
Skip
(
3
).
Take
(
4
).
Select
(
b
=>
b
.
ToInt
()).
SequenceToString
().
Insert
(
3
,
" "
),
greDatagram
.
Flags
));
}
else
{
byte
fullFlags
=
(
byte
)(
greDatagram
.
Flags
|
(
greDatagram
.
AcknowledgmentSequenceNumberPresent
?
0x10
:
0x00
));
innerFields
[
currentInnerFieldIndex
++].
AssertShow
(
string
.
Format
(
".... .... {0}... = Flags: {1}"
,
fullFlags
.
ToBits
().
Skip
(
3
).
Select
(
b
=>
b
.
ToInt
()).
SequenceToString
().
Insert
(
4
,
" "
),
fullFlags
));
}
innerFields
[
currentInnerFieldIndex
++].
AssertShow
(
string
.
Format
(
".... .... .... .{0} = Version: {1}"
,
((
byte
)
greDatagram
.
Version
).
ToBits
().
Skip
(
5
).
Select
(
b
=>
b
.
ToInt
()).
((
byte
)
greDatagram
.
Version
).
ToBits
().
Skip
(
5
).
Select
(
b
=>
b
.
ToInt
()).
SequenceToString
(),
SequenceToString
(),
(
byte
)
greDatagram
.
Version
));
(
byte
)
greDatagram
.
Version
));
...
@@ -888,10 +917,22 @@ namespace PcapDotNet.Core.Test
...
@@ -888,10 +917,22 @@ namespace PcapDotNet.Core.Test
{
{
field
.
AssertValue
(
greDatagram
.
RoutingOffset
);
field
.
AssertValue
(
greDatagram
.
RoutingOffset
);
}
}
else
if
(
field
.
Show
().
StartsWith
(
"Payload length: "
))
{
field
.
AssertValue
(
greDatagram
.
KeyPayloadLength
);
}
else
if
(
field
.
Show
().
StartsWith
(
"Call ID: "
))
{
field
.
AssertValue
(
greDatagram
.
KeyCallId
);
}
else
if
(
field
.
Show
().
StartsWith
(
"Sequence number: "
))
else
if
(
field
.
Show
().
StartsWith
(
"Sequence number: "
))
{
{
field
.
AssertValue
(
greDatagram
.
SequenceNumber
);
field
.
AssertValue
(
greDatagram
.
SequenceNumber
);
}
}
else
if
(
field
.
Show
().
StartsWith
(
"Acknowledgement number: "
))
{
field
.
AssertValue
(
greDatagram
.
AcknowledgmentSequenceNumber
);
}
else
if
(
field
.
Show
().
StartsWith
(
"Address family: "
))
else
if
(
field
.
Show
().
StartsWith
(
"Address family: "
))
{
{
++
currentEntry
;
++
currentEntry
;
...
...
PcapDotNet/src/PcapDotNet.Packets.TestUtils/RandomPacketsExtensions.cs
View file @
cdb913a5
...
@@ -583,72 +583,85 @@ namespace PcapDotNet.Packets.TestUtils
...
@@ -583,72 +583,85 @@ namespace PcapDotNet.Packets.TestUtils
// GRE
// GRE
public
static
GreLayer
NextGreLayer
(
this
Random
random
)
public
static
GreLayer
NextGreLayer
(
this
Random
random
)
{
{
GreVersion
version
=
random
.
NextEnum
<
GreVersion
>();
bool
isChecksum
=
random
.
NextBool
();
bool
isChecksum
=
random
.
NextBool
();
bool
isRouting
=
random
.
NextBool
();
GreSourceRouteEntry
[]
routing
=
null
;
GreSourceRouteEntry
[]
routing
=
null
;
ushort
?
routingOffset
=
null
;
ushort
?
routingOffset
=
null
;
bool
strictSourceRoute
=
false
;
bool
strictSourceRoute
=
false
;
if
(
isRouting
)
EthernetType
protocolType
=
random
.
NextEnum
(
EthernetType
.
None
);
uint
?
key
=
random
.
NextBool
()
?
(
uint
?)
random
.
NextUInt
()
:
null
;
if
(
version
==
GreVersion
.
Gre
)
{
{
strictSourceRoute
=
random
.
NextBool
();
routing
=
new
GreSourceRouteEntry
[
random
.
Next
(
5
)];
GreSourceRouteEntryAddressFamily
family
;
if
(
random
.
NextBool
())
if
(
random
.
NextBool
())
family
=
random
.
NextEnum
(
GreSourceRouteEntryAddressFamily
.
None
);
else
family
=
(
GreSourceRouteEntryAddressFamily
)
random
.
NextUShort
();
for
(
int
i
=
0
;
i
!=
routing
.
Length
;
++
i
)
{
{
switch
(
family
)
strictSourceRoute
=
random
.
NextBool
();
routing
=
new
GreSourceRouteEntry
[
random
.
Next
(
5
)];
GreSourceRouteEntryAddressFamily
family
;
if
(
random
.
NextBool
())
family
=
random
.
NextEnum
(
GreSourceRouteEntryAddressFamily
.
None
);
else
family
=
(
GreSourceRouteEntryAddressFamily
)
random
.
NextUShort
();
for
(
int
i
=
0
;
i
!=
routing
.
Length
;
++
i
)
{
{
case
GreSourceRouteEntryAddressFamily
.
AsSourceRoute
:
switch
(
family
)
{
{
ushort
[]
asNumbers
=
new
ushort
[
random
.
Next
(
1
,
5
)];
case
GreSourceRouteEntryAddressFamily
.
AsSourceRoute
:
for
(
int
j
=
0
;
j
!=
asNumbers
.
Length
;
++
j
)
{
asNumbers
[
j
]
=
random
.
NextUShort
();
ushort
[]
asNumbers
=
new
ushort
[
random
.
Next
(
1
,
5
)];
routing
[
i
]
=
new
GreSourceRouteEntryAs
(
asNumbers
.
AsReadOnly
(),
random
.
Next
(
asNumbers
.
Length
+
1
));
for
(
int
j
=
0
;
j
!=
asNumbers
.
Length
;
++
j
)
break
;
asNumbers
[
j
]
=
random
.
NextUShort
();
}
routing
[
i
]
=
new
GreSourceRouteEntryAs
(
asNumbers
.
AsReadOnly
(),
random
.
Next
(
asNumbers
.
Length
+
1
));
break
;
}
case
GreSourceRouteEntryAddressFamily
.
IpSourceRoute
:
case
GreSourceRouteEntryAddressFamily
.
IpSourceRoute
:
{
{
IpV4Address
[]
ips
=
new
IpV4Address
[
random
.
Next
(
1
,
5
)];
IpV4Address
[]
ips
=
new
IpV4Address
[
random
.
Next
(
1
,
5
)];
for
(
int
j
=
0
;
j
!=
ips
.
Length
;
++
j
)
for
(
int
j
=
0
;
j
!=
ips
.
Length
;
++
j
)
ips
[
j
]
=
random
.
NextIpV4Address
();
ips
[
j
]
=
random
.
NextIpV4Address
();
routing
[
i
]
=
new
GreSourceRouteEntryIp
(
ips
.
AsReadOnly
(),
random
.
Next
(
ips
.
Length
+
1
));
routing
[
i
]
=
new
GreSourceRouteEntryIp
(
ips
.
AsReadOnly
(),
random
.
Next
(
ips
.
Length
+
1
));
break
;
break
;
}
}
default
:
default
:
{
{
int
dataLength
=
random
.
Next
(
1
,
100
);
int
dataLength
=
random
.
Next
(
1
,
100
);
routing
[
i
]
=
new
GreSourceRouteEntryUnknown
(
family
,
random
.
NextDatagram
(
dataLength
),
random
.
Next
(
dataLength
+
1
));
routing
[
i
]
=
new
GreSourceRouteEntryUnknown
(
family
,
random
.
NextDatagram
(
dataLength
),
random
.
Next
(
dataLength
+
1
));
break
;
break
;
}
}
}
}
}
routingOffset
=
0
;
if
(!
routing
.
IsEmpty
())
{
int
routingIndex
=
random
.
Next
(
routing
.
Length
);
for
(
int
i
=
0
;
i
!=
routingIndex
;
++
i
)
routingOffset
+=
(
ushort
)
routing
[
i
].
Length
;
}
}
}
routingOffset
=
0
;
}
if
(!
routing
.
IsEmpty
())
else
{
{
int
routingIndex
=
random
.
Next
(
routing
.
Length
);
protocolType
=
EthernetType
.
PointToPointProtocol
;
for
(
int
i
=
0
;
i
!=
routingIndex
;
++
i
)
isChecksum
=
false
;
routingOffset
+=
(
ushort
)
routing
[
i
].
Length
;
key
=
random
.
NextUInt
();
}
}
}
return
new
GreLayer
return
new
GreLayer
{
{
Version
=
random
.
NextEnum
<
GreVersion
>()
,
Version
=
version
,
ProtocolType
=
random
.
NextEnum
(
EthernetType
.
None
)
,
ProtocolType
=
protocolType
,
ChecksumPresent
=
isChecksum
,
ChecksumPresent
=
isChecksum
,
Checksum
=
isChecksum
&&
random
.
NextBool
()
?
(
ushort
?)
random
.
NextUShort
()
:
null
,
Checksum
=
isChecksum
&&
random
.
NextBool
()
?
(
ushort
?)
random
.
NextUShort
()
:
null
,
Key
=
random
.
NextBool
()
?
(
uint
?)
random
.
NextUInt
()
:
null
,
Key
=
key
,
SequenceNumber
=
random
.
NextBool
()
?
(
uint
?)
random
.
NextUInt
()
:
null
,
SequenceNumber
=
random
.
NextBool
()
?
(
uint
?)
random
.
NextUInt
()
:
null
,
AcknowledgmentSequenceNumber
=
version
==
GreVersion
.
EnhancedGre
&&
random
.
NextBool
()
?
(
uint
?)
random
.
NextUInt
()
:
null
,
RecursionControl
=
random
.
NextByte
(
8
),
RecursionControl
=
random
.
NextByte
(
8
),
Flags
=
random
.
NextByte
(
32
),
//
Flags = random.NextByte(32),
Routing
=
routing
==
null
?
null
:
routing
.
AsReadOnly
(),
Routing
=
routing
==
null
?
null
:
routing
.
AsReadOnly
(),
RoutingOffset
=
routingOffset
,
RoutingOffset
=
routingOffset
,
StrictSourceRoute
=
strictSourceRoute
,
StrictSourceRoute
=
strictSourceRoute
,
...
...
PcapDotNet/src/PcapDotNet.Packets/Ethernet/EthernetType.cs
View file @
cdb913a5
...
@@ -51,6 +51,10 @@ namespace PcapDotNet.Packets.Ethernet
...
@@ -51,6 +51,10 @@ namespace PcapDotNet.Packets.Ethernet
/// </summary>
/// </summary>
MacControl
=
0x8808
,
MacControl
=
0x8808
,
/// <summary>
/// <summary>
/// PPP, Point-to-Point Protocol
/// </summary>
PointToPointProtocol
=
0x880B
,
/// <summary>
/// CobraNet
/// CobraNet
/// </summary>
/// </summary>
CobraNet
=
0x8819
,
CobraNet
=
0x8819
,
...
...
PcapDotNet/src/PcapDotNet.Packets/Gre/GreDatagram.cs
View file @
cdb913a5
This diff is collapsed.
Click to expand it.
PcapDotNet/src/PcapDotNet.Packets/Gre/GreLayer.cs
View file @
cdb913a5
...
@@ -16,6 +16,7 @@ namespace PcapDotNet.Packets.Gre
...
@@ -16,6 +16,7 @@ namespace PcapDotNet.Packets.Gre
public
ushort
?
Checksum
{
get
;
set
;
}
public
ushort
?
Checksum
{
get
;
set
;
}
public
uint
?
Key
{
get
;
set
;
}
public
uint
?
Key
{
get
;
set
;
}
public
uint
?
SequenceNumber
{
get
;
set
;
}
public
uint
?
SequenceNumber
{
get
;
set
;
}
public
uint
?
AcknowledgmentSequenceNumber
{
get
;
set
;
}
public
ushort
?
RoutingOffset
{
get
;
set
;
}
public
ushort
?
RoutingOffset
{
get
;
set
;
}
public
ReadOnlyCollection
<
GreSourceRouteEntry
>
Routing
{
get
;
set
;
}
public
ReadOnlyCollection
<
GreSourceRouteEntry
>
Routing
{
get
;
set
;
}
public
bool
StrictSourceRoute
{
get
;
set
;
}
public
bool
StrictSourceRoute
{
get
;
set
;
}
...
@@ -24,13 +25,13 @@ namespace PcapDotNet.Packets.Gre
...
@@ -24,13 +25,13 @@ namespace PcapDotNet.Packets.Gre
{
{
get
get
{
{
return
GreDatagram
.
GetHeaderLength
(
ChecksumPresent
,
Key
!=
null
,
SequenceNumber
!=
null
,
Routing
);
return
GreDatagram
.
GetHeaderLength
(
ChecksumPresent
,
Key
!=
null
,
SequenceNumber
!=
null
,
AcknowledgmentSequenceNumber
!=
null
,
Routing
);
}
}
}
}
public
override
void
Write
(
byte
[]
buffer
,
int
offset
,
int
payloadLength
,
ILayer
previousLayer
,
ILayer
nextLayer
)
public
override
void
Write
(
byte
[]
buffer
,
int
offset
,
int
payloadLength
,
ILayer
previousLayer
,
ILayer
nextLayer
)
{
{
GreDatagram
.
WriteHeader
(
buffer
,
offset
,
RecursionControl
,
Flags
,
Version
,
ProtocolType
,
ChecksumPresent
,
Key
,
SequenceNumber
,
Routing
,
RoutingOffset
,
StrictSourceRoute
);
GreDatagram
.
WriteHeader
(
buffer
,
offset
,
RecursionControl
,
Flags
,
Version
,
ProtocolType
,
ChecksumPresent
,
Key
,
SequenceNumber
,
AcknowledgmentSequenceNumber
,
Routing
,
RoutingOffset
,
StrictSourceRoute
);
}
}
public
override
void
Finalize
(
byte
[]
buffer
,
int
offset
,
int
payloadLength
,
ILayer
nextLayer
)
public
override
void
Finalize
(
byte
[]
buffer
,
int
offset
,
int
payloadLength
,
ILayer
nextLayer
)
...
@@ -50,6 +51,7 @@ namespace PcapDotNet.Packets.Gre
...
@@ -50,6 +51,7 @@ namespace PcapDotNet.Packets.Gre
(
Checksum
==
null
?
other
.
Checksum
==
null
:
Checksum
.
Equals
(
other
.
Checksum
))
&&
(
Checksum
==
null
?
other
.
Checksum
==
null
:
Checksum
.
Equals
(
other
.
Checksum
))
&&
(
Key
==
null
?
other
.
Key
==
null
:
Key
.
Equals
(
other
.
Key
))
&&
(
Key
==
null
?
other
.
Key
==
null
:
Key
.
Equals
(
other
.
Key
))
&&
(
SequenceNumber
==
null
?
other
.
SequenceNumber
==
null
:
SequenceNumber
.
Equals
(
other
.
SequenceNumber
))
&&
(
SequenceNumber
==
null
?
other
.
SequenceNumber
==
null
:
SequenceNumber
.
Equals
(
other
.
SequenceNumber
))
&&
(
AcknowledgmentSequenceNumber
==
null
?
other
.
AcknowledgmentSequenceNumber
==
null
:
AcknowledgmentSequenceNumber
.
Equals
(
other
.
AcknowledgmentSequenceNumber
))
&&
(
RoutingOffset
==
null
?
other
.
RoutingOffset
==
null
:
RoutingOffset
.
Equals
(
other
.
RoutingOffset
))
&&
(
RoutingOffset
==
null
?
other
.
RoutingOffset
==
null
:
RoutingOffset
.
Equals
(
other
.
RoutingOffset
))
&&
(
Routing
==
null
?
other
.
Routing
==
null
:
Routing
.
SequenceEqual
(
other
.
Routing
))
&&
(
Routing
==
null
?
other
.
Routing
==
null
:
Routing
.
SequenceEqual
(
other
.
Routing
))
&&
StrictSourceRoute
.
Equals
(
other
.
StrictSourceRoute
);
StrictSourceRoute
.
Equals
(
other
.
StrictSourceRoute
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment