查看源代码 版本说明

版本按时间倒序列出,最近的版本排在最前面。

diameter 2.4.1

已修复的错误和故障

  • 主 API 模块的函数规范已更新。

    自有 ID:OTP-19126 辅助 ID:#8399

  • 现在可以为 erlerlcdialyzer 以及 Erlang/OTP 中包含的所有其他程序提供手册页。

    自有 ID:OTP-19201 辅助 ID:PR-8740

  • diameter:stop_service/1 已变得更加同步。

    自有 ID:OTP-19206 辅助 ID:ERIERL-1102

diameter 2.4

改进和新功能

  • -callback 属性已添加到 diameter_appdiameter_transport

    自有 ID:OTP-18783 辅助 ID:PR-7699

  • 文档已迁移为使用 Markdown 和 ExDoc。

    自有 ID:OTP-18955 辅助 ID:PR-8026

  • 选择对等方现在也可以处理 #diameter_packet{} 类型的请求。

    自有 ID:OTP-19090 辅助 ID:PR-8399

diameter 2.3.2.2

已修复的错误和故障

  • 停止服务已变得更加同步。

    自有 ID:OTP-19206 辅助 ID:ERIERL-1102

diameter 2.3.2.1

改进和新功能

  • 选择对等方现在也可以处理 #diameter_packet{} 类型的请求。

    自有 ID:OTP-19090 辅助 ID:PR-8399

diameter 2.3.2

已修复的错误和故障

  • 通过引入一个选项 bins_info 来控制这一点,减少调用 service_info 时不计算二进制文件(在堆上)信息的影响。

    自有 ID:OTP-19040 辅助 ID:ERIERL-1060

diameter 2.3.1

已修复的错误和故障

  • 将某些文件中无意的 Erlang Public License 1.1 标头替换为预期的 Apache License 2.0 标头。

    自有 ID:OTP-18815 辅助 ID:PR-7780

diameter 2.3

改进和新功能

  • 将 size/1 替换为 tuple_size/1 或 byte_size/1

    JIT 不会优化 size/1 BIF,并且其使用可能导致 Dialyzer 的类型更差。

    当知道被测试的值必须是元组时,应始终首选 tuple_size/1

    当知道被测试的值必须是二进制时,应首选 byte_size/1。但是,byte_size/1 也接受位串(将大小向上舍入为整数个字节),因此必须确保在调用 byte_size/ 之前调用 is_binary/1 以确保拒绝位串。请注意,编译器会删除对 is_binary/1 的冗余调用,因此如果不确定之前的代码是否已确保参数是二进制,则在调用 byte_size/1 之前添加 is_binary/1 测试不会有害。

    自有 ID:OTP-18405 辅助 ID:GH-6672、PR-6702、PR-6768、PR-6700、PR-6769、PR-6812、PR-6814

  • 弃用 dbg:stop_clear/0,因为它只是 dbg:stop/0 的函数别名

    自有 ID:OTP-18478 辅助 ID:GH-6903

  • 已修复该实现以在适当的地方使用 proc_lib:init_fail/2,3,而不是 proc_lib:init_ack/1,2

    * 潜在的不兼容性 *

    自有 ID:OTP-18490 辅助 ID:OTP-18471、GH-6339、PR-6843

diameter 2.2.7.2

已修复的错误和故障

  • diameter:stop_service/1 已变得更加同步。

    自有 ID:OTP-19206 辅助 ID:ERIERL-1102

diameter 2.2.7.1

已修复的错误和故障

  • 通过引入一个选项 bins_info 来控制这一点,减少调用 service_info 时不计算二进制文件(在堆上)信息的影响。

    自有 ID:OTP-19040 辅助 ID:ERIERL-1060

diameter 2.2.7

改进和新功能

  • 有一个新的配置选项 --enable-deterministic-build,它将在构建 Erlang/OTP 时应用 deterministic 编译器选项。 deterministic 选项已得到改进,以消除多个应用程序中更多的非确定性来源。

    自有 ID:OTP-18165 辅助 ID:PR-5965

diameter 2.2.6

已修复的错误和故障

  • 修复了对非 IP 地址类型的解码;也就是说,修复了派生的 AVP 数据格式 Address 的值的解码,其前两个八位字节指定了地址族,而不是 1 (IP) 或 2 (IP6)。此类值从未被解码,并被视为解码错误。现在,它们被解码为整数() 地址族和二进制() 其余八位字节的 2 元组,没有特定于族的解码。2 元组将解码与 4 元组和 8 元组 IP 地址解码区分开来。2 元组现在也进行了编码。

    请注意,即使是当前未分配的地址族也会被解码:只有保留值 0 和 65535 被视为错误。

    自有 ID:OTP-17976 辅助 ID:GH-5463

diameter 2.2.5

已修复的错误和故障

  • 编译时间不再记录在 BEAM 文件中。仍然有几个未记录的函数试图检索编译时间。这些函数现在已被删除。

    自有 ID:OTP-17962

diameter 2.2.4

已修复的错误和故障

  • 在客户端 diameter_sctp 传输上忽略了 unordered 选项,导致所有交付都是有序的。

    在请求无序交付时,未将关联 ID 指定给 gen_sctp,导致该设置应用于整个端点。

    感谢 Bengt Kleberg 和 Andreas Schultz。

    自有 ID:OTP-17366 辅助 ID:GH-4775

diameter 2.2.3

已修复的错误和故障

  • 将 “first” 元组添加到类型 diameter:peer_filter/0。该过滤器在 OTP-17.5.6.8 和 OTP-18.3 中添加,但这两个版本都没有更新类型规范。

    自有 ID:OTP-16548 辅助 ID:ERL-1191

diameter 2.2.2

已修复的错误和故障

  • 在 OTP 20.0 中记录了为配置了 MFA 的传入 Diameter 请求选择处理程序进程的可能性,但当此进程位于远程节点上时,计数器(带有 {traffic_counters, true})不会递增。现在,计数器会在配置相关传输的节点上递增。

    在 OTP 21.3 中引入。

    自有 ID:OTP-16457

  • 在多种情况下使用了与传递给 diameter:add_transport/2 的选项不同的传输选项:在初始连接尝试失败后,在 connect_timer 过期后启动传输进程时,在接受连接后启动传输进程时,在发送事件时,在 diameter:service_info/2 中返回选项时,以及可能更多的情况。特别是,diameter:add_transport/2 的以下配置选项被删除:avp_dictionaries、incoming_maxlen、spawn_opt、strict_mbit。

    此外,任何错误地传递给 diameter:add_transport/2 的服务选项都被解释为这样,而不是像文档所述的那样被忽略,结果是传出和传入的请求看到了某些选项的不同值,有些始终从传输选项中获取,而另一些则从服务选项中获取。

    必须在新代码中调用 diameter:add_transport/2 才能使修复生效。

    在 OTP 20.1 中引入。

    自有 ID:OTP-16459

diameter 2.2.1

已修复的错误和故障

  • 修复了来自模块 diameter_dist 的意外广泛监视器,导致 gen_server 向隐藏节点发送强制转换消息。

    自有 ID:OTP-15768

diameter 2.2

已修复的错误和故障

  • 修复了带有错误的 Experimental-Result-Code 的传入答案消息的失败。未能解码 AVP 导致未捕获的异常,从而导致没有 handle_answer/error 回调。

    自有 ID:OTP-15569 辅助 ID:ERIERL-302

改进和新功能

  • 添加 spawn_opt MFA 配置,以允许回调在任意节点上为传入的 Diameter 请求生成处理程序进程。模块 diameter_dist 提供了一个 route_session/2,可用于基于 Session-Id 分发请求,尽管此模块目前仅在模块本身中记录,并且可能会发生更改。

    自有 ID:OTP-15398

