One document matched: draft-peloso-anima-autonomic-function-00.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC7575 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7575.xml">
<!ENTITY ID-AUTO-MOD SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.behringer-anima-reference-model">
<!ENTITY ID-AUTO-COORD SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml-ids/reference.I-D.ciavaglia-anima-coordination">

<!ENTITY nbsp " ">
]>

<!-- Extra statement used by XSLT processors to control the output style. -->
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>

<rfc	category="std"
		ipr="noModificationTrust200811"
		docName="draft-peloso-anima-autonomic-function-00" >

		<!-- Processing Instructions- PIs (for a complete list and description,
          see file http://xml.resource.org/authoring/README.html and below... -->

	<!-- Some of the more generally applicable PIs that most I-Ds might want to use -->

	<!-- Try to enforce the ID-nits conventions and DTD validity -->
	<?rfc strict="yes" ?>

	<!-- Items used when reviewing the document -->
	<?rfc comments="yes" ?>
	<!-- Controls display of <cref> elements -->
	<?rfc inline="yes" ?>
	<!-- When no, put comments at end in comments section,
                                 otherwise, put inline -->
	<?rfc editing="no" ?>
	<!-- When yes, insert editing marks: editing marks consist of a 
                                 string such as <29> printed in the blank line at the 
                                 beginning of each paragraph of text. -->

	<!-- Create Table of Contents (ToC) and set some options for it.  
         Note the ToC may be omitted for very short documents,but idnits insists on a ToC 
         if the document has more than 15 pages. --> 
	<?rfc toc="yes"?>
	<?rfc tocompact="yes"?>
	<!-- If "yes" eliminates blank lines before main section entries. -->
	<?rfc tocdepth="3"?>
	<!-- Sets the number of levels of sections/subsections... in ToC --> 

	<!-- Choose the options for the references. 
         Some like symbolic tags in the references (and citations) and others prefer 
         numbers. The RFC Editor always uses symbolic tags.
         The tags used are the anchor attributes of the references. --> 
	<?rfc symrefs="yes"?>
	<?rfc sortrefs="yes" ?>
	<!-- If "yes", causes the references to be sorted in order of tags.
                                 This doesn't have any effect unless symrefs is "yes" also. -->

	<!-- These two save paper: Just setting compact to "yes" makes savings by not starting each 
         main section on a new page but does not omit the blank lines between list items. 
         If subcompact is also "yes" the blank lines between list items are also omitted. -->
	<?rfc compact="yes" ?>
	<?rfc subcompact="no" ?>
	<!-- end of list of popular I-D processing instructions -->

	<!-- ***** FRONT MATTER ***** -->
	<front>
		<!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 42 characters -->
		<title abbrev="Autonomic Function">A Day in the Life of an Autonomic Function</title>

		<author fullname="Peloso Pierre" 
				initials="P."
				surname="Peloso">
			<organization>Alcatel-Lucent</organization>
			<address>
				<postal>
					<street>Villarceaux</street>
					<code>91460</code>
					<city>Nozay</city>
					<region/>
					<country>FR</country>
				</postal>
				<email>pierre.peloso@alcatel-lucent.com</email>
				<uri/>
			</address>
		</author>
		<author
				fullname="Laurent Ciavaglia"
				initials="L."
				surname="Ciavaglia">
			<organization>Alcatel-Lucent</organization>
			<address>
				<postal>
					<street>Villarceaux</street>
					<code>91460</code>
					<city>Nozay</city>
					<region/>
					<country>FR</country>
				</postal>
				<email>laurent.ciavaglia@alcatel-lucent.com</email>
			</address>
		</author>
		<date year="2015" month="October" day="19"/>
		<!-- Meta-data Declarations -->

		<!-- Notice the use of & as an escape for & which would otherwise
         start an entity declaration, whereas we want a literal &. -->
		<area>Operations & Management</area>

		<workgroup>ANIMA</workgroup>

		<abstract>
			<t>While autonomic functions are often pre-installed and integrated with the network elements they manage, this is not a mandatory condition. Allowing autonomic functions to be dynamically installed and to control resources remotely enables more versatile deployment approaches and enlarges the application scope to virtually any legacy equipment. The analysis of autonomic functions deployment schemes through the installation, instantiation and operation phases allows constructing a unified life-cycle and identifying new required functionality. Thus, the introduction of autonomic technologies will be facilitated, the adoption much more rapid and broad. Operators will benefit from multi-vendor, interoperable autonomic functions with homogeneous operations and superior quality, and will have more freedom in their deployment scenarios.</t>
		</abstract>

		<note title="Requirements Language">
			<t>The key words "MUST", "MUST NOT",
				"REQUIRED", "SHALL", "SHALL NOT",
				"SHOULD", "SHOULD NOT", "RECOMMENDED",
				"MAY", and "OPTIONAL" in this document are to be
				interpreted as described in <xref target="RFC2119">RFC 2119</xref>.
			</t>
		</note>
	</front>

	<middle>
		<section anchor="Sec_PbStatement" title="Problem statement">
			<t>While autonomic functions are often pre-installed and integrated with the network elements they manage, this is not a mandatory condition. Allowing autonomic functions to be dynamically installed and to control resources remotely enables more versatile deployment approaches and enlarges the application scope to virtually any legacy equipment. The analysis of autonomic functions deployment schemes through the installation, instantiation and operation phases allows constructing a unified life-cycle and identifying new required functionality.</t>
			<t>An Autonomic Function Agent (AFA) controls resources of one or multiple Network Elements (NE), e.g. the interfaces of a router for a Load Balancing AFA. An AFA is a software, thus an AFA need first to be installed and to execute on a host machine in order to control resources.</t>
			<t>There are 3 properties applicable to the installation of AFAs:
				<list style="hanging">
					<t hangText="The dynamic installation property"> allows installing an AFA on demand, on any hosts compatible with the AFA.</t>
					<t hangText="The decoupling property">allows controlling resources of a NE from a remote AFA, i.e. an AFA installed on a host machine different from the resources' NE.</t>
					<t hangText="The multiplicity property">allows controlling multiple sets of resources from a single AFA.</t>
				</list>
			</t>
			<t>These three properties provide the operator a great variety of AFA deployment schemes as they decorrelate the evolution of the infrastructure layer from the evolution of the autonomic function layer. Depending on the capabilities (and constraints) of the infrastructure and of the autonomic functions, the operator can devise the schemes that will better fit to its deployment objectives and practices.</t>
			<t>Based on the above definitions, the AFA deployment process can be formulated as a multi-level/criteria matching problem.</t>
			<t>The primary level, present in the three phases, consists in matching the objectives of the operator and the capabilities of the infrastructure. The secondary level criteria may vary from phase to phase. One goal of the document is thus to identify the specific and common functionality among three phases.</t>

			<t>This draft will explore the implications of these properties along each of the 3 phases namely Installation, Instantiation and Operation. This draft will then provide a synthesis of these implications in requirements for functionalities and life-cyle of AFAs. Beforehand, the following section will deal with the network operator's point of view with regards of autonomic networks.</t>
		</section>
		
		<section anchor="Sec_OperatorPoW" title="Motivations from an operator viewpoint">
			<t>Only few operators would dare relying on a pure autonomic network, without setting objectives to it. From an operator to the other, the strategy of network management vary, as much for historical reasons (experience, best-practice, tools in-place, organization), as much for differences in the operators goals (business, trade agreements, politics, risk policy). Additionally, network operators do not necessarily perform a uniform network management across the different domains composing their network infrastructure. Hence their objectives in terms of availability, load, and dynamics vary depending on the nature of the domains and of the types of services running over each of those domains.</t>
			<t>To manage the networks according to the above variations, AFAs need to capture the underlying objectives implied by the operators. The instantiation phase is the step in-between installation and operation, where the network operator determine the initial AFA behavior according to its objectives. This step allows the network operator to determine which AFAs should execute on which domains of its network, with appropriate settings. At this stage, thanks to the intent-policy setting objectives to groups of AFAs, the network management should become far simpler (and less error-prone) than setting low-level configurations for each individual network resources.</t>		
			<section anchor="Sec_OpePoW_Example" title="Illustration of increasingly constraining operator's objectives">
			<t>This paragraph describes the following example of operator intents with regards to deployments of autonomic functions. The autonomic function involved is a load balancing function, which uses monitoring results of links load to autonomously modify the links metrics in order to balance the load over the network. The example is divided into steps corresponding to an increasing implication of the operator in the definition of objectives/intents to the deployment of autonomic functions: 
				<list style="hanging">
					<t hangText="Step 1">The operator operates its network and benefits from the autonomic function on the nodes which have the installed AFAs.</t>
					<t hangText="Step 2">Then the operator, specifies to the autonomic function an objective which is to achieve the maximum number of links with a load below 6O%.</t>
					<t hangText="Step 3">The network is composed of five domains, a core transport network and four metropolitan networks, each interconnected through the core network, the operator sets a different objective to the autonomic function for each of the five domain.</t>
					<t hangText="Step 4">As inside metropolitan domains the traffic variations are steeper and happen in a periodic fashion contrary to the traffic in the core domain, the network operators installs an additional autonomic function inside each of these domains. This autonomic function is learning the traffic demands in order to predict traffic variations. The operators instructs the load balancing function to augment its monitored input with the traffic predictions issued by the newly installed autonomic function.</t>
					<t hangText="Step 5">As the algorithm of the load balancing autonomic function is relying on interactions between autonomic function agents, the operator expects the interactions to happen in-between AFAs of each domain, hence the load will be balanced inside each of the domain, while previously it would have been balanced over the whole network uniformly.</t>
					<t hangText="Step 6">Finally, the network operator has purchased a new piece of software corresponding to an autonomic function achieving load balancing with a more powerful algorithm. For trial sake, he decides to deploy this new load balancing function instead of the previous one on one of its four metropolitan domains.</t>
				</list>
			</t>
			<t>This short example illustrates some specificities of deployment scenarios, the sub-section below sets itself at providing a more exhaustive view of the different deployment scenarios.</t>
			</section>
			<section anchor="Sec_OpePoW_DeployScenar" title="Deployment scenarios of autonomic functions">
				<t>The following scenarios illustrate the different ways the autonomic functions could be deployed in an ANIMA context. Subsequently, requirements for the autonomic functions and requirements these autonomic functions impose on other components of the ANIMA ecosystem are listed.</t>
				<t>These various deployment scenarios are better understood by referring to the <xref target="Fig_HighLevelArchi" format="title"/>, Figure 1 of <xref target="I-D.behringer-anima-reference-model"/>. The figure is slightly extended for the purpose of the demonstration as follows:
					<figure anchor="Fig_HighLevelArchi" title="High level view of an Autonomic Network">
						<artwork>
<![CDATA[
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|            :      Autonomic Function 1       :            |
|  AFA 1.1   :      AFA 1.2   :   AFA 1.3      :   AFA 1.4  |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
             :                :                :
             :  + - - - - - - - - - - - - - +  :
             :  |   Autonomic Function 2    |  :
             :  |   AFA 2.2   :   AFA 2.3   |  :
             :  + - - - - - - - - - - - - - +  :
             :                :                :
+ - - - - - - - - - - - - - + : + - - - - - - - - - - - - - + 
|   Autonomic Function 3    | : |   Autonomic Function 4    |
|   AFA 3.1  :    AFA 3.2   | : |   AFA 4.3    :  AFA 4.4   |
+ - - - - - - - - - - - - - + : + - - - - - - - - - - - - - +
             :                :                :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
|              Autonomic Networking Infrastructure          |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+--------+   :   +--------+   :   +--------+   :   +--------+
| Node 1 |-------| Node 2 |-------| Node 3 |-------| Node 4 |
+--------+   :   +--------+   :   +--------+   :   +--------+
]]>
						</artwork>
					</figure>
				</t>
				<t><xref target="Fig_HighLevelArchi"/> depicts 4 Nodes, 4 Autonomic Functions and 10 Autonomic Function Agents. Let's list assumptions with regards of these elements.</t>
				<t>Starting with nodes,
					<list>
						<t>each may be either an Unconstrained Autonomic Node, a Constrained Autonomic Node (or even a legacy one?),</t>
						<t>they may well be of different models (or having different software versions),</t>
						<t>they may well be of different equipment vendors,</t>
						<t>they may well be of different technologies (some may be IP routers, some may be Ethernet switches or OTN switches...).</t>
					</list>
				</t>
				<t>Pursuing with Autonomic Functions,
					<list>
						<t>they may well have different objectives (one could target automatic configuration of OSPF-TE, while another one is optimizing traffic load), but they may well have identical objectives as two could optimize energy consumption (possibly on different areas as function 3 and function 4),</t>
						<t>each may be composed of no more than one AFA (either because the function is responsible for a single node or because the function relies on a centralized implementation),</t>
						<t>each may well be composed of different sort of AFAs, meaning the software is different (either because their version number is different, or because the software provider is different, or because their respective nodes/equipments differ or because the role of each agent is different),</t>
						<t>[Observation] Depending on the implementation the same piece of software may fulfil different roles or each role may come from a different from a different piece of code,</t>
						<t>[Observation] Depending on the implementation the same piece of software may fulfil different roles or each role may provide from a different piece of code,</t>
						<t>each has reached a given organization, meaning an organized set of AFAs in charge of a set of nodes ()whether formalized or not), this organization may either come from the piece of software itself (e.g. embedding a self-organization process) or come from directions of the network operator (e.g. through intents/policies, or through deployment instructions)</t>
						<t>each may work internally in a peer to peer fashion (where every agents have the same prerogatives) or in hierarchical fashion (where some agents have some prerogatives over other) [this option is a good example of role differences],</t>
						<t>each having its scope of work in terms of objective to reach and area/space/part of the network to manage.</t>
					</list>
				</t>
				<t>Completing with individual Autonomic Function Agents, those are pieces of software:
					<list>
						<t>embedded inside the node/equipment OS (hence present since the bootstrap or OS update of the equipment),</t>
						<t>running in a machine different than the node (this could be a node controller or any other host or virtual machine)</t>
						<t>[Observation] In the latter case, the AFA would likely require external credentials to interact with the node,</t>
						<t>directly monitoring and configuring the equipment (likely requires the AFA to be embedded) or through a management interface of the equipment (e.g. SNMP, TL1, Q3, NetConf) or through an equipment controller (e.g. SDN paradigm) or through a network manager (e.g. using the north interface of the manager)</t>
						<t>either activated at start-up or as the result of a management action,</t>
						<t>may be installed (either inside the equipment or on a different machine) when requested by an operator from a software origin (e.g. a repository in the ACP, a media)</t>
						<t>provided by the same vendor as the equipment it manages or by any third party (like another equipment vendor, a management software vendor, an open-source initiative or the operator software team),</t>
						<t>sharing a technical objective with the other AFAs of the Autonomic Function they belong, (or at least a similar one)?</t>
						<t>can it contains multiple technical objective?</t>
						<t>must the technical objective be intrinsic or can it be set by a managing entity (a network operator or a management system)?</t>
					</list>
				</t>
					<t>The last three points being largely questionable are marked as questions.</t>
				<t>The figure below illustrates how an AFA interacts with a node that the AFA manages. The left side depicts external interactions, through exchange of commands towards interfaces either to the node OS (e.g. via SNMP or NetConf), or to the controller (e.g. (G)MPLS, SDN, ...), or to the NMS. The right side depicts the case of the AFA embedded inside the Node OS.
					<figure anchor="Fig_AFAandHW" title="Interaction possibilities between AFA and Resources">
						<artwork>
	<![CDATA[
+ - - - +       +-------------+
|  AFA  |------>|     NMS     *<--*
+ - - - +       +------^------+   |
  |   |                |          |  
  |   |         +------V------+   |
  |   +-------->| Controller  |   | 
  |             +------^------+   |  +---------------------+
  |                    |          |  | + - - - +           |
  |             +------V------+   |  | |  AFA  |  Node OS  |
  +------------>|   Node OS   *<--*  | + - - - +           |
                +------^------+      +--------------*------+
                       |                            |
                +------V------+               +-----*------+
                |     Node    |               |    Node    |
                +-------------+               +------------+
]]>
						</artwork>
					</figure>
				</t>
			</section>
			<section anchor="Sec_OpePoW_Requirements" title="Operator's requirements with regards to autonomic functions">				
				<t>Regarding the operators, at this point we can try to list few requirements they may have with regards with the Autonomic Functions and their management...
					<list>
						<t>Being capable to set those functions a scope of work in term of area of duty,</t>
						<t>Being capable to monitor the actions taken by the autonomic functions, and which are its results (performance with regards to the function KPIs)</t>
						<t>Being capable to halt/suspend the execution of an Autonomic function (either because the function is untrusted, or because an operation on the network is to be conducted without interference from the autonomic functions, etc...)</t>
						<t>Being capable to configure the autonomic functions by adjusting the parameters of the function (e.g. a Traffic Engineering autonomic function may achieve a trade-off between congestion avoidance and electrical power consumption, hence this function may be more or less aggressive on the link load ratio, and the network operator certainly has his word to say in setting this cursor.</t>
					</list>
				</t>
			</section>
		</section>
		
		<section title="Installation phase">
		<t>Before being able to instantiate and run AFAs, the operator must first provision the infrastructure with the sets of AFA software corresponding to its needs and objectives. The provisioning of the infrastructure is realized in the installation phase and consists in installing (or checking the availability of) the pieces of software of the different AFA classes in a set of Installation Hosts.</t>
		<t>As mentioned in the Problem statement section, an Autonomic Function Agent (AFA) controls resources of one or multiple Network Elements (NE), e.g. the interfaces of a router for a Load Balancing AFA. An AFA is a software, thus an AFA need first to be installed and to execute on a host machine in order to control resources.</t>
			<t>There are 3 properties applicable to the installation of AFAs:
				<list style="hanging">
					<t hangText="The dynamic installation property"> allows installing an AFA on demand, on any hosts compatible with the AFA.</t>
					<t hangText="The decoupling property">allows controlling resources of a NE from a remote AFA, i.e. an AFA installed on a host machine different from the resources' NE.</t>
					<t hangText="The multiplicity property">allows controlling multiple sets of resources from a single AFA.</t>
				</list>
			</t>
			<t>These three properties are very important in the context of the installation phase as their variations condition how the AFA class could be installed on the infrastructure.</t>
			<section title="Operator's goal">
			<t>In the installation phase, the operator's goal is to install AFA classes on Installation Hosts such that, at the moment of instantiation, the corresponding AFAs can control the sets of target resources. The complexity of the installation phase come from the number of possible configurations for the matching between the AFA classes capabilities (e.g. what types of resources it can control, what types of hosts it can be installed on...), the Installation Hosts capabilities (e.g. support dynamic installation, location and reachability...) and the operator's needs (what deployment schemes are favoured, functionality coverage vs. cost trade-off...).</t>
			<t>For example, in the coupled mode, the AFA host machine and the network element are the same. The AFA is installed on the network element and control the resources via interfaces and mechanisms internal to the network element. An AFA MUST be installed on the network element of every resource controlled by the AFA. The identification of the resources controlled by an AFA is straightforward: the resources are the ones of the network element.</t>
			<t>In the decoupled mode, the AFA host machine is different from the network element. The AFA is installed on the host machine and control the resources via interfaces and mechanisms external to the network element. An AFA can be installed on an arbitrary set of candidate Installation hosts, which can be defined explicitly by the network operator or according to a cost function. A key benefit of the decoupled mode is to allow an easier introduction of autonomic functions on existing (legacy) infrastructure. The decoupled mode also allows de-correlating the installation requirements (compatible host machines) from the infrastructure evolution (NEs addition and removal, change of NE technology/version...).</t>
			<t>The operator's goal may be defined as a special type of intent, called the Installation phase intent. The details of the content and format of this proposed intent are left open and for further study.</t>
			</section>
			<section title="Installation phase inputs and outputs">
				<t>Inputs are:
					<list style="hanging">
					<t hangText="[AFA class of type_x]">that specifies which classes AFAs to install,</t>
					<t hangText="[Installation_target_Infrastructure]">that specifies the candidate Installation Hosts,</t>
					<t hangText="[AFA class placement function]"> e.g. under which criteria/constraints as defined by the operator that specifies how the installation phase shall meet the operator's needs and objectives for the provision of the infrastructure. In the coupled mode, the placement function is not necessary, whereas in the decoupled mode, the placement function is mandatory, even though it can be as simple as an explicit list of Installation hosts.</t>
					</list>
				</t>
				<t>The main output of the installation phase is an up-to-date directory of installed AFAs which corresponds to [list of AFA classes] installed on [list of installation Hosts]. This output is also useful for the coordination function and corresponds to the static interaction map.</t>
				<t>The condition to validate in order to pass to next phase is to ensure that [list of AFA classes] are well installed on [list of installation Hosts].
				The state of the AFA at the end of the installation phase is: installed. (not instantiated).
				The following commands or messages are foreseen: install(list of AFA classes, Installation_target_Infrastructure, AFA class placement function), and un-install (list of AFA classes).</t>
			</section>	
		</section>
		
		<section anchor="Sec_Inst" title="Instantiation phase">
		<!--
		    Operator's goal: [AFA of type_x instances] ready to control [Instantiation_target_Infrastructure] with [Instantiation_target_parameters].
    Input: [AFA of type_x], [Instantiation_target_Infrastructure], [Instantiation_target_parameters]. mandate?
        - in the decoupled mode, additional input needed for the AFA instances placement function, e.g. under which criteria/constraints.
    Output: up-to-date instantiated AFA directory == [list of AFA of type_x instances] configured with [Instantiation_target_parameters], running on [list of hosts], ready to control [Instantiation_target_Infrastructure] ; output useful also for coordination function (interactions dynamic map).
    Describe the steps to achieve operator's goal, highlighting the elements to specify in ANIMA and if relevant possible usage of existing ANIMA components (e.g. GRASP, ACP...).
    Define an instantiation phase Intent? (mandate)
    Condition to pass to next phase: validate [AFA of type_x instances] ready to control [Instantiation_target_Infrastructure] with [Instantiation_target_parameters].
    State of AFA: ready. (not running/operating).
    Commands: start (enter operation phase under operation phase policy/mandate). delete (revert to installation phase).
-->
		<t>Once the AFAs are installed on the appropriate hosts in the network, these AFA may start to operate. From the operator viewpoint, an operating AFA means the AFA manages the network resources as per the objectives given. At the AFA local level, operating means executing their control loop/algorithm.</t>
		<t>But right before that, there are two things to take into consideration. First, there is a difference between 1. having a piece of code available to run on a host and 2. having an agent based on this piece of code running inside the host. Second, in a coupled case, determining which resources are controlled by an AFA is straightforward (the determination is embedded), in a decoupled mode determining this is a bit more complex (hence a starting agent will have to either discover or be taught it).</t>
		<t>The instantiation phase of an AFA covers both these aspects: starting the agent piece of code (when this does not start automatically) and determining which resources have to be controlled (when this is not obvious).</t>
		<section anchor="Sec_Inst_Goal" title="Operator's goal">
			<t>Through this phase, the operator wants to control its autonomic network in two things:
				<list style="format %d">
					<t>determine the scope of autonomic functions by instructing which of the network resources have to be managed by which autonomic function (and more precisely which class e.g. 1. version X or version Y or 2. provider A or provider B),</t>
					<t>determine how the autonomic functions are organized by instructing which AFAs have to interact with which other AFAs (or more precisely which set of network resources have to be handled as an autonomous group by their managing AFAs).</t>
				</list>
				Additionally in this phase, the operator may want to set objectives to autonomic functions, by configuring the AFAs technical objectives.
			</t>
			<t>The operator's goal can be summarized in an instruction to the ANIMA ecosystem matching the following pattern:
				<list>
					<t>[AFA of type_x instances] ready to control [Instantiation_target_Infrastructure] with [Instantiation_target_parameters]</t>
				</list>
			</t>
			<!--t>
				<list style="symbols">
					<t>Every sort of AFA is not meant to work on its own. E.g. some AFA may be designed to interact with similar AFAs controlling neighboring nodes. Under such conditions, identifying and establishing these interactions is a prerequisite to running.</t>
					<t>Every sort of AFA is not meant to work configuration-less. E.g. some AFA may have configuration settings, let this be illustrated by a Load-Balancing AFA, which configuration setting could be the maximum load of links. Under such conditions, having configuration set is a prerequisite to running.</t>
					<t>Some operators may want to get AFA to run coherently over domains with regards to the 2 previous points, i.e. establish AFA interactions inside each domain, and have a consistent configuration over each domain (e.g. with a per domain value of maximum link load).</t>
					<t>Every operator may not trust enough AFAs (or some sorts of AFAs) to let them run out of control, hence these operators may stipulate when they are willing some AFAs to execute, while safeguarding the capacity to halt the execution. Even further the operator may be willing to let some AFA under trial, forbidding them to execute their actions without having received a human approval...</t>
				</list>
			</t-->
		</section>
		<section anchor="Sec_Inst_InOut" title="Instantiation phase inputs and outputs">
			<t>Inputs are:
				<list style="hanging">
					<t hangText="[AFA of type_x instances]">that specifies which are the AFAs to be targeted (and more precisely which class e.g. 1. version X or version Y or 2. provider A or provider B),</t>
					<t hangText="[Instantiation_target_Infrastructure]">that specifies which are the resources to be managed by the autonomic function, this can be the whole network or a subset of it like a domain a technology segment or even a specific list of resources,</t>
					<t hangText="[Instantiation_target_parameters]">that specifies which are the technical objectives to be set to AFAs (e.g. an optimization target)</t>
				</list>
			</t>
			<t>Outputs are:
				<list style="hanging">
					<t hangText="[Set of AFAs - Resources relations]">describing which resources are managed by which AFA instances, this is not a formal message, but a resulting configuration of a set of AFAs,</t>
				</list>
			</t>
		</section>	
		<section anchor="Sec_Inst_Reqs" title="Instantiation phase requirements">
			<t></t>
			<t>The instructions described in section 4.2 could be either:
				<list style="hanging">
					<t hangText="sent to a targeted AFA">In which case, the receiving Agent will have to manage the specified list of [Instantiation_target_Infrastructure], with the [Instantiation_target_parameters].</t>
					<t hangText="broadcast to all AFAs">In which case, the AFAs would collectively determine from the list which Agent(s) would handle which [Instantiation_target_Infrastructure], with the [Instantiation_target_parameters].</t>
				</list>
			</t>
			<t>This set of instructions can be materialized through a message that is named an Instance Mandate. Instance Mandates are described in the requirements part of this document, which lists the needed fields of such a message (see <xref target="Sec_Specs_Mandate"/> - <xref target="Sec_Specs_Mandate" format="title"/>).</t>
			<t>The conclusion of this instantiation phase is a ready to operate AFA (or interacting set of AFAs), then this (or those) AFA(s) can describe themselves by depicting which are the resources they manage and what this means in terms of metrics being monitored and in terms of actions that can be executed (like modifying the parameters values). A message conveying such a self description is named an Instance Manifest. Instance Manifests are described in the requirements part of this document, which lists the needed fields of such a message (see <xref target="Sec_Specs_InstanceManifest"/> - <xref target="Sec_Specs_InstanceManifest" format="title"/>).</t>
			<t>Though the operator may well use such a self-description "per se", the final goal of such a description is to be shared with other ANIMA entities like:
				<list style="symbols">
					<t>the coordination entities (see <xref target="I-D.ciavaglia-anima-coordination"/> - <xref target="I-D.ciavaglia-anima-coordination" format="title"/>)</t>
					<t>collaborative entities in the purpose of establishing knowledge exchanges (some AFAs may produce knowledge or even monitor metrics that other AFAs cannot make by themselves why those would be useful for their execution) (see knowledge exchange items in <xref target="Sec_Operation"/> - <xref target="Sec_Operation" format="title"/>)</t>
				</list>
			</t>
		</section>	
	</section>
	<section anchor="Sec_Operation" title="Operation phase">
		<t>Note: This section is to be further developed in future revisions of the document.</t>
		<t>During the Operation phase, the operator can:
			<list>
				<t>Activate/Deactivate AFA: meaning enabling those to execute their autonomic loop or not.</t>
				<t>Modify AFAs targets: meaning setting them different objectives.</t>
				<t>Modify AFAs managed resources: by updating the instance mandate which would specify different set of resources to manage (only applicable to decouples AFAs).</t>
			</list>
		</t>
		<t>During the Operation phase, running AFAs can interact the one with the other:
			<list>
				<t>in order to exchange knowledge (e.g. an AFA providing traffic predictions to load balancing AFA)</t>
				<t>in order to collaboratively reach an objective (e.g. AFAs pertaining to the same autonomic function targeted to manage a network domain, these AFA will collaborate - in the case of a load balancing one, by modifying the links metrics according to the neighbouring resources loads)</t>
			</list>
		</t>
		<t>During the Operation phase, running AFAs are expected to apply coordination schemes
			<list>
				<t>then execute their control loop under coordination supervision/instructions</t>
			</list>
		</t>
		<!--section anchor="Sec_Op_Goal" title="Operator's goal">
			<t></t>
		</section>
		<section anchor="Sec_Op_InOut" title="Operation phase Input/Outputs">
			<t></t>
		</section>	
		<section anchor="Sec_Op_Reqs" title="Operation phase requirements">
			<t></t>
		</section-->	
		<!--t>
    Operator's goal:
        -for AFA (1..n): [AFA of type_x instances] operate in [performance envelope]. If breach, inform [management (TBD) or ?]; more actions could be envisaged on breach event (halt [all,M,A,P,E,K], change parameters, inspect logs, start analysis of behavior, go into test/trust building mode, change reporting frequency).
        -for AFA (1..n): [AFA of type_x instances] [reporting policy][knowledge policy e.g. "cost of information"][coordination policy].
        -for group(s) of AFA / network as a whole: operate in [stability envelope], [performance envelope], relative to / link with service level (i.e. AFAs contribute to deliver service x,y,z [service level envelope])(FFS).
aspects of cost of operation (
    Input: mandate/operation phase policy describing behavior, performance envelope, reporting, knowledge optim., coordination related aspects... 
    Output: green / red lights? ; performance indicators, reporting, generated knowledge, interacting groups of AFA instances,
    Define an operation phase Intent? (mandate or operation phase policy cf UMF control policy?)
    Including interactions among AFAs: intra/inter-AF, behaving as a group, dependency, correlation, cooperation, coordination, knowledge. composition of ASA of different AF type ("chaining AF / ASA).
    Discuss about operating regimes(?), aspects of coordination, knowledge...
    Condition to start: operating policy based: by default, on start command, partial start (e.g. only sense), on event? e.g. threshold passed, timeout expiration (e.g. test phase), internal/external event e.g. enough knowledge acquired, dependent AFA ready, coordination command.
    State of AFA: operational. + other sub-states (cf commands).
    Commands: change regime, change parameters, start [all, M,A,P,E, K], halt [all, M,A,P,E, K], stop (revert to instantiation phase in ready-not-checked state), test...
   

Examples: change in instantiation == if change in coverage of AFA or type of AFA ; change in operation == if (only) parameters change (cf UMF control policy.
Step 1:
Operator A wants to limit the proportion of links loaded over a certain threshold and thus defines a policy (Intent?) to activate load balancing if the load is superior to 0.6 on more than 30% of the links.

Step 2:
Operator A now wants different load balancing policies per (technology, administrative, topology) domain. Let's consider a metropolitan network domain and a core network domain, or different LB policy for border routers than interior routers.
For the metropolitan network domain, Operator A defines a policy to minimize the link load variance.
For the core network domain, Operator A applies the previously defined policy (activate load balancing if the load is superior to 0.6 on more than 30% of the links).
Other examples of policy for LB: minimize load of maximum loaded link.

A TBD mechanism/function translates the operator's policy into GRASP compliant format (example of GRASP Intent/policy message/format? incl. target (or not?): LB AFAs, objective: activate LB if load is superior to 0.6 on more than 30% of the links), and triggers GRASP. GRASP communicates/broadcast? the Intent to the target/all? AFAs using GRASP. (put example of GRASP message?)
-ACK of LB AFAs when policy received and understood ?
-How AFAs know and verify that the coverage zone is complete and correct ?
Alternative: not GRASP to get and communicate/disseminate the Intent. Instead, TBD mechanism/function to generate/translate the input operator policy in proper policy/Intent format.
And TBD mechanism/function to communicate the policy/Intent message to the target/all AFAs. (if target list of AFAs (e.g. the LB ones), how determined? e.g. AFA function exposed/discovered, when, to whom, stored/indexed...?)
		</t-->
		</section>

		<section anchor="Sec_AFASpecs" title="Autonomic Function Agent specifications">
			<section anchor="Sec_Specs_LC" title="Life-cycle">
				<t>Based on the phases described above, this section defines formally the different states experienced by Autonomic Function Agents during their complete life-cycle.</t>
				<t>The drawing of the life-cycle presented below shows both the states and the events/messages triggering the state changes. For simplification purposes, this sketch does not display the transitory states which correspond to the handling of the messages.</t>
				<t>The installation and Instantiation phase will be concluded by AFA reaching respectively Installed and Instantiated states.</t>
					<figure anchor="Fig_LC" title="Life cycle of an Autonomic Function Agent" align='center'>
						<artwork  align='center'>
	<![CDATA[
                  +--------------+
Undeployed ------>|              |------> Undeployed
                  |  Installed   | 
              +-->|              |---+
     Mandate  |   +--------------+   | Receives a
   is revoked |   +--------------+   |  Mandate               			  
              +---|              |<--+
                  | Instantiated | 
              +-->|              |---+
          set |   +--------------+   | set
         down |   +--------------+   | up             			  
              +---|              |<--+
                  |  Operational | 
                  |              |
                  +--------------+
]]>
						</artwork>
					</figure>				<!--
				list of commands: with definitions, parameters, conditions...
				list of states: with definitions -->
				<t>Here are described the successive states of AFA.
					<list style="hanging">
						<t hangText="Undeployed - ">In this "state", the Autonomic Function Agent is a mere piece of software, which may not even be available on any host.</t>
						<t hangText="Installed - ">In this state, the Autonomic Function Agent is available on a (/multiple) host(s), and after having shared its AFA class Manifest (which describes in a generic way independently of the deployment how the AFA would work). In this state the AFA is waiting for an AFA Instance Mandate, to determine which resources it manage (when the AFA is strictly coupled to resources [e.g. part of a Node OS], there is no need to wait for an instance mandate, the target resources being intrinsically known).</t>
						<t hangText="Instantiated - ">In this state the Autonomic Function Agent has the knowledge of which resources it is meant to manage. In this state the AFA is expecting a set Up message in order to start executing its autonomic loop. From this state on the AFA can share an Instance Manifest (which describes how the AFA instance is going to work).</t>
						<t hangText="Operational - ">In this state, AFAs are executing their autonomic loop, hence acting on network, by modifying resources parameters. A set down message will turn back the AFA in an Instantiated state.</t>			
					</list>
					The messages are described in the following sections.
				</t>
			</section>
			<section anchor="Sec_Specs_ClassManifest" title="AFA Class Manifest">
				<!--  
				definition
				format
				(repeat used where / by whom?)				<t>An AFA class is a piece of software that contains the computer program of an Autonomic Function Agent.</t>
				<t>Typically, an operator will purchase an AFA class packaged as a product, and stored it on one or multiple AFA Repositories inside its infrastructure.</t>
				<t>Different implementations/versions of an AFA class can exist because:
					<list style="symbols">
					<t>the software provider/vendor is different, e.g. AFA_CLASS_LOAD_BALANCING_VENDOR_A and AFA_CLASS_LOAD_BALANCING_VENDOR_B.</t>
					<t>the list of supported network elements is different, e.g. AFA_CLASS_LOAD_BALANCING_VENDOR_A_FOR_CORE_ROUTER and AFA_CLASS_LOAD_BALANCING_VENDOR_A_FOR_EDGE_ROUTER.</t>
					<t>other characteristics of the AFA class differ.</t>
					</list>
				</t>
				<t>If AF std, then AF classes share a common base functionality and interoperate</t>
				<t>Such class is deployed in a network running a UMF system and requires being instantiated on a set of concrete network elements to effectively perform its autonomic function</t>-->
				<t>An AFA class is a piece of software that contains the computer program of an Autonomic Function Agent.</t>
				<t>In order to install and instantiate appropriately an autonomic function in its network, the operator needs to know which are the characteristics of this piece of software.</t>
				<t>This section details a format for an AFA class manifest, which is (a machine-readable) description of both the autonomic function and the piece of code that executes the function.</t>
				<texttable anchor="Tab_Class_Manifest" title="Fields of AFA class manifest">
					<ttcol align='center'>Field Name</ttcol>
					<ttcol align='center'>Type</ttcol>
					<ttcol align='left'>Description</ttcol>
					<c>ID</c>
					<c>Struct</c>
					<c>A unique identifier made out of at least a Function Name, Version and Provider Name (and Release Date).</c>
					<c>Description</c>
					<c>Struct</c>
					<c>A multi-field description of the function performed by the AFA, it is meant to be read by the operator and can point to URLs, user-guides, feature descriptions.</c>
					<c>Installation properties</c>
					<c>3 Booleans</c>
					<c>Whether the AFA is dynamically installable, can be decoupled from the NE and can manage multiple resources from a single instance (see <xref target="Sec_PbStatement"/> - <xref target="Sec_PbStatement" format="title"/>).</c>
					<c>Possible Hosts</c>
					<c>OS...</c>
					<c>Lists the OS/Machines on which the AFA can be executed. [Only if AFA is dynamically installable]</c>
					<c>Network Segment</c>
					<c>NetSegment...</c>
					<c>Lists the network segments on which the autonomic function is applicable (e.g. IP backbone versus RAN).</c>
					<c>Manageable Equipments</c>
					<c>Equipments...</c>
					<c>Lists the nodes/resources that this piece of code can manage (e.g. ALU 77x routers, Cisco CRS-x routers, Huawei NEXE routers).</c>
					<c>Autonomic Loop Type</c>
					<c>Enum</c>
					<c>States what is the type of loop MAPE-K and whether this loop can be halted in the course of its execution.</c>
					<c>Acquired Inputs</c>
					<c>Raw InfoSpec...</c>
					<c>Lists the nature of information that an AFA agent may acquire from the managed resource(s) (e.g. the links load).</c>
					<c>External Inputs</c>
					<c>Raw InfoSpec...</c>
					<c>Lists the nature of information that an AFA agent may require/wish from other AFA in the ecosystem that could provide such information/knowledge.</c>
					<c>Possible Actions</c>
					<c>Raw ActionSpec</c>
					<c>Lists the nature of actions that an AFA agent may enforce on AFA the managed resource(s) (e.g. modify the links metrics).</c>
					<c>Technical Objectives Description</c>
					<c>Technical Objective Spec...</c>
					<c>Lists the type of technical objectives that can be handled/received by the AFA (e.g. a max load of links).</c>	
				</texttable>
			</section>
			<section anchor="Sec_Specs_Mandate" title="AFA Instance Mandate">
				<t>An AFA instance is the AFA agent: a running piece of software of an AFA class. A software agent is a persistent, goal-oriented computer program that reacts to its environment and interacts with other elements of the network.</t>
				<t>In order to install and instantiate appropriately an autonomic function in its network, the operator may specify to AFA instances what they are supposed to do: in term of which resources to manage and which objective to reach.</t>
				<t>This section details a format for an AFA Instance Mandate, which is (a machine-readable) set of instructions sent to create autonomic functions out of AFA.</t>
				<texttable anchor="Tab_Inst_Mandate" title="Fields of AFA instance mandate">
					<ttcol align='center'>Field Name</ttcol>
					<ttcol align='center'>Type</ttcol>
					<ttcol align='left'>Description</ttcol>
					<c>AFA class Pattern</c>
					<c>Struct</c>
					<c>A pattern matching the ID (or part of it) of AFAs being the target of the Mandate. This field makes sense only for broadcast mandates (see end of this section).</c>
					<c>Managed Resources</c>
					<c>ResourcesId...</c>
					<c>The list of resources to be managed by the AFA (e.g. their IP@ or MAC@ or any other relevant ID).</c>
					<c>ID of Coord</c>
					<c>Interface Id</c>
					<c>The interface to the coordination system in charge of this autonomic function.</c>	
					<c>Reporting Policy</c>
					<c>Policy</c>
					<c>A policy describing which entities expect report from AFA, and which are the conditions of these reports (e.g. time wise and content wise)</c>	
				</texttable>
				<t>An AFA instance mandate could be either:
					<list style="hanging">
						<t hangText="sent to a targeted AFA">In which case, the receiving Agent will have to manage the specified list of resources,</t>
						<t hangText="broadcast to all AFA">In which case, the AFAs would collectively determine which agent would handle which resources from the list, and if needed (and feasible) this could also trigger the dynamic installation/instantiation of new agents (ACP should be capable of bearing such scenarios).</t>
					</list>
				</t>
			</section>
			<section anchor="Sec_Specs_InstanceManifest" title="AFA Instance Manifest">
				<t>Once the AFAs are properly instantiated, the operator and its managing system need to know which are the characteristics of these AFAs.</t>
				<t>This section details a format for an AFA instance manifest, which is (a machine-readable) description of either an AFA or a set of AFAs gathered into an autonomic function.</t>
				<texttable anchor="Tab_Inst_Manifest" title="Fields of AFA instance manifest">
					<ttcol align='center'>Field Name</ttcol>
					<ttcol align='center'>Type</ttcol>
					<ttcol align='left'>Description</ttcol>
					<c>AFA Class ID</c>
					<c>Struct</c>
					<c>A unique identifier made out of at least a Function Name, Version and Provider Name (and Release Date).</c>
					<c>AFA Instance ID</c>
					<c>Long</c>
					<c>A unique Id of the AFA instance (if the AFA instance manifest gathers multiple AFAs working together, this would be a list).</c>
					<c>Hosts</c>
					<c>Resource ID</c>
					<c>ID of the Machines on which the AFA executes.</c>
					<c>Managed Resources</c>
					<c>ResourcesId...</c>
					<c>The list of resources effectively managed by the AFA (e.g. their IP@ or MAC@ or any other relevant ID).</c>
					<c>Acquired Inputs</c>
					<c>Instance InfoSpec...</c>
					<c>Lists information that this AFA agent may acquire from the managed resource(s) (e.g. the links load over links with ID x and y).</c>
					<c>External Inputs</c>
					<c>Instance InfoSpec...</c>
					<c>Lists information that this AFA agent requires from the ecosystem (e.g. the links load prediction over links with ID x and y).</c>
					<c>Possible Actions</c>
					<c>Instance ActionSpec</c>
					<c>Lists actions that this AFA agent may enforce on its managed resource(s) (e.g. modify the links metrics over links x and y).</c>
				</texttable>
			</section>
		</section>
		
		<section anchor="Sec_Implication" title="Implication for other ANIMA components">
			<section anchor="Sec_Impl_MoreEntities" title="Additional entities for ANIMA ecosystem">
				<t>In the previous parts of this document, we have seen successive operations pertaining to the management of autonomic functions. These phases involve different entities such as the AFAs, the AFA Hosts and the AFA Management function. This function serves as the interface between the network operator and its managed infrastructure (i.e. the autonomic network). The AFA management function distributes instructions to the AFAs such as the AFA Instance Mandate, AFA set up/set down commands and also trigger the AFA installation inside AFA Hosts. This function is likely to be co-located or integrated with the function responsible for the management of the Intents.</t>
				<t>In this first version, we do not prescribe any requirements on the way the AFA Management function should be implemented, neither the various deployment options of such a function and neither on the way ACP or GRASP could be extended to interact with this function. We believe these design and specifications work should be first discussed and analysed by the working group.</t>
				<t></t>
			</section>
			<section anchor="Sec_Impl_GRASPandACP" title="Requirements for GRASP and ACP messages">
				<t>GRASP and ACP seems to be the best (and currently only) candidates  to convey the following messages between the AFA Management function and the AFAs:
					<list>
						<t>AFA Class Manifest</t>
						<t>AFA Instance Mandate (and Revoke Mandate)</t>
						<t>AFA Instance Mandate</t>
						<t>Set Up and Set Down messages</t>
					</list>
					The way to convey these messages is to be handled by working group and protocol authors.
				</t>
				<t>A mechanism similar to the bootstrapping one would usefully achieve discovery of pre-installed AFAs, and possibly provide those with a default Instance Mandate.</t>
				<t>A mechanism to achieve dynamic installation of AFAs compatible with ACP and GRASP remains to be identified.</t>
				<t>In the case of decoupled AFAs, even more for the ones supporting multiplicity, when a Mandate is broadcast (i.e. requesting the Instantiation of an autonomic function to manage a bunch of resources), these AFAs require synchronization to determine which agent(s) will manage which resources. Proper ACP/GRASP messages supporting such a mechanism have to be identified together with protocol authors.</t>
			</section>
		</section>
		<section anchor="Acknowledgements" title="Acknowledgements">
			<t>This draft was written using the xml2rfc project.</t>
			<t>This draft content builds upon work achieved during UniverSelf FP7 EU project.</t>
		</section>

		<section anchor="IANA" title="IANA Considerations">
			<t>This memo includes no request to IANA.</t>
		</section>

		<section anchor="Security" title="Security Considerations">
			<t> TBD
			</t>
		</section>
	</middle>

	<!--  *****BACK MATTER ***** -->
	<back>
		<!-- References split to informative and normative -->
		<references title="Normative References">
			&RFC2119;
			&ID-AUTO-COORD;
		</references>

		<references title="Informative References">
			&RFC7575;
			&ID-AUTO-MOD;
		</references>
	</back>
</rfc>

PAFTECH AB 2003-20262026-04-24 10:05:14