Skip to content

Commit ed2102c

Browse files
committed
Add DCBX
1 parent 9f1d0b8 commit ed2102c

File tree

1 file changed

+218
-0
lines changed

1 file changed

+218
-0
lines changed

PSDiscoveryProtocol/PSDiscoveryProtocol.psm1

Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -892,6 +892,224 @@ function ConvertFrom-LLDPPacket {
892892
$Hash.Add('VLAN', [BitConverter]::ToUInt16($Packet[($Offset + 5)..($Offset + 4)], 0))
893893
}
894894

895+
if ($OUI -eq '00-80-C2' -and $Subtype -eq 9) {
896+
$ETSMask = [uint16]0x000F
897+
$Pri0To3 = [BitConverter]::ToUInt16($Packet[($Offset + 6)..($Offset + 5)], 0)
898+
$Pri4To7 = [BitConverter]::ToUInt16($Packet[($Offset + 8)..($Offset + 7)], 0)
899+
900+
$ETS = [PSCustomObject]@{
901+
Willing = ($Packet[($Offset + 4)] -band (1 -shl 7)) -ne 0
902+
PriorityAssignmentTable = @(
903+
[PSCustomObject]@{
904+
Priority = 0
905+
TrafficClass = ($Pri0To3 -shr 12) -band $ETSMask
906+
}
907+
[PSCustomObject]@{
908+
Priority = 1
909+
TrafficClass = ($Pri0To3 -shr 8) -band $ETSMask
910+
}
911+
[PSCustomObject]@{
912+
Priority = 2
913+
TrafficClass = ($Pri0To3 -shr 4) -band $ETSMask
914+
}
915+
[PSCustomObject]@{
916+
Priority = 3
917+
TrafficClass = $Pri0To3 -band $ETSMask
918+
}
919+
[PSCustomObject]@{
920+
Priority = 4
921+
TrafficClass = ($Pri4To7 -shr 12) -band $ETSMask
922+
}
923+
[PSCustomObject]@{
924+
Priority = 5
925+
TrafficClass = ($Pri4To7 -shr 8) -band $ETSMask
926+
}
927+
[PSCustomObject]@{
928+
Priority = 6
929+
TrafficClass = ($Pri4To7 -shr 4) -band $ETSMask
930+
}
931+
[PSCustomObject]@{
932+
Priority = 7
933+
TrafficClass = $Pri4To7 -band $ETSMask
934+
}
935+
)
936+
BandwidthAssignmentTable = @(
937+
[PSCustomObject]@{
938+
Priority = 0
939+
Bandwidth = $Packet[($Offset + 9)]
940+
}
941+
[PSCustomObject]@{
942+
Priority = 1
943+
Bandwidth = $Packet[($Offset + 10)]
944+
}
945+
[PSCustomObject]@{
946+
Priority = 2
947+
Bandwidth = $Packet[($Offset + 11)]
948+
}
949+
[PSCustomObject]@{
950+
Priority = 3
951+
Bandwidth = $Packet[($Offset + 12)]
952+
}
953+
[PSCustomObject]@{
954+
Priority = 4
955+
Bandwidth = $Packet[($Offset + 13)]
956+
}
957+
[PSCustomObject]@{
958+
Priority = 5
959+
Bandwidth = $Packet[($Offset + 14)]
960+
}
961+
[PSCustomObject]@{
962+
Priority = 6
963+
Bandwidth = $Packet[($Offset + 15)]
964+
}
965+
[PSCustomObject]@{
966+
Priority = 7
967+
Bandwidth = $Packet[($Offset + 16)]
968+
}
969+
)
970+
}
971+
972+
if (-not ($Hash.ContainsKey('DCBX'))) {
973+
$Hash.Add('DCBX', [PSCustomObject]@{IEEE = [PSCustomObject]@{}})
974+
}
975+
976+
$Hash.DCBX.IEEE | Add-Member -NotePropertyName ETS -NotePropertyValue $ETS
977+
}
978+
979+
if ($OUI -eq '00-80-C2' -and $Subtype -eq 11) {
980+
$PFC = [PSCustomObject]@{
981+
Willing = ($Packet[($Offset + 4)] -band (1 -shl 7)) -ne 0
982+
FlowControl = 0..7 | ForEach-Object {
983+
[PSCustomObject]@{
984+
Priority = $_
985+
Enabled = ($Packet[($Offset + 5)] -band (1 -shl $_)) -ne 0
986+
}
987+
}
988+
}
989+
990+
if (-not ($Hash.ContainsKey('DCBX'))) {
991+
$Hash.Add('DCBX', [PSCustomObject]@{IEEE = [PSCustomObject]@{}})
992+
}
993+
994+
$Hash.DCBX.IEEE | Add-Member -NotePropertyName PFC -NotePropertyValue $PFC
995+
}
996+
997+
if ($OUI -eq '00-1B-21' -and $Subtype -eq 2) {
998+
if (-not ($Hash.ContainsKey('DCBX'))) {
999+
$Hash.Add('DCBX', [PSCustomObject]@{CEE = [PSCustomObject]@{}})
1000+
}
1001+
1002+
$DCBXTLVBuffer = $Packet[($Offset + 4)..($Offset + $Length - 1)]
1003+
$DCBXTLVOffset = 0
1004+
1005+
while ($DCBXTLVOffset -lt $DCBXTLVBuffer.Length) {
1006+
$DCBXTLVType = $DCBXTLVBuffer[($DCBXTLVOffset)] -shr 1
1007+
$DCBXTLVLength = [BitConverter]::ToUInt16($DCBXTLVBuffer[($DCBXTLVOffset + 1)..$DCBXTLVOffset], 0) -band $Mask
1008+
$DCBXTLVOffset += 2
1009+
1010+
Write-Verbose "DCBXTLVType : $DCBXTLVType"
1011+
Write-Verbose "DCBXTLVLength : $DCBXTLVLength"
1012+
1013+
if ($DCBXTLVType -eq 2) {
1014+
$ETSMask = [uint16]0x000F
1015+
$Pri0To3 = [BitConverter]::ToUInt16($DCBXTLVBuffer[($DCBXTLVOffset + 5)..($DCBXTLVOffset + 4)], 0)
1016+
$Pri4To7 = [BitConverter]::ToUInt16($DCBXTLVBuffer[($DCBXTLVOffset + 7)..($DCBXTLVOffset + 6)], 0)
1017+
1018+
$ETS = [PSCustomObject]@{
1019+
Enabled = ($DCBXTLVBuffer[($DCBXTLVOffset + 2)] -band (1 -shl 7)) -ne 0
1020+
Willing = ($DCBXTLVBuffer[($DCBXTLVOffset + 2)] -band (1 -shl 6)) -ne 0
1021+
PriorityAssignmentTable = @(
1022+
[PSCustomObject]@{
1023+
Priority = 0
1024+
TrafficClass = ($Pri0To3 -shr 12) -band $ETSMask
1025+
}
1026+
[PSCustomObject]@{
1027+
Priority = 1
1028+
TrafficClass = ($Pri0To3 -shr 8) -band $ETSMask
1029+
}
1030+
[PSCustomObject]@{
1031+
Priority = 2
1032+
TrafficClass = ($Pri0To3 -shr 4) -band $ETSMask
1033+
}
1034+
[PSCustomObject]@{
1035+
Priority = 3
1036+
TrafficClass = $Pri0To3 -band $ETSMask
1037+
}
1038+
[PSCustomObject]@{
1039+
Priority = 4
1040+
TrafficClass = ($Pri4To7 -shr 12) -band $ETSMask
1041+
}
1042+
[PSCustomObject]@{
1043+
Priority = 5
1044+
TrafficClass = ($Pri4To7 -shr 8) -band $ETSMask
1045+
}
1046+
[PSCustomObject]@{
1047+
Priority = 6
1048+
TrafficClass = ($Pri4To7 -shr 4) -band $ETSMask
1049+
}
1050+
[PSCustomObject]@{
1051+
Priority = 7
1052+
TrafficClass = $Pri4To7 -band $ETSMask
1053+
}
1054+
)
1055+
BandwidthAssignmentTable = @(
1056+
[PSCustomObject]@{
1057+
Priority = 0
1058+
Bandwidth = $DCBXTLVBuffer[($DCBXTLVOffset + 8)]
1059+
}
1060+
[PSCustomObject]@{
1061+
Priority = 1
1062+
Bandwidth = $DCBXTLVBuffer[($DCBXTLVOffset + 9)]
1063+
}
1064+
[PSCustomObject]@{
1065+
Priority = 2
1066+
Bandwidth = $DCBXTLVBuffer[($DCBXTLVOffset + 10)]
1067+
}
1068+
[PSCustomObject]@{
1069+
Priority = 3
1070+
Bandwidth = $DCBXTLVBuffer[($DCBXTLVOffset + 11)]
1071+
}
1072+
[PSCustomObject]@{
1073+
Priority = 4
1074+
Bandwidth = $DCBXTLVBuffer[($DCBXTLVOffset + 12)]
1075+
}
1076+
[PSCustomObject]@{
1077+
Priority = 5
1078+
Bandwidth = $DCBXTLVBuffer[($DCBXTLVOffset + 13)]
1079+
}
1080+
[PSCustomObject]@{
1081+
Priority = 6
1082+
Bandwidth = $DCBXTLVBuffer[($DCBXTLVOffset + 14)]
1083+
}
1084+
[PSCustomObject]@{
1085+
Priority = 7
1086+
Bandwidth = $DCBXTLVBuffer[($DCBXTLVOffset + 15)]
1087+
}
1088+
)
1089+
}
1090+
1091+
$Hash.DCBX.CEE | Add-Member -NotePropertyName ETS -NotePropertyValue $ETS
1092+
}
1093+
1094+
if ($DCBXTLVType -eq 3) {
1095+
$PFC = [PSCustomObject]@{
1096+
Enabled = ($DCBXTLVBuffer[($DCBXTLVOffset + 2)] -band (1 -shl 7)) -ne 0
1097+
Willing = ($DCBXTLVBuffer[($DCBXTLVOffset + 2)] -band (1 -shl 6)) -ne 0
1098+
FlowControl = 0..7 | ForEach-Object {
1099+
[PSCustomObject]@{
1100+
Priority = $_
1101+
Enabled = ($DCBXTLVBuffer[($DCBXTLVOffset + 4)] -band (1 -shl $_)) -ne 0
1102+
}
1103+
}
1104+
}
1105+
1106+
$Hash.DCBX.CEE | Add-Member -NotePropertyName PFC -NotePropertyValue $PFC
1107+
}
1108+
1109+
$DCBXTLVOffset += $DCBXTLVLength
1110+
}
1111+
}
1112+
8951113
$Bytes = $Packet[($Offset + 4)..($Offset + $Length - 1)]
8961114
$Hex = [System.BitConverter]::ToString($Bytes)
8971115
$Ascii = [System.Text.Encoding]::ASCII.GetString($Bytes)

0 commit comments

Comments
 (0)