-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathNetworkConfig.java
More file actions
118 lines (103 loc) · 2.65 KB
/
Copy pathNetworkConfig.java
File metadata and controls
118 lines (103 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package javaforce.net;
import java.util.*;
import javaforce.*;
/** Network Interface Settings
*
* @author pquiring
*/
public class NetworkConfig {
public String dev;
public boolean dhcp4 = true;
public String ip4;
public String mask4;
public String gateway4;
public boolean enable_ip6 = false;
public boolean dhcp6 = true;
public String ip6;
public String gateway6;
public String[] dns; //optional
/*
public boolean wireless;
public boolean active; // ifup / ifdown
public boolean link; // /sys/class/net/{dev}/carrier
*/
public NetworkConfig() {}
public NetworkConfig(String dev) {
this.dev = dev;
}
public String toString() {
String[] cfg = toNetworkd();
return JF.join("\n", cfg, 0, true);
}
/** Create NetworkConfig from networkd .network file. */
public static NetworkConfig fromNetworkd(String[] cfg) {
NetworkConfig nc = new NetworkConfig();
ArrayList<String> dns = new ArrayList<>();
for(String ln : cfg) {
int idx = ln.indexOf('=');
if (idx == -1) continue;
String key = ln.substring(0, idx).trim().toLowerCase();
String value = ln.substring(idx + 1).trim();
switch (key) {
case "name": nc.dev = value; break;
case "address":
if (value.contains(".")) {
nc.ip4 = value;
nc.dhcp4 = false;
} else {
nc.ip6 = value;
nc.dhcp6 = false;
}
break;
case "gateway":
if (value.contains("."))
nc.gateway4 = value;
else
nc.gateway6 = value; break;
case "dns":
dns.add(value);
break;
}
}
nc.dns = dns.toArray(JF.StringArrayType);
return nc;
}
/** Create networkd .network file from NetworkConfig */
public String[] toNetworkd() {
ArrayList<String> cfg = new ArrayList<>();
cfg.add("[Match]");
cfg.add("Name=" + dev);
cfg.add("[Network]");
if (dhcp4) {
cfg.add("DHCP=yes");
} else {
cfg.add("Address=" + ip4);
cfg.add("Gateway=" + gateway4);
}
if (!enable_ip6) {
if (dhcp6) {
cfg.add("DHCP=yes");
} else {
cfg.add("Address=" + ip6);
cfg.add("Gateway=" + gateway6);
}
}
if (dns != null) {
for(String svr : dns) {
cfg.add("DNS=" + svr);
}
}
return cfg.toArray(JF.StringArrayType);
}
public void addDNS(String svr) {
if (dns == null) {
dns = new String[1];
dns[0] = svr;
} else {
String[] newdns = new String[dns.length + 1];
System.arraycopy(dns, 0, newdns, 0, dns.length);
dns = newdns;
dns[dns.length - 1] = svr;
}
}
}