123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- /*
- * ZeroTier One - Network Virtualization Everywhere
- * Copyright (C) 2011-2015 ZeroTier, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * --
- *
- * ZeroTier may be used and distributed under the terms of the GPLv3, which
- * are available at: http://www.gnu.org/licenses/gpl-3.0.html
- *
- * If you would like to embed ZeroTier into a commercial application or
- * redistribute it in a modified binary form, please contact ZeroTier Networks
- * LLC. Start here: http://www.zerotier.com/
- */
- package com.zerotier.sdk;
- import android.util.Log;
- import java.lang.Comparable;
- import java.lang.Override;
- import java.lang.String;
- import java.util.ArrayList;
- import java.net.InetSocketAddress;
- import java.util.Collections;
- public final class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> {
- private final static String TAG = "VirtualNetworkConfig";
- public static final int MAX_MULTICAST_SUBSCRIPTIONS = 4096;
- public static final int ZT_MAX_ZT_ASSIGNED_ADDRESSES = 16;
- private long nwid;
- private long mac;
- private String name;
- private VirtualNetworkStatus status;
- private VirtualNetworkType type;
- private int mtu;
- private boolean dhcp;
- private boolean bridge;
- private boolean broadcastEnabled;
- private int portError;
- private boolean enabled;
- private long netconfRevision;
- private InetSocketAddress[] assignedAddresses;
- private VirtualNetworkRoute[] routes;
- private VirtualNetworkConfig() {
- }
- public boolean equals(VirtualNetworkConfig cfg) {
- ArrayList<String> aaCurrent = new ArrayList<>();
- ArrayList<String> aaNew = new ArrayList<>();
- for (InetSocketAddress s : assignedAddresses) {
- aaCurrent.add(s.toString());
- }
- for (InetSocketAddress s : cfg.assignedAddresses) {
- aaNew.add(s.toString());
- }
- Collections.sort(aaCurrent);
- Collections.sort(aaNew);
- boolean aaEqual = aaCurrent.equals(aaNew);
- ArrayList<String> rCurrent = new ArrayList<>();
- ArrayList<String> rNew = new ArrayList<>();
- for (VirtualNetworkRoute r : routes) {
- rCurrent.add(r.toString());
- }
- for (VirtualNetworkRoute r : cfg.routes) {
- rNew.add(r.toString());
- }
- Collections.sort(rCurrent);
- Collections.sort(rNew);
- boolean routesEqual = rCurrent.equals(rNew);
- if (this.nwid != cfg.nwid) {
- Log.i(TAG, "nwid Changed. Old: " + Long.toHexString(this.nwid) + " (" + Long.toString(this.nwid) + "), " +
- "New: " + Long.toHexString(cfg.nwid) + " (" + Long.toString(cfg.nwid) + ")");
- }
- if (this.mac != cfg.mac) {
- Log.i(TAG, "MAC Changed. Old: " + Long.toHexString(this.mac) + ", New: " + Long.toHexString(cfg.mac));
- }
- if (!this.name.equals(cfg.name)) {
- Log.i(TAG, "Name Changed. Old: " + this.name + " New: "+ cfg.name);
- }
- if (!this.type.equals(cfg.type)) {
- Log.i(TAG, "TYPE changed. Old " + this.type + ", New: " + cfg.type);
- }
- if (this.mtu != cfg.mtu) {
- Log.i(TAG, "MTU Changed. Old: " + this.mtu + ", New: " + cfg.mtu);
- }
- if (this.dhcp != cfg.dhcp) {
- Log.i(TAG, "DHCP Flag Changed. Old: " + this.dhcp + ", New: " + cfg.dhcp);
- }
- if (this.bridge != cfg.bridge) {
- Log.i(TAG, "Bridge Flag Changed. Old: " + this.bridge + ", New: " + cfg.bridge);
- }
- if (this.broadcastEnabled != cfg.broadcastEnabled) {
- Log.i(TAG, "Broadcast Flag Changed. Old: "+ this.broadcastEnabled +", New: " + this.broadcastEnabled);
- }
- if (this.portError != cfg.portError) {
- Log.i(TAG, "Port Error Changed. Old: " + this.portError + ", New: " + this.portError);
- }
- if (this.enabled != cfg.enabled) {
- Log.i(TAG, "Enabled Changed. Old: " + this.enabled + ", New: " + this.enabled);
- }
- if (!aaEqual) {
- Log.i(TAG, "Assigned Addresses Changed");
- Log.i(TAG, "Old:");
- for (String s : aaCurrent) {
- Log.i(TAG, " " + s);
- }
- Log.i(TAG, "New:");
- for (String s : aaNew) {
- Log.i(TAG, " " +s);
- }
- }
- if (!routesEqual) {
- Log.i(TAG, "Managed Routes Changed");
- Log.i(TAG, "Old:");
- for (String s : rCurrent) {
- Log.i(TAG, " " + s);
- }
- Log.i(TAG, "New:");
- for (String s : rNew) {
- Log.i(TAG, " " + s);
- }
- }
- return this.nwid == cfg.nwid &&
- this.mac == cfg.mac &&
- this.name.equals(cfg.name) &&
- this.status.equals(cfg.status) &&
- this.type.equals(cfg.type) &&
- this.mtu == cfg.mtu &&
- this.dhcp == cfg.dhcp &&
- this.bridge == cfg.bridge &&
- this.broadcastEnabled == cfg.broadcastEnabled &&
- this.portError == cfg.portError &&
- this.enabled == cfg.enabled &&
- aaEqual && routesEqual;
- }
- public int compareTo(VirtualNetworkConfig cfg) {
- if(cfg.nwid == this.nwid) {
- return 0;
- } else {
- return this.nwid > cfg.nwid ? 1 : -1;
- }
- }
- /**
- * 64-bit ZeroTier network ID
- */
- public final long networkId() {
- return nwid;
- }
- /**
- * Ethernet MAC (40 bits) that should be assigned to port
- */
- public final long macAddress() {
- return mac;
- }
- /**
- * Network name (from network configuration master)
- */
- public final String name() {
- return name;
- }
- /**
- * Network configuration request status
- */
- public final VirtualNetworkStatus networkStatus() {
- return status;
- }
- /**
- * Network type
- */
- public final VirtualNetworkType networkType() {
- return type;
- }
- /**
- * Maximum interface MTU
- */
- public final int mtu() {
- return mtu;
- }
- /**
- * If the network this port belongs to indicates DHCP availability
- *
- * <p>This is a suggestion. The underlying implementation is free to ignore it
- * for security or other reasons. This is simply a netconf parameter that
- * means 'DHCP is available on this network.'</p>
- */
- public final boolean isDhcpAvailable() {
- return dhcp;
- }
- /**
- * If this port is allowed to bridge to other networks
- *
- * <p>This is informational. If this is false, bridged packets will simply
- * be dropped and bridging won't work.</p>
- */
- public final boolean isBridgeEnabled() {
- return bridge;
- }
- /**
- * If true, this network supports and allows broadcast (ff:ff:ff:ff:ff:ff) traffic
- */
- public final boolean broadcastEnabled() {
- return broadcastEnabled;
- }
- /**
- * If the network is in PORT_ERROR state, this is the error most recently returned by the port config callback
- */
- public final int portError() {
- return portError;
- }
- /**
- * Network config revision as reported by netconf master
- *
- * <p>If this is zero, it means we're still waiting for our netconf.</p>
- */
- public final long netconfRevision() {
- return netconfRevision;
- }
- /**
- * ZeroTier-assigned addresses (in {@link java.net.InetSocketAddress} objects)
- *
- * For IP, the port number of the sockaddr_XX structure contains the number
- * of bits in the address netmask. Only the IP address and port are used.
- * Other fields like interface number can be ignored.
- *
- * This is only used for ZeroTier-managed address assignments sent by the
- * virtual network's configuration master.
- */
- public final InetSocketAddress[] assignedAddresses() {
- return assignedAddresses;
- }
- /**
- * ZeroTier-assigned routes (in {@link com.zerotier.sdk.VirtualNetworkRoute} objects)
- *
- * @return
- */
- public final VirtualNetworkRoute[] routes() { return routes; }
- }
|