[sctp-dev] Problem with SCTP_SET_PEER_PRIMARY_ADDR option
Mehmet Aslan
mehmet.asl at gmail.com
Mon Dec 6 11:46:02 PST 2010
Hi Chris,
Thank you for the clarification.
You are really fast. 2 weeks is a challenging duration. I will wait for the
update in JDK.
Regards,
MehmetAslan
2010/12/6 Chris Hegarty <chris.hegarty at oracle.com>
> Hi Mehmet,
>
> Unfortunately there is no way of setting the peer primary address on Linux
> (using lksctp) because of CR 7004439 (which I filed for this issue).
>
> What the Java implementation currently does (when setting the peer primary
> address) is that it converts all IPv4 addresses to IPv4-mapped addresses.
> And it does not correctly set the native sock_addr in the sctp_setpeerprim
> struct. I need to resolve this issues in the JDK, but I also wanted to
> understand why IPv4-mapped addresses are not accepted when they are for
> other native calls.
>
> What I will do is create a changeset to resolve the JDK issue as I
> understand lksctp to work today, and follow up with the native clarification
> separately. Either way I guess if lksctp is ever to change it would be a
> some point in the future, and old kernels will always behave as they do
> today.
>
> Please give me a few days and I'll send a code review request copying this
> mailing list. Then the fix will be in a JDK7 promoted build within about 2
> weeks.
>
> -Chris.
>
>
> On 12/ 3/10 09:33 PM, Mehmet Aslan wrote:
>
>> Hi Chris,
>> Thank you for your kind interest. It would be definitely a pleasure for
>> me if it was a contribution in any way.
>> I am looking forward to your update.
>> By the way, I read your mail in lksctp-developers site. The following
>> quotation from your mail is really interesting for my purposes:
>> " ... when I use the IPv4 address it appears to work as expected. ..."
>>
>> For the moment, being able to set the peer primary address using IPv4
>> addresses is quite enough for my application. Using the statement in
>> your mail as a clue, I tried changing my addresses by using Inet4Address
>> class, but I get the same exception again.
>> Is there a possibility that you could explain how I can achieve it? Or
>> is there a work around to set the peer primary address with the same
>> switching time comparable to using the setOption() method.
>>
>> Sorry for the inconvenience in your busy time, but it is really important.
>> Regards,
>> MehmetAslan
>>
>>
>> 2010/12/3 Chris Hegarty <chris.hegarty at oracle.com
>> <mailto:chris.hegarty at oracle.com>>
>>
>>
>> Hi Mehmet,
>>
>> There is certainly a bug in the Java implementation where we set
>> SCTP_SET_PEER_PRIMARY_ADDR, but it is not clear to me that the
>> native lksctp stack is behaving as expected. I've sent a mail to the
>> lksctp-developers mailing list to request clarification on the
>> expected behavior of the native call. Once I have clarification I
>> will make the appropriate changes in the JDK.
>>
>> I filed a bug, CR 7004439 "(sctp) SCTP_SET_PEER_PRIMARY_ADDR throws
>> SocketException on Linux", against this problem for the JDK.
>>
>> Thanks for finding and reporting this issue. I will update this
>> thread (hopefully within the next few days) with more information as
>> it becomes available.
>>
>> Thanks,
>> -Chris.
>>
>>
>> On 02/12/2010 07:57, Mehmet Aslan wrote:
>>
>> Hi All,
>> Actually I asked the following question in a reply message to
>> the prior
>> thread. Maybe because this, it did not draw any attention. The
>> problem
>> still exists and I can not go forward and I am not sure if it is a
>> setting issue on SCTP side or if it is a problem in my setup. I
>> will try
>> my chance in a new thread hoping that I can get some useful
>> response, as
>> it happened in the previous thread.
>> Currently,
>>
>> net.sctp.addip_noauth_enable = 1
>> net.sctp.addip_enable = 1
>>
>> Now, I can bind new addresses to a connected association or
>> unbind any
>> of local addresses from it. However I can not set peer primary
>> address
>> using related setOption() method.
>> The simple scenario and the case;
>> Server Client
>> 192.168.1.25 :3456 192.168.1.25 :6060
>> 192.168.1.133
>> :6060
>>
>> I would like to change peer primary address from ... .25:6060 to
>> ...
>> .133:6060 instructing from the client side (using
>> setOption(SCTP_SET_PEER_PRIMARY_ADDR, sockAddr). When I applied the
>> instruction, I get a java.net <http://java.net>
>> <http://java.net/> exception. Here are the
>>
>> related code parts:
>>
>> Server:
>> ...
>> ssc.getOption(SCTP_PRIMARY_ADDR); // This gives out ... .25
>> :6060 as
>> the primary addr
>>
>> Client:
>> ...
>> // I want the server to use the other address (... .133 :6060)
>> as the
>> primary address
>> // and I want to make this change by means of an instruction
>> from client
>> side. I use the code below;
>> sockAddr = new InetSocketAddress("192.168.1.133", 6060);
>> sc.setOption(SCTP_SET_PEER_PRIMARY_ADDR, sockAddr);
>> ....
>>
>> In the output window of client, at the line of setOption()
>> method I get
>> the following exception and no change in the primary address:
>> "java.net.SocketException: Cannot assign requested address"
>>
>> I will appreciate much if an explanation is posted about how I
>> can solve
>> this issue.
>> Additionally, is the following setting enough to enable Dynamic
>> Address
>> Reconfiguration extension completely?
>>
>> net.sctp.addip_noauth_enable = 1
>> net.sctp.addip_enable = 1
>>
>> Thanks in advance,
>> regards,
>> MehmetAslan
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/sctp-dev/attachments/20101206/b76a02e9/attachment.html
More information about the sctp-dev
mailing list