diameter 2.1.6

已修复的错误和故障

  • 修复了在响应传入的 DPR 发送 DPA 后,发送传出请求时出现的 function_clause 错误。这会导致与对等连接关联的 diameter_peer_fsm gen_server 失败,然后可能导致传输连接在对等方接收到 DPA 时关闭之前被重置。

    自有 ID:OTP-15198 辅助 ID:ERIERL-213

diameter 2.1.5

修复的错误和故障

  • 修复了文档中的拼写错误。

    自有 ID:OTP-15045

diameter 2.1.4.1

修复的错误和故障

  • 修复了带有错误的 Experimental-Result-Code 的传入答案消息的失败。未能解码 AVP 导致未捕获的异常,从而导致没有 handle_answer/error 回调。

    自有 ID:OTP-15569 辅助 ID:ERIERL-302

diameter 2.1.4

修复的错误和故障

  • 修复了 diameter:remove_transport/2 中 diameter_tcp/sctp 监听套接字的关闭问题,该问题在 diameter 2.1 中被破坏。因此,重新配置的传输无法在与先前相同的端点上进行监听。

    自有 ID:OTP-14839

  • 修复了在服务终止时对 SUSPECT 连接的处理。具有此监视状态的连接会导致 diameter_service:terminate/2 失败。

    自有 ID:OTP-14947 辅助 ID:ERIERL-124

diameter 2.1.3

修复的错误和故障

  • 修复了文档中的拼写错误:peer_up/3 被错误地写成了 peer_down/3。

    自有 ID:OTP-14805

diameter 2.1.2

修复的错误和故障

  • 在 diameter 2.1 中引入的一个错误可能导致 Grouped AVP 标头之后的 AVP 中的解码错误被忽略。

    自有 ID:OTP-14684 辅助 ID:ERIERL-85

diameter 2.1.1

修复的错误和故障

  • diameter 2.1 中一个被意外移除的监视器导致 ets 表 diameter_reg 泄露条目,并导致服务重启等失败。

    自有 ID:OTP-14668 辅助 ID:ERIERL-83

diameter 2.1

修复的错误和故障

  • 修复了在设置 E 位时应答消息中 Proxy-Info 的处理。

    RFC 6733 要求将传入请求中的 Proxy-Info AVP 回显到传出的应答中。diameter 在制定应答时没有这样做;例如,handle_request 回调返回 'answer-message' 或 protocol_error 元组的结果。

    自有 ID:OTP-9869

  • 在共享对等连接时对 nodeup/nodedown 做出反应。

    服务配置 share_peers 和 use_shared_peers 没有响应远程节点的到来和离开。

    自有 ID:OTP-14011

  • 修复了不恰当的消息回调。

    传入的 CER 或 DPR 被视为已丢弃,导致在 diameter_tcp/sctp 中生成相应的消息回调(如果已配置)。

    自有 ID:OTP-14486

  • 修复了 5009 错误(DIAMETER_AVP_OCCURS_TOO_MANY TIMES)的处理。

    RFC 6733 规定应报告第一个超出范围的 AVP,但是 diameter_packet 记录的 errors 字段中的建议从消息的尾部(而不是头部)计算 AVP。此外,OTP 20.0 中的 diameter 2.0 通过接受比消息语法允许的多一个 AVP 而破坏了计数。

    自有 ID:OTP-14512

  • 在 diameter_tcp/sctp accept 元组中进行不区分大小写的匹配。

    在监听传输中接受连接时对远程地址的匹配是区分大小写的,导致语义由于 (kernel) OTP-13006 而发生变化。

    自有 ID:OTP-14535 辅助 ID:OTP-13006

  • 修复了在共享传输时远程发送的向后兼容性问题。

    在运行旧版本 diameter 的远程节点上,通过传输连接发送请求被 OTP 20.0 中的 diameter 2.0 破坏。

    自有 ID:OTP-14552

  • 修复了 diameter_packet.avps 对 Failed-AVP 中 Grouped AVP 错误的解码。

    解码没有生成 diameter_avp 记录列表,因此有关故障组件 AVP 的信息丢失。

    自有 ID:OTP-14607

改进和新功能

  • 允许在 diameter_sctp 中配置无序传递。

    使用选项 {unordered, boolean() | pos_integer()},默认值为 false,并且 N 等效于 OS =< N,其中 OS 是相关关联上协商的出站流的数量。如果配置了此选项,则在接收到第二条消息后开始无序发送,在此之前,传出消息将在流 0 上发送。

    默认值 false 是为了向后兼容,但是应将 false 或 1 设置为遵循 RFC 6733 关于使用无序发送以避免队头阻塞的建议。通常没有有意义的顺序需要保留,因为发送方不知道传输进程接收传出消息的顺序。

    自有 ID:OTP-10889

  • 在用户指南中完成/简化标准合规性。

    自有 ID:OTP-10927

  • 添加服务选项 decode_format。

    允许将传入消息解码为映射或列表,而不是记录。消息可以以任何编码格式呈现。

    解码性能也得到了提高。

    自有 ID:OTP-14511 辅助 ID:OTP-14343

  • 添加服务选项 traffic_counters。

    允许禁用与消息相关的计数器,这在某些用例中可以提高性能。

    自有 ID:OTP-14521

  • 允许在 diameter_tcp/sctp 中将环回/任意地址用作本地地址。

    原子是由文档暗示的,但没有在代码中处理。

    自有 ID:OTP-14544

  • 添加传输选项 strict_capx。

    允许放宽 RFC 6733 的要求,即如果在能力交换之前收到消息,则关闭传输连接。

    自有 ID:OTP-14546

  • 与服务/传输配置保持一致。

    对于有意义的选项,现在可以在服务上配置传输选项的默认值。以前仅对选项的任意子集是这种情况。

    自有 ID:OTP-14555

  • 添加服务/传输选项 avp_dictionaries。

    为了更好地支持未在应用程序字典中定义的 AVP:在 avp_dictionaries 元组中配置额外的字典允许以与应用程序 AVP 非常相似的方式对它们的 AVP 进行编码/解码。

    其动机是 RFC 7683 Diameter 过载指示 (DOIC),它定义了旨在附加到任意消息的 AVP。DOIC 字典已包含在安装中,位于模块 diameter_gen_doic_rfc7683 中。

    自有 ID:OTP-14588

  • 解码设置 E 位的应答中的应用程序 AVP。

    之前,只解码了定义 answer-message 语法的公共应用程序中的 AVP,而没有解码所发送消息的应用程序中定义的 AVP。

    自有 ID:OTP-14596

diameter 2.0

