User's Guide
Reference Manual
Release Notes
PDF
Top

Diameter
Release Notes
Version 1.3

Expand All
Contract All

Chapters

- Release Notes
  - Top of chapter
  - Diameter 1.3
  - Diameter 1.2
  - Diameter 1.1
  - Diameter 1.0
  - Diameter 0.10
  - diameter 0.9

# 1 Release Notes

Releases are listed in reverse chronological order, most recent first.

### 1.1 Diameter 1.3

#### Fixed Bugs and Malfunctions

- Fix faulty handling of Origin-State-Id and faulty config values.

  The former was expected in a list despite the documentation requiring (correctly) an integer. A bare value for a list-valued capability was not handled.

  Own Id: OTP-10440

- Fix timing of up/down events.

  Previously, a call to diameter:call/4 following a peer_up callback might incorrectly return {error, no_connection}, depending on timing. Both events now follow the corresponding callbacks.

  Own Id: OTP-10459

- Make diameter:service_info/2 usable in peer_up, peer_down and pick_peer callbacks.

  Except for in pick_peer when {call_mutates_state, false}, it would previously hang indefinitely.

  Own Id: OTP-10460

- Verify that End-to-End and Hop-by-Hop Identifiers in an incoming CEA/DPA match those sent in the corresponding CER/DPR.

  The values were previously ignored. Answers whose identifiers do not match are handled as unexpected.

  Own Id: OTP-10565

- Fix formatting problems in PDF documentation.

  In particular, text corresponding to links in HTML was omitted in preformatted blocks. There are still issues with indentation but this is not diameter-specific.

  Own Id: OTP-10583

#### Improvements and New Features

- Let prepare_request, prepare_retransmit and handle_request callbacks return a function to be invoked on outgoing messages after encode.

  This allows encoded messages to be logged for example.

  Own Id: OTP-10441

- Add service_opt() 'restrict_connections' to allow multiple transport connections with the same peer.

  Own Id: OTP-10443

- Add service_opt() 'sequence' to allow the masking of a constant onto the topmost bits of End-to-End and Hop-by-Hop identifiers.

  This allows the same service on different nodes to use distinct values in outgoing request messages.

  Own Id: OTP-10445

- Add diameter:service_info(PeerRef) to return the transport_ref() and transport_opt() list of the corresponding transport.

  This allows easy access to these from diameter_app callbacks that only get peer_ref() as an argument.

  Own Id: OTP-10470

- Add reference pages diameter_codec(3) and diameter_make(3).

  Own Id: OTP-10471

- Add events for service start and stop.

  Own Id: OTP-10492

- Add transport_opt() 'disconnect_cb' to make the sending of DPR configurable.

  Whether or not DPR should be sent at application stop, service stop or transport removal is determined by the value returned by the callback, as is the Disconnect-Cause and timeout if DPA is not received.

  Own Id: OTP-10493

- Add transport_opt() 'capx_timeout' for the timeout associated with non-reception of CER/CEA.

  Own Id: OTP-10554

- Allow a handle_request callback to return a #diameter_packet{}.

  This allows an answer to set transport_data and header fields.

  Own Id: OTP-10566

- Update documentation for RFC 6733.

  RFC 3588 is now obsolete.

  Own Id: OTP-10568

### 1.2 Diameter 1.2

#### Fixed Bugs and Malfunctions

- Fix broken Result-Code setting and Destination-Host/Realm extraction.

  Result-Code was assumed to have arity 1 when setting this value in an answer to a request containing AVP decode errors. Destination-Host/Realm were only correctly extracted from messages in the common application.

  Own Id: OTP-10202

- Handle insufficient capabilities configuration more gracefully.

  A transport that does not have sufficient capabilities configuration in order to encode CER/CEA will now emit an error report noting the configuration error and exit instead of failing. The error is not detected at diameter:add_transport/2 since there is no requirement that a service be configured before its transports.

  Own Id: OTP-10203

