summaryrefslogtreecommitdiff
path: root/erts/preloaded
diff options
context:
space:
mode:
authorAndreas Schultz <andreas.schultz@travelping.com>2019-11-15 14:56:45 +0100
committerMicael Karlberg <bmk@erlang.org>2019-11-25 12:38:41 +0100
commitaa7f201ac2405ef6bf25d3111934f89dc3e23b73 (patch)
tree9e09419b962528c372f0c4e23f7f2ea3d840023e /erts/preloaded
parent7859a20e988028c91008f66808d26498f45e8869 (diff)
downloaderlang-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.erl32
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().