Review request: 7120875 fix macos ipv6 issue and update multiple test scripts
Michael McMahon
michael.x.mcmahon at oracle.com
Thu Dec 22 05:46:53 PST 2011
On 22/12/11 13:34, Alan Bateman wrote:
> On 22/12/2011 11:46, Michael McMahon wrote:
>>
>> I've updated this to localize the changes to NetworkInterface (and
>> the new class DefaultInterface).
>> So, there's no change to the socket impl java code
>> The new native code implementation is in net_util_md.c also, but
>> called from Plain*SocketImpl.c
>>> :
>> I've removed the debug outputs above. If all the above is ok, I'd
>> like to push this change
>> and address remaining test case issues in another changeset.
>>
>> New webrev @ http://cr.openjdk.java.net/~michaelm/7120875/webrev.4/
>>
> This is much cleaner, thanks for persevering with it. A couple of
> minor comments:
>
Thanks Alan. I've no problem with the comments below. I will make the
changes
and go with that version, unless there are other comments.
- Michael
> In NetworkInterface.java it looks a bit odd to add the static fields
> in the middle of the other fields. It would also be nice to add a
> comment to the package-private getDefault as it is used by several
> classes (and we likely need to be used by DatagramChannel too once you
> get to that area).
>
> In NetworkInterface.c then I assume the GetStaticFieldID doesn't need
> ifdef MACOSX around it. It's likely it will get used on other
> platforms too, Linux in particular.
>
> In PlainDatagramSocketImpl.c then I assume some of these changes could
> be combined with the ifdef __solaris__, I don't have a strong opinion
> on that.
>
> The Solaris and Windows implementations of DefaultInterface import
> Enumeration and IOException, I assume they are not needed.
>
> The Mac version of DefaultInterface is bit untidy. The ifc, if1, if2
> variables could be named differently. It looks like it may call
> isPointToPoint and isLoopback several times which is costly given that
> each method needs to query the system. I pasted in the static
> initializer and edited here into a chooseDefaultInterface method that
> I think is a bit tidier:
>
> private final static NetworkInterface defaultInterface =
> chooseDefaultInterface();
>
> /**
> * Choose a default interface. This method returns an interface
> that is
> * both "up" and supports multicast. This method choses an
> interface in
> * order of preference:
> * 1. neither loopback nor point to point
> * 2. point to point
> * 3. loopback
> *
> * @return the chosen interface or {@code null} if there isn't a
> suitable
> * default
> */
> private static NetworkInterface chooseDefaultInterface() {
> Enumeration<NetworkInterface> nifs;
>
> try {
> nifs = NetworkInterface.getNetworkInterfaces();
> } catch (IOException ignore) {
> // unable to enumate network interfaces
> return null;
> }
>
> NetworkInterface ppp = null;
> NetworkInterface loopback = null;
>
> while (nifs.hasMoreElements()) {
> NetworkInterface ni = nifs.nextElement();
> try {
> if (ni.isUp() && ni.supportsMulticast()) {
> boolean isLoopback = ni.isLoopback();
> boolean isPPP = ni.isPointToPoint();
> if (!isLoopback && !isPPP) {
> // found an interface that is not the loopback
> or a
> // point-to-point interface
> return ni;
> }
> if (ppp == null && isPPP)
> ppp = ni;
> if (loopback == null && isLoopback)
> loopback = ni;
> }
> } catch (IOException skip) { }
> }
>
> return (ppp != null) ? ppp : loopback;
> }
>
> The updates to the tests look fine to me.
>
> -Alan.
>
More information about the macosx-port-dev
mailing list