The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for IPDR

Please see the examples directory on how to use the module.

IP ownership has now been resolved. This code is released under
artistic_2 license and any changes made,bugs found, general information


additions should be presented back to the author.
0.39	25/05/2011
	Added initiator_id tag InitiatorID => '10.1.1.1' so you can set
	the initiator to an IP address of your choice. Not too 
	useful except for multi homed servers with one gateway 
	defined.
0.38	25/05/2011
	Fixed Warning64BitOff properly. 
	Fixed use if BigInt, some strange merging of code resulting in 
	failing encode/decode of 64bit numbers
	ACK sending.
0.37	24/05/2011
	Changed the 64BitWarningOff to Warning64BitOff, aparently you can not
	use a number at the beginning of a variable name (weird).
0.36	22/05/2011
	Added LocalAddr to new setup. If you have multiple interfaces
	then set this to the IP of the interface you wish to use, ie.

	LocalAddr => '10.1.1.1'

	Would use the interface with the IP 10.1.1.1
0.35	18/05/2011
	Added more debugging output when DEBUG is set.
0.34	16/05/2011
	PacketDirectory code changed so you do not actually have to capture
	packets, small but important element !
0.33	16/05/2011
	Added Variable hexBinarySingle. This forces the module to ingest
	hexBinary data as single bytes not 16bit wide bytes. Default
	this is set to off.
0.32	12/05/2011
	Released as confirmed working
0.31_3	10/05/2011
	Dots, dashes, equals missing in places they should not have been. You
	can tell I havent looked at IPDR for quite a while.
0.31_2	10/05/2011
	Final fix for list extract(not really list), multiple typos and overall
	stupid coding fixed.
0.31	9/05/2011
	Thanks to Rui Dias dias < dot> rp <at > gmail <dot > com for helping in debug
	in a live environment.
	Fixed IPV6 length problem which caused other issues
	Changed the type IPList to handle provided data correctly. Each element is two
	bytes 
	Added support for different field names, but the same field type (number)
0.30    4/04/2011
        Fixed a double $$ typo for file creation
        Added (as a temp test) Math::BigInt support for 32bit systems for the
        Client.pm module, for Cisco*.pm you are out of luck.
        Math::BigInt 1.77 is now a requirement.
0.29	6/04/2010
	Added SessionName so that you can specify by name the session
	you wish to use on the remote server. This allows multiple
	sessions configured on the remote side to be chosen. If the name
	is not found  the first session on the remote side is used.
	All values are now unsigned. If you want signed, pack, unpack
	in your own code as part of the DataHandler pointer.
0.28	4/04/2010
	Added full template support for XDR datatypes. Signed values
	may be problematic on the platform due to endianess.
	Started support for Logging output
	Started to add support for Endianess changes.
0.27	31/03/2010
	Added MACFormat to the Client.pm as an option. This has two values
	1 and 2. Default 1 if omitted and determines how the MAC address
	will be formatted. The default is aabb.ccdd.eeff however when set 
	to 2 the format is AA-BB-CC-DD-EE-FF
0.26	30/03/2010
	Added serviceActiveTime into XML parser.
	Added PollTime as an option into new object ( default 900 seconds )
	Added ReturnPollTime as a function to return PollTime set
	Fixed DataHandler call to include $self object
0.25    17/01/2010
	SessionID finally fixed ( case sensitive typo ).
	Change network write and reads to include timeouts
	Added variables

	AckTimeOverride
	AckSequenceOverride

	Allows you to set the AckTimer and AckSequence numbers should
	you wish to.
 
	Added a new example which allows the IPDR client to reconnect
 	if the network or tcp connection timeouts/fails. 

0.24    15/01/2010
	SessionID again and also session specific Ack and Sequence
        handling
0.23.04 13/01/2010
	SessionID again
0.23.03	12/01/2010
	SessionID again
0.23.02 10/01/2010
	SessionID again previously coded to spec, now coded to an implementation
	lets see how it goes ( tears will ensue I suspect )

0.23.01	9/01/2010
	SessionID was not fixed correctly should be now
	MaxRecords appeared to be doing something odd. Removed the data
	ack sending as not required and added a purge of the data set
	from memory.

0.23	8/01/2010
	Beta version for fixing and implementation several features

	AckTime  - Implementation where data flows longer than a Timeout
	period and requires ACK during receiving.
	SessionID - Set properly rather than to 0. This is quite important
	and appears one or two vendor implementations like it to be correct.
	MaxRecords - Will send a data ack and call the external function
	after each amount of data records received.

0.22	15/12/2009
	Added XML writing and relating to the Client.pm using the
	XMLDirectory attribute

