How to connect erlang nodes over IPv6 (on Ubuntu 10.04 server installations, Erlang R14B1)?

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

How to connect erlang nodes over IPv6 (on Ubuntu 10.04 server installations, Erlang R14B1)?

bsmr
I try to connect Erlang nodes using only IPv6. But somehow it doesn't
work. The systems in questions are Ubuntu 10.04 based server setups.

The DNS names of the participating hosts resolv only to IPv6
addresses. "ping6" and "traceroute6" work without any problems.

After running "erl -name node-X", I try to "net_adm:ping/1" the other
host, but I only get "pang"s.

I also tried to add "-proto_dist inet6_tcp" (found this information
with google) to the erl command line, but it doesn't improve the
situation.

Does anyone have any hints how to start an IPv6 based Erlang "cluster", please?


  - boris

________________________________________________________________
erlang-questions (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:[hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: How to connect erlang nodes over IPv6 (on Ubuntu 10.04 server installations, Erlang R14B1)?

Tony Rogvall-2
Hi!

Yes the -proto_dist inet6_tcp is required, since the default is inet_tcp. A (near) future release may even
default to handle both ipv6 and ipv4. The transition to ipv6 will happen any day now ;-)

Any how, at least on my mac I discovered that epmd did not accept IPv6 connection for
looking up the port name.

(ipv4)
erl_epmd:port_please("b", {127,0,0,1}, 1000).          
{port,65347,5}

(ipv6)
erl_epmd:port_please("b", {0,0,0,0,0,0,0,1}, 1000).
noport


I have not been hacking on this for years ! Any one know the status of this ?

/Tony



On 5 feb 2011, at 09.01, Boris Mühmer wrote:

> I try to connect Erlang nodes using only IPv6. But somehow it doesn't
> work. The systems in questions are Ubuntu 10.04 based server setups.
>
> The DNS names of the participating hosts resolv only to IPv6
> addresses. "ping6" and "traceroute6" work without any problems.
>
> After running "erl -name node-X", I try to "net_adm:ping/1" the other
> host, but I only get "pang"s.
>
> I also tried to add "-proto_dist inet6_tcp" (found this information
> with google) to the erl command line, but it doesn't improve the
> situation.
>
> Does anyone have any hints how to start an IPv6 based Erlang "cluster", please?
>
>
>  - boris
>
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:[hidden email]
>

"Have run Make so many times I dunno what's installed anymore"

Reply | Threaded
Open this post in threaded view
|

Re: How to connect erlang nodes over IPv6 (on Ubuntu 10.04 server installations, Erlang R14B1)?

bsmr
[ Note 1: I am working with the source tarball R14B01 from erlang.org. ]
[ Note 2: The systems I use are 64 Bit, using either Ubuntu 10.04 or 10.10. ]
[ Note 3: The current test system is a Ubuntu 10.10 desktop, 64 Bit. ]

I had a look at "erts/epmd/src/epmd_int.h". In there is the following line:

       #if defined(HAVE_IN6) && defined(AF_INET6) && defined(EPMD6)

On my system "HAVE_IN6" is defined during "configure"
(e.g. "erts/x86_64-unknown-linux-gnu/config.h"), but I can't find a definition
for "AF_INET6" or "EPMD6".

I checked one system with running "epmd -d" manually and calling
"netstat -an" afterwards: I only could find an "0.0.0.0:4369" entry =>
   tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN

After setting "AF_INET6" or "EPMD6" manually in the "config.h"
file, e.g. adding
   #define AF_INET6 1
   #define EPMD6 1
to "erts/x86_64-unknown-linux-gnu/config.h" and doing the above test,
netstat returned
   tcp6       0      0 :::4369                 :::*                    LISTEN

But calling "erl -name test -setcookie abc123 -proto_dist inet6_tcp"
results in a crash dump being written:
---> snipp <---
$ /opt/Erlang/OTP/R14B01/20110206/1030/bin/erl -name test -setcookie
abc123 -proto_dist inet6_tcp
{error_logger,{{2011,2,6},{11,26,45}},"Protocol: ~p: register/listen
error: ~p~n",["inet6_tcp",eprotonosupport]}
{error_logger,{{2011,2,6},{11,26,45}},crash_report,[[{initial_call,{net_kernel,init,['Argument__1']}},{pid,<0.19.0>},{registered_name,[]},{error_info,{exit,{error,badarg},[{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}},{ancestors,[net_sup,kernel_sup,<0.9.0>]},{messages,[]},{links,[<0.16.0>]},{dictionary,[{longnames,true}]},{trap_exit,true},{status,running},{heap_size,377},{stack_size,24},{reductions,246}],[]]}
{error_logger,{{2011,2,6},{11,26,45}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{'EXIT',nodistribution}},{offender,[{pid,undefined},{name,net_kernel},{mfargs,{net_kernel,start_link,[[test,longnames]]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]}
{error_logger,{{2011,2,6},{11,26,45}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,shutdown},{offender,[{pid,undefined},{name,net_sup},{mfargs,{erl_distribution,start_link,[]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]}]}
{error_logger,{{2011,2,6},{11,26,45}},std_info,[{application,kernel},{exited,{shutdown,{kernel,start,[normal,[]]}}},{type,permanent}]}
{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}}"}

Crash dump was written to: erl_crash.dump
Kernel pid terminated (application_controller)
({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})
---> snipp <---


 - boris



2011/2/5 Tony Rogvall <[hidden email]>:

> Hi!
> Yes the -proto_dist inet6_tcp is required, since the default is inet_tcp. A
> (near) future release may even
> default to handle both ipv6 and ipv4. The transition to ipv6 will happen any
> day now ;-)
> Any how, at least on my mac I discovered that epmd did not accept IPv6
> connection for
> looking up the port name.
> (ipv4)
> erl_epmd:port_please("b", {127,0,0,1}, 1000).
> {port,65347,5}
> (ipv6)
> erl_epmd:port_please("b", {0,0,0,0,0,0,0,1}, 1000).
> noport
>
> I have not been hacking on this for years ! Any one know the status of this
> ?
> /Tony
>
>
> On 5 feb 2011, at 09.01, Boris Mühmer wrote:
>
> I try to connect Erlang nodes using only IPv6. But somehow it doesn't
> work. The systems in questions are Ubuntu 10.04 based server setups.
>
> The DNS names of the participating hosts resolv only to IPv6
> addresses. "ping6" and "traceroute6" work without any problems.
>
> After running "erl -name node-X", I try to "net_adm:ping/1" the other
> host, but I only get "pang"s.
>
> I also tried to add "-proto_dist inet6_tcp" (found this information
> with google) to the erl command line, but it doesn't improve the
> situation.
>
> Does anyone have any hints how to start an IPv6 based Erlang "cluster",
> please?
>
>
>  - boris
>
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:[hidden email]
>
>
> "Have run Make so many times I dunno what's installed anymore"
>

________________________________________________________________
erlang-questions (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:[hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: How to connect erlang nodes over IPv6 (on Ubuntu 10.04 server installations, Erlang R14B1)?

bsmr
In reply to this post by Tony Rogvall-2
Is there a special option to build "epmd" with IPv6 support? Actually
is there a system on which "epmd" binds itself to an IPv6 port?

I checked my Windows 7 system with "netstat", but I could only see
"epmd" binding itself to the IPv4 port.

"configure" tries to set "HAVE_IN6" (this is set on my Ubuntu
system(s)). I believe "AF_INET6" comes from the linux kernel.

But "what" (I didn't want to put "who" in here) is responsible for "EPMD6"?

Running "grep -r EPMD6 ." in the top level directory of the source
tree just gives me a single result:
    ./erts/epmd/src/epmd_int.h:#if defined(HAVE_IN6) &&
defined(AF_INET6) && defined(EPMD6)

Using grep I saw, that there a several dependencies on "HAVE_IN6" and
"AF_INET6", but only a single one for "EPMD6".


  - boris


2011/2/5 Tony Rogvall <[hidden email]>:

> Hi!
> Yes the -proto_dist inet6_tcp is required, since the default is inet_tcp. A
> (near) future release may even
> default to handle both ipv6 and ipv4. The transition to ipv6 will happen any
> day now ;-)
> Any how, at least on my mac I discovered that epmd did not accept IPv6
> connection for
> looking up the port name.
> (ipv4)
> erl_epmd:port_please("b", {127,0,0,1}, 1000).
> {port,65347,5}
> (ipv6)
> erl_epmd:port_please("b", {0,0,0,0,0,0,0,1}, 1000).
> noport
>
> I have not been hacking on this for years ! Any one know the status of this
> ?
> /Tony
>
>
> On 5 feb 2011, at 09.01, Boris Mühmer wrote:
>
> I try to connect Erlang nodes using only IPv6. But somehow it doesn't
> work. The systems in questions are Ubuntu 10.04 based server setups.
>
> The DNS names of the participating hosts resolv only to IPv6
> addresses. "ping6" and "traceroute6" work without any problems.
>
> After running "erl -name node-X", I try to "net_adm:ping/1" the other
> host, but I only get "pang"s.
>
> I also tried to add "-proto_dist inet6_tcp" (found this information
> with google) to the erl command line, but it doesn't improve the
> situation.
>
> Does anyone have any hints how to start an IPv6 based Erlang "cluster",
> please?
>
>
>  - boris
>
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:[hidden email]
>
>
> "Have run Make so many times I dunno what's installed anymore"
>

________________________________________________________________
erlang-questions (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:[hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: How to connect erlang nodes over IPv6 (on Ubuntu 10.04 server installations, Erlang R14B1)?

bsmr
Using the git-source as a base, I build a new version for testing.

The only difference of the source was, that I removed the "&&
defined(EPMD6)" from "erts/epmd/src/epmd_int.h".

After starting "empd -d" and running "erl -name test1 -setcookie
abc123 -proto_dist inet6_tcp" I got a "erl_crash.dump".

Using a new "erl" instance, I called "crashdump_viewer:start()." and
tried to load the "erl_crash.dump" file, but I always get "An error
occured: C:\fakepath\erl_crash.dump is not an Erlang crash dump"!

Looking into "erl_crash.dump" the first few lines are:
---> snipp <---
=erl_crash_dump:0.1
Mon Feb 14 23:00:50 2011
Slogan: Kernel pid terminated (application_controller)
({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})
System version: Erlang R14B02 (erts-5.8.3) [source] [64-bit] [smp:2:2]
[rq:2] [async-threads:0] [hipe] [kernel-poll:false]
Compiled: Mon Feb 14 22:17:17 2011
Taints:
Atoms: 4043
---> snipp <---

Is the "crashdump_viewer" broken?
Are there any other tools to "analyse" an "erl_crash.dump" file?


  - boris



2011/2/14 Boris Mühmer <[hidden email]>:

> Is there a special option to build "epmd" with IPv6 support? Actually
> is there a system on which "epmd" binds itself to an IPv6 port?
>
> I checked my Windows 7 system with "netstat", but I could only see
> "epmd" binding itself to the IPv4 port.
>
> "configure" tries to set "HAVE_IN6" (this is set on my Ubuntu
> system(s)). I believe "AF_INET6" comes from the linux kernel.
>
> But "what" (I didn't want to put "who" in here) is responsible for "EPMD6"?
>
> Running "grep -r EPMD6 ." in the top level directory of the source
> tree just gives me a single result:
>    ./erts/epmd/src/epmd_int.h:#if defined(HAVE_IN6) &&
> defined(AF_INET6) && defined(EPMD6)
>
> Using grep I saw, that there a several dependencies on "HAVE_IN6" and
> "AF_INET6", but only a single one for "EPMD6".
>
>
>  - boris

________________________________________________________________
erlang-questions (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:[hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: How to connect erlang nodes over IPv6 (on Ubuntu 10.04 server installations, Erlang R14B1)?

bsmr
I saw an interesting behaviour of empd, which I didn't come to my
attention until now:

1) I started "empd"in one shell with the "-d" option.
2) From another shell I called "empd -names"
3) I tried to start "erl -name test1 -setcookie abc123 -proto_dist inet6_tcp"
4) I wanted to use "empd -kill"
5) I had to use "ctrl-c" to stop "empd"

Here is the output from the shell with "empd -d" running:
--->snipp<---
$ /opt/Erlang/OTP/R14B01/20110214/2100/bin/epmd -d
epmd: Tue Feb 15 06:56:50 2011: epmd running - daemon = 0
epmd: Tue Feb 15 06:56:54 2011: ** got NAMES_REQ
epmd: Tue Feb 15 06:56:54 2011: ** sent NAMES_RESP
epmd: Tue Feb 15 06:56:59 2011: ** got ALIVE2_REQ
epmd: Tue Feb 15 06:56:59 2011: ALIVE2_REQ from non local address
epmd: Tue Feb 15 06:57:03 2011: KILL_REQ from non local address
^C
--->snipp<---

The IMHO interesting part is, that "empd" prints "from non local
address" when starting "erl" or running "empd -kill".

After getting home from work, I will add some debugging information to
"empd" to see why it belives that those calls were "non local"
addresses...


  - boris


2011/2/14 Boris Mühmer <[hidden email]>:

> Using the git-source as a base, I build a new version for testing.
>
> The only difference of the source was, that I removed the "&&
> defined(EPMD6)" from "erts/epmd/src/epmd_int.h".
>
> After starting "empd -d" and running "erl -name test1 -setcookie
> abc123 -proto_dist inet6_tcp" I got a "erl_crash.dump".
>
> Using a new "erl" instance, I called "crashdump_viewer:start()." and
> tried to load the "erl_crash.dump" file, but I always get "An error
> occured: C:\fakepath\erl_crash.dump is not an Erlang crash dump"!
>
> Looking into "erl_crash.dump" the first few lines are:
> ---> snipp <---
> =erl_crash_dump:0.1
> Mon Feb 14 23:00:50 2011
> Slogan: Kernel pid terminated (application_controller)
> ({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})
> System version: Erlang R14B02 (erts-5.8.3) [source] [64-bit] [smp:2:2]
> [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
> Compiled: Mon Feb 14 22:17:17 2011
> Taints:
> Atoms: 4043
> ---> snipp <---
>
> Is the "crashdump_viewer" broken?
> Are there any other tools to "analyse" an "erl_crash.dump" file?
>
>
>  - boris
>
>
>
> 2011/2/14 Boris Mühmer <[hidden email]>:
>> Is there a special option to build "epmd" with IPv6 support? Actually
>> is there a system on which "epmd" binds itself to an IPv6 port?
>>
>> I checked my Windows 7 system with "netstat", but I could only see
>> "epmd" binding itself to the IPv4 port.
>>
>> "configure" tries to set "HAVE_IN6" (this is set on my Ubuntu
>> system(s)). I believe "AF_INET6" comes from the linux kernel.
>>
>> But "what" (I didn't want to put "who" in here) is responsible for "EPMD6"?
>>
>> Running "grep -r EPMD6 ." in the top level directory of the source
>> tree just gives me a single result:
>>    ./erts/epmd/src/epmd_int.h:#if defined(HAVE_IN6) &&
>> defined(AF_INET6) && defined(EPMD6)
>>
>> Using grep I saw, that there a several dependencies on "HAVE_IN6" and
>> "AF_INET6", but only a single one for "EPMD6".
>>
>>
>>  - boris
>

________________________________________________________________
erlang-questions (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:[hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: How to connect erlang nodes over IPv6 (on Ubuntu 10.04 server installations, Erlang R14B1)?

Michael Santos-2
On Tue, Feb 15, 2011 at 07:08:30AM +0100, Boris Mühmer wrote:

> I saw an interesting behaviour of empd, which I didn't come to my
> attention until now:
>
> 1) I started "empd"in one shell with the "-d" option.
> 2) From another shell I called "empd -names"
> 3) I tried to start "erl -name test1 -setcookie abc123 -proto_dist inet6_tcp"
> 4) I wanted to use "empd -kill"
> 5) I had to use "ctrl-c" to stop "empd"
>
> Here is the output from the shell with "empd -d" running:

If clients are connected, the "kill" request doesn't actually do anything
anymore (to have the old behaviour use the "-relaxed_command_check"
switch).

> After getting home from work, I will add some debugging information to
> "empd" to see why it belives that those calls were "non local"
> addresses...

epmd has a hard coded check for IPv4 localhost in epmd_srv.c:

    s->local_peer =
    ((((unsigned) ntohl(si.sin_addr.s_addr)) & 0xFF000000U) ==
        0x7F000000U); /* Only 127.x.x.x allowed, no false positives */



________________________________________________________________
erlang-questions (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:[hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: How to connect erlang nodes over IPv6 (on Ubuntu 10.04 server installations, Erlang R14B1)?

bsmr
2011/2/15 Michael Santos <[hidden email]>:
> If clients are connected, the "kill" request doesn't actually do anything
> anymore (to have the old behaviour use the "-relaxed_command_check"
> switch).

Actually there was no client connected (erl couldn't connect, it died first).
Using an IPv4 "empd", I could submit a "kill" request and it terminated.
This wasn't possible with the IPv6 version.

> epmd has a hard coded check for IPv4 localhost in epmd_srv.c:
>
>    s->local_peer =
>    ((((unsigned) ntohl(si.sin_addr.s_addr)) & 0xFF000000U) ==
>        0x7F000000U); /* Only 127.x.x.x allowed, no false positives */

Thanks for pointing me there... I will have a look at it, when I am home.


  - boris

________________________________________________________________
erlang-questions (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:[hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: How to connect erlang nodes over IPv6 (on Ubuntu 10.04 server installations, Erlang R14B1)?

bsmr
I am a little step further:
1) epmd accepts "kill" from (IPv6) localhost.
2) erl doesn't die when started with "erl -name test -setcookie secret"
3) Also "erl" can connect the IPv6 epmd.
4) I could connect two nodes on the same system using net_adm:ping/1
and "[node() | nodes()]." gave the correct result. [Using "erl -name
test1 -setcookie secret" and "erl -name test2 -setcookie secret" in
two shells.]

My current changes are in my github repository at
"https://github.com/bsmr/otp" within the "epmd_ipv6_fix_for_localhost"
branch:
    https://github.com/bsmr/otp/commit/680c1dc960d470d0f22f52b9fc0aad2d920fc463

This isn't a tested patch... it is just my initial try (aka quick and
dirty hack) to get "epmd" working in my IPv6 environment!

But I also had my 1st surprise: I could connect two nodes without
adding "-proto_dist inet6_tcp" to the erl call!

I didn't test it with nodes on different machines, because of two things:
1) I had some problems with git and github (not enough experience with
both systems).
2) I had a call from my company to solve/help with an email spam
attack on our company's mail server.

Well, back to the topic:
a) Is there a set of tests to do proper (automated) checks if IPv6 is
working correctly?
b) Is there a tool for "C/C++" to check for IPv4 and IPv6 problems
(like "lint for IPv6" ;-)?


Well, I need some sleep...
  - boris

________________________________________________________________
erlang-questions (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:[hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: How to connect erlang nodes over IPv6 (on Ubuntu 10.04 server installations, Erlang R14B1)?

bsmr
Oh, I forgot to include the "debug" output form epmd:

$ /opt/Erlang/OTP/R14B01/20110214/2100/bin/epmd -d
epmd: Tue Feb 15 19:25:27 2011: epmd running - daemon = 0
epmd: Tue Feb 15 19:25:33 2011: ** got ALIVE2_REQ
epmd: Tue Feb 15 19:25:33 2011: registering 'test1:1', port 46484
epmd: Tue Feb 15 19:25:33 2011: type 77 proto 0 highvsn 5 lowvsn 5
epmd: Tue Feb 15 19:25:33 2011: ** sent ALIVE2_RESP for "test1"
epmd: Tue Feb 15 19:25:40 2011: ** got ALIVE2_REQ
epmd: Tue Feb 15 19:25:40 2011: registering 'test2:2', port 42591
epmd: Tue Feb 15 19:25:40 2011: type 77 proto 0 highvsn 5 lowvsn 5
epmd: Tue Feb 15 19:25:40 2011: ** sent ALIVE2_RESP for "test2"
epmd: Tue Feb 15 19:26:03 2011: unregistering 'test2:2', port 42591
epmd: Tue Feb 15 19:26:10 2011: unregistering 'test1:1', port 46484
epmd: Tue Feb 15 19:26:17 2011: ** got NAMES_REQ
epmd: Tue Feb 15 19:26:17 2011: ** sent NAMES_RESP
epmd: Tue Feb 15 19:26:22 2011: ** got KILL_REQ
epmd: Tue Feb 15 19:26:22 2011: epmd killed
epmd: Tue Feb 15 19:26:22 2011: got KILL_REQ - terminates normal


  - boris

2011/2/16 Boris Mühmer <[hidden email]>:

> I am a little step further:
> 1) epmd accepts "kill" from (IPv6) localhost.
> 2) erl doesn't die when started with "erl -name test -setcookie secret"
> 3) Also "erl" can connect the IPv6 epmd.
> 4) I could connect two nodes on the same system using net_adm:ping/1
> and "[node() | nodes()]." gave the correct result. [Using "erl -name
> test1 -setcookie secret" and "erl -name test2 -setcookie secret" in
> two shells.]
>
> My current changes are in my github repository at
> "https://github.com/bsmr/otp" within the "epmd_ipv6_fix_for_localhost"
> branch:
>    https://github.com/bsmr/otp/commit/680c1dc960d470d0f22f52b9fc0aad2d920fc463
>
> This isn't a tested patch... it is just my initial try (aka quick and
> dirty hack) to get "epmd" working in my IPv6 environment!
>
> But I also had my 1st surprise: I could connect two nodes without
> adding "-proto_dist inet6_tcp" to the erl call!
>
> I didn't test it with nodes on different machines, because of two things:
> 1) I had some problems with git and github (not enough experience with
> both systems).
> 2) I had a call from my company to solve/help with an email spam
> attack on our company's mail server.
>
> Well, back to the topic:
> a) Is there a set of tests to do proper (automated) checks if IPv6 is
> working correctly?
> b) Is there a tool for "C/C++" to check for IPv4 and IPv6 problems
> (like "lint for IPv6" ;-)?
>
>
> Well, I need some sleep...
>  - boris
>

________________________________________________________________
erlang-questions (at) erlang.org mailing list.
See http://www.erlang.org/faq.html
To unsubscribe; mailto:[hidden email]