改进和新功能

  • 允许将候选对等方传递给 diameter:call/4

    使用 call 选项 peer,允许将请求发送到尚未声明支持相关应用程序的对等方。

    RFC 6733 2.4 要求节点在能力交换时发送本地支持的所有应用程序的应用程序标识符,但并非所有节点都遵守公共应用程序的此要求,并且 diameter 本身将发送 D[WP][RA] 而无需明确声明公共应用程序。但是,将公共应用程序视为隐式使得 Result-Code 5010 (DIAMETER_NO_COMMON_APPLICATION) 变得毫无意义,因此只要有配置的字典支持,就允许发送任何请求。

    自有 ID:OTP-14338

  • 提高消息编码/解码和相关处理的性能。

    使用 @custom_types 或 @codecs 的字典需要调整相应的函数以接受现在通过编码/解码传递的附加参数,这是删除过去用于解决各种问题的基于进程字典的解决方法所必需的。

    * 潜在的不兼容性 *

    自有 ID:OTP-14343

  • 添加传输选项以避免死锁并允许进行负载调节。

    diameter_tcp 和 diameter_sctp 现在都接受两个新的配置选项:sender 和 message_cb。前者使传出发送在专用进程中进行,以避免当传输进程及其对等方都在发送中阻塞时发生死锁的可能性。后者允许回调来控制套接字上消息的读取,以便在传入流量速率高于其他方式可以处理的速率时允许对对等方进行反压。

    这两个选项都尚未记录,但除非发现问题,否则不太可能发生变化。sender 选项不是默认选项,因为它可能应该始终与 message_cb 结合使用,以防止以高于对等方允许发送传出应答的速率读取传入请求。

    自有 ID:OTP-14455 辅助 ID:ERL-332

diameter 1.12.2

修复的错误和故障

  • diameter 1.12.1 中对对等故障转移的处理的改进在发送请求时对性能产生了不利影响。此外,还删除了用于路由传入应答的公共表的使用效率低下的情况。

    自有 ID:OTP-14206

  • 修复了旧版本发行说明中的 xml 问题

    自有 ID:OTP-14269

diameter 1.12.1

修复的错误和故障

  • 在 diameter:stop_service/1 处关闭 diameter_tcp/sctp 监听套接字。

    被 OTP-13611 破坏。

    自有 ID:OTP-13787 辅助 ID:OTP-13611

  • 更新构建脚本,使其不再假设 env、cp 和 perl 所在的路径。

    自有 ID:OTP-13800

diameter 1.12

修复的错误和故障

  • 确保在删除传输时关闭监听套接字。

    删除传输不会立即关闭 diameter_tcp/sctp 监听套接字,并且随后的对等连接导致它保持打开状态。

    自有 ID:OTP-13611

改进和新功能

  • 添加 diameter:peer_info/1

    它以类似于 diameter:service_info/2 的方式检索信息,但仅适用于单个对等连接。

    自有 ID:OTP-13508

diameter 1.11.2

修复的错误和故障

  • 提高对等处理效率。

    对等列表的低效查找和操作可能会导致在同时发送许多传出请求或同时连接许多对等方时性能不佳。在许多情况下,按 realm/host 过滤对等列表现在也更高效。

    自有 ID:OTP-13164

  • 修复了在监视状态 SUSPECT 中共享对等连接的处理。

    来自远程节点的对等连接在其连接的整个生命周期内都被认为是处于活动状态,忽略了看门狗转换到 SUSPECT 状态。

    自身 ID:OTP-13342

diameter 1.11.1

修复的错误和故障

  • 修复请求表泄漏

    为了在收到相应的应答消息时能够定位调用者,传出的 Diameter 请求的端到端和逐跳标识符被存储在一个表中。如果处理程序由于回调函数采取的操作而通过退出信号终止,或者如果回调修改了重传情况下的标识符,则条目会被孤立。

    自身 ID:OTP-13137

diameter 1.11

修复的错误和故障

  • 修复嵌套的 Grouped AVP 的中继编码。

    如果 Grouped AVP 中的第一个 AVP 本身也是 Grouped AVP,则 OTP-12475 中的一个错误会导致编码失败。

    自身 ID:OTP-12879 辅助 ID:OTP-12475

  • 以不区分大小写的方式匹配可接受的对等地址。

    传递给 diameter_tcp 或 diameter_sctp 的 'accept' 元组中的正则表达式不适当地匹配了大小写。

    自身 ID:OTP-12902

  • 修复 diameter_watchdog 函数子句。

    OTP-12912 引入了一个错误,即接受传输设置 {restrict_connections, false},导致对等连接终止时进程失败。

    自身 ID:OTP-12969

改进和新功能

  • 不要不必要地报告 5005 (DIAMETER_AVP_MISSING) 错误。

    尽管由于失败而报告了另一个错误,但解码失败的 AVP 仍被报告为丢失。

    自身 ID:OTP-12871

  • 提高解码性能。

    在最坏的情况下,解码消息所需的时间与 AVP 的数量呈二次方增长,从而导致执行时间过长。

    自身 ID:OTP-12891

  • 提高看门狗和统计信息的性能。

    计时器的低效使用导致在高负载下性能不佳,写入统计信息的表的排序也是如此。

    自身 ID:OTP-12912

  • 添加 service_opt() strict_mbit。

    对于接收设置 M-bit 的任意 AVP 是否是错误,存在不同的看法。默认解释是严格的:如果命令语法没有明确允许设置 M-bit 的 AVP,则接收这样的 AVP 将被视为错误。设置 {strict_mbit, false} 会禁用此检查。

    自身 ID:OTP-12947

diameter 1.10

修复的错误和故障

  • 修复包含错误的 Grouped AVP 的解码。

    RFC 6733 在 7.5 中描述了 Failed-AVP:

    • ____ - 如果违规的 AVP 嵌入在 Grouped AVP 中,则 Failed-AVP 可以包含该 Grouped AVP,而该 Grouped AVP 又包含单个违规的 AVP。如果 Grouped AVP 本身嵌入在另一个 Grouped AVP 中,则可以采用相同的方法,依此类推。在这种情况下,Failed-AVP 可以包含 Grouped AVP 层次结构,直到单个违规的 AVP。这使得接收方能够检测到嵌入在组中的违规 AVP 的位置。

    它在 7.1.5 中描述了 DIAMETER_INVALID_AVP_LENGTH:

    • ____ - 请求包含长度无效的 AVP。指示此错误的 Diameter 消息必须在 Failed-AVP AVP 中包含违规的 AVP。如果错误的 AVP 长度值超过消息长度或小于最小 AVP 标头长度,则包含违规的 AVP 标头和最小所需长度的零填充有效负载对于有效负载数据类型就足够了。如果 AVP 是 Grouped AVP,则带有空有效负载的 Grouped AVP 标头足以指示违规的 AVP。如果当 AVP 长度小于最小 AVP 标头长度时,无法完全解码违规的 AVP 标头,则通过用零填充不完整的 AVP 标头直到最小 AVP 标头长度来形成违规的 AVP 标头就足够了。

    diameter_packet 记录的 errors 字段中放置的 AVP 旨在适合包含在 Failed-AVP 中,但在 Grouped 情况下,以上两个段落都没有遵循:整个错误 AVP(包括非错误组件)都被包含在内。这使得在所有情况下(除了简单的情况)很难识别实际的错误 AVP。

    现在,解码已适应 RFC,并实现了建议的单个错误 AVP,嵌套在所需的多个 Grouped 容器中。

    自身 ID:OTP-12721

  • 修复 Solaris 上的 SCTP 问题。

    Solaris 中关联 ID 的分配与 diameter_sctp 中的一个假设相冲突,导致接受多个对等连接时失败。

    自身 ID:OTP-12768

  • 修复备用传输的启动顺序。

    使用 diameter:add_transport/2 配置的传输可以传递多个 transport_module/transport_config 元组,以指定备用配置,模块将按顺序尝试,直到一个成功。这主要用于连接情况;例如,允许配置传输首先尝试通过 SCTP 连接,然后在 SCTP 失败的情况下通过 TCP 连接。可以将多个模块元组与单个配置元组配对,但在这种情况下,启动顺序与指定模块的顺序相反。

    自身 ID:OTP-12851

改进和新功能

  • 将许可证文本从 Erlang 公共许可证更改为 Apache 公共许可证 v2。

    自身 ID:OTP-12845

diameter 1.9.2

