diff options
author | Andreas Schultz <andreas.schultz@travelping.com> | 2019-11-15 14:56:45 +0100 |
---|---|---|
committer | Micael Karlberg <bmk@erlang.org> | 2019-11-25 12:38:41 +0100 |
commit | aa7f201ac2405ef6bf25d3111934f89dc3e23b73 (patch) | |
tree | 9e09419b962528c372f0c4e23f7f2ea3d840023e /erts/preloaded | |
parent | 7859a20e988028c91008f66808d26498f45e8869 (diff) | |
download | erlang-aa7f201ac2405ef6bf25d3111934f89dc3e23b73.tar.gz |
decode ICMP[v6] errors in sock_extended_err on Linux
Decode ICMP[v6] types and codes to atoms.
Diffstat (limited to 'erts/preloaded')
-rw-r--r-- | erts/preloaded/src/socket.erl | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/erts/preloaded/src/socket.erl b/erts/preloaded/src/socket.erl index d5e392e897..6fb4747428 100644 --- a/erts/preloaded/src/socket.erl +++ b/erts/preloaded/src/socket.erl @@ -135,6 +135,8 @@ cmsghdr_recv/0, cmsghdr_send/0, ee_origin/0, + icmp_dest_unreach/0, + icmpv6_dest_unreach/0, sock_extended_err/0, uint8/0, @@ -626,13 +628,29 @@ #{level := integer(), type := integer(), data := binary()}. -type ee_origin() :: none | local | icmp | icmp6 | uint8(). --type sock_extended_err() :: #{error := term(), - origin := ee_origin(), - type := uint8(), - code := uint8(), - info := uint32(), - data := uint32(), - offender := undefined | sockaddr()}. +-type icmp_dest_unreach() :: net_unreach | host_unreach | port_unreach | frag_needed | + net_unknown | host_unknown | uint8(). +-type icmpv6_dest_unreach() :: noroute | adm_prohibited | not_neighbour | addr_unreach | + port_unreach | policy_fail | reject_route | uint8(). +-type sock_extended_err() :: + #{error := term(), origin := icmp, type := dest_unreach, + code := icmp_dest_unreach(), info := uint32(), + data := uint32(), offender := undefined | sockaddr()} | + #{error := term(), origin := icmp, type := time_exceeded | uint8(), + code := uint8(), info := uint32(), data := uint32(), + offender := undefined | sockaddr()} | + #{error := term(), origin := icmp, type := uint8(), + code := uint8(), info := uint32(), data := uint32(), + offender := undefined | sockaddr()} | + #{error := term(), origin := icmp6, type := dest_unreach, + code := icmpv6_dest_unreach(), info := uint32(), + data := uint32(), offender := undefined | sockaddr()} | + #{error := term(), origin := ee_origin(), type := pkt_toobig | time_xceeded | uint8(), + code := uint8(), info := uint32(), data := uint32(), + offender := undefined | sockaddr()} | + #{error := term(), origin := ee_origin(), type := uint8(), + code := uint8(), info := uint32(), data := uint32(), + offender := undefined | sockaddr()}. -opaque select_tag() :: atom(). -opaque select_ref() :: reference(). |