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 2001-2002 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 package com.sun.dhcpmgr.cli.pntadm; 27 28 import com.sun.dhcpmgr.cli.common.Util; 29 import com.sun.dhcpmgr.data.DhcpClientRecord; 30 import com.sun.dhcpmgr.data.Macro; 31 import com.sun.dhcpmgr.data.Network; 32 import com.sun.dhcpmgr.bridge.BridgeException; 33 import com.sun.dhcpmgr.bridge.ExistsException; 34 35 import java.lang.IllegalArgumentException; 36 37 /** 38 * The main class for the "add client" functionality of pntadm. 39 */ 40 public class AddClientEntry extends PntAdmFunction { 41 42 /** 43 * The valid options associated with adding a client entry. 44 */ 45 static final int supportedOptions[] = { 46 PntAdm.COMMENT, 47 PntAdm.LEASE_EXPIRATION, 48 PntAdm.FLAGS, 49 PntAdm.CLIENTID, 50 PntAdm.CONVERT_CLIENTID, 51 PntAdm.MACRO_NAME, 52 PntAdm.VERIFY_MACRO, 53 PntAdm.SERVER, 54 PntAdm.RESOURCE, 55 PntAdm.RESOURCE_CONFIG, 56 PntAdm.PATH 57 }; 58 59 /** 60 * The client entry to add. 61 */ 62 String clientIP; 63 64 /** 65 * Constructs a AddClientEntry object for the client, clientIP. 66 * @param clientIP the client name or IP address. 67 */ 68 public AddClientEntry(String clientIP) { 69 70 this.clientIP = clientIP; 71 validOptions = supportedOptions; 72 73 } // constructor 74 75 /** 76 * Returns the option flag for this function. 77 * @returns the option flag for this function. 78 */ 79 public int getFunctionFlag() { 80 return (PntAdm.ADD_CLIENT_ENTRY); 81 } 82 83 /** 84 * Executes the "add client" functionality. 85 * @return PntAdm.SUCCESS, PntAdm.EXISTS, PntAdm.WARNING, or 86 * PntAdm.CRITICAL 87 */ 88 public int execute() 89 throws IllegalArgumentException { 90 91 int returnCode = PntAdm.SUCCESS; 92 93 // Build up a DhcpClientRecord from the user specified options. 94 // 95 try { 96 DhcpClientRecord dhcpClientRecord = new DhcpClientRecord(clientIP); 97 98 String clientId = options.valueOf(PntAdm.CLIENTID); 99 boolean convertClientId = options.isSet(PntAdm.CONVERT_CLIENTID); 100 if (convertClientId) { 101 if (clientId == null) { 102 String msg = getString("no_clientid_specified"); 103 throw new IllegalArgumentException(msg); 104 } 105 clientId = Util.asciiToHex(clientId); 106 } 107 if (clientId != null) { 108 dhcpClientRecord.setClientId(clientId); 109 } 110 111 String flags = options.valueOf(PntAdm.FLAGS); 112 if (flags != null) { 113 dhcpClientRecord.setFlags(flags); 114 } 115 116 String serverIP = options.valueOf(PntAdm.SERVER); 117 if (serverIP == null) { 118 serverIP = getSvcMgr().getServerName(); 119 } 120 dhcpClientRecord.setServerIP(serverIP); 121 122 String expiration = options.valueOf(PntAdm.LEASE_EXPIRATION); 123 if (expiration != null) { 124 dhcpClientRecord.setExpiration(shortFormat, expiration); 125 } 126 127 boolean verifyMacro = options.isSet(PntAdm.VERIFY_MACRO); 128 String macro = options.valueOf(PntAdm.MACRO_NAME); 129 if (verifyMacro) { 130 if (macro == null) { 131 String msg = getString("no_macro_specified"); 132 throw new IllegalArgumentException(msg); 133 } 134 135 // Create a Macro entry so that we can check to see if it 136 // exists in the dhcptab. 137 // 138 try { 139 Macro existingMacro = getDhcptabMgr().getMacro(macro); 140 } 141 catch (BridgeException e) { 142 printErrMessage(getString("macro_not_found")); 143 return (PntAdm.WARNING); 144 } 145 } 146 if (macro != null) { 147 dhcpClientRecord.setMacro(macro); 148 } 149 150 String comment = options.valueOf(PntAdm.COMMENT); 151 if (comment != null) { 152 dhcpClientRecord.setComment(comment); 153 } 154 155 // Create a Network object. 156 // 157 Network network = getNetMgr().getNetwork(networkName); 158 if (network == null) { 159 printErrMessage(getString("network_name_error")); 160 return (PntAdm.WARNING); 161 } 162 163 // Add the client. The host will be added to the hosts table 164 // if necessary. 165 // 166 getNetMgr().addClient(dhcpClientRecord, network.toString(), 167 getDhcpDatastore()); 168 } catch (IllegalArgumentException e) { 169 throw e; 170 } catch (ExistsException e) { 171 printErrMessage(getMessage(e)); 172 returnCode = PntAdm.EXISTS; 173 } catch (Throwable e) { 174 printErrMessage(getMessage(e)); 175 returnCode = PntAdm.WARNING; 176 } 177 178 return (returnCode); 179 180 } // execute 181 182 } // AddClientEntry