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 * ident "%Z%%M% %I% %E% SMI" 24 * 25 * Copyright (c) 2001 by Sun Microsystems, Inc. 26 * All rights reserved. 27 */ 28 package com.sun.dhcpmgr.cli.dhcpconfig; 29 30 import com.sun.dhcpmgr.cli.common.DhcpCliFunction; 31 import com.sun.dhcpmgr.data.DhcpdOptions; 32 import com.sun.dhcpmgr.data.ValidationException; 33 34 /** 35 * The main class for the "configure BOOTP relay" functionality of dhcpconfig. 36 */ 37 public class ConfigureBootp extends DhcpCfgFunction { 38 39 /** 40 * The valid options associated with configuring a BOOTP relay agent. 41 */ 42 static final int supportedOptions[] = { 43 }; 44 45 /** 46 * The addresses of servers for which to serve as a relay. 47 */ 48 String addresses; 49 50 /** 51 * Constructs a ConfigureBootp object. 52 * @param addresses the addresses of servers for which to serve as a relay. 53 */ 54 public ConfigureBootp(String addresses) { 55 56 validOptions = supportedOptions; 57 this.addresses = addresses; 58 59 } // constructor 60 61 /** 62 * Returns the option flag for this function. 63 * @returns the option flag for this function. 64 */ 65 public int getFunctionFlag() { 66 return (DhcpCfg.CONFIGURE_BOOTP); 67 } 68 69 /** 70 * Executes the "configure BOOTP relay" functionality. 71 * @return DhcpCfg.SUCCESS or DhcpCfg.FAILURE 72 */ 73 public int execute() { 74 75 // Check to see if DHCP or BOOTP relay is already configured. 76 // 77 boolean isServer = false; 78 boolean isRelay = false; 79 try { 80 DhcpdOptions opts = getSvcMgr().readDefaults(); 81 if (opts.isRelay()) { 82 isRelay = true; 83 } else { 84 isServer = true; 85 } 86 } catch (Throwable e) { 87 // this is to be expected 88 } 89 90 if (isServer) { 91 printErrMessage(getString("config_dhcp_configured_error")); 92 return (DhcpCfg.FAILURE); 93 } 94 95 if (isRelay) { 96 printErrMessage(getString("config_bootp_configured_error")); 97 return (DhcpCfg.FAILURE); 98 } 99 100 // Write the information to the DHCP configuration file. 101 // 102 try { 103 IPAddressList list = new IPAddressList(addresses); 104 DhcpdOptions options = new DhcpdOptions(); 105 options.setDaemonEnabled(true); 106 options.setRelay(true, list.toString()); 107 getSvcMgr().writeDefaults(options); 108 printMessage(getString("config_create_conf_progress")); 109 } catch (ValidationException e) { 110 printErrMessage(getMessage(e)); 111 return (DhcpCfg.FAILURE); 112 } catch (Throwable e) { 113 Object [] arguments = new Object[1]; 114 arguments[0] = getMessage(e); 115 printErrMessage(getString("config_writing_conf_error"), arguments); 116 return (DhcpCfg.FAILURE); 117 } 118 119 // Start it up. 120 // 121 try { 122 getSvcMgr().startup(); 123 printMessage(getString("config_startup_progress")); 124 } catch (Throwable e) { 125 Object [] arguments = new Object[1]; 126 arguments[0] = getMessage(e); 127 printErrMessage(getString("config_startup_error"), arguments); 128 return (DhcpCfg.FAILURE); 129 } 130 131 return (DhcpCfg.SUCCESS); 132 133 } // execute 134 135 } // ConfigureBootp