[erlang-questions] Diameter client issue

Bengt Kleberg <>
Tue Mar 26 16:00:58 CET 2013


Greetings,

When testing Erlang DIAMETER interfaces I use Seagull.
Google for Seagull DIAMETER and you will find it.


bengt

On Tue, 2013-03-26 at 10:48 -0400, S X wrote:
> Hi, Rudolph & Anders,
> 
> 
> Not sure your problem is resolved or not.
> 
> 
> I was able to use the diameter sample code with the local/remote mode,
> i.e.  Start a diameter server in an erts on a pc, and start a diameter
> client in an erts on another pc (I use virtual machines as pcs here).
> They can communicate different types of diameter messages without
> problems.
> 
> 
> 
> However, when I try to use a diameter client (the sample code) from an
> erts to connect a diameter server which is not running within an erts
> (other diameter server not implemented in erlang). It doesn't work(can
> not build up a connection). I am not quite familiar with the detailed
> implementation of the erlang diameter library now. I am feeling that
> the erlang diameter relies on the erlang nodes, which means all the
> peers are built up only on the erts (distributed erlang runtimes).
> Does the erlang diameter only work within erlang environment? Or in
> order to talk to other diameter servers, does it need to write another
> erlang client using some functions from the erlang diameter library,
> like encode/decode? The sample client code doesn't work in this
> situation.
> 
> 
> I am not sure my understanding above is correct or not. Can you
> provide some guidance?
> 
> 
> Thanks,
> 
> Samuel
> 
> 
> 
> 
> On Thu, Mar 21, 2013 at 9:00 AM, Anders Svensson
> <> wrote:
>         One more time to the list ...
>         
>         On Thu, Mar 21, 2013 at 12:58 PM, Anders Svensson
>         <> wrote:
>         > The problem looks to be that there's an {ssl, false} option
>         being into
>         > diameter_tcp and then down to gen_tcp, which causes it to
>         raise
>         > badarg. What OTP release is this? I can't say I recall the
>         example
>         > code passing this tuple.
>         >
>         > /Anders, Erlang/OTP
>         >
>         >
>         >
>         > On Wed, Mar 20, 2013 at 6:08 PM, Rudolph van Graan
>         <> wrote:
>         >> Hi there,
>         >>
>         >> I'm trying to start up the Erlang diameter demo application
>         shipped with
>         >> Erlang/OTP. The issue is that, no matter what format I try,
>         I can't get the
>         >> client to connect to a remote diameter server.
>         >>
>         >> In that example, I started the application as follows:
>         >>
>         >> 3>  diameter:start(), client:start().
>         >> ok
>         >>
>         >> 4>
>         client:connect({tcp,{10,151,0,166},{10,249,20,174},3868}).
>         >> {ok,#Ref<0.0.0.643>}
>         >>
>         >> 7> client:call().
>         >> {error,no_connection}
>         >>
>         >>
>         >> Here, my local IP address is {10,151,0,166} and the remote
>         one is
>         >> {10,249,20,174}.
>         >>
>         >> TCP to the server is working:
>         >>
>         >> telnet 10.249.20.174 3868
>         >> Trying 10.249.20.174...
>         >> Connected to 10.249.20.174.
>         >> Escape character is '^]'.
>         >>
>         >>
>         >> I traced diameter_tcp and I can see that it is getting a
>         badarg error
>         >> somewhere:
>         >>
>         >> (<0.114.0>) returned from diameter_tcp:start/3 ->
>         {ok,<0.115.0>,
>         >>
>          [{10,151,0,166}]}
>         >> (<0.116.0>) call
>         >>
>         diameter_tcp:handle_info({'DOWN',#Ref<0.0.0.924>,process,<0.115.0>,badarg},{monitor,<0.114.0>,<0.115.0>})
>         >> (<0.116.0>) call
>         >>
>         diameter_tcp:m({'DOWN',#Ref<0.0.0.924>,process,<0.115.0>,badarg},{monitor,<0.114.0>,<0.115.0>})
>         >> (<0.116.0>) returned from diameter_tcp:m/2 -> ok
>         >>
>         >> Does anyone have an idea what I am doing wrong? My feeling
>         is that it has to
>         >> do with the local ip address. I don't understand why I even
>         need to supply a
>         >> local IP address and the documentation isn't very clear.
>         >>
>         >> Thanks,
>         >>
>         >> Rudolph
>         >>
>         >>
>         >>  Here is the trace:
>         >>
>         >> (<0.84.0>) call
>         diameter_tcp:start_link({monitor,<0.114.0>,<0.115.0>})
>         >> (<0.116.0>) call
>         diameter_tcp:init({monitor,<0.114.0>,<0.115.0>})
>         >> (<0.116.0>) call
>         diameter_tcp:i({monitor,<0.114.0>,<0.115.0>})
>         >> (<0.116.0>) returned from diameter_tcp:i/1 ->
>         {monitor,<0.114.0>,<0.115.0>}
>         >> (<0.84.0>) returned from diameter_tcp:start_link/1 ->
>         {ok,<0.116.0>}
>         >> (<0.115.0>) call diameter_tcp:ssl([{ssl,false},
>         >>  {ip,{10,151,0,166}},
>         >>  {raddr,{10,249,20,174}},
>         >>  {rport,3868},
>         >>  {reuseaddr,true}])
>         >> (<0.115.0>) call diameter_tcp:ssl_opts([])
>         >> (<0.115.0>) returned from diameter_tcp:ssl_opts/1 -> false
>         >> (<0.115.0>) returned from diameter_tcp:ssl/1 -> {false,
>         >>
>          [{ssl,false},
>         >>
>         {ip,{10,151,0,166}},
>         >>
>         {raddr,{10,249,20,174}},
>         >>
>         {rport,3868},
>         >>
>         {reuseaddr,true}]}
>         >> (<0.115.0>) call
>         >>
>         diameter_tcp:i(connect,#Ref<0.0.0.643>,gen_tcp,<0.114.0>,false,[{ssl,false},
>         >>  {ip,{10,151,0,166}},
>         >>  {raddr,{10,249,20,174}},
>         >>  {rport,3868},
>         >>  {reuseaddr,true}],[])
>         >> (<0.115.0>) call
>         >>
>         diameter_tcp:i(connect,#Ref<0.0.0.643>,gen_tcp,<0.114.0>,[{ssl,false},
>         >>  {ip,{10,151,0,166}},
>         >>  {raddr,{10,249,20,174}},
>         >>  {rport,3868},
>         >>  {reuseaddr,true}],[])
>         >> (<0.115.0>) call
>         diameter_tcp:get_addr([{ip,{10,151,0,166}}],[])
>         >> (<0.115.0>) call
>         diameter_tcp:addr([{ip,{10,151,0,166}}],[])
>         >> (<0.115.0>) returned from diameter_tcp:addr/2 ->
>         {10,151,0,166}
>         >> (<0.115.0>) returned from diameter_tcp:get_addr/2 ->
>         {10,151,0,166}
>         >> (<0.115.0>) call
>         diameter_tcp:get_addr([{raddr,{10,249,20,174}}],[])
>         >> (<0.115.0>) call
>         diameter_tcp:addr([{raddr,{10,249,20,174}}],[])
>         >> (<0.115.0>) returned from diameter_tcp:addr/2 ->
>         {10,249,20,174}
>         >> (<0.115.0>) returned from diameter_tcp:get_addr/2 ->
>         {10,249,20,174}
>         >> (<0.115.0>) call diameter_tcp:get_port([{rport,3868}])
>         >> (<0.115.0>) returned from diameter_tcp:get_port/1 -> 3868
>         >> (<0.115.0>) call
>         >>
>         diameter_tcp:gen_opts({10,151,0,166},[{ssl,false},{reuseaddr,true}])
>         >> (<0.115.0>) returned from diameter_tcp:gen_opts/2 ->
>         [binary,
>         >>
>         {packet,0},
>         >>
>         {active,once},
>         >>
>         {ip,{10,151,0,166}},
>         >>
>         {ssl,false},
>         >>
>         {reuseaddr,true}]
>         >> (<0.82.0>) returned from diameter_tcp:start_link/1 ->
>         {ok,<0.115.0>,
>         >>
>          [{10,151,0,166}]}
>         >> (<0.115.0>) call
>         diameter_tcp:connect(gen_tcp,{10,249,20,174},3868,[binary,
>         >>  {packet,0},
>         >>  {active,once},
>         >>  {ip,{10,151,0,166}},
>         >>  {ssl,false},
>         >>  {reuseaddr,true}])
>         >> (<0.114.0>) returned from diameter_tcp:start/3 ->
>         {ok,<0.115.0>,
>         >>
>          [{10,151,0,166}]}
>         >> (<0.116.0>) call
>         >>
>         diameter_tcp:handle_info({'DOWN',#Ref<0.0.0.924>,process,<0.115.0>,badarg},{monitor,<0.114.0>,<0.115.0>})
>         >> (<0.116.0>) call
>         >>
>         diameter_tcp:m({'DOWN',#Ref<0.0.0.924>,process,<0.115.0>,badarg},{monitor,<0.114.0>,<0.115.0>})
>         >> (<0.116.0>) returned from diameter_tcp:m/2 -> ok
>         >> (<0.116.0>) call
>         >>
>         diameter_tcp:x({'DOWN',#Ref<0.0.0.924>,process,<0.115.0>,badarg})
>         >> (<0.116.0>) call
>         >>
>         diameter_tcp:terminate({shutdown,{'DOWN',#Ref<0.0.0.924>,process,<0.115.0>,badarg}},{monitor,<0.114.0>,<0.115.0>})
>         >> (<0.116.0>) returned from diameter_tcp:terminate/2 -> ok
>         >>
>         >>
>         >>
>         
>         >> _______________________________________________
>         >> erlang-questions mailing list
>         >> 
>         >> http://erlang.org/mailman/listinfo/erlang-questions
>         >>
>         _______________________________________________
>         erlang-questions mailing list
>         
>         http://erlang.org/mailman/listinfo/erlang-questions
> 
> 
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions




More information about the erlang-questions mailing list