- Ensure a failing peer_up/down callback does not affect transport connections to other peers.

  Such a failure would previously have taken down all of a service's connections.

  Own Id: OTP-10215

#### Improvements and New Features

- Statistics related to Diameter messages can be retrieved using diameter:service_info/2.

  Both Diameter and socket-level statistics are available, for both incoming and outgoing messages.

  Own Id: OTP-9608

- Allow multiple transport_module/config to diameter:add_transport/2.

  Multiple values are attempted in sequence until one results in an established connection. This provides a way for a connecting transport to specify configuration in order of preference. (For example, SCTP before TCP.)

  Own Id: OTP-9885

- Add events for state transitions in the RFC 3539 watchdog state machine.

  The watchdog state is also available through diameter:service_info/2.

  Own Id: OTP-10212

- Add diameter:service_info(SvcName, connections).

  This provides an alternative to diameter:service_info(SvcName, transport) that presents information per established connection instead of per transport reference.

  Own Id: OTP-10213

- Assorted documentation corrections/improvements.

  Own Id: OTP-10216

### 1.3 Diameter 1.1

#### Fixed Bugs and Malfunctions

- Fix fault in sending of 'closed' events.

  The fault made it possible for the 'closed' event not to be sent following a failed capabilities exchange.

  Own Id: OTP-9824

- Fix faulty diameterc -name/-prefix.

  A minor blunder when introducing the new dictionary parser in diameter-1.0 broke these options.

  Own Id: OTP-9826

### 1.4 Diameter 1.0

#### Fixed Bugs and Malfunctions

- Fix faulty cleanup after diameter:remove_transport/2.

  Removing a transport removed the configuration but did not prevent the transport process from being restarted.

  Own Id: OTP-9756

#### Improvements and New Features

- Add support for TLS over TCP.

  RFC 3588 requires that a Diameter server support TLS. In practice this seems to mean TLS over SCTP since there are limitations with running over SCTP: see RFC 6083 (DTLS over SCTP), which is a response to RFC 3436 (TLS over SCTP). The current RFC 3588 draft acknowledges this by equating TLS with TLS/TCP and DTLS/SCTP.

  TLS handshaking can take place either following a CER/CEA that negotiates TLS using the Inband-Security-Id AVP (the method documented in RFC 3588) or immediately following connection establishment (the method added to the current draft).

  Own Id: OTP-9605

- Improvements to the dictionary parser.

  The dictionary parser now emits useful error messages in case of faults in the input file, also identifying the line number at which the fault was detected. There are semantic checks that were missing in the previous parser, a fault in the interpretation of vendor id's in combination with @inherits has been fixed and @end can be used to terminate parsing explicitly instead of always parsing to end of file.

  Own Id: OTP-9639

- Improve dictionary reusability.

  Reusing a dictionary just to get a different generated module name or prefix previously required taking a copy of the source, which may consist of several files if inheritance is used, just to edit a couple of lines which don't affect the semantics of the Diameter application being defined. Options --name, --prefix and --inherits have been added to diameterc to allow corresponding values to be set at compile time.

  Own Id: OTP-9641

- Add capabilities_cb transport option.

  Its value is a function that's applied to the transport reference and capabilities record after capabilities exchange. If a callback returns anything but 'ok' then the connection is closed. In the case of an incoming CER, the callback can return a result code with which to answer. Multiple callbacks can be specified and are applied until either all return 'ok' or one doesn't.

  This provides a way to reject a peer connection.

  Own Id: OTP-9654

- Add @codecs to dictionary format.

  The semantics are similar to @custom_types but results in codec functions of the form TypeName(encode|decode, AvpName, Data) rather than AvpName(encode|decode, TypeName, Data). That is, the role of the AVP name and Diameter type name are reversed. This eliminates the need for exporting one function for each AVP sharing a common specialized encode/decode.

  Own Id: OTP-9708 Aux Id: OTP-9639

