356 lines
18 KiB
Plaintext
356 lines
18 KiB
Plaintext
NORM Version History
|
|
|
|
Version 1.4b3
|
|
=============
|
|
- Fixed many (hopefully all) cases where NORM_DATA message FLAG_REPAIR
|
|
was not always being set when it should resulting in receivers
|
|
sometimes "syncing" (or "re-syncing") to sender repair transmissions
|
|
when they shouldn't ... sometimes resulting in duplicative stream
|
|
data being delivered to the receiver app.
|
|
- Fixed case when repair request for old NORM_OBJECT_STREAM segment could
|
|
lockup advancement of stream when stream "push" is enabled.
|
|
(Thanks to Greg Lauer, Clifton Lin, BAE Systems CBMANET team)
|
|
- Added command-line options to "norm" demo app for "txrobustfactor"
|
|
and "rxrobustfactor"
|
|
- Added "NormNodeFreeBuffers()" API call and changed NORM behavior
|
|
to require app to free buffers allocate for remote sender unless
|
|
indefinite persistence is desired.
|
|
- Added "rxpersist" command-line option to "norm" demo app to make
|
|
"norm" demo app receivers keep full state on remote senders'
|
|
indefinitely.
|
|
- Fixed issue with NormSession::QueueTxObject() where ASSERT() failure
|
|
occurred depending upon previous tx object enqueue/dequeue history
|
|
(Thanks to Jeff Bush for finding this one)
|
|
- Changed repeated scheduling of receiver remote sender inactivity
|
|
timer to ensure that busy CPU doesn't result in premature
|
|
inactivity indication.
|
|
|
|
Version 1.4b2
|
|
=============
|
|
- Fixed bug where NormObjectCancel() usage could result in extra
|
|
"release" of reference to NormObject
|
|
(Thanks to Alan McKechnie)
|
|
- Fixed minor issue with "repeatcount" command of "normApp.cpp"
|
|
where only the abbreviated command "repeat" was accepted.
|
|
(Thanks to Deric Sullivan)
|
|
- Added NormSetTxRobustFactor(), NormSetDefaultRxRobustFactor(), and
|
|
NormNodeSetRobustFactor() API calls
|
|
- Fixed issue with CC_INACTIVE being prematurely declared and modified
|
|
NORM RxSocketHandler to read a maximum of 100 consecutive packets
|
|
from socket at a time (This makes sure that receivers service timeouts,
|
|
provide feedback more timely, etc)
|
|
(Thanks to Peter Lu)
|
|
- Fixed case when repair request for old NORM_OBJECT_STREAM segment could
|
|
lockup advancement of stream.
|
|
(Also thanks to Peter Lu)
|
|
|
|
Version 1.4b1
|
|
=============
|
|
- Fixed condition where receivers kept state for remote senders "stuck"
|
|
with CC feedback (cc_enable) even if newer NORM_CMD(CC) messages
|
|
indicate that sender CC operation has been disabled.
|
|
- Fixed error in NormSession::SetTOS() method that transmogrifried the
|
|
default TTL value into TOS under certain conditions.
|
|
(thanks to Ron in 't Velt yet again for finding this and the one above).
|
|
- Made NormFile read/write more persistent (e.g. when EINT occurs)
|
|
- Fixed NormObject::PassiveRepairCheck() bug that incorrectly reported
|
|
no repair needed when in fact, the last segment was missing.
|
|
- Fixed ProtoSlidingBitmask error that interfered with proper
|
|
sender stream advancement under severe conditions
|
|
- NORM still used old "MDP" FEC codecs but now explicitly check for
|
|
FEC ID == 129 and FEC instance id == 0. Can be built with
|
|
-DASSUME_MDP_FEC to avoid this check in case of backward compatbility
|
|
issue. Future NORM release will be using new FEC implementation
|
|
for Reed-Solomon coding but will continue to support compile-time
|
|
backwards compatibility option to use old MDP FEC encoder.
|
|
- Added "lowDelay" and other options to "norm" demo application
|
|
- Modified "lowDelay" option for silent receiver use to allow
|
|
control of FEC block delay (how many blocks to wait before passing
|
|
partially-received coding blocks to application).
|
|
- Added "Norm Pre-Coder" (NPC) utility to distribution.
|
|
|
|
Version 1.3b9
|
|
=============
|
|
- Fixed ProtoSocket WINVER stuff and NormApplicationMsg::SetContent()
|
|
(thanks to Stefan Titze for these)
|
|
- Fixed issue in NormSession::OnRepairTimeout() where a debug
|
|
message erroneously dereferenced a NormObject pointer as
|
|
NormFileObject (led to run-time issue in optimized code build)
|
|
(thanks to Charlie Davis once again)
|
|
- Fixed places where NORM_CMD(FLUSH/SQUELCH) messages didn't have
|
|
FEC source block length properly set (thanks to Ron in 't Velt)
|
|
- Fixed misuse of "delete" operator where "delete[]" should have
|
|
been used instead in "normEncoder.cpp" (thanks to Jon of Totient?)
|
|
- Fixed error in NormQuantizeRate() and NormUnQuantizeRate() functions
|
|
in "normMessage.h". (Thanks to Julian Onions for getting it right
|
|
in the Ethereal NORM dissector he created).
|
|
- Fixed case in NormObject::NextServerMsg() where old recovered block
|
|
could cause assertion failure (thanks to John Wood for the stress testing)
|
|
- Fixed "normApi.cpp" code that was resulting in NormServerNode reference
|
|
counts not being updated properly (thanks to Jon Dyte for this)
|
|
- Fixed missed initialization of NormServerNode::nominal_packet_count and
|
|
NormLossEstimator2::init members (Thanks to Jon Dyte again).
|
|
- Fixed bug where NORM_DATA messages containing FEC parity content had
|
|
8 bytes of extraneous content appended in their payload (Thanks to
|
|
Jon Jannucci for finding this one).
|
|
- Fixed bug where receiver loss estimate returning to ZERO could result
|
|
in a floating point exception in NormSession::CalculateRate()
|
|
(thanks to Ian Downard for finding this one)
|
|
- Re-ordered NORM_DATA "payload_length" and "payload_msg_start" fields
|
|
to be consistent with revised NORM spec.
|
|
- Corrected the detection of "data loss" when application (or API)
|
|
fails to consume received stream data before it is discarded.
|
|
- Fixed bug where when small "txbuffersize" was set for sender, but
|
|
a relatively large FEC block size was kept, the sender app would
|
|
not be notified by stream "vacancy"
|
|
- Fixed bug with initialization of grtt_estimate when NormSetTransmitRate()
|
|
was called _before_ NormStartSender()
|
|
- Fixed intermediate issue where flush_timer mis-scheduling caused
|
|
sender to "hang" (Thanks to Scott Bates for quickly noticing this)
|
|
|
|
Version 1.3b8
|
|
=============
|
|
- Fixed implementation of NormQuantizeGroupSize() in "normMessage.h"
|
|
(Thanks to David Lucas for finding the bug)
|
|
- Fixed some issues with NORM/Protolib ns-2 support
|
|
- Added API NormGetGrtt() and NormNodeGetGrtt() calls
|
|
to support some application needs.
|
|
- Modified transmission of FEC parity segments such that their
|
|
length is only as big as needed to support the maximum
|
|
sent segment size for the associated block (this allows more
|
|
latitude for stream apps in setting their sender segment
|
|
size and flushing).
|
|
- Added NORM_CC_ACTIVE and NORM_CC_INACTIVE notifications to indicate
|
|
whether receivers are actively providing congestion control feedback
|
|
(Thanks to Charlie Davis for the great suggestion)
|
|
- Fixed some floating-point exceptions that could occur in receiver
|
|
congestion control tracking under extreme circumstances. This included
|
|
enhancement of receiver receive rate tracking.
|
|
(Thanks to Ian Downard for finding these issues)
|
|
- Changed naming of "SERVER" notifications in API to "SENDER"
|
|
notifications to be consistent with the rest of API.
|
|
- Debug statistics now indicate correct nack/suppressed counts
|
|
for silent receiver operation (i.e. none)
|
|
- Refined activity timeout of remote sender
|
|
(still need to give the app more control over resource allocation)
|
|
|
|
Version 1.3b7
|
|
=============
|
|
- Deprecated NORM stream payload flags in favor of "payload_msg_start"
|
|
field per revised NORM specification (draft-ietf-rmt-pi-nom-revised-00)
|
|
This included interpreting NORM_DATA (source segment) messages for
|
|
NORM_OBJECT_STREAM with "payload_len" field value of ZERO as
|
|
"stream control" messages where the "payload_msg_start" field serves
|
|
as the stream control message type indications. The "End-of-Stream"
|
|
control message consists of "payload_msg_start" = 0
|
|
when "payload_len" = 0. No other stream control messages are yet
|
|
defined. The next revision of the NORM spec will describe this.
|
|
(Thus for NORM stream purposes, this NORM version is _not_ interoperable
|
|
with previous versions)
|
|
- Fixed problem where NormServerNode "retrieval_pool" had allocated
|
|
segments one byte too small (although this is OBE with the above
|
|
deprecation of stream flags which is what the byte was used for)
|
|
- Fixed bug where sender objects were not properly "closed" when the
|
|
object table was cleaned upon NormStopSender()
|
|
- Added support to VC++ .Net workspace for building "Norm.dll"
|
|
(NORM as a dynamic linked library) and similarly added option
|
|
to build "libnorm.dylib" for MacOS. ("libnorm.so" for other
|
|
Unix platforms should already work).
|
|
- Fixed NormSetTOS() call.
|
|
- Added option to NormSetPortReuse() to maintain INADDR_ANY binding
|
|
if desired.
|
|
- Refined management of NORM sender stream buffer so sender wouldn't
|
|
prematurely discard buffer stream blocks when alot of small
|
|
segments (smaller than segment_size) were buffered.
|
|
- Added NormStopInstance() call to provide means for multi-threaded
|
|
NORM apps to stop the NORM protocol engine and awake any other thread
|
|
blocked on NormGetNextEvent() to signal shutdown of NormInstance.
|
|
- Also updated code so ns-2 build works and tested w/ ns-2.29
|
|
|
|
Version 1.3b6
|
|
=============
|
|
- Fixed some oversite bugs that crept in with changes in 1.3b5
|
|
(Fixed code related to NormNode/NormObject retain and release)
|
|
- Changed NORM_TX_QUEUE_VACANCY posting behavior to be less chatty.
|
|
NORM_TX_QUEUE_VACANCY now posted _only_ after a call to
|
|
NormStreamWrite() fails to fulfill a full write request
|
|
(i.e. returns less than the "numBytes" requested to be written)
|
|
This helps prevent build up of these notifications in multi-
|
|
threaded applications that write to a stream in a different
|
|
thread than is fetching events via NormGetNextEvent().
|
|
- Added NORM_TX_WATERMARK_COMPLETED notification and NormGetAckingStatus()
|
|
function to provide API support for optional positive acknowledgment
|
|
(ACK) collection in NORM implementation. Note that use of
|
|
NormAddAckingNode(session, NORM_NODE_NONE) enables a NACK-based
|
|
watermark flushing concurrent with ongoing data transmission that
|
|
can be used as a scalable application-level flow control mechanism.
|
|
|
|
Version 1.3b5
|
|
=============
|
|
- Changed ProtoSocket::GetInterfaceAddress() and related methods on Win32
|
|
to use different system APIs depending on Windows version.
|
|
- Fixed some details related to compilation with g++ 4.x.
|
|
- Various issues fixed thanks to input from Timothy Chaplin.
|
|
- Fixed some issues where attempt to resync rx stream after long
|
|
outages (at high data rates) called assertion failures
|
|
(Thanks to Charlie Davis for finding this one)
|
|
- Fixed problem where, on Win32, the sender GRTT estimate was not
|
|
being updated (in the downward direction) properly.
|
|
- Changes to Protolib & Norm to support build of shared libraries
|
|
(Thanks to Dave Talmage & Timothy Mann)
|
|
- Added "NormSetRxPortReuse()" API and code support to allow
|
|
(with care) multiple NORM instances on the same host.
|
|
- Fixes to NORM congestion control including:
|
|
1) measurement of "recv_rate" at low transmission rates
|
|
fixed (made sure measurement was over sufficient
|
|
interval at low rates including cc startup)
|
|
2) Re-instated code to reduce rate when feedback stopped
|
|
being received.
|
|
3) Changed to time-based aging of feedback to "deactivate"
|
|
stale congestion control feedback representative state
|
|
kept by sender.
|
|
4) Fixed mis-set of PLR flag as CLR flag and fixed bug
|
|
in updating CC node list upon CC feedback reception.
|
|
(Thanks to Praveen Gopala for prompting all of this)
|
|
- Fixes for Win32 large file support "in normFile.cpp"
|
|
(Thanks to Titze Stefan for this fix).
|
|
- Added "NormSetGrttMax()", "NormSetGrttProbingMode()",
|
|
and "NormSetGrttProbingInterval()" APIs to control
|
|
NORM GRTT measurement/estimation process.
|
|
(Thanks to Dave Lucas for prompting me here)
|
|
- Changed posting of NORM_TX_QUEUE_VACANCY for streams such
|
|
that new postings of this event are made, _only_ after a
|
|
successful call to NormStreamWrite() ... This results in
|
|
reduced posting of unnecessary vacancy events, but now the
|
|
onus is on the app to pay attention to this event, since
|
|
another of it's type won't be posted until the app calls
|
|
NormStreamWrite() with non-zero content length.
|
|
(Thanks to Charlie Davis for bringing this to my attention)
|
|
- Made sure messages from self are ignored unless loopback
|
|
is explicitly enabled (see NormSetLoopback()) even for
|
|
operating systems whose ProtoSocket::SetLoopback() doesn't
|
|
work properly.
|
|
|
|
Version 1.3b4
|
|
=============
|
|
- Added NormSetTxCacheBounds(), see NormDevGuide for details
|
|
- Fixed issue with NormStreamSeekMsgStart() that crept in
|
|
somehow (Thanks to Jody Hagins for finding it).
|
|
- Added code to check that NormFileEnqueue() argument is
|
|
actually a file and not a directory name (Thanks to
|
|
Charlie Shyr for finding this)
|
|
- Fixed NormSession::Open() so that IPv6 works
|
|
|
|
Version 1.3b3
|
|
=============
|
|
- Added NORM_TX_FLUSH_COMPLETE notification so the sender app
|
|
can make an educated guess as to when his receivers are
|
|
all happy.
|
|
- Added NORM API sample code in "examples" directory.
|
|
- Added NormObjectGetBytesPending() call for receivers to
|
|
use to monitor reception progress.
|
|
|
|
Version 1.3b2
|
|
=============
|
|
- Added "graceful" stream shutdown option to
|
|
NORM API via the NormStreamClose() call.
|
|
- Embedded FLAG_STREAM_END flag in "payload_reserved"
|
|
field of NORM_DATA messages. This is beyond
|
|
the current RFC 3940 spec for NORM, but probably
|
|
something to push for addition to the next revision
|
|
of the spec.
|
|
- Embedded equivalent FLAG_MSG_START in "payload_reserved"
|
|
field of NORM_DATA messages. This allows message
|
|
boundary recovery for streams upon FEC decoding.
|
|
Again, this is "beyond" the current NORM spec, but
|
|
probably a good idea (Other stream control functions
|
|
might use this field as well)
|
|
- Added Visual Studio .NET project files
|
|
|
|
Version 1.3b1
|
|
=============
|
|
- Prevented pile-up of TX_QUEUE_VACANCY notifications
|
|
- Fix/optimization to ProtoDispatcher threaded operation
|
|
to prevent possible (although minor) race condition
|
|
during threaded operation.
|
|
- Added NORM API calls: NormSetTxSocketBuffer(),
|
|
NormSetRxSocketBuffer(), NormSetUserData(),
|
|
NormGetUserData(), and implemented overlooked
|
|
NormGetDescriptor()
|
|
- Thanks again to Charlie Davis for finding some
|
|
performance deficiencies.
|
|
|
|
Version 1.2b9
|
|
=============
|
|
- Fixed bugs with NormServerNode::retrieval_pool mgmnt
|
|
(Thanks to Charlie Davis for tracking these down!!!)
|
|
- Changed ProtoDispatcher thread stuff so threads
|
|
(e.g. the NORM API thread) are only actively
|
|
signaled and interrupted when absolutely necessary
|
|
- Added support for NORM_TX_QUEUE_VACANCY notification
|
|
(for NORM_OBJECT_STREAM only at the moment)
|
|
|
|
Version 1.2b8
|
|
=============
|
|
- Fixed bug introduced during "alignment" changes
|
|
in previous release.
|
|
- Fixed Protolib WIN32 build issue
|
|
|
|
Version 1.2b7
|
|
=============
|
|
- Changed normMessage.[h|cpp] to fix alignment issues
|
|
(and other alignment stuff)
|
|
- Fixed bug in NormCmdCCMsg::Iterator::GetNextNode()
|
|
(might significantly help CC performance
|
|
- Fixed NormServerNode::FreeBuffers() bug which
|
|
could result in seg fault on remote server timeout
|
|
or at app shutdown
|
|
- Fixed bug where tx_sequence count was being
|
|
incremented for all transmitted messages (The "fix"
|
|
does not yet address separate increment of messages
|
|
sent to different addresses, etc). The bug impacted
|
|
congestion control performance when nodes acted as
|
|
sender _and_ receiver (caused receives to overestimate
|
|
packet loss)
|
|
|
|
Version 1.2b6
|
|
=============
|
|
- Added normApi.cpp into libNorm.a (Norm.lib (WIN32)) builds
|
|
- Fixed Solaris build (new protolib code)
|
|
- Included very rough user's guide for "norm" demo app
|
|
|
|
Version 1.2b5
|
|
=============
|
|
- Initial release with theoretically-working API
|
|
(including "Norm Developer's Guide!")
|
|
|
|
Version 1.2b4
|
|
=============
|
|
- Finally remembered to update this file!
|
|
- Added "help" command to "norm" demo app (Thanks Marinho Barcellos!)
|
|
- New rxbuffer mgmnt scheme to better use limited buffer space.
|
|
- Removed explicit rate limit on receiver feedback messages
|
|
- API more complete and established better API naming conventions
|
|
(documentation soon to follow, I promise!)
|
|
- There have been some "cc" tweaks and bug fixes.
|
|
- NORM RFC 3940 was released and this version is in compliance.
|
|
- Added optional positive acknowledgements for sender-defined
|
|
"watermarks".
|
|
- Fixed multicast leave problem when interfaceName was used for join
|
|
|
|
Version 1.1b9
|
|
=============
|
|
- There have been a number of bug fixes since 1.1b3. This release
|
|
fixes a bug in NormBlockBuffer::Remove() and
|
|
NormObjectBuffer::Remove(). (Thanks Thava!)
|
|
|
|
Version 1.1b3
|
|
=============
|
|
- Started keeping version history. This release includes
|
|
some bug fixes, smoother congestion control operation, etc
|
|
over some of the earlier releases.
|
|
|
|
Please address bug reports, suggestions etc to the email list:
|
|
|
|
mailto:norm-dev@pf.itd.nrl.navy.mil
|