修复的错误和故障

  • 修复损坏的中继计数器。

    OTP 17.5.3 中的 OTP-12654 在中继应用程序中接收到应答消息的情况下破坏了计数器。计数器被累积为未知消息或 no_result_code,而不是累积在预期的 Result-Code 和 'Experimental-Result' 元组上的中继消息。

    自身 ID:OTP-12741

  • 修复 diameter_sctp 侦听器竞争。

    OTP-12428 中的一个疏忽使得启动一个无法建立关联的传输进程成为可能。

    自身 ID:OTP-12744

diameter 1.9.1

已知错误和问题

  • 不要在解码的 AVP 数据中留下额外的位。

    OTP 17.3 中的 OTP-12074 遗漏了一种情况:在未知的尾随 AVP 上出现长度错误。

    自身 ID:OTP-12642

  • 不要混淆 Result-Code 和 Experimental-Result。

    当在不设置 E-bit 的应答中收到包含 3xxx Result-Code 的 Experimental-Result 时,解码的 diameter_packet 记录的 errors 字段会填充 Result-Code AVP。现在从传入消息中提取正确的 AVP。

    自身 ID:OTP-12654

  • 不要依赖未知的应用程序 ID。

    OTP 17.1 中的 OTP-11721 遗漏了应用程序 ID 与相关字典的应用程序 ID 不一致的情况,导致计数器累积在包含未知 ID 的键上。

    自身 ID:OTP-12701

diameter 1.9

修复的错误和故障

  • 不要不必要地丢弃传出的应答。

    即使编码成功,缺少 Result-Code AVP 或不适当地设置 E-bit 的应答也会被丢弃。

    自身 ID:OTP-11492

  • 增加监督超时。

    在 Diameter 应用程序关闭时,由于监督超时时间过短,可能会省略打开的对等连接上的 DPR。

    自身 ID:OTP-12412

  • 修复作为标头/avps 列表发送的消息的重传。

    提取端到端和逐跳标识符会导致函数子句错误,从而导致 handle_error 回调。

    自身 ID:OTP-12415

  • 修复具有解码错误的 Grouped AVP 的 diameter_avp 解码。

    此类 AVP 的组件未被提取,导致它由单个 diameter_avp 记录表示,而不是预期的列表。

    必须重新编译字典文件才能使修复生效。

    自身 ID:OTP-12475

  • 修复中继消息中 AVP 的排序。

    相对于接收顺序,顺序是相反的,并且预先添加了一个 Route-Record AVP。

    感谢 Andrzej Trawiński。

    自身 ID:OTP-12551

  • 修复 DiameterURI 编码/解码的问题。

    RFC 6773 更改了默认端口和传输,但即使在使用 RFC 6733 通用字典的情况下,仍使用了 RFC 3588 默认值。现在只有当通用字典是 diameter_gen_base_rfc3588 时,才会使用 RFC 3588 默认值。

    RFC 3588 和 6733 都禁止 transport=udp;protocol=diameter。现在对该组合的编码失败。

    对范围 0-65535 之外的端口号以及长度超过 255 个八位字节的完全限定域名进行解码现在会失败。

    请注意,RFC 3588 已过时,并且存在 diameter_gen_base_rfc6733。当使用不发送所有 URI 组件的对等方移动到 RFC 6733 时,默认值的更改可能存在互操作性问题。另一个问题是,6733 允许在设置 E-bit 的应答消息中使用 5xxx 结果代码,而 RFC 3588 不允许。

    自身 ID:OTP-12589

改进和新功能

  • 添加 service_opt() string_decode。

    禁用将可能很大的二进制文件解码为字符串。这可以防止在传入的 Diameter 消息在进程之间传递时复制大型字符串,这是一个漏洞,如果存在足够恶意的对等方,可能会导致内存耗尽。

    该值是一个 boolean(),true 是为了向后兼容的默认值。设置 false 会导致 diameter_caps 记录和解码的消息在以前具有 string() 的相关位置包含 binary():需要为更改做好准备 diameter_app(3) 回调。

    受影响的 Diameter 类型是 OctetString 和派生类型 UTF8String、DiameterIdentity、DiameterURI、IPFilterRule 和 QoSFilterRule。时间和地址不受影响。

    自身 ID:OTP-11952

  • 添加 transport_opt() pool_size。

    允许接受传输进程池,这可以更好地服务于多个同时发生的对等连接。该选项也可以与连接传输一起使用,以建立与同一对等方的多个连接,而无需配置多个传输。

    自身 ID:OTP-12428

  • 允许使用 diameter:call/4 发送 DPR。

    之前可以发送,但应答被视为未经请求而被丢弃。现在,DPA会导致相关传输过程终止,就像直径本身发送DPR一样。

    自身 ID: OTP-12542

  • 在 DPR 之后丢弃请求。

    RFC 6733 的描述不够精确,但其基调是,在 DPR 之后收到的消息是一种例外情况,之所以需要处理仅仅是因为 SCTP 可能出现无序交付。因此,并且由于在即将丢失对等连接的情况下,DPR 之后的请求不太可能得到应答,因此丢弃出站或入站 DPR 之后的出站请求。入站请求也被丢弃,但 DPR 本身除外。应答照常发送和接收。

    自身 ID: OTP-12543

  • 添加 transport_opt() dpr_timeout。

    当对等方未能关闭连接时,导致在发送 DPA 后关闭对等连接。根据 RFC 6733,DPA 的接收者应该关闭连接。

    自身 ID: OTP-12609

  • 添加 service_opt() incoming_maxlen。

    用于限制传入 Diameter 消息的预期大小。大于指定字节数的消息将被丢弃,以防止恶意对等方产生过多的负载。

    自身 ID: OTP-12628

diameter 1.8

已修复的错误和故障

  • 修复远程 diameter_request 表泄漏。

    一个出站请求的 pick_peer 回调函数选择了另一个节点上的传输,导致该节点上出现孤立的表项。

    自身 ID: OTP-12196

  • 修复不带 E 位的 3xxx 结果代码的处理。

    当检测到传入请求的 E 位/结果代码不匹配时,OTP-12233 破坏了 diameter_packet 记录的错误字段的填充,导致一个 4 元组作为结果代码插入到 diameter_avp 记录中。

    自身 ID: OTP-12233

  • 修复被忽略的连接计时器。

    有两个计时器控制对等连接的建立:connect_timer 和 watchdog_timer。前者是 RFC 6733 Tc 计时器,用于初始连接建立。后者是 RFC 3539 TwInit,用于连接重建。一个连接中的传输错误地在两种情况下都使用了 watchdog_timer。

    自身 ID: OTP-12281 辅助 ID: seq12728

改进和新功能

  • 对 pick_peer 回调函数中的候选对等方进行排序。

    之前没有记录呈现给 diameter_app(3) pick_peer 回调函数的候选对等方的顺序,但存在一些可以通过排序简化的用例。现在,该顺序由过滤器确定。

    自身 ID: OTP-12308

diameter 1.7.1

已修复的错误和故障

  • 不要在解码的 AVP 数据中留下额外的位。

    在出现长度错误的情况下,可以在 diameter_avp 记录的数据字段中传递一个额外的位。对于使用 Diameter 消息记录编码的代码没有影响,但检查 diameter_avp 记录的代码会看到此位。

    必须重新编译字典文件才能使修复生效。

    自身 ID: OTP-12074

  • 修复设置 E 位的出站请求和应答的计数。

    OTP-11721 破坏了除 DWR 之外的所有出站请求的这些计数器,并导致将设置 E 位的应答计数为未知消息。

    自身 ID: OTP-12080

  • 修复 Failed-AVP 解码。

    尽力而为的解码仅适用于公共字典中的 AVP,而不适用于相关应答消息的 Diameter 标头中标识的应用程序字典中的 AVP。

    使用 RFC 3588 公共字典 (diameter_gen_base_rfc3588) 解码的应答中的 Failed-AVP 被视为错误。RFC 6733 字典不受影响。

    必须重新编译字典文件才能使修复生效。

    自身 ID: OTP-12094

