1/*
2 * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26#ifndef NETWORK_INTERFACE_H
27#define NETWORK_INTERFACE_H
28
29#include "net_util.h"
30
31/*
32 * Structures used when enumerating interfaces and addresses
33 */
34typedef struct _netaddr  {
35    SOCKETADDRESS    addr;                  /* IPv4 or IPv6 address */
36    SOCKETADDRESS    brdcast;
37    short            mask;
38    struct _netaddr *next;
39} netaddr;
40
41typedef struct _netif {
42    char *name;
43    char *displayName;
44    DWORD dwIndex;              /* Internal index */
45    DWORD ifType;               /* Interface type */
46    int index;                  /* Friendly index */
47    struct _netif *next;
48
49    /* Following fields used on Windows XP when IPv6 is used only */
50    jboolean hasIpv6Address;    /* true when following fields valid */
51    jboolean dNameIsUnicode;    /* Display Name is Unicode */
52    int naddrs;                 /* Number of addrs */
53    DWORD ipv6Index;
54    struct _netaddr *addrs;     /* addr list for interfaces */
55} netif;
56
57extern void free_netif(netif *netifP);
58extern void free_netaddr(netaddr *netaddrP);
59
60/* various JNI ids */
61extern jclass ni_class;             /* NetworkInterface */
62
63extern jmethodID ni_ctor;           /* NetworkInterface() */
64
65extern jfieldID ni_indexID;         /* NetworkInterface.index */
66extern jfieldID ni_addrsID;         /* NetworkInterface.addrs */
67extern jfieldID ni_bindsID;         /* NetworkInterface.bindings */
68extern jfieldID ni_nameID;          /* NetworkInterface.name */
69extern jfieldID ni_displayNameID;   /* NetworkInterface.displayName */
70extern jfieldID ni_childsID;        /* NetworkInterface.childs */
71
72extern jclass ni_ibcls;             /* InterfaceAddress */
73extern jmethodID ni_ibctrID;        /* InterfaceAddress() */
74extern jfieldID ni_ibaddressID;     /* InterfaceAddress.address */
75extern jfieldID ni_ibbroadcastID;   /* InterfaceAddress.broadcast */
76extern jfieldID ni_ibmaskID;        /* InterfaceAddress.maskLength */
77
78int enumInterfaces(JNIEnv *env, netif **netifPP);
79
80// Windows Visa (and later) only.....
81#ifndef IF_TYPE_IEEE80211
82#define IF_TYPE_IEEE80211     71
83#endif
84
85#endif
86