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, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright (c) 1998-2001 by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26 package com.sun.dhcpmgr.server;
27
28 import com.sun.dhcpmgr.bridge.*;
29 import com.sun.dhcpmgr.data.*;
30
31 import java.net.InetAddress;
32 import java.net.UnknownHostException;
33
34 /**
35 * This class provides the functionality to manage the DHCP network tables and
36 * the hosts table.
37 */
38 public class DhcpNetMgrImpl implements DhcpNetMgr {
39 private Bridge bridge;
40
41 public DhcpNetMgrImpl(Bridge bridge) {
42 this.bridge = bridge;
43 }
44
45 /**
46 * Return the Network corresponding to the network string
47 * @return a Network
48 */
49 public Network getNetwork(String network)
50 throws BridgeException {
51
52 return bridge.getNetwork(network);
53 }
54
55 /**
56 * Return the list of networks currently known to DHCP
57 * @return an array of Networks
58 */
59 public Network [] getNetworks() throws BridgeException {
60 return getNetworks(null);
61 }
62
63 public Network [] getNetworks(DhcpDatastore datastore)
64 throws BridgeException {
65 return bridge.getNetworks(datastore);
66 }
67
68 /**
69 * Return the list of addresses managed by DHCP on a given network
70 * @param network the dotted-decimal representation of the network address
71 * @return an array of records for the addresses defined on that network
72 */
73 public DhcpClientRecord [] loadNetwork(String network)
74 throws BridgeException {
75 return loadNetwork(network, null);
76 }
77
78 /**
79 * Return the list of addresses managed by DHCP on a given network
80 * @param network the dotted-decimal representation of the network address
81 * @param datastore user-supplied datastore attributes
82 * @return an array of records for the addresses defined on that network
83 */
84 public DhcpClientRecord [] loadNetwork(String network,
85 DhcpDatastore datastore) throws BridgeException {
86 return bridge.loadNetwork(network, datastore);
87 }
88
89 /**
90 * Return the list of addresses managed by DHCP on a given network, with
91 * the hostnames for each client looked up, too.
92 * @param network the dotted-decimal representation of the network address
93 * @return an array of records for the addresses defined on that network
94 */
95 public DhcpClientRecord [] loadNetworkCompletely(String network)
96 throws BridgeException {
97 DhcpClientRecord [] clients = loadNetwork(network);
98 // Force loading of client name for each client
99 for (int i = 0; i < clients.length; ++i) {
100 clients[i].getClientName();
101 }
102 return clients;
103 }
104
105 /**
106 * Modify an existing client record, and update the associated hosts
107 * record if needed.
108 * @param oldClient the existing record
109 * @param newClient the new record
110 * @param table the network on which the record is defined
111 */
112 public void modifyClient(DhcpClientRecord oldClient,
113 DhcpClientRecord newClient, String table) throws BridgeException {
114
115 modifyClient(oldClient, newClient, table, null);
116 }
117
118 /**
119 * Modify an existing client record, and update the associated hosts
120 * record if needed.
121 * @param oldClient the existing record
122 * @param newClient the new record
123 * @param table the network on which the record is defined
124 * @param datastore user-supplied datastore attributes
125 */
126 public void modifyClient(DhcpClientRecord oldClient,
127 DhcpClientRecord newClient, String table, DhcpDatastore datastore)
128 throws BridgeException {
129
130 // Update the network table record
131 bridge.modifyDhcpClientRecord(oldClient, newClient,
132 table, datastore);
133 }
134
135 /**
136 * Create a new record in the given table, and create a hosts record.
137 * @param client the client to create
138 * @param table the network on which to create the client
139 */
140 public void addClient(DhcpClientRecord client, String table)
141 throws BridgeException {
142
143 addClient(client, table, null);
144 }
145
146 /**
147 * Create a new record in the given table, and create a hosts record.
148 * @param client the client to create
149 * @param table the network on which to create the client
150 * @param datastore user-supplied datastore attributes
151 */
152 public void addClient(DhcpClientRecord client, String table,
153 DhcpDatastore datastore) throws BridgeException {
154
155 // Create the record in the per-network table
156 bridge.createDhcpClientRecord(client, table, datastore);
157
158 }
159
160 /**
161 * Delete a record from the given table, and delete the associated hosts
162 * record if requested.
163 * @param client the client to delete
164 * @param table the network to delete the client from
165 */
166 public void deleteClient(DhcpClientRecord client, String table)
167 throws BridgeException {
168
169 deleteClient(client, table, null);
170 }
171
172 /**
173 * Delete a record from the given table, and delete the associated hosts
174 * record if requested.
175 * @param client the client to delete
176 * @param table the network to delete the client from
177 * @param datastore user-supplied datastore attributes
178 */
179 public void deleteClient(DhcpClientRecord client, String table,
180 DhcpDatastore datastore)
181 throws BridgeException {
182
183 // Delete the client record from the per-network table
184 bridge.deleteDhcpClientRecord(client, table, datastore);
185 }
186
187
188 /**
189 * Retrieve a client record from the given table.
190 * @param client the client to delete
191 * @param table the network to delete the client from
192 * @param datastore user-supplied datastore attributes
193 */
194 public DhcpClientRecord getClient(DhcpClientRecord client,
195 String table, DhcpDatastore datastore) throws BridgeException {
196
197 // Retrieve the client record from the per-network table
198 DhcpClientRecord clientRecord =
199 bridge.getDhcpClientRecord(client, table, datastore);
200
201 return clientRecord;
202 }
203
204 /**
205 * Create a new per-network table for the given network by converting the
206 * one from the server's data store into a new data store.
207 * @param network the network number in dotted-decimal form.
208 * @param datastore user-supplied datastore attributes
209 */
210 public void cvtNetwork(String network,
211 DhcpDatastore datastore) throws BridgeException {
212 bridge.cvtNetwork(network, datastore);
213 }
214
215 /**
216 * Create a new per-network table for the given network.
217 * @param network the network number in dotted-decimal form.
218 */
219 public void createNetwork(String network)
220 throws BridgeException {
221
222 createNetwork(network, null);
223 }
224
225 /**
226 * Create a new per-network table for the given network.
227 * @param network the network number in dotted-decimal form.
228 * @param datastore user-supplied datastore attributes
229 */
230 public void createNetwork(String network,
231 DhcpDatastore datastore) throws BridgeException {
232 bridge.createDhcpNetwork(network, datastore);
233 }
234
235 /**
236 * Delete a per-network table, the macro associated with the network number,
237 * and optionally deleting the associated hosts records.
238 * @param network the network number in dotted-decimal form.
239 * @param deleteMacro true if the network macro should be deleted
240 */
241 public void deleteNetwork(String network, boolean deleteMacro)
242 throws BridgeException {
243 deleteNetwork(network, deleteMacro, null);
244 }
245
246 /**
247 * Delete a per-network table, the macro associated with the network number,
248 * and optionally deleting the associated hosts records.
249 * @param network the network number in dotted-decimal form.
250 * @param deleteMacro true if the network macro should be deleted
251 * @param datastore user-supplied datastore attributes
252 */
253 public void deleteNetwork(String network, boolean deleteMacro,
254 DhcpDatastore datastore)
255 throws BridgeException {
256
257 // Delete network table, then the macro for the network
258 bridge.deleteDhcpNetwork(network, datastore);
259 try {
260 if (deleteMacro) {
261 bridge.deleteDhcptabRecord(new Macro(network),
262 datastore);
263 }
264 } catch (Throwable e) {
265 // All the errors here are ignorable
266 }
267 }
268 }