1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _WSRM_H_
7 #define _WSRM_H_
8 
9 #define IPPROTO_RM 113
10 #define MAX_MCAST_TTL 255
11 
12 #define RM_OPTIONSBASE 1000
13 #define RM_RATE_WINDOW_SIZE (RM_OPTIONSBASE + 1)
14 #define RM_SET_MESSAGE_BOUNDARY (RM_OPTIONSBASE + 2)
15 #define RM_FLUSHCACHE (RM_OPTIONSBASE + 3)
16 #define RM_SENDER_WINDOW_ADVANCE_METHOD (RM_OPTIONSBASE + 4)
17 #define RM_SENDER_STATISTICS (RM_OPTIONSBASE + 5)
18 #define RM_LATEJOIN (RM_OPTIONSBASE + 6)
19 #define RM_SET_SEND_IF (RM_OPTIONSBASE + 7)
20 #define RM_ADD_RECEIVE_IF (RM_OPTIONSBASE + 8)
21 #define RM_DEL_RECEIVE_IF (RM_OPTIONSBASE + 9)
22 #define RM_SEND_WINDOW_ADV_RATE (RM_OPTIONSBASE + 10)
23 #define RM_USE_FEC (RM_OPTIONSBASE + 11)
24 #define RM_SET_MCAST_TTL (RM_OPTIONSBASE + 12)
25 #define RM_RECEIVER_STATISTICS (RM_OPTIONSBASE + 13)
26 #define RM_HIGH_SPEED_INTRANET_OPT (RM_OPTIONSBASE + 14)
27 
28 #define SENDER_DEFAULT_RATE_KBITS_PER_SEC 56
29 #define SENDER_DEFAULT_WINDOW_SIZE_BYTES 10 *1000*1000
30 #define SENDER_DEFAULT_WINDOW_ADV_PERCENTAGE 15
31 
32 #define MAX_WINDOW_INCREMENT_PERCENTAGE 25
33 #define SENDER_DEFAULT_LATE_JOINER_PERCENTAGE 0
34 #define SENDER_MAX_LATE_JOINER_PERCENTAGE 75
35 
36 #define BITS_PER_BYTE 8
37 #define LOG2_BITS_PER_BYTE 3
38 
39 enum eWINDOW_ADVANCE_METHOD {
40   E_WINDOW_ADVANCE_BY_TIME = 1,E_WINDOW_USE_AS_DATA_CACHE
41 };
42 
43 typedef struct _RM_SEND_WINDOW {
44   ULONG RateKbitsPerSec;
45   ULONG WindowSizeInMSecs;
46   ULONG WindowSizeInBytes;
47 } RM_SEND_WINDOW;
48 
49 typedef struct _RM_SENDER_STATS {
50   ULONGLONG DataBytesSent;
51   ULONGLONG TotalBytesSent;
52   ULONGLONG NaksReceived;
53   ULONGLONG NaksReceivedTooLate;
54   ULONGLONG NumOutstandingNaks;
55   ULONGLONG NumNaksAfterRData;
56   ULONGLONG RepairPacketsSent;
57   ULONGLONG BufferSpaceAvailable;
58   ULONGLONG TrailingEdgeSeqId;
59   ULONGLONG LeadingEdgeSeqId;
60   ULONGLONG RateKBitsPerSecOverall;
61   ULONGLONG RateKBitsPerSecLast;
62   ULONGLONG TotalODataPacketsSent;
63 } RM_SENDER_STATS;
64 
65 typedef struct _RM_RECEIVER_STATS {
66   ULONGLONG NumODataPacketsReceived;
67   ULONGLONG NumRDataPacketsReceived;
68   ULONGLONG NumDuplicateDataPackets;
69   ULONGLONG DataBytesReceived;
70   ULONGLONG TotalBytesReceived;
71   ULONGLONG RateKBitsPerSecOverall;
72   ULONGLONG RateKBitsPerSecLast;
73   ULONGLONG TrailingEdgeSeqId;
74   ULONGLONG LeadingEdgeSeqId;
75   ULONGLONG AverageSequencesInWindow;
76   ULONGLONG MinSequencesInWindow;
77   ULONGLONG MaxSequencesInWindow;
78   ULONGLONG FirstNakSequenceNumber;
79   ULONGLONG NumPendingNaks;
80   ULONGLONG NumOutstandingNaks;
81   ULONGLONG NumDataPacketsBuffered;
82   ULONGLONG TotalSelectiveNaksSent;
83   ULONGLONG TotalParityNaksSent;
84 } RM_RECEIVER_STATS;
85 
86 typedef struct _RM_FEC_INFO {
87   USHORT FECBlockSize;
88   USHORT FECProActivePackets;
89   UCHAR FECGroupSize;
90   BOOLEAN fFECOnDemandParityEnabled;
91 } RM_FEC_INFO;
92 
93 #endif
94