diameter 1.7

已修复的错误和故障

  • 提高健壮性。

    diameter:service_info/2 返回的计数器现在仅计算相关字典中已知的消息,因此攻击者无法导致创建任意数量的计数器。

    发送到 Erlang 日志的消息已最小化,并且与流量相关的消息已完全删除,因为攻击者可能会导致节点被日志记录过多而死机。因此,默认的 answer_errors 配置已从 report 更改为 discard。需要重新启动服务才能使默认更改生效。

    自身 ID: OTP-11721

  • 修复请求表泄漏。

    出站 Diameter 请求存储在一个表中,直到收到应答或超时。在此之前调用 diameter:stop_service/1 会使条目成为孤立的,从而导致内存泄漏。

    自身 ID: OTP-11893

  • 修复损坏的 SCTP 传输。

    OTP-11593 导致通过 SCTP 发送应答消息失败。

    自身 ID: OTP-11901 辅助 ID: OTP-11593

  • 修复 watchdog 进程泄漏。

    监听传输上的功能交换失败会导致进程孤立,从而导致内存泄漏。

    自身 ID: OTP-11934

  • 修复传入 DPR 的错误处理。

    在监听传输的情况下,对等方在 DPR 之后重新连接可能会将 watchdog 状态转换为 REOPEN 而不是 OKAY。

    自身 ID: OTP-11938

  • 修复对未知 AVP 的 AVP 长度错误的错误处理。

    在这种情况下,指向消息末尾的 AVP(标头)长度未标记为 5014 错误。此外,由于其他错误(例如,M 位,导致 5001),如果 AVP 包含完整的标头,则无法在应答消息的 Failed-AVP 中编码这样的 AVP。

    必须重新编译字典文件才能使修复生效。

    自身 ID: OTP-11946

  • 修复字典编译中损坏的检查。

    在 @codecs 或 @custom_types 部分的内容中指定的 AVP 未定义,这没有被检测到,导致尝试查找 AVP 的类型时编译失败。

    自身 ID: OTP-11958

改进和新功能

  • 为 CEA、DWA 和 DPA 添加结果代码计数器。

    除了其他应答消息上现有的结果代码计数器之外。

    自身 ID: OTP-11891

  • 在 Failed-AVP 中添加 AVP 的尽力而为解码。

    OTP-11007 禁用了 Failed-AVP 中 AVP 的解码,因为错误可能会导致 Failed-AVP 本身的解码失败。如果可能,现在将解码组件 AVP,否则不解码。尽可能深入地解码 Grouped 类型的 AVP。

    必须重新编译字典文件才能使修复生效。

    自身 ID: OTP-11936 辅助 ID: OTP-11007

  • 为出站 Diameter 消息中的编码错误添加计数器。

    除了现有的解码错误计数器之外。后者现在独立于应答消息中的结果代码进行计数,因为解码错误并不排除结果代码的存在。

    自身 ID: OTP-11937

diameter 1.6

已修复的错误和故障

  • 在字典编译时添加缺失的检查。

    特别是,在 @avp_types 部分中定义为具有 Grouped 类型的 AVP 在 @grouped 部分中具有相应的定义。

    自身 ID: OTP-11561

  • 更正有关设置 Origin-State-Id 的文档

    错误地声明了该 AVP 将在出站 DPR/DPA 中设置。

    自身 ID: OTP-11583

  • 更改用于向 diameter_sctp 传达出站流 ID 的接口

    该模块使用 diameter_packet 记录的 transport_data 字段来传达接收到传入消息的流以及应发送出站消息的流,之前的接口是将两者作为 {stream, Id} 形式的元组进行传达。但是,由于 diameter 保留传入请求的 transport_data 的值,除非相应的应答消息另有指定,否则在这种情况下,其行为是在出站流上发送应答,该出站流的标识符与接收请求的入站流的标识符相同。如果入站流 ID 大于或等于出站流的数量,则保证会失败,从而导致相关传输过程终止。入站和出站流标识符之间没有关系,因此 diameter_sctp 强加一个关系是错误的。

    现在,使用不同的元组 {outstream, Id} 传达出站流 ID,该元组以出站流的数量为模进行解释。因此,保留传入请求的 transport_data 对出站流的选择没有影响。

    由于出站流的新原子,接口的更改并不严格向后兼容。但是,由于目前没有记录的方法可以获取对等连接的可用出站流数量,因此客户端无法知道它可以从之前的接口可靠选择的 ID 范围,因此任何出站流的设置可能都是无意的。现在不显式指定出站流会导致轮询选择。

    感谢 Sharmila Pillai 报告问题。

    * 潜在的不兼容性 *

    自身 ID: OTP-11593

  • 修复 diameter_make:codec/2 中的 Unicode 路径失败。

    包含 Unicode 代码点 > 255 的字典路径导致该函数失败。

    自身 ID: OTP-11655

  • 修复 diameter_sctp 的“accept”配置。

    OTP-10893 添加了对 {accept, Match} 元组的支持,以指定应与对等方地址匹配的地址或正则表达式,以决定是否应保留新建立的关联,但这在 SCTP 情况下无法正常工作,因为 inet(3) 中缺少支持。

    还在 diameter:service_info/2 输出中更正了本地地址和对等方地址的显示。

    自身 ID: OTP-11661 辅助 ID: OTP-10229

  • 对 Grouped AVP 中的 M 位保持宽松。

    RFC 6733 在 4.4 中说:

    • ____ - 如果未设置“M”(强制)位且组内的一个或多个封装 AVP 设置了“M”(强制)位的 Grouped AVP 的接收者,如果 Grouped AVP 本身无法识别,则可以简单地忽略它。即使设置了“M”(强制)位的封装 AVP 进一步封装在其他子组中,即嵌入在 Grouped AVP 中的其他 Grouped AVP,该规则也适用。

    第一句话是错误的,但可以理解为以下意思:

    • ____ - 如果类型为 Grouped 的无法识别的 AVP 未设置“M”位,即使其封装的 AVP 之一设置了“M”位,也可以忽略它。

    如果 AVP 未被识别,则其类型未知,这有点像一句废话。因此,我们不知道其数据字节是否包含封装的 AVP,所以只能忽略任何设置了 M 位的 AVP。当类型已知时执行其他操作将是不一致的。

    OTP-11087 (R16B03) 导致任何未识别的 AVP 上的 M 位都被视为错误,未识别被理解为“未明确定义为其容器的成员”。(也就是说,不能打包到专用记录字段中的 AVP,这比“未定义”稍微强烈一些。)这修复了顶级 AVP 的原始意图,但破坏了已知类型的分组 AVP 所需的宽松性。这种宽松性现在已恢复。

    请注意,字典文件需要重新编译才能使更改生效。

    感谢 Rory McKeown 报告了这个问题。

    自身 ID:OTP-11675 辅助 ID:OTP-11087

  • 修复 pick_peer case 子句失败。

    如果所讨论服务上的配置为 {call_mutates_state, true},则任何未能选择对等方的对等方选择都会导致 case 子句失败。在对等方故障转移且没有可用的备用对等方的情况下,会注意到这一点。

    自身 ID:OTP-11789

