summaryrefslogtreecommitdiffstats
path: root/3rdparty/openpgm-svn-r1085/pgm/plan.txt
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/openpgm-svn-r1085/pgm/plan.txt')
-rw-r--r--3rdparty/openpgm-svn-r1085/pgm/plan.txt238
1 files changed, 238 insertions, 0 deletions
diff --git a/3rdparty/openpgm-svn-r1085/pgm/plan.txt b/3rdparty/openpgm-svn-r1085/pgm/plan.txt
new file mode 100644
index 0000000..b1747ae
--- /dev/null
+++ b/3rdparty/openpgm-svn-r1085/pgm/plan.txt
@@ -0,0 +1,238 @@
+pgmdump
+-------
+
+View all packets like tcpdump, but updated to full spec and allow dump of payload.
+
+
+pgmtop
+------
+
+Dump realtime packet statistics in a ncurses display, mix of top/htop/netop.
+
+
+basic_send
+----------
+
+Send an ODATA packet and terminate.
+
+Accept string payload and network parameters on command line.
+
+Send to multicast or send to unicast AFI.
+
+IPv4/6.
+
+Define optional session start, late join tags.
+
+
+spm_idle
+--------
+
+Idle in an event loop sending out SPM packets.
+
+
+stream_send
+-----------
+
+Send a constant stream of ODATA and SPM packets.
+
+
+basic_http
+----------
+
+Simple embedded web server
+
+
+basic_recv
+----------
+
+Listen to packets indicating data loss, view details through web interface.
+
+
+basic_container
+---------------
+
+Test performance of glib containers for fast allocating for a dynamic transmit window.
+
+
+basic_txw
+---------
+
+Test performance of a basic transmit window implementation.
+
+
+nak_txw
+-------
+
+Test performance of random access to packets inside the window.
+
+
+stream_send_with_nak
+--------------------
+
+Respond to NAK's with RDATA.
+
+
+basic_recv_with_nak
+-------------------
+
+Listen to packets and send NAK's to rebuild data.
+
+
+dumpif
+------
+
+Display all IP based interfaces and basic details.
+
+
+testif
+------
+
+Test various combinations of network specification.
+
+
+sw_calc
+-------
+
+Basic calculation tests of wrap-around sliding windows and a leading edge.
+
+
+basic_recv_with_rxw
+-------------------
+
+Listen to packets buffered with a receive window.
+
+
+test_cpu_timers
+---------------
+
+Calculate drift between processors, cores, and hyper-threads.
+
+
+pgmsend
+--------
+
+basic_send updated to use transmit window.
+
+
+pgmrecv
+--------
+
+basic_recv_with_rxw without web interface, primary displays messages from pgmsend.
+
+
+syncrecv
+--------
+
+pgmrecv implemented outside GLib with a synchronous coding paradigm.
+
+
+pgmping
+-------
+
+Dual mode: one to send fixed messages like pgmsend and listen for response, two to listen for
+messages and reply.
+
+
+block_send
+----------
+
+Send APDUs over ODATA.
+
+
+(pgmrecv can receive APDUs)
+
+test_rs
+-------
+
+Test 8-bit symbol Reed Solomon encoding and decoding with errors & erasures.
+
+test_fec
+--------
+
+Test fec creation and recovery.
+
+
+send_with_fec
+--------------------
+
+Send APDUs over ODATA with FEC.
+
+
+
+Scenarios to reproduce
+**********************
+
+- Packet loss in stream causing NAK generation.
+- Link saturation in sending causing API feedback.
+- Link peak stable speed.
+- Maxium NAK generation to determine NCF/RDATA throughput.
+- Corrupt packets with invalid IP checksum (? generate IP HDR in sender)
+- Corrupt packets with invalid PGM checksum.
+- Invalid packet values.
+- NAK to NCF latency.
+- NAK to RDATA latency.
+- Publish bandwidth: total, per packet type, payload, per recipient (?)
+- Subscribe bandwidth: total, per packet type, payload, per publisher (?)
+- Restarting a session with similar or dissimilar sequence numbering.
+
+Outstanding questions
+*********************
+
+- Is it faster to use chunks containing multiple packets instead of one MTU
+ per packet. Does aligning with system page size matter?
+- Can g_timers be dropped easily for gettimeofday and avoid floating point math? Possible
+ to pass timer upstream with contiguous data for easy access.
+- Can time evaluation be dropped to at most once per main loop event?
+- Does code work 32 bit and is it optimal?
+- Should trash stacks be monitored and controlled externally? For example, clearing
+ up after bursts or administrative control.
+- Should trash stacks have a upper limit to then free to the slice allocator?
+- Should lost packets be managed as ranges or individual sequence numbers, how
+ does each method affect performance?
+
+* The initial draft of PGM included OPT_RANGE option for NAKs to specify a range of lost
+ packets, this was replaced in the final draft with NAK lists. Some research hints that
+ ranges are suitable:
+
+ http://www.isoc.org/inet2001/CD_proceedings/T54/T54.htm
+ http://tools.ietf.org/html/draft-speakman-pgm-spec-01
+
+- Are place holders necessary? Can state timeouts be managed without a per sequence number
+ object? For example by the next data object, or an extra object for an ncf extended window:
+ note that nak packet generation should easily dwarfs time spent unless advantage is taken
+ of the additional 62 naks in a opt_nak_list. Caution has to be taken with the cost of
+ splitting a range when a packet is inserted in the middle, although idealy it should
+ be sequential from the trailing edge.
+- Is it better to have send sockets per transport, or shared, bound to each interface?
+- Cost of sharing state helper lists between receive windows? On culling a peer the lists
+ have to be purged. Saves iterating the hash list of receivers.
+- Encapsulated UDP lists two ports, 3305 for broadcast, 3306 for unicast, how is this
+ supposed to map to regular PGM, and why the split?
+
+Basic TODO list
+***************
+
+- Ensure standardised error handling and status reporting.
+- Implement mechanism for data-loss feedback.
+- OPT_SYN & OPT_FIN on sending side.
+- Shared trash stacks between multiple receive windows (contexts).
+- Shared trash stacks between transmit and receive windows.
+- FEC: compatibility with SmartPGM FEC, MS FEC?
+- NAK backoff learning.
+- Full conformance testing. (nak backoffs remaining)
+- Unit testing.
+- System testing with valgrind.
+- Performance testing with oprofile.
+- Basic DLR.
+- Implement PGM sender (only) support thread?
+- eventfd instead of pipes for recent Linux kernels.
+
+Optionals
+*********
+
+- Some form of broadcast statistics for passive monitoring.
+- (fix) BCH Reed-Solomon codec as possibly faster alternative, albeit incompatible with Microsoft.
+- Recommendations as per the RMT working group of the IETF for AL-FEC codecs: Raptor codes, LDPC-
+ staircase and LDPC-triangle codes.
+- XDR based messaging format as example of binary encoded messaging.
+