1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
24 */
25 package com.sun.dhcpmgr.server;
26
27 import java.util.*;
28 import java.util.jar.*;
29 import java.net.InetAddress;
30 import java.net.UnknownHostException;
31
32 import com.sun.dhcpmgr.bridge.*;
33 import com.sun.dhcpmgr.data.*;
34
35 /**
36 * This class provides the capabilities for managing the the basic service
37 * parameters which are not stored in the dhcptab or per-network tables.
38 */
39 public class DhcpServiceMgrImpl implements DhcpServiceMgr {
40 private Bridge bridge;
41
42 private String serverName;
43 private String shortServerName;
44 private InetAddress serverAddress;
45
46 public DhcpServiceMgrImpl(Bridge bridge) {
47 this.bridge = bridge;
48
49 try {
50 serverAddress = InetAddress.getLocalHost();
51 serverName = serverAddress.getHostName();
52
53 int i = serverName.indexOf('.');
54 if (i == -1) {
55 shortServerName = serverName;
56 } else {
57 shortServerName = serverName.substring(0, i);
58 }
59 } catch (UnknownHostException e) {
60 serverName = shortServerName = "";
61 }
62 }
63
64 public String getServerName() {
65 return serverName;
66 }
67
68 public String getShortServerName() {
69 return shortServerName;
70 }
71
72 public InetAddress getServerAddress() {
73 return serverAddress;
74 }
75
76 public void makeLocation(DhcpDatastore datastore)
77 throws BridgeException {
78 bridge.makeLocation(datastore);
79 }
80
81 public DhcpDatastore getDataStore(String resource) throws BridgeException {
82 return bridge.getDataStore(resource);
83 }
84
85 /**
86 * Retrieve the list of possible data stores for this server
87 * @return an array of data store module names.
88 */
89 public DhcpDatastore [] getDataStores() throws BridgeException {
90 return bridge.getDataStores();
91 }
92
93 /**
94 * Retrieve a list of options from the DHCP inittab.
95 * @return an array of options
96 */
97 public Option [] getInittabOptions(byte context) throws BridgeException {
98 return bridge.getInittabOptions(context);
99 }
100
101 public String getDataStoreClassname(String dataStoreName)
102 throws BridgeException {
103
104 String beansDirectory = new String("/usr/sadm/admin/dhcpmgr/");
105 String jarPath = beansDirectory.concat(dataStoreName).concat(".jar");
106 String className = null;
107 try {
108 JarFile jarFile = new JarFile(jarPath);
109 Manifest manifest = jarFile.getManifest();
110 if (manifest == null) {
111 throw new BridgeException();
112 }
113 Attributes attrs = manifest.getMainAttributes();
114 if (attrs == null) {
115 throw new BridgeException();
116 }
117 className = attrs.getValue("Name");
118 if (!className.endsWith(".class")) {
119 throw new BridgeException();
120 }
121 className = className.substring(0, className.length() - 6);
122 className = className.replace('/', '.');
123 } catch (Throwable e) {
124 throw new BridgeException();
125 }
126
127 return className;
128 }
129
130 /**
131 * Retrieve the contents of the DHCP config file.
132 * @return the config settings
133 */
134 public DhcpdOptions readDefaults() throws BridgeException {
135 return bridge.readDefaults();
136 }
137
138 /**
139 * Write new settings to the DHCP config file.
140 * @param cfgs the new config settings
141 */
142 public void writeDefaults(DhcpdOptions cfgs) throws BridgeException {
143 bridge.writeDefaults(cfgs);
144 }
145
146 /**
147 * Remove the DHCP config file.
148 */
149 public void removeDefaults() throws BridgeException {
150 bridge.removeDefaults();
151 }
152
153 /**
154 * Start the server
155 */
156 public void startup() throws BridgeException {
157 bridge.startup();
158 }
159
160 /**
161 * Stop the server
162 */
163 public void shutdown() throws BridgeException {
164 bridge.shutdown();
165 }
166
167 /**
168 * Send the server a SIGHUP to re-read the dhcptab
169 */
170 public void reload() throws BridgeException {
171 bridge.reload();
172 }
173
174 /**
175 * Get the list of possible interfaces for the server to monitor
176 * @return an array of interfaces
177 */
178 public IPInterface [] getInterfaces() throws BridgeException {
179 return bridge.getInterfaces();
180 }
181
182 /**
183 * Break up a line into a list of arguments
184 * @param input line
185 * @return an array of arguments
186 */
187 public String [] getArguments(String line) throws BridgeException {
188 return bridge.getArguments(line);
189 }
190
191 /**
192 * Get the default value for an option which would take a string
193 * @param optionName name of the option
194 * @param arg additional information needed for this code
195 */
196 public synchronized String getStringOption(String optionName, String arg)
197 throws BridgeException {
198 Option option = OptionsTable.getTable().get(optionName);
199 return bridge.getStringOption(option.getCode(), arg);
200 }
201
202 /**
203 * Get the default value for an option which would take one or more IP addrs
204 * @param optionName name of the option
205 * @param arg additional information needed for this code
206 */
207 public synchronized IPAddress [] getIPOption(String optionName, String arg)
208 throws BridgeException {
209 Option option = OptionsTable.getTable().get(optionName);
210 return bridge.getIPOption(option.getCode(), arg);
211 }
212
213 /**
214 * Get the default value for an option which would take one or more numbers
215 * @param optionName name of the option
216 * @param arg additional information needed for this code
217 */
218 public synchronized long [] getNumberOption(String optionName, String arg)
219 throws BridgeException {
220 Option option = OptionsTable.getTable().get(optionName);
221 return bridge.getNumberOption(option.getCode(), arg);
222 }
223
224 /**
225 * Check if the datastore version is current.
226 * @return true if the datastore version if current.
227 */
228 public boolean isVersionCurrent() throws BridgeException {
229 return bridge.isVersionCurrent();
230 }
231
232 /**
233 * Check if the server is currently running
234 * @return true if the server process is started
235 */
236 public boolean isServerRunning() throws BridgeException {
237 return bridge.isServerRunning();
238 }
239 }