diameter 1.5

改进和新功能

  • 将 reconnect_timer 重命名为 connect_timer。

    为了向后兼容,仍然接受前者,但考虑到计时器的语义,该名称具有误导性。

    自身 ID:OTP-11168

  • 扩展 diameter_make(3)。

    现在可以从字符串而不是仅从文件系统路径编译字典,并且可以返回结果而不是写入文件系统。

    自身 ID:OTP-11348

  • 删除将 diameter_base 硬编码为应用程序 ID 0 的字典上的 @prefix。

    自身 ID:OTP-11361

diameter 1.4.4

修复的错误和故障

  • 修复传出 DWA 中端到端和逐跳标识符的设置。

    被 OTP-11184 破坏,导致重新设置标识符,丢弃来自传入 DWR 的值。

    自身 ID:OTP-11367

  • 修复 5014 (DIAMETER_INVALID_AVP_LENGTH) 的处理。

    对于某些 Diameter 类型,该错误被检测为 5004 (DIAMETER_INVALID_AVP_VALUE),在这种情况下,指向消息末尾之外的 AVP 长度会导致编码失败。

    自身 ID:OTP-11395

diameter 1.4.3

修复的错误和故障

  • 修复 UTF8String 编码。

    编码现在接受任何代码点和二进制文件的嵌套列表。包含二进制文件的列表以前被误解,并且文档不完整。

    自身 ID:OTP-11172

  • 确保在 DWA 之后不会立即发送 DWR。

    如果时机不巧,这是有可能的。传入的 DWR 现在可以正确重置看门狗计时器。

    自身 ID:OTP-11184

  • 修复 Failed-AVP 的错误编码

    接收到具有解码失败的 CER、DWR 或 DPR 会导致相应应答消息的编码失败。

    自身 ID:OTP-11293

  • 修复损坏的 service_opt() spawn_opt。

    该选项被忽略。

    自身 ID:OTP-11299

diameter 1.4.2

修复的错误和故障

  • 修复 5014 (INVALID_AVP_LENGTH) 错误的处理。

    在某些情况下,这被报告为 3009 (INVALID_AVP_BITS)。

    请注意,此更正部分在由 diameterc(1) 生成的模块中实现:必须重新编译字典文件,该更正才能应用于它定义的任何消息。

    自身 ID:OTP-11007

  • 修复发行说明中错误的 大小写。

    Diameter = 协议。
    diameter = Erlang 应用程序。

    自身 ID:OTP-11014

  • 修复看门狗内存泄漏。

    未从特定于服务的 ets 表中删除条目,导致它们在重新建立监听传输的连接时以及对于监听和连接传输的 diameter:remove_transport/2 时被孤立。

    此故障由 diameter-1.4.1 (R16B) 中的 OTP-10692 引入。

    自身 ID:OTP-11019 辅助 ID:OTP-10692

  • 修复 AVP 长度 < 8 时的解码失败。

    此失败导致丢弃有问题的消息。

    自身 ID:OTP-11026

  • 遵守主机 IP 地址配置。

    从传输模块返回的地址总是用于填充传出 CER/CEA 中的主机 IP 地址 AVP,这阻止了 VIP 地址的发送。仅当未指定主机 IP 地址时,才使用传输地址。

    自身 ID:OTP-11045

  • 修复 mkdir 竞争。

    如果并行创建 examples/code 和 examples/dict,则安装可能会失败。在 FreeBSD 上注意到。

    自身 ID:OTP-11051

  • 修复对强制性 AVP 上 5001 的识别。

    如果 AVP 在有问题的字典中定义,并且其容器(消息或分组 AVP)具有“AVP”字段,则设置 M 位的 AVP 不会被视为错误。现在,它被视为 5001 错误 (AVP_UNSUPPORTED),就像 AVP 未定义一样。

    请注意,此更正部分在由 diameterc(1) 生成的模块中实现:必须重新编译字典文件,该更正才能应用于它定义的任何消息。

    自身 ID:OTP-11087

  • 修复 handle_request {answer_message, 5xxx} 返回时 Failed-AVP 的设置。

    Failed-AVP 从未出现在传出的应答消息中。现在,如果找到,则使用来自传入 diameter_packet 的 errors 字段中具有指定 Result-Code 的第一个条目的 AVP 进行设置。

    自身 ID:OTP-11092

  • 修复看门狗 function_clause

    允许同一对等方进行多个连接的服务的监听传输可能会导致模块 diameter_watchdog 中的 function_clause 错误。由此产生的崩溃是无害的,但令人不快。

    感谢 Aleksander Nycz。

    自身 ID:OTP-11115

  • 修复 Failed-AVP 的填充。

    在 diameter 填充此 AVP 的情况下,发送了许多值,而不是 RFC 6733 建议的一个值。这由 OTP-11007 部分更正。

    自身 ID:OTP-11127 辅助 ID:OTP-11007

  • 修复列表值供应商特定应用程序 ID 配置

    R16B(特别是 OTP-10760)破坏了此类配置的处理,如果列表的长度不是 3,则会导致 function 子句错误,否则会导致对列表内容的错误解释。仅正确解释了记录值的配置。

    自身 ID:OTP-11165

改进和新功能

  • 允许在 Erlang 节点之间共享对等连接,以便发送传出请求。

    diameter_app(3) pick_peer/4 回调将远程候选者列表作为参数,允许一个节点上的回调选择在另一个节点上建立的传输连接。service_opt() share_peers 控制本地连接与远程节点共享的程度。service_opt() use_shared_peers 控制本地节点上使用来自远程节点的共享连接的程度。

    自身 ID:OTP-9610

  • 允许使用远程地址配置监听 diameter_{tcp,sctp} 传输。

    选项“accept”允许将远程地址配置为元组或正则表达式。在建立连接时,将远程地址与配置的值进行匹配,任何不匹配的地址都会导致连接中止。

    自身 ID:OTP-10893

  • 在 diameter:add_transport/2 中检测更多 transport_opt() 配置错误。

    许多错误以前不会被检测到,直到传输开始,diameter:add_transport/2 返回“ok”,但传输连接未能建立。现在返回错误元组。

    自身 ID:OTP-10972

  • 使 diameter_tcp:start/3 中的显式本地地址配置成为可选。

    当未显式配置本地地址时,现在使用默认地址(由 gen_tcp 确定)。

    自身 ID:OTP-10986

  • 改进对未识别服务选项的处理。

    这些选项被 diameter:start_service/2 静默忽略。现在返回错误元组。

    自身 ID:OTP-11017

  • 不要在 CER/CEA 中发送默认的 Inband-Security-Id。

    RFC 6733 不建议使用 Inband-Security-Id。仅发送与默认值不同的值,NO_INBAND_SECURITY = 0。

    自身 ID:OTP-11050

  • 使请求进程的 spawn 选项可配置。

    自身 ID:OTP-11060

diameter 1.4.1.1

修复的错误和故障

  • 修复损坏的供应商特定应用程序 ID 配置。

    RFC 6733 更改了此分组 AVP 的定义,将 Vendor-Id 的数量从 1* 更改为 1。组件 Vendor-Id 现在可以在服务和传输配置中为列表值或整数值,允许将其与 RFC 3588 和 RFC 6733 字典一起使用。

    自身 ID:OTP-10942

改进和新功能

  • 添加 transport_opt() watchdog_config 以允许看门狗状态机的非标准行为。

    这在测试期间可能很有用,但不应在必须符合 RFC 3539 的节点上使用。

    自身 ID:OTP-10898

diameter 1.4.1