0.21	20/11/2009
	Added

	RemoteMulti tag to send to multiple destinations

	Example would be

	RemoteMulti => '10.1.1.1:9000:10,20.1.1.1:9000:10'

	This will send to multiple destinations at the same time for the
	same data. This is effectively a unicast repeater.

	Added

	RemoteSecure

	This is a simple 0 or 1 flag, default is 0. If set the 
	destination should be ready to accept a SSL connection as the 
	client tries to setup a SSL call. SSLKeyFile and SSLHostFile
	must be present otherwise the client setup will fail.

	Added the Client.pm module to convert XDR into XML and also
	relay this remotely.

	PDF started with examples on how to use the module and collect
	data. 

0.20	11/11/2009
	Fixed the really bad TCP handler, not sure how or why i did the
	previous way but should now work correctly.

	Added TCP relaying. New options are

	RemoteAddr		IP address
	RemotePort		Port
	RemoteTimeOut		In Seconds
	RemoteSpeed		In Mbps. ie. 40 or 100 will send at 40mbps or
					100mbps. Useful for managing network
					or server utilisation. Default is 10.

	Any data received is then sent on to the remote IP and Port using
	a clear channel TCP connection accepted by the Cisco module. SSL
	sending may be added in the future release

	Currently the remote sending is only supported on the Cisco and 
	CiscoSSL modules.

	Added CiscoSSL module. Really this is the Cisco module but using
	IO::Socket::SSL and pointers to a CA and Host key with

	SSLKeyFile
	SSLHostFile

	Example keys are included in the distribution TO GET YOU GOING BUT
	DO NOT USE THEM IN ANY PRODUCTION ENVIRONMENT!! YOU HAVE BEEN WARNED

	See CiscoSSL on how to create a key using openssl and how to apply
	it to the router side.

	Added 

	Force32BitMode

	This defaults to 0 and is only applicable to the Cisco and CiscoSSL
	modules. The 'make test' will still fail/skip, however if collecting
	from Cisco7200 series UBRs 64bit is not required and setting this
	to 1 will allow the Cisco/CiscoSSL to still work.

0.19	02/09/2009
	Added attributes to document level which are

	xmlns
	count
	version
	creationTime
	xsi:schemaLocation
	IPDRRecorderInfo
	xmlns:xsi
	endTime
	docId

	Added

	IPDRcreationTime
	RecType

	The version 3.5 template being used.

	Changed the 'DataHandler' function to also return a pointer to
	the module object to provide hooks to internal functions.

0.18	28/08/2009
	Added document to the sequences returned
0.17	26/08/2009
	Another bug in the Cisco module (you probably do not believe I 
	tested this extensively)
0.16	24/08/2009
	Bug in the Cisco module causing the DOCSIS parser to fail
	Thanks to Rui Dias for providing debug and comms to track it down
0.15	20/07/2009
	IP ownership resolved and now release under the artistic_2 license.
0.14	17/07/2009
	Made DataHandler fork when processing data. The time between
	pass off to external function and keep alive timeout could be
	exceeded, so to prevent stall fork applied.
0.13	16/07/2009
	Added keep alive to after session stop, otherwise IPDR exporter
	reported timeout. Session stop is not a disconnect state, so
	collector needs to send keepalive to maintain an open session.
	Fixed CMcpeIpv4List so at LEAST the first entry in the list is
	shown. Checking for more entries should work however there is
	no data available to be 100%
0.12	12/07/2009
	Changed some of the debug error messages to be more meaningful.
	template_value_definitions needs some work. Getting a clearly defined
	valueset is proving very difficult so more vendors required.
	Added some attributes for TCP extensions, so the data is sent to
	third party servers, if needed.
0.11	03/02/2009
	Fixed a typo to pass correct information to IO::Select
0.10	21/11/2008
	Modified some of the DATA_ACK messaging so large sequence sets
	of data are ACKd correctly. ( in someways a bug previously )
	Added 64bit check upon start up. Important as some users reported
	problems with the data but in fact turned out to be non 64bit
	OS or installations of Perl ( make test anyone? )
0.09	9/11/2008
	Added support for 5.1 series software for Motorola BSR
	Some TCP and packet handling changes cause 0.08 to break
	Added nice connection failure state
0.08	3/11/2008
	DOCSIS 1.1 & 3 supported properly now.
	Multiple flows caused issues with session counting. This is
	now resolved.
	Added additional feature to XDR handler to return the RAW data
	before processing to allow independent debugging.
	Tidied up some memory leak issues
	Started work on an IPDR relay function. This module will connect/get
	IPDR data then allow other clients to connect to it for relay. Useful
	to allow vendors/third parties access to the data but not access to
	the original source due to security.
0.07    16/10/2008
        All module versions brought into line for the distribution
        Makes it easier to maintain one version across the board.
0.06	16/10/2008
	Released into the real world after testing completed
	License out under per unit fee.
0.05	Made client and cisco have the same construct names
0.04	Reworked the XDR handler
0.03	Alpha state mark 2
0.02	Alpha state
0.01    01/09/2007