TCP_ESTATS_PATH_ROD_v0
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| FastRetran | DWORD | 4 | +0 | +0 | Fast Retransmit アルゴリズムが呼び出された回数です。 |
| Timeouts | DWORD | 4 | +4 | +4 | 再送タイマーのバックオフ乗数が 1 の状態で、再送タイムアウトが満了した回数です。 |
| SubsequentTimeouts | DWORD | 4 | +8 | +8 | 再送タイマーが 2 倍に延長された後に、再送タイムアウトが満了した回数です。 詳細については、後述の「解説」で触れている RFC 2988 のセクション 5.5 を参照してください。 |
| CurTimeoutCount | DWORD | 4 | +12 | +12 | 新しいデータに対する確認応答を受信しないまま、再送タイムアウトが満了した現在の回数です。 CurTimeoutCount メンバーは、新しいデータが確認応答されると 0 にリセットされ、RFC 2988 のセクション 5.5 が呼び出されるたびに増加します。 |
| AbruptTimeouts | DWORD | 4 | +16 | +16 | 直前に重複確認応答やその他の輻輳の兆候がまったくない状態で発生したタイムアウトの回数です。突発的なタイムアウトは、そのパスでデータまたは確認応答のウィンドウ全体が失われたことを示します。 重複確認応答やその他の輻輳信号 (Explicit Congestion Notification など) が先行したタイムアウトは、突発的なものとしては数えられません。これらは、より高度な Fast Retransmit アルゴリズムであれば回避できた可能性があります。 |
| PktsRetrans | DWORD | 4 | +20 | +20 | 再送データを一部でも含んで送信されたセグメントの数です。 |
| BytesRetrans | DWORD | 4 | +24 | +24 | 再送されたバイト数です。 |
| DupAcksIn | DWORD | 4 | +28 | +28 | 受信した重複 ACK の数です。 |
| SacksRcvd | DWORD | 4 | +32 | +32 | 受信した選択的確認応答 (SACK) オプションの数です。 |
| SackBlocksRcvd | DWORD | 4 | +36 | +36 | (SACK オプション内で) 受信した SACK ブロックの数です。 |
| CongSignals | DWORD | 4 | +40 | +40 | Fast Retransmit、Explicit Congestion Notification (ECN)、タイムアウトなど、あらゆる形式の輻輳信号に起因する、輻輳ウィンドウの乗算的な縮小の回数です。このメンバーは、Additive Increase Multiplicative Decrease (AIMD) 輻輳制御の乗算的減少 (MD) の部分を呼び出すすべてのイベントを集計したものであり、輻輳によって輻輳ウィンドウがどのような影響を受けているかを示す最良の指標です。 再送タイムアウトは、スロースタートのしきい値サイズを設定することで暗黙的にウィンドウを乗算的に縮小しますが、これも CongSignals メンバーに格納される値に含まれます。順序が乱れたセグメントによる誤った輻輳の通知を最小限に抑えるため、CongSignals メンバーは Fast Retransmit アルゴリズムに連動して増加します。 |
| PreCongSumCwnd | DWORD | 4 | +44 | +44 | 輻輳信号を受信するたびに取得した輻輳ウィンドウの値 (バイト単位) の合計です。 このメンバーは CongSignals メンバーが増加するたびに更新されます。したがって、PreCongSumCwnd メンバーの変化量を CongSignals メンバーの変化量で割った値は、輻輳信号の直前における (一定区間の) 平均ウィンドウを表します。 |
| PreCongSumRtt | DWORD | 4 | +48 | +48 | 輻輳信号を受信する直前における、ネットワークのラウンドトリップ時間 (RTT) の最後のサンプルの合計 (ミリ秒単位) です。RTT の最後のサンプルは SampleRtt メンバーに格納されます。 PreCongSumRtt メンバーは CongSignals メンバーが増加するたびに更新されます。したがって、PreCongSumRtt の変化量を CongSignals メンバーの変化量で割った値は、輻輳信号の直前における (一定区間の) 平均 RTT を表します。 |
| PostCongSumRtt | DWORD | 4 | +52 | +52 | 各輻輳信号の後に取得された、ネットワーク RTT の最初のサンプル (SampleRtt メンバーに格納されます) の合計 (ミリ秒単位) です。 PostCongSumRtt メンバーの変化量を PostCongCountRtt メンバーの変化量で割った値は、輻輳信号の直後における (一定区間の) 平均 RTT を表します。 |
| PostCongCountRtt | DWORD | 4 | +56 | +56 | PostCongSumRtt メンバーに含まれる RTT サンプルの数 (バイト単位) です。 PostCongSumRtt メンバーの変化量を PostCongCountRtt メンバーの変化量で割った値は、輻輳信号の直後における (一定区間の) 平均 RTT を表します。 |
| EcnSignals | DWORD | 4 | +60 | +60 | ECN によって TCP 送信側に伝えられた輻輳信号の数です。 これは通常、Echo Congestion Experienced (ECE) ビットを持つセグメントの数ですが、ECN ノンスのチェックに失敗したセグメントやその他の明示的な輻輳信号も含まれます。 |
| EceRcvd | DWORD | 4 | +64 | +64 | Congestion Experienced (CE) のマークが付いた IP ヘッダーを持つセグメントを受信した数です。 |
| SendStall | DWORD | 4 | +68 | +68 | 輻輳信号として扱われる、インターフェイスのストールや送信側のその他のローカルリソース制限の発生回数です。 |
| QuenchRcvd | DWORD | 4 | +72 | +72 | 将来の使用のために予約済みです。このメンバーは常に 0 に設定されます。 |
| RetranThresh | DWORD | 4 | +76 | +76 | Fast Retransmit をトリガーするために必要な重複確認応答の数です。 この値は従来の Reno TCP 実装では定数ですが、新しい多くの TCP 実装では適応的である点に注意してください。 |
| SndDupAckEpisodes | DWORD | 4 | +80 | +80 | 直前の ACK が重複でなかったときに送信された重複 ACK の数です。これは、連続する一連の重複確認応答が送信された回数を表します。 これは、リモートの TCP エンドポイントから手前の TCP エンドポイントへのパス上で失われた、または順序が入れ替わったデータセグメントの数を示します。 |
| SumBytesReordered | DWORD | 4 | +84 | +84 | 再送を伴わずに重複 ACK のエピソードを終了させた確認応答において、SND.UNA が進んだ量の合計です。 SumBytesReordered メンバーの変化量を NonRecovDaEpisodes メンバーの変化量で割った値は、一定区間における平均の並べ替え距離の推定値となる点に注意してください。 |
| NonRecovDa | DWORD | 4 | +88 | +88 | 重複確認応答の数が RetranThresh に達する前に ACK が進んだため、Fast Retransmit をトリガーしなかった重複 ACK (または SACK) の数です。 NonRecovDa メンバーの変化量を NonRecovDaEpisodes メンバーの変化量で割った値は、一定区間におけるセグメント単位の平均の並べ替え距離の推定値となる点に注意してください。 |
| NonRecovDaEpisodes | DWORD | 4 | +92 | +92 | 重複確認応答の数が RetranThresh に達する前に ACK が進んだため、Fast Retransmit をトリガーしなかった重複確認応答エピソードの数です。 |
| AckAfterFr | DWORD | 4 | +96 | +96 | 将来の使用のために予約済みです。このメンバーは常に 0 に設定されます。 |
| DsackDups | DWORD | 4 | +100 | +100 | D-SACK ブロックによってローカルホストに報告された重複セグメントの数です。 |
| SampleRtt | DWORD | 4 | +104 | +104 | 再送タイマー (RTO) の計算に使用される、最新の生のネットワークラウンドトリップ時間の測定値 (ミリ秒単位) です。 |
| SmoothedRtt | DWORD | 4 | +108 | +108 | RTO の計算に使用される、平滑化されたラウンドトリップ時間 (ミリ秒単位) です。 |
| RttVar | DWORD | 4 | +112 | +112 | RTO の計算に使用される、ラウンドトリップ時間の変動 (ミリ秒単位) です。 |
| MaxRtt | DWORD | 4 | +116 | +116 | サンプリングされたラウンドトリップ時間の最大値 (ミリ秒単位) です。 |
| MinRtt | DWORD | 4 | +120 | +120 | サンプリングされたラウンドトリップ時間の最小値 (ミリ秒単位) です。 |
| SumRtt | DWORD | 4 | +124 | +124 | サンプリングされたすべてのラウンドトリップ時間の合計 (ミリ秒単位) です。 SumRtt メンバーの変化量を CountRtt メンバーの変化量で割った値は、区間全体で一様に平均化された平均 RTT となる点に注意してください。 |
| CountRtt | DWORD | 4 | +128 | +128 | SumRtt メンバーに含まれるラウンドトリップ時間サンプルの数です。 |
| CurRto | DWORD | 4 | +132 | +132 | 再送タイマーの現在の値 (ミリ秒単位) です。 |
| MaxRto | DWORD | 4 | +136 | +136 | 再送タイマーの最大値 (ミリ秒単位) です。 |
| MinRto | DWORD | 4 | +140 | +140 | 再送タイマーの最小値 (ミリ秒単位) です。 |
| CurMss | DWORD | 4 | +144 | +144 | 現在の最大セグメントサイズ (MSS)。バイト単位です。 |
| MaxMss | DWORD | 4 | +148 | +148 | MSS の最大値。バイト単位です。 |
| MinMss | DWORD | 4 | +152 | +152 | MSS の最小値。バイト単位です。 |
| SpuriousRtoDetections | DWORD | 4 | +156 | +156 | 再送タイムアウトによって既に再送済みとなっているセグメントを報告する、確認応答の数です。 |
公式ドキュメント
TCP_ESTATS_PATH_ROD_v0 構造体は、TCP 接続のネットワークパス測定に関する拡張 TCP 統計の、読み取り専用の動的情報を格納します。
解説(Remarks)
TCP_ESTATS_PATH_ROD_v0 構造体は、Windows Vista 以降で利用できる TCP 拡張統計機能の一部として使用されます。
TCP_ESTATS_PATH_ROD_v0 は、TCP 接続のネットワークパス測定に関する読み取り専用の動的情報を保持する構造体のバージョン 0 として定義されています。この情報は、接続が確立された後に利用できます。
TCP_ESTATS_PATH_ROD_v0 構造体は、EstatsType パラメーターに TcpConnectionEstatsPath を渡して GetPerTcp6ConnectionEStats 関数または GetPerTcpConnectionEStats 関数を呼び出すことで取得します。この構造体を取得するには、TCP 拡張統計を有効にしておく必要があります。
パス MTU 探索と最大セグメントサイズについては、パス MTU 探索に関する IETF RFC 1191 で詳しく説明されています。詳細については、http://www.ietf.org/rfc/rfc1191.txt を参照してください。
TCP の輻輳制御と輻輳制御アルゴリズムについては、TCP 輻輳制御に関する IETF RFC 2581 で詳しく説明されています。詳細については、http://www.ietf.org/rfc/rfc2581.txt を参照してください。
SACK および SACK オプションの拡張については、TCP の選択的確認応答 (SACK) オプションの拡張に関する IETF RFC 2883 で詳しく説明されています。詳細については、http://www.ietf.org/rfc/rfc2883.txt を参照してください。
TCP の再送タイマー (RTO) と平滑化されたラウンドトリップ時間 (RTT) については、TCP の再送タイマーの計算に関する IETF RFC 2988 で詳しく説明されています。詳細については、http://www.ietf.org/rfc/rfc2988.txt を参照してください。
IP における Explicit Congestion Notification については、IP への Explicit Congestion Notification (ECN) の追加に関する IETF RFC 2581 で詳しく説明されています。詳細については、http://www.ietf.org/rfc/rfc3168.txt を参照してください。
この構造体のメンバーは、TCP 拡張統計 MIB に関する IETF RFC で定義されています。詳細については、http://www.ietf.org/rfc/rfc4898.txt を参照してください。
次に、TCP_ESTATS_PATH_ROD_v0 構造体のメンバーと、拡張 TCP 統計について RFC 4898 で定義されているエントリとの対応を示します。
TCP_ESTATS_FINE_RTT_ROD_v0 構造体には、TCP_ESTATS_PATH_ROD_v0 構造体の RttVar、MaxRtt、MinRtt、SumRtt の各メンバーと同様のデータを提供するメンバーがあります。ただし、TCP_ESTATS_FINE_RTT_ROD_v0 構造体の対応するメンバーでは、時間はマイクロ秒単位で報告されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// TCP_ESTATS_PATH_ROD_v0 (x64 160 / x86 160 バイト)
typedef struct TCP_ESTATS_PATH_ROD_v0 {
DWORD FastRetran;
DWORD Timeouts;
DWORD SubsequentTimeouts;
DWORD CurTimeoutCount;
DWORD AbruptTimeouts;
DWORD PktsRetrans;
DWORD BytesRetrans;
DWORD DupAcksIn;
DWORD SacksRcvd;
DWORD SackBlocksRcvd;
DWORD CongSignals;
DWORD PreCongSumCwnd;
DWORD PreCongSumRtt;
DWORD PostCongSumRtt;
DWORD PostCongCountRtt;
DWORD EcnSignals;
DWORD EceRcvd;
DWORD SendStall;
DWORD QuenchRcvd;
DWORD RetranThresh;
DWORD SndDupAckEpisodes;
DWORD SumBytesReordered;
DWORD NonRecovDa;
DWORD NonRecovDaEpisodes;
DWORD AckAfterFr;
DWORD DsackDups;
DWORD SampleRtt;
DWORD SmoothedRtt;
DWORD RttVar;
DWORD MaxRtt;
DWORD MinRtt;
DWORD SumRtt;
DWORD CountRtt;
DWORD CurRto;
DWORD MaxRto;
DWORD MinRto;
DWORD CurMss;
DWORD MaxMss;
DWORD MinMss;
DWORD SpuriousRtoDetections;
} TCP_ESTATS_PATH_ROD_v0;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct TCP_ESTATS_PATH_ROD_v0
{
public uint FastRetran;
public uint Timeouts;
public uint SubsequentTimeouts;
public uint CurTimeoutCount;
public uint AbruptTimeouts;
public uint PktsRetrans;
public uint BytesRetrans;
public uint DupAcksIn;
public uint SacksRcvd;
public uint SackBlocksRcvd;
public uint CongSignals;
public uint PreCongSumCwnd;
public uint PreCongSumRtt;
public uint PostCongSumRtt;
public uint PostCongCountRtt;
public uint EcnSignals;
public uint EceRcvd;
public uint SendStall;
public uint QuenchRcvd;
public uint RetranThresh;
public uint SndDupAckEpisodes;
public uint SumBytesReordered;
public uint NonRecovDa;
public uint NonRecovDaEpisodes;
public uint AckAfterFr;
public uint DsackDups;
public uint SampleRtt;
public uint SmoothedRtt;
public uint RttVar;
public uint MaxRtt;
public uint MinRtt;
public uint SumRtt;
public uint CountRtt;
public uint CurRto;
public uint MaxRto;
public uint MinRto;
public uint CurMss;
public uint MaxMss;
public uint MinMss;
public uint SpuriousRtoDetections;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure TCP_ESTATS_PATH_ROD_v0
Public FastRetran As UInteger
Public Timeouts As UInteger
Public SubsequentTimeouts As UInteger
Public CurTimeoutCount As UInteger
Public AbruptTimeouts As UInteger
Public PktsRetrans As UInteger
Public BytesRetrans As UInteger
Public DupAcksIn As UInteger
Public SacksRcvd As UInteger
Public SackBlocksRcvd As UInteger
Public CongSignals As UInteger
Public PreCongSumCwnd As UInteger
Public PreCongSumRtt As UInteger
Public PostCongSumRtt As UInteger
Public PostCongCountRtt As UInteger
Public EcnSignals As UInteger
Public EceRcvd As UInteger
Public SendStall As UInteger
Public QuenchRcvd As UInteger
Public RetranThresh As UInteger
Public SndDupAckEpisodes As UInteger
Public SumBytesReordered As UInteger
Public NonRecovDa As UInteger
Public NonRecovDaEpisodes As UInteger
Public AckAfterFr As UInteger
Public DsackDups As UInteger
Public SampleRtt As UInteger
Public SmoothedRtt As UInteger
Public RttVar As UInteger
Public MaxRtt As UInteger
Public MinRtt As UInteger
Public SumRtt As UInteger
Public CountRtt As UInteger
Public CurRto As UInteger
Public MaxRto As UInteger
Public MinRto As UInteger
Public CurMss As UInteger
Public MaxMss As UInteger
Public MinMss As UInteger
Public SpuriousRtoDetections As UInteger
End Structureimport ctypes
from ctypes import wintypes
class TCP_ESTATS_PATH_ROD_v0(ctypes.Structure):
_fields_ = [
("FastRetran", wintypes.DWORD),
("Timeouts", wintypes.DWORD),
("SubsequentTimeouts", wintypes.DWORD),
("CurTimeoutCount", wintypes.DWORD),
("AbruptTimeouts", wintypes.DWORD),
("PktsRetrans", wintypes.DWORD),
("BytesRetrans", wintypes.DWORD),
("DupAcksIn", wintypes.DWORD),
("SacksRcvd", wintypes.DWORD),
("SackBlocksRcvd", wintypes.DWORD),
("CongSignals", wintypes.DWORD),
("PreCongSumCwnd", wintypes.DWORD),
("PreCongSumRtt", wintypes.DWORD),
("PostCongSumRtt", wintypes.DWORD),
("PostCongCountRtt", wintypes.DWORD),
("EcnSignals", wintypes.DWORD),
("EceRcvd", wintypes.DWORD),
("SendStall", wintypes.DWORD),
("QuenchRcvd", wintypes.DWORD),
("RetranThresh", wintypes.DWORD),
("SndDupAckEpisodes", wintypes.DWORD),
("SumBytesReordered", wintypes.DWORD),
("NonRecovDa", wintypes.DWORD),
("NonRecovDaEpisodes", wintypes.DWORD),
("AckAfterFr", wintypes.DWORD),
("DsackDups", wintypes.DWORD),
("SampleRtt", wintypes.DWORD),
("SmoothedRtt", wintypes.DWORD),
("RttVar", wintypes.DWORD),
("MaxRtt", wintypes.DWORD),
("MinRtt", wintypes.DWORD),
("SumRtt", wintypes.DWORD),
("CountRtt", wintypes.DWORD),
("CurRto", wintypes.DWORD),
("MaxRto", wintypes.DWORD),
("MinRto", wintypes.DWORD),
("CurMss", wintypes.DWORD),
("MaxMss", wintypes.DWORD),
("MinMss", wintypes.DWORD),
("SpuriousRtoDetections", wintypes.DWORD),
]#[repr(C)]
pub struct TCP_ESTATS_PATH_ROD_v0 {
pub FastRetran: u32,
pub Timeouts: u32,
pub SubsequentTimeouts: u32,
pub CurTimeoutCount: u32,
pub AbruptTimeouts: u32,
pub PktsRetrans: u32,
pub BytesRetrans: u32,
pub DupAcksIn: u32,
pub SacksRcvd: u32,
pub SackBlocksRcvd: u32,
pub CongSignals: u32,
pub PreCongSumCwnd: u32,
pub PreCongSumRtt: u32,
pub PostCongSumRtt: u32,
pub PostCongCountRtt: u32,
pub EcnSignals: u32,
pub EceRcvd: u32,
pub SendStall: u32,
pub QuenchRcvd: u32,
pub RetranThresh: u32,
pub SndDupAckEpisodes: u32,
pub SumBytesReordered: u32,
pub NonRecovDa: u32,
pub NonRecovDaEpisodes: u32,
pub AckAfterFr: u32,
pub DsackDups: u32,
pub SampleRtt: u32,
pub SmoothedRtt: u32,
pub RttVar: u32,
pub MaxRtt: u32,
pub MinRtt: u32,
pub SumRtt: u32,
pub CountRtt: u32,
pub CurRto: u32,
pub MaxRto: u32,
pub MinRto: u32,
pub CurMss: u32,
pub MaxMss: u32,
pub MinMss: u32,
pub SpuriousRtoDetections: u32,
}import "golang.org/x/sys/windows"
type TCP_ESTATS_PATH_ROD_v0 struct {
FastRetran uint32
Timeouts uint32
SubsequentTimeouts uint32
CurTimeoutCount uint32
AbruptTimeouts uint32
PktsRetrans uint32
BytesRetrans uint32
DupAcksIn uint32
SacksRcvd uint32
SackBlocksRcvd uint32
CongSignals uint32
PreCongSumCwnd uint32
PreCongSumRtt uint32
PostCongSumRtt uint32
PostCongCountRtt uint32
EcnSignals uint32
EceRcvd uint32
SendStall uint32
QuenchRcvd uint32
RetranThresh uint32
SndDupAckEpisodes uint32
SumBytesReordered uint32
NonRecovDa uint32
NonRecovDaEpisodes uint32
AckAfterFr uint32
DsackDups uint32
SampleRtt uint32
SmoothedRtt uint32
RttVar uint32
MaxRtt uint32
MinRtt uint32
SumRtt uint32
CountRtt uint32
CurRto uint32
MaxRto uint32
MinRto uint32
CurMss uint32
MaxMss uint32
MinMss uint32
SpuriousRtoDetections uint32
}type
TCP_ESTATS_PATH_ROD_v0 = record
FastRetran: DWORD;
Timeouts: DWORD;
SubsequentTimeouts: DWORD;
CurTimeoutCount: DWORD;
AbruptTimeouts: DWORD;
PktsRetrans: DWORD;
BytesRetrans: DWORD;
DupAcksIn: DWORD;
SacksRcvd: DWORD;
SackBlocksRcvd: DWORD;
CongSignals: DWORD;
PreCongSumCwnd: DWORD;
PreCongSumRtt: DWORD;
PostCongSumRtt: DWORD;
PostCongCountRtt: DWORD;
EcnSignals: DWORD;
EceRcvd: DWORD;
SendStall: DWORD;
QuenchRcvd: DWORD;
RetranThresh: DWORD;
SndDupAckEpisodes: DWORD;
SumBytesReordered: DWORD;
NonRecovDa: DWORD;
NonRecovDaEpisodes: DWORD;
AckAfterFr: DWORD;
DsackDups: DWORD;
SampleRtt: DWORD;
SmoothedRtt: DWORD;
RttVar: DWORD;
MaxRtt: DWORD;
MinRtt: DWORD;
SumRtt: DWORD;
CountRtt: DWORD;
CurRto: DWORD;
MaxRto: DWORD;
MinRto: DWORD;
CurMss: DWORD;
MaxMss: DWORD;
MinMss: DWORD;
SpuriousRtoDetections: DWORD;
end;const TCP_ESTATS_PATH_ROD_v0 = extern struct {
FastRetran: u32,
Timeouts: u32,
SubsequentTimeouts: u32,
CurTimeoutCount: u32,
AbruptTimeouts: u32,
PktsRetrans: u32,
BytesRetrans: u32,
DupAcksIn: u32,
SacksRcvd: u32,
SackBlocksRcvd: u32,
CongSignals: u32,
PreCongSumCwnd: u32,
PreCongSumRtt: u32,
PostCongSumRtt: u32,
PostCongCountRtt: u32,
EcnSignals: u32,
EceRcvd: u32,
SendStall: u32,
QuenchRcvd: u32,
RetranThresh: u32,
SndDupAckEpisodes: u32,
SumBytesReordered: u32,
NonRecovDa: u32,
NonRecovDaEpisodes: u32,
AckAfterFr: u32,
DsackDups: u32,
SampleRtt: u32,
SmoothedRtt: u32,
RttVar: u32,
MaxRtt: u32,
MinRtt: u32,
SumRtt: u32,
CountRtt: u32,
CurRto: u32,
MaxRto: u32,
MinRto: u32,
CurMss: u32,
MaxMss: u32,
MinMss: u32,
SpuriousRtoDetections: u32,
};type
TCP_ESTATS_PATH_ROD_v0 {.bycopy.} = object
FastRetran: uint32
Timeouts: uint32
SubsequentTimeouts: uint32
CurTimeoutCount: uint32
AbruptTimeouts: uint32
PktsRetrans: uint32
BytesRetrans: uint32
DupAcksIn: uint32
SacksRcvd: uint32
SackBlocksRcvd: uint32
CongSignals: uint32
PreCongSumCwnd: uint32
PreCongSumRtt: uint32
PostCongSumRtt: uint32
PostCongCountRtt: uint32
EcnSignals: uint32
EceRcvd: uint32
SendStall: uint32
QuenchRcvd: uint32
RetranThresh: uint32
SndDupAckEpisodes: uint32
SumBytesReordered: uint32
NonRecovDa: uint32
NonRecovDaEpisodes: uint32
AckAfterFr: uint32
DsackDups: uint32
SampleRtt: uint32
SmoothedRtt: uint32
RttVar: uint32
MaxRtt: uint32
MinRtt: uint32
SumRtt: uint32
CountRtt: uint32
CurRto: uint32
MaxRto: uint32
MinRto: uint32
CurMss: uint32
MaxMss: uint32
MinMss: uint32
SpuriousRtoDetections: uint32struct TCP_ESTATS_PATH_ROD_v0
{
uint FastRetran;
uint Timeouts;
uint SubsequentTimeouts;
uint CurTimeoutCount;
uint AbruptTimeouts;
uint PktsRetrans;
uint BytesRetrans;
uint DupAcksIn;
uint SacksRcvd;
uint SackBlocksRcvd;
uint CongSignals;
uint PreCongSumCwnd;
uint PreCongSumRtt;
uint PostCongSumRtt;
uint PostCongCountRtt;
uint EcnSignals;
uint EceRcvd;
uint SendStall;
uint QuenchRcvd;
uint RetranThresh;
uint SndDupAckEpisodes;
uint SumBytesReordered;
uint NonRecovDa;
uint NonRecovDaEpisodes;
uint AckAfterFr;
uint DsackDups;
uint SampleRtt;
uint SmoothedRtt;
uint RttVar;
uint MaxRtt;
uint MinRtt;
uint SumRtt;
uint CountRtt;
uint CurRto;
uint MaxRto;
uint MinRto;
uint CurMss;
uint MaxMss;
uint MinMss;
uint SpuriousRtoDetections;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; TCP_ESTATS_PATH_ROD_v0 サイズ: 160 バイト(x64)
dim st, 40 ; 4byte整数×40(構造体サイズ 160 / 4 切り上げ)
; FastRetran : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Timeouts : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; SubsequentTimeouts : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; CurTimeoutCount : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; AbruptTimeouts : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; PktsRetrans : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; BytesRetrans : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; DupAcksIn : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; SacksRcvd : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; SackBlocksRcvd : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; CongSignals : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; PreCongSumCwnd : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; PreCongSumRtt : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; PostCongSumRtt : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; PostCongCountRtt : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; EcnSignals : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; EceRcvd : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; SendStall : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; QuenchRcvd : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; RetranThresh : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; SndDupAckEpisodes : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; SumBytesReordered : DWORD (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; NonRecovDa : DWORD (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; NonRecovDaEpisodes : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; AckAfterFr : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; DsackDups : DWORD (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; SampleRtt : DWORD (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; SmoothedRtt : DWORD (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; RttVar : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; MaxRtt : DWORD (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; MinRtt : DWORD (+120, 4byte) st.30 = 値 / 値 = st.30 (lpoke/lpeek も可)
; SumRtt : DWORD (+124, 4byte) st.31 = 値 / 値 = st.31 (lpoke/lpeek も可)
; CountRtt : DWORD (+128, 4byte) st.32 = 値 / 値 = st.32 (lpoke/lpeek も可)
; CurRto : DWORD (+132, 4byte) st.33 = 値 / 値 = st.33 (lpoke/lpeek も可)
; MaxRto : DWORD (+136, 4byte) st.34 = 値 / 値 = st.34 (lpoke/lpeek も可)
; MinRto : DWORD (+140, 4byte) st.35 = 値 / 値 = st.35 (lpoke/lpeek も可)
; CurMss : DWORD (+144, 4byte) st.36 = 値 / 値 = st.36 (lpoke/lpeek も可)
; MaxMss : DWORD (+148, 4byte) st.37 = 値 / 値 = st.37 (lpoke/lpeek も可)
; MinMss : DWORD (+152, 4byte) st.38 = 値 / 値 = st.38 (lpoke/lpeek も可)
; SpuriousRtoDetections : DWORD (+156, 4byte) st.39 = 値 / 値 = st.39 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global TCP_ESTATS_PATH_ROD_v0
#field int FastRetran
#field int Timeouts
#field int SubsequentTimeouts
#field int CurTimeoutCount
#field int AbruptTimeouts
#field int PktsRetrans
#field int BytesRetrans
#field int DupAcksIn
#field int SacksRcvd
#field int SackBlocksRcvd
#field int CongSignals
#field int PreCongSumCwnd
#field int PreCongSumRtt
#field int PostCongSumRtt
#field int PostCongCountRtt
#field int EcnSignals
#field int EceRcvd
#field int SendStall
#field int QuenchRcvd
#field int RetranThresh
#field int SndDupAckEpisodes
#field int SumBytesReordered
#field int NonRecovDa
#field int NonRecovDaEpisodes
#field int AckAfterFr
#field int DsackDups
#field int SampleRtt
#field int SmoothedRtt
#field int RttVar
#field int MaxRtt
#field int MinRtt
#field int SumRtt
#field int CountRtt
#field int CurRto
#field int MaxRto
#field int MinRto
#field int CurMss
#field int MaxMss
#field int MinMss
#field int SpuriousRtoDetections
#endstruct
stdim st, TCP_ESTATS_PATH_ROD_v0 ; NSTRUCT 変数を確保
st->FastRetran = 100
mes "FastRetran=" + st->FastRetran