- Add #diameter_callback{} for more flexible callback configuration.

  The record allows individual functions to be configured for each of the diameter_app(3) callbacks, as well as a default callback.

  Own Id: OTP-9777

### 1.5 Diameter 0.10

#### Fixed Bugs and Malfunctions

- Handle #sctp_paddr_change and #sctp_pdapi_event from gen_sctp.

  The events are enabled by default but diameter_sctp neither disabled nor dealt with them. Reception of such an event caused a transport process to crash.

  Own Id: OTP-9538

- Fix header folding bug.

  A prepare_request callback from diameter can return a diameter_header record in order to set values in the header of an outgoing request. A fault in diameter_lib:fold_tuple/3 caused the subsequent encode of the outgoing request to fail.

  Own Id: OTP-9577

- Fix bugs in sending of answer-message replies.

  3001 (DIAMETER_COMMAND_UNSUPPORTED) was not sent since the decode placed the AVP list in the wrong field of the diameter_packet, causing the subsequent encode to fail. Session-Id was also set improperly, causing encode to fail even in this case.

  Own Id: OTP-9578

- Fix improper use of error_logger:info_report/2.

  Function doesn't take a format string and arguments as it was called. Instead use error_logger:info_report/1 and use the same report format as used for warning and error reports.

  Own Id: OTP-9579

- Fix and clarify semantics of peer filters.

  An eval filter returning a non-true value caused the call process to fail and the doc was vague on how an exception was treated. Clarify that the non-tuple host/realm filters assume messages of a certain form.

  Own Id: OTP-9580

- Fix and clarify relay behaviour.

  Implicit filtering of the sending peer in relaying a request could cause loop detection to be preempted in a manner not specified by RFC3588. Reply with 3002 (DIAMETER_UNABLE_TO_DELIVER) on anything but an answer to a relayed request.

  Own Id: OTP-9583

#### Improvements and New Features

- @id required in dictionary files only when @messages is specified.

  @id defines an application identifier and this is used only when sending or receiving messages. A dictionary can define only AVP's however, to be included by other dictionaries using @inherits, in which case it makes no sense to require @id.

  Note that message definitions are not inherited with @inherits, only AVP's

  Own Id: OTP-9467

- Allow @enum when AVP is defined in an inherited dictionary.

  3GPP standards (for one) extend the values allowed for RFC 3588 AVP's of type Enumerated. Previously, extending an AVP was only possible by completely redefining the AVP.

  Own Id: OTP-9469

- Migrate testsuites to pure common test and add both suites and testcases.

  Own Id: OTP-9553

- Requests of arbitrary form.

  diameter:call/4 can be passed anything, as long as the subsequent prepare_request callback returns a term that can be encoded.

  Own Id: OTP-9581

### 1.6 diameter 0.9

Initial release of the diameter application.

Known issues or limitations:

- Some agent-related functionality is not entirely complete. In particular, support for proxy agents, that advertise specific Diameter applications but otherwise relay messages in much the same way as relay agents (for which a handle_request callback can return a relay tuple), will be completed in an upcoming release. There may also be more explicit support for redirect agents, although redirect behaviour can be implemented with the current functionality.

- There is some asymmetry in the treatment of messages sent as diameter_header/avp records and those sent in the "normal" fashion, and not all of this is documented. This is related to the previous point since this form of sending a message was introduced specifically to handle relay agent behaviour using the same callback interface as for client/server behaviour.

- The User's Guide is currently quite thin. The introductory chapter followed by the examples (in the application examples subdirectory) may be sufficient for those having some familiarity with the Diameter protocol but the intention is to provide more introductory text. The reference documentation is quite complete, although some points could likely be expanded upon.

- The function diameter:service_info/2 can be used to retrieve information about a started service (statistics, information about connected peers, etc) but this is not yet documented and both the input and output may change in the next release.

See Standards Compliance for standards-related issues.