修复的错误和故障

  • 修复从 DOWN 到 INITIAL 的错误看门狗转换。

    当对等连接在能力交换失败后重新建立时,会发生此转换。RFC 3539 要求 DOWN 过渡到 REOPEN。

    自身 ID:OTP-10692

改进和新功能

  • 添加 application_opt() request_errors,使包含解码错误的传入请求的处理可配置。

    值 'callback' 确保所有此类请求都发生 handle_request 回调,默认情况下 diameter 将自行应答 3xxx 系列错误。

    自身 Id: OTP-10686

  • 添加 transport_opt() length_errors。

    该值确定如何处理通过传输接口接收的、消息长度不正确的消息。

    自身 Id: OTP-10687

  • 在《用户指南》的标准合规章节中添加关于 RFC 6733 的注释。

    自身 Id: OTP-10688

  • 允许在使用 RFC 6733 通用字典的对等连接的应答消息中使用 5xxx 结果代码。

    RFC 6733 允许这样做,而 RFC 3588 不允许。在最简单的情况下,handle_request 回调可以返回 {answer_message, 3000..3999|5000..5999}。

    自身 Id: OTP-10759

  • 为 RFC 6733 添加字典。

    通用字典和计费字典都与其 RFC 3588 对应项不同,这反映在生成的记录定义中。服务或传输上的应用程序配置决定将在给定对等连接上使用的字典。

    自身 Id: OTP-10760

  • 允许 handle_request 回调控制 diameter 的 Result-Code 和 Failed-AVP 设置。

    在返回的 #diameter_packet{} 中设置 errors = false 将禁用该设置。

    自身 Id: OTP-10761

diameter 1.4

已修复的错误和故障

  • 将已注册的服务器名称添加到 app 文件中。

    自身 Id: OTP-10442

  • 修复了被 OTP-10445 破坏的 #diameter_header{} 处理。

    如果 end_to_end_id 和 hop_by_hop_id 都未定义,则该故障会导致忽略 [Header | Avps] 请求的标头。

    自身 Id: OTP-10609

  • 修复了 handle_request 回调的错误处理。

    如果传入请求存在解码错误,则返回 #diameter_packet{} 的回调将失败。

    自身 Id: OTP-10614

  • 修复服务启动事件的定时。

    该事件不一定像文档中描述的那样在其他事件之前发生。

    自身 Id: OTP-10618

  • 修复对等故障转移时标头 T 标志的设置。

    该标志现在设置在传递给 prepare_retransmit 回调的 diameter_header 记录中。

    自身 Id: OTP-10619

  • 修复在 capx_timeout 时发送 CER/CEA 超时事件。

    该事件未按文档所述发送。

    自身 Id: OTP-10628

  • 修复了在设置了 E 标志的应答消息的 Diameter 标头中 Application-ID 设置不正确的问题。

    该值应为相关请求的值。该故障导致它始终为 0。

    自身 Id: OTP-10655

  • 修复 AVP 长度错误的错误处理。

    不正确的 AVP 长度但没有其他错误会导致传入请求失败。

    自身 Id: OTP-10693

diameter 1.3.1

已知错误和问题

  • 修复由使用 eval 回调导致的函数子句。

    自身 Id: OTP-10685

diameter 1.3

已修复的错误和故障

  • 修复了 Origin-State-Id 的错误处理和错误的配置值。

    前者预期在列表中,尽管文档(正确地)要求为整数。未处理列表值功能的基本值。

    自身 Id: OTP-10440

  • 修复 up/down 事件的定时。

    以前,在 peer_up 回调之后调用 diameter:call/4 可能会根据定时错误地返回 {error, no_connection}。现在,这两个事件都遵循相应的回调。

    自身 Id: OTP-10459

  • 使 diameter:service_info/2 可在 peer_up、peer_down 和 pick_peer 回调中使用。

    除非在 pick_peer 中当 {call_mutates_state, false} 时,否则它以前会无限期地挂起。

    自身 Id: OTP-10460

  • 验证传入 CEA/DPA 中的端到端和逐跳标识符是否与在相应的 CER/DPR 中发送的标识符匹配。

    以前忽略了这些值。标识符不匹配的答案被视为意外。

    自身 Id: OTP-10565

  • 修复 PDF 文档中的格式问题。

    特别是,HTML 中链接对应的文本在预格式化块中被省略。缩进仍然存在问题,但这并非特定于 diameter。

    自身 Id: OTP-10583

改进和新功能

  • 让 prepare_request、prepare_retransmit 和 handle_request 回调返回一个函数,以便在编码后在传出消息上调用。

    例如,这允许记录编码的消息。

    自身 Id: OTP-10441

  • 添加 service_opt() 'restrict_connections' 以允许与同一对等方的多个传输连接。

    自身 Id: OTP-10443

  • 添加 service_opt() 'sequence' 以允许将常量掩码到端到端和逐跳标识符的最高位。

    这允许不同节点上的同一服务在传出请求消息中使用不同的值。

    自身 Id: OTP-10445

  • 添加 diameter:service_info(PeerRef) 以返回相应传输的 transport_ref() 和 transport_opt() 列表。

    这允许从仅将 peer_ref() 作为参数的 diameter_app 回调轻松访问这些内容。

    自身 Id: OTP-10470

  • 添加参考页 diameter_codec(3) 和 diameter_make(3)。

    自身 Id: OTP-10471

  • 为服务启动和停止添加事件。

    自身 Id: OTP-10492

  • 添加 transport_opt() 'disconnect_cb' 以使 DPR 的发送可配置。

    是否应在应用程序停止、服务停止或传输移除时发送 DPR 由回调返回的值确定,如果未收到 DPA,则由 Disconnect-Cause 和超时确定。

    自身 Id: OTP-10493

  • 为与未接收 CER/CEA 相关的超时添加 transport_opt() 'capx_timeout'。

    自身 Id: OTP-10554

  • 允许 handle_request 回调返回 #diameter_packet{}。

    这允许应答设置 transport_data 和标头字段。

    自身 Id: OTP-10566

  • 更新 RFC 6733 的文档。

    RFC 3588 现在已过时。

    自身 Id: OTP-10568

diameter 1.2

已修复的错误和故障

  • 修复了 Result-Code 设置和 Destination-Host/Realm 提取中断的问题。

    在应答包含 AVP 解码错误的请求时,假定 Result-Code 的元数为 1。仅从通用应用程序中的消息中正确提取了 Destination-Host/Realm。

    自身 Id: OTP-10202

  • 更优雅地处理功能配置不足的问题。

    如果传输没有足够的功能配置来编码 CER/CEA,现在将发出一个错误报告,指出配置错误并退出,而不是失败。由于不要求在配置传输之前配置服务,因此在 diameter:add_transport/2 中未检测到该错误。

    自身 Id: OTP-10203

  • 确保失败的 peer_up/down 回调不会影响与其他对等方的传输连接。

    此类失败以前会关闭服务的所有连接。

    自身 Id: OTP-10215

改进和新功能

  • 可以使用 diameter:service_info/2 检索与 Diameter 消息相关的统计信息。

    Diameter 和套接字级别的统计信息都可用于传入和传出消息。

    自身 Id: OTP-9608

  • 允许向 diameter:add_transport/2 添加多个 transport_module/config。

    按顺序尝试多个值,直到其中一个值导致建立连接。这为连接传输提供了一种按首选项顺序指定配置的方法。(例如,SCTP 在 TCP 之前。)

    自身 Id: OTP-9885

  • 为 RFC 3539 监视状态机中的状态转换添加事件。

    监视状态也可通过 diameter:service_info/2 获取。

    自身 Id: OTP-10212

  • 添加 diameter:service_info(SvcName, connections)。

    这提供了一种替代 diameter:service_info(SvcName, transport) 的方法,该方法提供每个已建立的连接的信息,而不是每个传输参考的信息。

    自身 Id: OTP-10213

  • 各种文档更正/改进。

    自身 Id: OTP-10216

