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 }