1 /*
   2  * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 
  27 package com.sun.jmx.snmp.agent;
  28 
  29 
  30 
  31 // java imports
  32 //
  33 import java.util.Vector;
  34 
  35 // jmx imports
  36 //
  37 import javax.management.MBeanServer;
  38 import javax.management.ObjectName;
  39 import javax.management.MalformedObjectNameException;
  40 import javax.management.InstanceNotFoundException;
  41 import javax.management.ServiceNotFoundException;
  42 import com.sun.jmx.snmp.SnmpOid;
  43 import com.sun.jmx.snmp.SnmpStatusException;
  44 
  45 /**
  46  * Exposes the remote management interface of the <CODE>SnmpMibAgent</CODE> MBean.
  47  *
  48  * <p><b>This API is a Sun Microsystems internal API  and is subject
  49  * to change without notice.</b></p>
  50  */
  51 
  52 public interface SnmpMibAgentMBean {
  53 
  54     // PUBLIC METHODS
  55     //---------------
  56 
  57     /**
  58      * Processes a <CODE>get</CODE> operation.
  59      * This method must not be called from remote.
  60      *
  61      * @param req The SnmpMibRequest object holding the list of variables to
  62      *            be retrieved. This list is composed of
  63      *            <CODE>SnmpVarBind</CODE> objects.
  64      *
  65      * @exception SnmpStatusException An error occurred during the operation.
  66      * @see SnmpMibAgent#get(SnmpMibRequest)
  67      */
  68     public void get(SnmpMibRequest req) throws SnmpStatusException;
  69 
  70     /**
  71      * Processes a <CODE>getNext</CODE> operation.
  72      * This method must not be called from remote.
  73      *
  74      * @param req The SnmpMibRequest object holding the list of variables to
  75      *            be retrieved. This list is composed of
  76      *            <CODE>SnmpVarBind</CODE> objects.
  77      *
  78      * @exception SnmpStatusException An error occurred during the operation.
  79      * @see SnmpMibAgent#getNext(SnmpMibRequest)
  80      */
  81     public void getNext(SnmpMibRequest req) throws SnmpStatusException;
  82 
  83     /**
  84      * Processes a <CODE>getBulk</CODE> operation.
  85      * This method must not be called from remote.
  86      *
  87      * @param req The SnmpMibRequest object holding the list of variables to
  88      *            be retrieved. This list is composed of
  89      *            <CODE>SnmpVarBind</CODE> objects.
  90      *
  91      * @param nonRepeat The number of variables, starting with the first
  92      *    variable in the variable-bindings, for which a single
  93      *    lexicographic successor is requested.
  94      *
  95      * @param maxRepeat The number of lexicographic successors requested
  96      *    for each of the last R variables. R is the number of variables
  97      *    following the first <CODE>nonRepeat</CODE> variables for which
  98      *    multiple lexicographic successors are requested.
  99      *
 100      * @exception SnmpStatusException An error occurred during the operation.
 101      * @see SnmpMibAgent#getBulk(SnmpMibRequest,int,int)
 102      */
 103     public void getBulk(SnmpMibRequest req, int nonRepeat, int maxRepeat)
 104         throws SnmpStatusException;
 105 
 106     /**
 107      * Processes a <CODE>set</CODE> operation.
 108      * This method must not be called from remote.
 109      *
 110      * @param req The SnmpMibRequest object holding the list of variables to
 111      *            be set. This list is composed of
 112      *            <CODE>SnmpVarBind</CODE> objects.
 113      *
 114      * @exception SnmpStatusException An error occurred during the operation.
 115      * @see SnmpMibAgent#set(SnmpMibRequest)
 116      */
 117     public void set(SnmpMibRequest req) throws SnmpStatusException;
 118 
 119     /**
 120      * Checks if a <CODE>set</CODE> operation can be performed.
 121      * If the operation cannot be performed, the method should emit a
 122      * <CODE>SnmpStatusException</CODE>.
 123      *
 124      * @param req The SnmpMibRequest object holding the list of variables to
 125      *            be set. This list is composed of
 126      *            <CODE>SnmpVarBind</CODE> objects.
 127      *
 128      * @exception SnmpStatusException The <CODE>set</CODE> operation
 129      *    cannot be performed.
 130      * @see SnmpMibAgent#check(SnmpMibRequest)
 131      */
 132     public void check(SnmpMibRequest req) throws SnmpStatusException;
 133 
 134     // GETTERS AND SETTERS
 135     //--------------------
 136 
 137     /**
 138      * Gets the reference to the MBean server in which the SNMP MIB is
 139      * registered.
 140      *
 141      * @return The MBean server or null if the MIB is not registered in any
 142      *         MBean server.
 143      */
 144     public MBeanServer getMBeanServer();
 145 
 146     /**
 147      * Gets the reference to the SNMP protocol adaptor to which the MIB is
 148      * bound.
 149      * <BR>This method is used for accessing the SNMP MIB handler property
 150      * of the SNMP MIB agent in case of a standalone agent.
 151      *
 152      * @return The SNMP MIB handler.
 153      */
 154     public SnmpMibHandler getSnmpAdaptor();
 155 
 156     /**
 157      * Sets the reference to the SNMP protocol adaptor through which the
 158      * MIB will be SNMP accessible and add this new MIB in the SNMP MIB
 159      * handler.
 160      * <BR>This method is used for setting the SNMP MIB handler property of
 161      * the SNMP MIB agent in case of a standalone agent.
 162      *
 163      * @param stack The SNMP MIB handler.
 164      */
 165     public void setSnmpAdaptor(SnmpMibHandler stack);
 166 
 167     /**
 168      * Sets the reference to the SNMP protocol adaptor through which the MIB
 169      * will be SNMP accessible and add this new MIB in the SNMP MIB handler.
 170      * This method is to be called to set a specific agent to a specific OID.
 171      * This can be useful when dealing with MIB overlapping.
 172      * Some OID can be implemented in more than one MIB. In this case, the
 173      * OID nearer agent will be used on SNMP operations.
 174      * @param stack The SNMP MIB handler.
 175      * @param oids The set of OIDs this agent implements.
 176      *
 177      * @since 1.5
 178      */
 179     public void setSnmpAdaptor(SnmpMibHandler stack, SnmpOid[] oids);
 180 
 181     /**
 182      * Sets the reference to the SNMP protocol adaptor through which the MIB
 183      * will be SNMP accessible and add this new MIB in the SNMP MIB handler.
 184      * Adds a new contextualized MIB in the SNMP MIB handler.
 185      *
 186      * @param stack The SNMP MIB handler.
 187      * @param contextName The MIB context name. If null is passed, will be
 188      *        registered in the default context.
 189      *
 190      * @exception IllegalArgumentException If the parameter is null.
 191      *
 192      * @since 1.5
 193      */
 194     public void setSnmpAdaptor(SnmpMibHandler stack, String contextName);
 195 
 196     /**
 197      * Sets the reference to the SNMP protocol adaptor through which the MIB
 198      * will be SNMP accessible and adds this new MIB in the SNMP MIB handler.
 199      * Adds a new contextualized MIB in the SNMP MIB handler.
 200      *
 201      * @param stack The SNMP MIB handler.
 202      * @param contextName The MIB context name. If null is passed, will be
 203      *        registered in the default context.
 204      * @param oids The set of OIDs this agent implements.
 205      * @exception IllegalArgumentException If the parameter is null.
 206      *
 207      * @since 1.5
 208      */
 209     public void setSnmpAdaptor(SnmpMibHandler stack,
 210                                String contextName,
 211                                SnmpOid[] oids);
 212 
 213     /**
 214      * Gets the object name of the SNMP protocol adaptor to which the MIB is
 215      * bound.
 216      *
 217      * @return The name of the SNMP protocol adaptor.
 218      */
 219     public ObjectName getSnmpAdaptorName();
 220 
 221     /**
 222      * Sets the reference to the SNMP protocol adaptor through which the MIB
 223      * will be SNMP accessible and add this new MIB in the SNMP MIB handler
 224      * associated to the specified <CODE>name</CODE>.
 225      *
 226      * @param name The object name of the SNMP MIB handler.
 227      *
 228      * @exception InstanceNotFoundException The MBean does not exist in the
 229      *        MBean server.
 230      * @exception ServiceNotFoundException This SNMP MIB is not registered
 231      *        in the MBean server or the requested service is not supported.
 232      */
 233     public void setSnmpAdaptorName(ObjectName name)
 234         throws InstanceNotFoundException, ServiceNotFoundException;
 235 
 236 
 237     /**
 238      * Sets the reference to the SNMP protocol adaptor through which the MIB
 239      * will be SNMP accessible and add this new MIB in the SNMP MIB handler
 240      * associated to the specified <CODE>name</CODE>.
 241      * This method is to be called to set a specific agent to a specific OID.
 242      * This can be useful when dealing with MIB overlapping.
 243      * Some OID can be implemented in more than one MIB. In this case, the
 244      * OID nearer agent will be used on SNMP operations.
 245      * @param name The name of the SNMP protocol adaptor.
 246      * @param oids The set of OIDs this agent implements.
 247      * @exception InstanceNotFoundException The SNMP protocol adaptor does
 248      *     not exist in the MBean server.
 249      *
 250      * @exception ServiceNotFoundException This SNMP MIB is not registered
 251      *     in the MBean server or the requested service is not supported.
 252      *
 253      * @since 1.5
 254      */
 255     public void setSnmpAdaptorName(ObjectName name, SnmpOid[] oids)
 256         throws InstanceNotFoundException, ServiceNotFoundException;
 257 
 258     /**
 259      * Sets the reference to the SNMP protocol adaptor through which the MIB
 260      * will be SNMP accessible and add this new MIB in the SNMP MIB handler
 261      * associated to the specified <CODE>name</CODE>.
 262      *
 263      * @param name The name of the SNMP protocol adaptor.
 264      * @param contextName The MIB context name. If null is passed, will be
 265      *     registered in the default context.
 266      * @exception InstanceNotFoundException The SNMP protocol adaptor does
 267      *     not exist in the MBean server.
 268      *
 269      * @exception ServiceNotFoundException This SNMP MIB is not registered
 270      *     in the MBean server or the requested service is not supported.
 271      *
 272      * @since 1.5
 273      */
 274     public void setSnmpAdaptorName(ObjectName name, String contextName)
 275         throws InstanceNotFoundException, ServiceNotFoundException;
 276 
 277      /**
 278      * Sets the reference to the SNMP protocol adaptor through which the MIB
 279      * will be SNMP accessible and add this new MIB in the SNMP MIB handler
 280      * associated to the specified <CODE>name</CODE>.
 281      *
 282      * @param name The name of the SNMP protocol adaptor.
 283      * @param contextName The MIB context name. If null is passed, will be
 284      *        registered in the default context.
 285      * @param oids The set of OIDs this agent implements.
 286      * @exception InstanceNotFoundException The SNMP protocol adaptor does
 287      *     not exist in the MBean server.
 288      *
 289      * @exception ServiceNotFoundException This SNMP MIB is not registered
 290      *     in the MBean server or the requested service is not supported.
 291      *
 292      * @since 1.5
 293      */
 294     public void setSnmpAdaptorName(ObjectName name,
 295                                    String contextName,
 296                                    SnmpOid[] oids)
 297         throws InstanceNotFoundException, ServiceNotFoundException;
 298 
 299     /**
 300      * Indicates whether or not the MIB module is bound to a SNMP protocol
 301      * adaptor.
 302      * As a reminder, only bound MIBs can be accessed through SNMP protocol
 303      * adaptor.
 304      *
 305      * @return <CODE>true</CODE> if the MIB module is bound,
 306      *         <CODE>false</CODE> otherwise.
 307      */
 308     public boolean getBindingState();
 309 
 310     /**
 311      * Gets the MIB name.
 312      *
 313      * @return The MIB name.
 314      */
 315     public String getMibName();
 316 }