diameter 1.1

已修复的错误和故障

  • 修复了发送 'closed' 事件中的错误。

    该错误导致在功能交换失败后可能不会发送 'closed' 事件。

    自身 Id: OTP-9824

  • 修复了错误的 diameterc -name/-prefix。

    在 diameter-1.0 中引入新的字典解析器时的一个小错误破坏了这些选项。

    自身 Id: OTP-9826

diameter 1.0

已修复的错误和故障

  • 修复了 diameter:remove_transport/2 之后的错误清理。

    移除传输删除了配置,但并未阻止重新启动传输进程。

    自身 Id: OTP-9756

改进和新功能

  • 添加了对 TCP 上 TLS 的支持。

    RFC 3588 要求 Diameter 服务器支持 TLS。实际上,这似乎意味着 TCP 上的 TLS,因为在 SCTP 上运行存在限制:请参阅 RFC 6083(SCTP 上的 DTLS),它是对 RFC 3436(SCTP 上的 TLS)的回应。当前的 RFC 3588 草案通过将 TLS 等同于 TLS/TCP 和 DTLS/SCTP 来承认这一点。

    TLS 握手可以在使用 Inband-Security-Id AVP 协商 TLS 的 CER/CEA 之后(RFC 3588 中记录的方法)或在连接建立之后立即(添加到当前草案的方法)发生。

    自身 Id: OTP-9605

  • 改进了字典解析器。

    现在,如果输入文件出现错误,字典解析器会发出有用的错误消息,同时还会标识检测到错误的行号。之前解析器中缺少语义检查,修复了对供应商 ID 与 @inherits 结合使用的解释错误,并且 @end 可以用来显式终止解析,而不是总是解析到文件末尾。

    自身 Id: OTP-9639

  • 提高字典的可重用性。

    以前,重用字典只是为了获得不同的生成的模块名称或前缀,需要复制源代码,如果使用继承,则源代码可能由多个文件组成,只是为了编辑几行不影响定义的 Diameter 应用程序语义的行。已将选项 --name、--prefix 和 --inherits 添加到 diameterc,以允许在编译时设置相应的值。

    自身 Id: OTP-9641

  • 添加 capabilities_cb 传输选项。

    它的值是一个函数,在功能交换后应用于传输参考和功能记录。如果回调返回除 'ok' 之外的任何内容,则连接将关闭。在传入 CER 的情况下,回调可以返回用于应答的结果代码。可以指定多个回调,并且会应用它们,直到所有回调都返回 'ok' 或其中一个回调不返回 'ok'。

    这提供了一种拒绝对等连接的方法。

    自身 Id: OTP-9654

  • 将 @codecs 添加到字典格式。

    其语义类似于 @custom_types,但产生编解码函数的形式为 TypeName(encode|decode, AvpName, Data),而不是 AvpName(encode|decode, TypeName, Data)。也就是说,AVP 名称和 Diameter 类型名称的角色被颠倒了。这消除了为每个共享通用专用编解码的 AVP 导出单个函数的需要。

    自有 ID:OTP-9708 辅助 ID:OTP-9639

  • 添加 #diameter_callback{} 以实现更灵活的回调配置。

    该记录允许为每个 diameter_app(3) 回调配置单独的函数,以及一个默认的回调。

    自有 ID:OTP-9777

diameter 0.10

已修复的错误和故障

  • 处理来自 gen_sctp 的 #sctp_paddr_change 和 #sctp_pdapi_event。

    这些事件默认启用,但 diameter_sctp 既没有禁用也没有处理它们。接收到此类事件会导致传输进程崩溃。

    自有 ID:OTP-9538

  • 修复头折叠错误。

    来自 diameter 的 prepare_request 回调可以返回一个 diameter_header 记录,以便在传出请求的头中设置值。diameter_lib:fold_tuple/3 中的错误导致后续的传出请求编码失败。

    自有 ID:OTP-9577

  • 修复发送应答消息回复中的错误。

    未发送 3001 (DIAMETER_COMMAND_UNSUPPORTED),因为解码将 AVP 列表放在 diameter_packet 的错误字段中,导致后续的编码失败。Session-Id 也设置不正确,导致即使在这种情况下编码也失败。

    自有 ID:OTP-9578

  • 修复错误地使用 error_logger:info_report/2。

    该函数不接受格式字符串和参数作为调用时的参数。而是使用 error_logger:info_report/1,并使用与警告和错误报告相同的报告格式。

    自有 ID:OTP-9579

  • 修复并阐明对等筛选器的语义。

    返回非真值的 eval 筛选器导致调用进程失败,并且文档对于如何处理异常含糊不清。澄清非元组主机/域筛选器假定特定形式的消息。

    自有 ID:OTP-9580

  • 修复并阐明中继行为。

    中继请求时隐式筛选发送对等方可能会导致循环检测以 RFC3588 未指定的方式被抢占。对于中继请求的答案以外的任何内容,都回复 3002 (DIAMETER_UNABLE_TO_DELIVER)。

    自有 ID:OTP-9583

改进和新功能

  • 仅当指定 @messages 时,字典文件中才需要 @id。

    @id 定义了一个应用程序标识符,仅在发送或接收消息时使用。但是,字典可以仅定义 AVP,以便被使用 @inherits 的其他字典包含,在这种情况下,要求 @id 是没有意义的。

    请注意,消息定义不会与 @inherits 一起继承,只有 AVP 会继承。

    自有 ID:OTP-9467

  • 当在继承的字典中定义 AVP 时,允许使用 @enum。

    3GPP 标准(之一)扩展了 RFC 3588 类型为枚举的 AVP 允许的值。以前,扩展 AVP 只能通过完全重新定义 AVP 来实现。

    自有 ID:OTP-9469

  • 将测试套件迁移到纯 common test,并添加套件和测试用例。

    自有 ID:OTP-9553

  • 任意形式的请求。

    可以向 diameter:call/4 传递任何内容,只要后续的 prepare_request 回调返回可以编码的项。

    自有 ID:OTP-9581

diameter 0.9

diameter 应用程序的初始版本。

已知问题或限制

  • 一些与代理相关的功能并不完全完整。特别是,对代理代理的支持,它们声明特定的 Diameter 应用程序,但在很大程度上以与中继代理相同的方式中继消息(为此,handle_request 回调可以返回 relay 元组),将在即将发布的版本中完成。对于重定向代理也可能会有更明确的支持,尽管可以使用当前的功能实现重定向行为。
  • diameter_header/avp 记录形式发送的消息与以“正常”方式发送的消息的处理存在一些不对称,并且并非所有这些都已记录在案。这与前一点有关,因为引入此消息发送形式的目的是专门处理使用与客户端/服务器行为相同的回调接口的中继代理行为。
  • 用户指南目前非常简略。对于那些对 Diameter 协议有所了解的人来说,介绍性章节以及示例(在应用程序 examples 子目录中)可能就足够了,但目的是提供更多介绍性文本。参考文档相当完整,尽管某些要点可能会扩展。
  • 函数 diameter:service_info/2 可用于检索有关已启动服务的信息(统计信息、有关已连接对等方的信息等),但这尚未记录,并且输入和输出都可能在下一个版本中更改。

有关与标准相关的问题,请参阅 标准符合性