Below is a presentation made by Aleksey Romanov, Paul Freeman Associates, Inc. at the Network Management Area Open meeting at the 29th IETF. ======================================================================= Open Agent Architecture Design Goals o Provide multivendor run-time SNMP agent environment. o Provide flexible environment which will not limit possibilities for sub-agent designer. o Have no overhead comparing to monolithic agent designs. ========================================================================== Open Agent Architecture Basics 1. Namespaces and MIB-servers The namespace is a contiguous set of MIB-variable instances of particular local entity. The all request handling (operative) primitives of OAA architecture perform their operations on namespaces. The MIB-server is a program unit implementing one or more namespaces. The MIB-server is used in OAA as basic mounting structure element. 2. Operative primitives init() - reset namespace to the known state indicate(start) - indicate start of PDU processing and pass information which will be permanent for the duration of this processing. indicate(end) - indicate end of PDU processing look() - find a variable, check access rights, check value in case of SET set(DO_PHASE1) - check changed and created information for consistency and reserve resources for commit stage set(UNDO_PHASE1) - undo all reservation mad during previous set(DO_PAHSE1) call set(DO_COMMIT) - perform commit operation. set(UNDO_COMMIT) - undo commit tick() - called once in 10-15 seconds in order to allow MIB-server to perform time related housekeeping operations view() - called between packets in order to allow MIB-server to learn changes in the view database. This primitive is evidently fading away. 3. Mounting Primitives server_reg_init() - make MIB-server initialize itself for mounting procedure server_reg_next() - return information about next available name space if any server_unreg() - make MIB-server prepare itself to be unmounted ============================================================================ Open Agent Architecture Features OAA uses (shared) libraries as primary tool for integration, this allows to achieve a no-overhead design goal. Also, OAA incorporates number of features which seems are reasonable to use in any SNMP Agent multiplexing environment: o Explicit 'end of packet' primitive. The availability of this primitive allows more flexible design of sub-agents. For example, it can be used for immediate releasing of locks acquired during packet processing. This feature allows to implement effective row caching mechanism in order to reduce number of data access operations per packet processed. o The number of set primitive calls (callbacks in other architectures) is determined by sub-agent itself. This allows to keep this number smallest possible, which in turn positevely affects the performance. o Explicit 'init' primitive. The availability of this primitive makes multiplexed agent more robust because it allows to recover from minor problems by resetting sub-agent to the known state without unmounting and remounting it. o OAA uses low and high boundaries to denote namespaces instead of common sub-tree for namespace - this allows to minimize number of mounted namespaces and make operations more effective, especially GetNext and GetBulk. o The intermediate set of error codes used by OAA optimizes multiplexed agent design. o Explicit 'tick' primitive allowing sub-agents to perform its time related housekeeping functions synchronously and between packets. o OAA explicitly distinguishes the sub-agent (as program unit) from its name-spaces (contiguous set of variable names), this eases dynamic management of mounted sub-agents. o OAA supports entities in the most flexible form. It allows the same name associated with different local entities to be handled by different sub-agent. o OAA supports temporal domains, however in a not so flexible form as entities. =============================================================================== Place of Open Agent Architecture in the big picture What is a place of OAA relative to all other multiplexing architectures (DPI, EMANATE, SMUX etc.) ? It seems that OAA can be considered a smallest common denominator for SNMP Agent Multiplexing: o OAA agent can easily incorporate both SMUX and DPI as its subsystems. o OAA is not associated with any runtime performance penalty. The extra memory usage is negligible by today scale. o Any existing agent can be fitted with the OAA hooks with very limited efforts involved. o There are also substantial benefits in using this technology for embedded systems. The Marchall's Check List The transparency requirement: OAA is transparent SNMP-wise. The sysUpTime requirement: OAA naturally meet this requirement because all its sub-agents are part of the same process as a core agent. The row problem: There is no problem to support row multiplexing, except that it is in contradiction with no-overhead design goal and currently not supported, because of performance degradation it causes. The sub-tree problem: the same as above, there is no problem to implement it at the price of performance degradation.