|
15 | 15 |
|
16 | 16 | /* \summary: Pragmatic General Multicast (PGM) printer */
|
17 | 17 |
|
| 18 | +/* specification: RFC 3208 |
| 19 | +
|
| 20 | + Plus https://dl.acm.org/doi/pdf/10.1145/347057.347390 for PGMCC, |
| 21 | + whence the ACK packet type comes; there are some I-Ds for PGMCC, |
| 22 | + draft-ietf-rmt-bb-pgmcc-00 through draft-ietf-rmt-bb-pgmcc-03, |
| 23 | + but none of them give any description of the packet-level |
| 24 | + changes to PGM, unlike the paper in question, which merely gives |
| 25 | + an *insufficient* description of said changes. In particular, |
| 26 | + it doesn't indicate what the packet type code for ACK is. |
| 27 | +
|
| 28 | + This uses 0x0b as the packet type code; Wireshark uses 0x0d. |
| 29 | + At least one capture appears to use 0x0d, so we use *both*, |
| 30 | + treating *either one* as a PGMCC ACK. */ |
| 31 | + |
18 | 32 | #ifdef HAVE_CONFIG_H
|
19 | 33 | #include <config.h>
|
20 | 34 | #endif
|
@@ -104,8 +118,9 @@ typedef enum _pgm_type {
|
104 | 118 | PGM_NAK = 0x08, /* NAK */
|
105 | 119 | PGM_NULLNAK = 0x09, /* Null NAK */
|
106 | 120 | PGM_NCF = 0x0a, /* NAK Confirmation */
|
107 |
| - PGM_ACK = 0x0b, /* ACK for congestion control */ |
108 |
| - PGM_SPMR = 0x0c /* SPM request */ |
| 121 | + PGM_ACK = 0x0b, /* ACK for congestion control? */ |
| 122 | + PGM_SPMR = 0x0c, /* SPM request */ |
| 123 | + PGM_ACK2 = 0x0d, /* Also ACK for congestion control? */ |
109 | 124 | } pgm_type;
|
110 | 125 |
|
111 | 126 | #define PGM_OPT_BIT_PRESENT 0x01
|
@@ -396,7 +411,8 @@ pgm_print(netdissect_options *ndo,
|
396 | 411 | break;
|
397 | 412 | }
|
398 | 413 |
|
399 |
| - case PGM_ACK: { |
| 414 | + case PGM_ACK: |
| 415 | + case PGM_ACK2: { |
400 | 416 | const struct pgm_ack *ack;
|
401 | 417 |
|
402 | 418 | ack = (const struct pgm_ack *)bp;
|
|
0 commit comments