draft-strassner-supa-generic-policy-info-model-04.txt   draft-strassner-supa-generic-policy-info-model-05.txt 
Network Working Group J. Strassner Network Working Group J. Strassner
Internet Draft Huawei Technologies Internet Draft Huawei Technologies
Intended status: Standard Track J. Halpern Intended status: Standard Track J. Halpern
Expires: August 17, 2016 Ericsson Expires: September 25, 2016 Ericsson
J. Coleman J. Coleman
Cisco Systems Cisco Systems
February 12, 2016 March 21, 2016
Generic Policy Information Model for Generic Policy Information Model for
Simplified Use of Policy Abstractions (SUPA) Simplified Use of Policy Abstractions (SUPA)
draft-strassner-supa-generic-policy-info-model-04 draft-strassner-supa-generic-policy-info-model-05
Abstract Abstract
This document defines an information model for representing This document defines an information model for representing
policies using a common extensible framework that is independent policies using a common extensible framework that is independent
of language, protocol, repository. It is also independent of the of language, protocol, repository. It is also independent of the
level of abstraction of the content and meaning of a policy. level of abstraction of the content and meaning of a policy.
Status of this Memo Status of this Memo
skipping to change at page 5, line 27 skipping to change at page 5, line 27
5.10.1. Problems with the RFC3460 Version .................. 70 5.10.1. Problems with the RFC3460 Version .................. 70
5.10.2. SUPAPolicyOperator Attributes ...................... 70 5.10.2. SUPAPolicyOperator Attributes ...................... 70
5.10.2.1. The Attribute "supaPolOpType" ................. 70 5.10.2.1. The Attribute "supaPolOpType" ................. 70
5.10.3. SUPAPolicyOperator Relationships ................... 70 5.10.3. SUPAPolicyOperator Relationships ................... 70
5.11. The Concrete Class "SUPAPolicyValue" .................... 71 5.11. The Concrete Class "SUPAPolicyValue" .................... 71
5.11.1. Problems with the RFC3460 Version of PolicyValue ... 71 5.11.1. Problems with the RFC3460 Version of PolicyValue ... 71
5.11.2. SUPAPolicyValue Attributes ......................... 71 5.11.2. SUPAPolicyValue Attributes ......................... 71
5.11.2.1. The Attribute "supaPolValContent[0..n]" ....... 71 5.11.2.1. The Attribute "supaPolValContent[0..n]" ....... 71
5.11.2.2. The Attribute "supaPolValEncoding" ............ 72 5.11.2.2. The Attribute "supaPolValEncoding" ............ 72
5.11.3. SUPAPolicyValue Relationships ...................... 72 5.11.3. SUPAPolicyValue Relationships ...................... 72
5.12. The Concrete Class "SUPAVendorDecoratedComponent" ....... 72 5.12. The Concrete Class "SUPAGenericDecoratedComponent" ...... 72
5.12.1. SUPAVendorDecoratedComponent Attributes ............ 73 5.12.1. SUPAGenericDecoratedComponent Attributes ........... 73
5.12.1.1. The Attribute 5.12.1.1. The Attribute
"supaVendorDecoratedCompContent[0..n]" ......... 73 "supaVendorDecoratedCompContent[0..n]" ......... 73
5.12.1.2. The Attribute "supaVendorDecoratedCompEncoding" 73 5.12.1.2. The Attribute "supaVendorDecoratedCompEncoding" 73
5.12.2. SUPAVendorDecoratedComponent Relationships ......... 73 5.12.2. SUPAGenericDecoratedComponent Relationships ........ 73
5.13. The Concrete Class "SUPAPolicyCollection" ............... 74 5.13. The Concrete Class "SUPAPolicyCollection" ............... 74
5.13.1. Motivation ......................................... 74 5.13.1. Motivation ......................................... 74
5.13.2. Solution ........................................... 74 5.13.2. Solution ........................................... 74
5.13.3. SUPAPolicyCollection Attributes .................... 75 5.13.3. SUPAPolicyCollection Attributes .................... 75
5.13.3.1. The Attribute "supaPolCollectionContent[0..n]" 75 5.13.3.1. The Attribute "supaPolCollectionContent[0..n]" 75
5.13.3.2. The Attribute "supaPolCollectionEncoding" ..... 75 5.13.3.2. The Attribute "supaPolCollectionEncoding" ..... 75
5.13.3.3. The Attribute "supaPolCollectionFunction" ..... 75 5.13.3.3. The Attribute "supaPolCollectionFunction" ..... 75
5.13.3.4. The Attribute "supaPolCollectionIsOrdered" .... 75 5.13.3.4. The Attribute "supaPolCollectionIsOrdered" .... 75
5.13.3.5. The Attribute "supaPolCollectionType" ......... 76 5.13.3.5. The Attribute "supaPolCollectionType" ......... 76
5.13.4. SUPAPolicyCollection Relationships ................. 77 5.13.4. SUPAPolicyCollection Relationships ................. 77
skipping to change at page 11, line 30 skipping to change at page 11, line 30
The SUPA Eca Policy Rule Information Model (EPRIM) extends the The SUPA Eca Policy Rule Information Model (EPRIM) extends the
GPIM to represent policy rules that use the Event-Condition-Action GPIM to represent policy rules that use the Event-Condition-Action
(ECA) paradigm. (The Appendices describe the SUPA Logic Statement (ECA) paradigm. (The Appendices describe the SUPA Logic Statement
Information Model (LSIM), which shows how to extend the GPIM to Information Model (LSIM), which shows how to extend the GPIM to
represent a collection of statements that are either Propositional represent a collection of statements that are either Propositional
Logic (PL) or First-Order Logic (FOL), respectively. Both of these Logic (PL) or First-Order Logic (FOL), respectively. Both of these
logics are types of declarative logic. Note that the LSIM is logics are types of declarative logic. Note that the LSIM is
currently out of scope. However, it is outlined as a set of currently out of scope. However, it is outlined as a set of
Appendices in this document to get feedback on its utility. Appendices in this document to get feedback on its utility.
1.2. Changes Since Version -03 1.2. Changes Since Version -04
There are several main changes in this version of this document There are several changes in this version of this document
compared to the previous versions of this document. They are: compared to the previous versions of this document. They are:
1) The GPIM has been redesigned to be more compact, making it 1) The SUPAVendorDecoratedComponent class has been renamed to
easier to construct data models. Additional optimizations SUPAGenericDecoratedComponent, and its function has been
have been done to make it easier to translate to YANG made more generic.
2) As part of 1), additional options for constructing data 2) A number of clarifications have been made in response to
models have been added to the GPIM questions from the SUPA mailing list.
3) The multiplicity of all relationships have been fine-tuned 3) The multiplicity of all relationships have been fine-tuned
4) The LSIM has been moved into an Appendix, since the latest 4) A **preliminary** YANG model [RFC6020] [RFC6991] has been
charter makes it currently out of scope. However, it is built from the GPIM; see [15].
important to ensure that the GPIM can serve as a single 5) Various additional typos have been fixed.
foundation that different types of policies can all be
derived from to ensure that SUPA can interact with other
SDOs, as well as for future work in the IETF.
5) Examples and figures have been added to clarify the model
2. Conventions Used in This Document 2. Conventions Used in This Document
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in
this document are to be interpreted as described in [RFC2119]. In this document are to be interpreted as described in [RFC2119]. In
this document, these words will appear with that interpretation this document, these words will appear with that interpretation
only when in ALL CAPS. Lower case uses of these words are not to only when in ALL CAPS. Lower case uses of these words are not to
be interpreted as carrying [RFC2119] significance. be interpreted as carrying [RFC2119] significance.
skipping to change at page 12, line 19 skipping to change at page 12, line 19
3.1. Acronyms 3.1. Acronyms
CLI Command Line Interface CLI Command Line Interface
CRUD Create, Read, Update, Delete CRUD Create, Read, Update, Delete
CNF Conjunctive Normal Form CNF Conjunctive Normal Form
DNF Disjunctive Normal Form DNF Disjunctive Normal Form
ECA Event-Condition-Action ECA Event-Condition-Action
EPRIM (SUPA) ECA Policy Rule Information Model EPRIM (SUPA) ECA Policy Rule Information Model
GPIM (SUPA) Generic Policy Information Model GPIM (SUPA) Generic Policy Information Model
NETCONF Network Configuration protocol
OAM&P Operations, Administration, Management, and Provisioning OAM&P Operations, Administration, Management, and Provisioning
OID Object IDentifier OID Object IDentifier
PAP Policy Administration Point
PDP Policy Decision Point
PEP Policy Enforcement Point
PIP Policy Information Point
PR Policy Repository
PXP Policy Execution Point
SUPA Simplified Use of Policy Abstractions SUPA Simplified Use of Policy Abstractions
TMF TeleManagent Forum (TM Forum) TMF TeleManagent Forum (TM Forum)
UML Unified Modeling Language UML Unified Modeling Language
URI Uniform Resource Identifier URI Uniform Resource Identifier
YANG A data definition language for use with NETCONF YANG A data definition language for use with NETCONF
ZOOM Zero-touch Orchestration, Operations, and Management ZOOM Zero-touch Orchestration, Operations, and Management
(a TMF project that also works on information models) (a TMF project that also works on information models)
3.2. Definitions 3.2. Definitions
skipping to change at page 12, line 53 skipping to change at page 12, line 46
"data model", as well as "container" and "policy container". "data model", as well as "container" and "policy container".
3.2.1.1. Information Model 3.2.1.1. Information Model
An information model is a representation of concepts of interest An information model is a representation of concepts of interest
to an environment in a form that is independent of data repository, to an environment in a form that is independent of data repository,
data definition language, query language, implementation language, data definition language, query language, implementation language,
and protocol. and protocol.
Note: this definition is more specific than that of [RFC3198], so Note: this definition is more specific than that of [RFC3198], so
as to focus on the properties of information models. as to focus on the properties of information models. That definition
was: "An abstraction and representation of the entities in a managed
environmentl, their properties, attributes and operations, and the
way that they relate to each other. It is independent of any
specific repository, software usage, protocol, or platform."
3.2.1.2. Data Model 3.2.1.2. Data Model
A data model is a representation of concepts of interest to an A data model is a representation of concepts of interest to an
environment in a form that is dependent on data repository, data environment in a form that is dependent on data repository, data
definition language, query language, implementation language, and definition language, query language, implementation language, and
protocol (typically, but not necessarily, all three). protocol (typically, but not necessarily, all three).
Note: this definition is more specific than that of [RFC3198], so Note: this definition is more specific than that of [RFC3198], so
as to focus on the properties of data models that are generated as to focus on the properties of data models that are generated
from information models. from information models. That definition was: "A mapping of the
contents of an information model into a form that is specific to a
particular type of data store or repository."
3.2.1.3. Abstract Class 3.2.1.3. Abstract Class
An abstract class is a class that cannot be directly instantiated. An abstract class is a class that cannot be directly instantiated.
It MAY have abstract or concrete subclasses. It is denoted with a It MAY have abstract or concrete subclasses. It is denoted with a
capital A near the top-left side of the class. capital A near the top-left side of the class.
3.2.1.4. Concrete Class 3.2.1.4. Concrete Class
A concrete class is a class that can be directly instantiated. Note A concrete class is a class that can be directly instantiated. Note
skipping to change at page 14, line 28 skipping to change at page 14, line 28
3.2.2.2. SUPAPolicy 3.2.2.2. SUPAPolicy
A SUPAPolicy is, in this version of this document, an ECA policy A SUPAPolicy is, in this version of this document, an ECA policy
rule that is a type of PolicyContainer. The PolicyContainer MUST rule that is a type of PolicyContainer. The PolicyContainer MUST
contain an ECA policy rule, SHOULD contain one or more contain an ECA policy rule, SHOULD contain one or more
SUPAPolicyMetadata objects, and MAY contain other elements that SUPAPolicyMetadata objects, and MAY contain other elements that
define the semantics of the policy rule. Policies are generically define the semantics of the policy rule. Policies are generically
defined as a means to monitor and control the changing and/or defined as a means to monitor and control the changing and/or
maintaining of the state of one or more managed objects [1]. In maintaining of the state of one or more managed objects [1]. In
this context, "manage" means that at least create, read, query, this context, "manage" means that at least create, read, query (a
update, and delete functions are supported. more complex operation than read that may involve pre- and/or post-
processing of the results of the operation), update, and delete
functions are supported.
3.2.2.3. SUPAPolicyClause 3.2.2.3. SUPAPolicyClause
A SUPAPolicyClause is an abstract class. Its subclasses define A SUPAPolicyClause is an abstract class. Its subclasses define
different types of clauses that are used to create the content different types of clauses that are used to create the content
for different types of SUPAPolicies. for different types of SUPAPolicies.
For example, the SUPABooleanClause subclass models the content For example, the SUPABooleanClause subclass models the content
of a SUPAPolicy as a Boolean clause, where each Boolean clause of a SUPAPolicy as a Boolean clause, where each Boolean clause
is made up of a set of reusable objects. In contrast, a is made up of a set of reusable objects. In contrast, a
skipping to change at page 21, line 27 skipping to change at page 21, line 27
o This version of this document restricts the expression of o This version of this document restricts the expression of
Policy to a set of event-condition-action clauses. Policy to a set of event-condition-action clauses.
o Each clause is defined as a Boolean expression, and is a o Each clause is defined as a Boolean expression, and is a
reusable object reusable object
o Clauses may be combined to form more complex Boolean o Clauses may be combined to form more complex Boolean
expressions expressions
o The purpose of the GPIM is to enable different policies that o The purpose of the GPIM is to enable different policies that
have fundamentally different representations to share common have fundamentally different representations to share common
model elements. Policy statmeents, which are implemented as model elements. Policy statmeents, which are implemented as
instances of the SUPAPolicyClause class, separates the content instances of the SUPAPolicyClause class, separates the content
of a Policy from its representation. This is supported by: of a Policy from its representation. This is supported by:
o All policy rules (of which SUPAECAPolicyRule is the o All policy rules (of which SUPAECAPolicyRule is the
first example of a concrete class) are derived from first example of a concrete class) are derived from
the SUPAPolicyStructure class. the SUPAPolicyStructure class.
o All objects that are components of policy rules are o All objects that are components of policy rules are
derived from the SUPAPolicyComponentStructure class. derived from the SUPAPolicyComponentStructure class.
o A SUPAPolicy MUST contain at least one SUPAPolicyClause. o A SUPAPolicy MUST contain at least one SUPAPolicyClause.
o A SUPAPolicy MAY specify one or more SUPAPolicyTarget, o A SUPAPolicy MAY specify one or more SUPAPolicyTarget,
SUPAPolicySource, and SUPAPolicyMetadata objects to SUPAPolicySource, and SUPAPolicyMetadata objects to
augment the semantics of the SUPAPolicy augment the semantics of the SUPAPolicy
o A SUPAPolicyClause has two subclasses: o A SUPAPolicyClause has two subclasses:
skipping to change at page 24, line 5 skipping to change at page 23, line 53
in SUPA. The top two layers are defined in this document; the in SUPA. The top two layers are defined in this document; the
bottom layer (Data Models) are defined in separate documents. bottom layer (Data Models) are defined in separate documents.
Conceptually, the GPIM defines a set of objects that define the Conceptually, the GPIM defines a set of objects that define the
key elements of a Policy independent of how it is represented or key elements of a Policy independent of how it is represented or
its content. As will be shown, there is a significant difference its content. As will be shown, there is a significant difference
between SUPAECAPolicyRules (see Section 6) and other types of between SUPAECAPolicyRules (see Section 6) and other types of
policies (see Section 7). In principle, other types of SUPAPolicies policies (see Section 7). In principle, other types of SUPAPolicies
could be defined, but the current charter is restricted to using could be defined, but the current charter is restricted to using
only event-condition-action SUPAPolicies as exemplars. only event-condition-action SUPAPolicies as exemplars.
Note: the GPIM MAY be used without the EPRIM. However, in order to
use the EPRIM, the GPIM MUST also be used.
+----------------------------------------------+ +----------------------------------------------+
| SUPA Generic Policy Information Model (GPIM) | | SUPA Generic Policy Information Model (GPIM) |
+----------------------+-----------------------+ +----------------------+-----------------------+
/ \ / \
| |
| |
+-----------------+--------------+ +-----------------+--------------+
| | | |
| | | |
+-----------+---------------+ +-------------+-------------+ +-----------+---------------+ +-------------+-------------+
skipping to change at page 28, line 12 skipping to change at page 28, line 12
most other models. Please see Appendix A for a comparison to most other models. Please see Appendix A for a comparison to
previous work. previous work.
SUPAPolicyComponentDecorator defines four types of objects that SUPAPolicyComponentDecorator defines four types of objects that
can be used to form a SUPAPolicyClause. Each object may be used can be used to form a SUPAPolicyClause. Each object may be used
with all other objects, if desired. The first three are defined with all other objects, if desired. The first three are defined
in the GPIM, with the last defined in the EPRIM. The objects are: in the GPIM, with the last defined in the EPRIM. The objects are:
o SUPAPolicyTerm, which enables a clause to be defined in a o SUPAPolicyTerm, which enables a clause to be defined in a
canonical {variable, operator, value} form canonical {variable, operator, value} form
o SUPAVendorDecoratedComponent, which enabled a custom object o SUPAGenericDecoratedComponent, which enabled a custom object
to be defined and then used in a SUPAPolicyClause to be defined and then used in a SUPAPolicyClause
o SUPAPolicyCollection, which enables a collection of objects o SUPAPolicyCollection, which enables a collection of objects
to be gathered together and associated with all or a portion to be gathered together and associated with all or a portion
of a SUPAPolicyClause of a SUPAPolicyClause
o SUPAECAComponent, which defines Events, Conditions, and o SUPAECAComponent, which defines Events, Conditions, and
Actions as reusable objects Actions as reusable objects
This approach facilitates the machine-driven construction of This approach facilitates the machine-driven construction of
policies. Note that this is completely optional; policies do not policies. Note that this is completely optional; policies do not
have to use these constructs. have to use these constructs.
skipping to change at page 35, line 48 skipping to change at page 35, line 48
+------------+-------------+----------------+ +------------+-------------+----------------+
I I I I I I I I
A I I C I I A I I C I I
+--------+-------+ I +---------+------------+ I +--------+-------+ I +---------+------------+ I
| SUPAPolicyTerm | I | SUPAPolicyCollection | I | SUPAPolicyTerm | I | SUPAPolicyCollection | I
+----------------+ I +----------------------+ I +----------------+ I +----------------------+ I
(for defining I (for defining sets and/or I (for defining I (for defining sets and/or I
clauses in I groups of objects) I clauses in I groups of objects) I
canonical form) I I canonical form) I I
I I I I
C I A I C I A I
+---------------+--------------+ +---------+--------+ +----------------+--------------+ +---------+--------+
| SUPAVendorDecoratedComponent | | SUPAECAComponent | | SUPAGenericDecoratedComponent | | SUPAECAComponent |
+------------------------------+ +------------------+ +-------------------------------+ +------------------+
(for decorating concrete (for defiing reusable (for decorating concrete (for defiing reusable
subclasses of SUPAPolicyClause) event, condition, subclasses of SUPAPolicyClause) event, condition,
and action objects) and action objects)
Figure 10. Subclasses of SUPAPolicyComponentDecorator Figure 10. Subclasses of SUPAPolicyComponentDecorator
If a SUPAEncodedClause is being used, then there is no need to If a SUPAEncodedClause is being used, then there is no need to
use any of the SUPAPolicyComponentDecorator subclasses, since use any of the SUPAPolicyComponentDecorator subclasses, since
the SUPAEncodedClause already completely defines the content of the SUPAEncodedClause already completely defines the content of
the SUPAPolicyClause. the SUPAPolicyClause.
skipping to change at page 48, line 35 skipping to change at page 48, line 35
| | +---SUPAPolicyComponentDecorator (5.7) | | +---SUPAPolicyComponentDecorator (5.7)
| | | | | |
| | +---SUPAPolicyTerm (5.8) | | +---SUPAPolicyTerm (5.8)
| | | | | | | |
| | | +---SUPAPolicyVariable (5.9) | | | +---SUPAPolicyVariable (5.9)
| | | | | | | |
| | | +---SUPAPolicyOperator (5.10) | | | +---SUPAPolicyOperator (5.10)
| | | | | | | |
| | | +---SUPAPolicyValue (5.11) | | | +---SUPAPolicyValue (5.11)
| | | | | |
| | +---SUPAVendorDecoratedComponent (5.12) | | +---SUPAGenericDecoratedComponent (5.12)
| | | | | |
| | +---SUPAPolicyCollection (5.13) | | +---SUPAPolicyCollection (5.13)
| | | |
| +---SUPAPolicySource (5.14) | +---SUPAPolicySource (5.14)
| | | |
| +---SUPAPolicyTarget (5.15) | +---SUPAPolicyTarget (5.15)
| |
+---SUPAPolicyMetadata (5.16) +---SUPAPolicyMetadata (5.16)
| |
+---SUPAPolicyConcreteMetadata (5.17) +---SUPAPolicyConcreteMetadata (5.17)
skipping to change at page 54, line 32 skipping to change at page 54, line 32
management system SHOULD ignore this SUPAPolicy. Otherwise, the management system SHOULD ignore this SUPAPolicy. Otherwise, the
policy management MAY use this SUPAPolicy. policy management MAY use this SUPAPolicy.
5.3.1.4. The Attribute "supaPolExecStatus" 5.3.1.4. The Attribute "supaPolExecStatus"
This is an optional attribute, which is an enumerated, This is an optional attribute, which is an enumerated,
non-negative integer. It defines the current execution status non-negative integer. It defines the current execution status
of this SUPAPolicy. Values include: of this SUPAPolicy. Values include:
0: undefined 0: undefined
1: executed and SUCEEDED (operational mode) 1: executed and SUCCEEDED (operational mode)
2: executed and FAILED (operational mode) 2: executed and FAILED (operational mode)
3: currently executing (operational mode) 3: currently executing (operational mode)
4: ready to execute (operational mode) 4: ready to execute (operational mode)
5: executed and SUCEEDED (test mode) 5: executed and SUCCEEDED (test mode)
6: executed and FAILED (test mode) 6: executed and FAILED (test mode)
7: currently executing (test mode) 7: currently executing (test mode)
8: ready to execute (test mode) 8: ready to execute (test mode)
5.3.1.5. The Attribute "supaPolExecFailStrategy" 5.3.1.5. The Attribute "supaPolExecFailStrategy"
This is an optional non-negative, enumerated integer that defines This is an optional non-negative, enumerated integer that defines
what actions, if any, should be taken by this what actions, if any, should be taken by this
SUPAPolicyStructure object if it fails to execute correctly. SUPAPolicyStructure object if it fails to execute correctly.
skipping to change at page 58, line 23 skipping to change at page 58, line 23
This is an optional array of string attributes that identifies the This is an optional array of string attributes that identifies the
set of policy actions to take if the SUPAPolicyStructure object set of policy actions to take if the SUPAPolicyStructure object
that owns this association failed to execute properly. The that owns this association failed to execute properly. The
interpretation of this string attribute is defined by the interpretation of this string attribute is defined by the
supaPolExecFailTakeActionEncoding class attribute. The association supaPolExecFailTakeActionEncoding class attribute. The association
defines the SUPAPolicyStructure that contains the set of policy defines the SUPAPolicyStructure that contains the set of policy
actions to execute, and this attribute defines which of these actions to execute, and this attribute defines which of these
actions are to be executed. Note that there is no need to execute actions are to be executed. Note that there is no need to execute
a SUPAPolicy, since the event and failure have already occurred. a SUPAPolicy, since the event and failure have already occurred.
Note: [1..n] means that this is a multi-valued property that has
at least one (and possibly more) attributes.
5.3.2.7. The Aggregation "SUPAHasPolicyClause" 5.3.2.7. The Aggregation "SUPAHasPolicyClause"
This is an optional aggregation that defines the set of This is an optional aggregation that defines the set of
SUPAPolicyClauses that are aggregated by this particular SUPAPolicyClauses that are aggregated by this particular
SUPAPolicyStructure instance. The semantics of this SUPAPolicyStructure instance. The semantics of this
aggregation are defined by the SUPAHasPolicyClauseDetail aggregation are defined by the SUPAHasPolicyClauseDetail
association class. association class.
Every SUPAPolicyStructure object instance MUST aggregate at Every SUPAPolicyStructure object instance MUST aggregate at
skipping to change at page 63, line 21 skipping to change at page 63, line 21
SUPAPolicyComponentDecorator object has the same interface as the SUPAPolicyComponentDecorator object has the same interface as the
SUPAPolicyClause object, the SUPAPolicyComponentDecorator object SUPAPolicyClause object, the SUPAPolicyComponentDecorator object
(and all of its subclasses) are transparent to clients of the (and all of its subclasses) are transparent to clients of the
SUPAPolicyClause object (and its subclasses). This means that SUPAPolicyClause object (and its subclasses). This means that
SUPAPolicyComponentDecorator object instances can add attributes SUPAPolicyComponentDecorator object instances can add attributes
and/or methods to those of the concrete instance of the chosen and/or methods to those of the concrete instance of the chosen
subclass of SUPAPolicyClause. subclass of SUPAPolicyClause.
Figure 19 shows how this is done for methods. 19a shows the Figure 19 shows how this is done for methods. 19a shows the
initial object to be wrapped; 19b shows SUPAPolicyCollection initial object to be wrapped; 19b shows SUPAPolicyCollection
wrapping SUPAEncodedClause; 19c shows SUPAVendorDecoratedComponent wrapping SUPAEncodedClause; 19c shows SUPAGenericDecoratedComponent
wrapping SUPAPolicyCollection. wrapping SUPAPolicyCollection.
+-------------------+ +-------------------+
| SUPAEncodedClause | | SUPAEncodedClause |
| eval() | | eval() |
+-------------------+ +-------------------+
(a) Initial Object (a) Initial Object
===> ===>
+------------------------+ +------------------------+
| SUPAPolicyCollection | | SUPAPolicyCollection |
| eval() | | eval() |
| +-------------------+ | | +-------------------+ |
| | SUPAEncodedClause | | | | SUPAEncodedClause | |
| | eval() | | | | eval() | |
| +-------------------+ | | +-------------------+ |
+------------------------+ +------------------------+
(b) SUPAPolicyCollection "wraps" SUPAEncodedClause (b) SUPAPolicyCollection "wraps" SUPAEncodedClause
===> ===>
+------------------------------+ +--------------------------------+
| SUPAVendorDecoratedComponent | | SUPAGenericDecoratedComponent |
| eval() | | eval() |
| +-----------------------+ | | +-----------------------+ |
| | SUPAPolicyCollection | | | | SUPAPolicyCollection | |
| | eval() | | | | eval() | |
| | +-------------------+ | | | | +-------------------+ | |
| | | SUPAEncodedClause | | | | | | SUPAEncodedClause | | |
| | | eval() | | | | | | eval() | | |
| | +-------------------+ | | | | +-------------------+ | |
| +-----------------------+ | | +-----------------------+ |
+------------------------------+ +--------------------------------+
(c) SUPAVendorDecoratedComponent "wraps" SUPAPolicyCollection (c) SUPAGenericDecoratedComponent "wraps" SUPAPolicyCollection
Figure 20. Conceptual Depiction of eval() Decorated Method Figure 20. Conceptual Depiction of eval() Decorated Method
When eval() is called in the outermost object When eval() is called in the outermost object
(SUPAVendorDecoratedComponent), it delegates to the eval() method (SUPAGenericDecoratedComponent), it delegates to the eval() method
of SUPAPolicyCollection, which in turn delegates to the eval() of SUPAPolicyCollection, which in turn delegates to the eval()
method of SUPAEncodedClause. This method executes and returns the method of SUPAEncodedClause. This method executes and returns the
results to SUPAPolicyCollection, which executes and returns the results to SUPAPolicyCollection, which executes and returns the
results to SUPAVendorDecoratedComponent, which executes and returns results to SUPAGenericDecoratedComponent, which executes and returns
the final result. the final result.
5.7.2. SUPAPolicyComponentDecorator Attributes 5.7.2. SUPAPolicyComponentDecorator Attributes
Currently, there are two attributes defined for this class, which Currently, there are two attributes defined for this class, which
are described in the following subsections. Both attributes are are described in the following subsections. Both attributes are
used by subclasses to constrain the behavior of that subclass; used by subclasses to constrain the behavior of that subclass;
they do **not** affect the relationship between the concrete they do **not** affect the relationship between the concrete
subclass of SUPAPolicyComponentDecorator that is wrapping the subclass of SUPAPolicyComponentDecorator that is wrapping the
concrete subclass of SUPAPolicyClause. This is different concrete subclass of SUPAPolicyClause. This is different
skipping to change at page 65, line 4 skipping to change at page 64, line 55
and 5). Alloy is a language for describing constraints, and uses a and 5). Alloy is a language for describing constraints, and uses a
SAT solver to guarantee correctness. SAT solver to guarantee correctness.
5.7.2.2. The Attribute "supaAPolCompConstraint[0..n]" 5.7.2.2. The Attribute "supaAPolCompConstraint[0..n]"
This is a mandatory array of string attributes. Each attribute This is a mandatory array of string attributes. Each attribute
specifies a constraint to be applied using the encoding defined in specifies a constraint to be applied using the encoding defined in
the supaPolCompConstraintEncoding class attribute. This provides the supaPolCompConstraintEncoding class attribute. This provides
a more rigorous and flexible treatment of constraints than is a more rigorous and flexible treatment of constraints than is
possible in [RFC3460]. possible in [RFC3460].
Note: [0..n] means that this is a multi-valued property that may
have zero or more attributes.
5.7.3. SUPAPolicyComponentDecorator Relationships 5.7.3. SUPAPolicyComponentDecorator Relationships
One relationship is currently defined for this class, which is One relationship is currently defined for this class, which is
described in the following subsection. described in the following subsection.
5.7.3.1. The Aggregation "SUPAHasDecoratedPolicyComponent" 5.7.3.1. The Aggregation "SUPAHasDecoratedPolicyComponent"
This is a mandatory aggregation, and is part of a decorator This is a mandatory aggregation, and is part of a decorator
pattern. It is used to enable a concrete instance of a pattern. It is used to enable a concrete instance of a
skipping to change at page 66, line 11 skipping to change at page 66, line 11
(the two most powerful and useful are defined by enumerations 4 (the two most powerful and useful are defined by enumerations 4
and 5). Alloy is a language for describing constraints, and uses a and 5). Alloy is a language for describing constraints, and uses a
SAT solver to guarantee correctness. SAT solver to guarantee correctness.
5.7.3.2.2. The Attribute "supaDecoratedConstraint[0..n]" 5.7.3.2.2. The Attribute "supaDecoratedConstraint[0..n]"
This is a mandatory array of string attributes. Its purpose is to This is a mandatory array of string attributes. Its purpose is to
collect a set of constraints to be applied to a decorated object. collect a set of constraints to be applied to a decorated object.
The interpretation of each constraint in the array is defined in The interpretation of each constraint in the array is defined in
the supaDecoratedConstraintsEncoding class attribute. the supaDecoratedConstraintsEncoding class attribute.
Note: [0..n] means that this is a multi-valued property that may
have zero or more attributes.
5.7.4. Illustration of Constraints in the Decorator Pattern 5.7.4. Illustration of Constraints in the Decorator Pattern
The following example will illustrate how the different constraints The following example will illustrate how the different constraints
defined in sections 5.7.2 (class attribute constraints) and section defined in sections 5.7.2 (class attribute constraints) and section
5.7.3 (relationship constraints) can be used. 5.7.3 (relationship constraints) can be used.
Figure 21 builds a simple SUPAPolicyClause that has both types Figure 21 builds a simple SUPAPolicyClause that has both types
of relationships. of relationships.
skipping to change at page 67, line 44 skipping to change at page 67, line 44
C I C I C I C I C I C I
+--------+---------+ +--------+---------+ +-------+-------+ +--------+---------+ +--------+---------+ +-------+-------+
|SUPAPolicyVariable| |SUPAPolicyOperator| |SUPAPolicyValue| |SUPAPolicyVariable| |SUPAPolicyOperator| |SUPAPolicyValue|
+------------------+ +------------------+ +---------------+ +------------------+ +------------------+ +---------------+
Figure 22. SUPAPolicyTerm Class Hierarchy Figure 22. SUPAPolicyTerm Class Hierarchy
Note that generic test and set expressions do not have to only use Note that generic test and set expressions do not have to only use
objects that are subclasses of SUPAPolicyTerm. For example, the objects that are subclasses of SUPAPolicyTerm. For example, the
polVendorDecoratedContent attribute of the polVendorDecoratedContent attribute of the
SUPAVendorDecoratedComponent could be used as the variable (or the SUPAGenericDecoratedComponent could be used as the variable (or the
value) term of a get or set expression. value) term of a get or set expression.
Hence, the utility of the subclasses of SUPAPolicyTerm is in the Hence, the utility of the subclasses of SUPAPolicyTerm is in the
ability of its subclasses to define a generic framework for ability of its subclasses to define a generic framework for
implementing get and set expressions. This is in contrast to implementing get and set expressions. This is in contrast to
previous designs (e.g., [RFC3460] and [6]), which depended on previous designs (e.g., [RFC3460] and [6]), which depended on
defining a broad set of subclasses of PolicyVariable and defining a broad set of subclasses of PolicyVariable and
PolicyValue. (Note that [4] does not have this generic capability). PolicyValue. (Note that [4] does not have this generic capability).
5.8.1. SUPAPolicyTerm Attributes 5.8.1. SUPAPolicyTerm Attributes
skipping to change at page 72, line 4 skipping to change at page 71, line 51
Currently, SUPAPolicyValue defines two generic attributes, as Currently, SUPAPolicyValue defines two generic attributes, as
described below. described below.
5.11.2.1. The Attribute "supaPolValContent[0..n]" 5.11.2.1. The Attribute "supaPolValContent[0..n]"
This is a mandatory attribute that defines an array of strings. This is a mandatory attribute that defines an array of strings.
The array contains the value(s) of this SUPAPolicyValue object The array contains the value(s) of this SUPAPolicyValue object
instance. Its data type is defined by the supaPolValEncoding instance. Its data type is defined by the supaPolValEncoding
class attribute. class attribute.
Note: [0..n] means that this is a multi-valued property that has
zero or more attributes.
5.11.2.2. The Attribute "supaPolValEncoding" 5.11.2.2. The Attribute "supaPolValEncoding"
This is a mandatory string attribute that contains the data type This is a mandatory string attribute that contains the data type
of the SUPAPolicyValue object instance. Its value is defined by of the SUPAPolicyValue object instance. Its value is defined by
the supaPolValContent class attribute. Values include: the supaPolValContent class attribute. Values include:
0: Undefined 0: Undefined
1: String 1: String
2: Integer 2: Integer
skipping to change at page 72, line 43 skipping to change at page 72, line 43
Currently, no relationships are defiend for the SUPAPolicyValue Currently, no relationships are defiend for the SUPAPolicyValue
class (note that the decorator pattern obviates the need for class (note that the decorator pattern obviates the need for
relationships such as those in [6]). SUPAPolicyValue, and its relationships such as those in [6]). SUPAPolicyValue, and its
subclasses, inherit the SUPAHasDecoratedPolicyComponent subclasses, inherit the SUPAHasDecoratedPolicyComponent
aggregation, which was defined in section 5.7.3. aggregation, which was defined in section 5.7.3.
Please refer to the examples in section 7, which show how to Please refer to the examples in section 7, which show how to
restrict the value, data type, range, and other semantics of the restrict the value, data type, range, and other semantics of the
SUPAPolicyValue when used in a SUPAPolicyClause. SUPAPolicyValue when used in a SUPAPolicyClause.
5.12. The Concrete Class "SUPAVendorDecoratedComponent" 5.12. The Concrete Class "SUPAGenericDecoratedComponent"
A SUPAVendorDecoratedComponent enables a custom, vendor-specific A SUPAGenericDecoratedComponent enables a custom, vendor-specific
object to be defined and used in a SUPAPolicyClause. This class object to be defined and used in a SUPAPolicyClause. This class
was derived from [2], but is not present in [RFC3460], [4], [5], was derived from [2], but is not present in [RFC3460], [4], [5],
or [6]. or [6].
This should not be confused with the SUPAEncodedClause class. The This should not be confused with the SUPAEncodedClause class. The
SUPAVendorDecoratedComponent class represents a single, atomic, SUPAGenericDecoratedComponent class represents a single, atomic,
that is vendor-specific object that defines a **portion** of a vendor-specific object that defines a **portion** of a
SUPAPolicyClause, whereas a SUPAEncodedClause, which may or SUPAPolicyClause, whereas a SUPAEncodedClause, which may or
may not be vendor-specific, represents an **entire** may not be vendor-specific, represents an **entire**
SUPAPolicyClause. SUPAPolicyClause.
5.12.1. SUPAVendorDecoratedComponent Attributes 5.12.1. SUPAGenericDecoratedComponent Attributes
Currently, SUPAVendorDecoratedComponent defines two generic Currently, SUPAGenericDecoratedComponent defines two generic
attributes, as described below. attributes, as described below.
5.12.1.1. The Attribute "supaVendorDecoratedCompContent[0..n]" 5.12.1.1. The Attribute "supaVendorDecoratedCompContent[0..n]"
This is a mandatory attribute that defines an array of strings. This is a mandatory attribute that defines an array of strings.
This array contains the value(s) of the This array contains the value(s) of the
SUPAVendorDecoratedComponent object instance. Its data type is SUPAGenericDecoratedComponent object instance. Its data type is
defined by the supaVendorDecoratedEncoding class attribute. defined by the supaVendorDecoratedEncoding class attribute.
Note: [0..n] means that this is a multi-valued property that has
zero or more attributes.
5.12.1.2. The Attribute "supaVendorDecoratedCompEncoding" 5.12.1.2. The Attribute "supaVendorDecoratedCompEncoding"
This is a mandatory integer attribute that defines the format of This is a mandatory integer attribute that defines the format of
the supaVendorDecoratedContent class attribute. Values include: the supaVendorDecoratedContent class attribute. Values include:
0: undefined 0: undefined
1: String 1: String
2: Integer 2: Integer
3: Boolean 3: Boolean
skipping to change at page 73, line 42 skipping to change at page 73, line 44
10: NULL 10: NULL
A string is a sequence of zero or more characters. An Integer is A string is a sequence of zero or more characters. An Integer is
a whole number (e.g., it has no fractional part). A Boolean a whole number (e.g., it has no fractional part). A Boolean
represents the values TRUE and FALSE. A floating point number may represents the values TRUE and FALSE. A floating point number may
contain fractional values, as well as an exponent. A DateTime contain fractional values, as well as an exponent. A DateTime
represents a value that has a date and/or a time component (as in represents a value that has a date and/or a time component (as in
the Java or Python libraries). A NULL explicitly models the lack the Java or Python libraries). A NULL explicitly models the lack
of a value. of a value.
5.12.2. SUPAVendorDecoratedComponent Relationships 5.12.2. SUPAGenericDecoratedComponent Relationships
Currently, no relationships are defiend for the Currently, no relationships are defiend for the
SUPAVendorDecoratedComponent class (note that the decorator SUPAGenericDecoratedComponent class (note that the decorator
pattern obviates the need for relationships such as those in [6]). pattern obviates the need for relationships such as those in [6]).
SUPAVendorDecoratedComponent participates in a single relationship, SUPAGenericDecoratedComponent participates in a single relationship,
SUPAHasDecoratedPolicyComponent, as defined in section 5.7.3. SUPAHasDecoratedPolicyComponent, as defined in section 5.7.3.
5.13. The Concrete Class "SUPAPolicyCollection" 5.13. The Concrete Class "SUPAPolicyCollection"
A SUPAPolicyCollection is an optional concrete class that enables A SUPAPolicyCollection is an optional concrete class that enables
a collection (e.g., set, bag, or other, more complex, collections a collection (e.g., set, bag, or other, more complex, collections
of elements) of **arbitrary objects** to be defined and used as of elements) of **arbitrary objects** to be defined and used as
part of a SUPAPolicyClause. This class was derived from [2], but part of a SUPAPolicyClause. This class was derived from [2], but
is not present in [RFC3460], [4], [5], or [6]. is not present in [RFC3460], [4], [5], or [6].
skipping to change at page 75, line 7 skipping to change at page 75, line 7
part of a larger SUPAPolicyClause, since SUPAPolicyCollection is a part of a larger SUPAPolicyClause, since SUPAPolicyCollection is a
subclass of SUPAPolicyComponentDecorator, and can be used to subclass of SUPAPolicyComponentDecorator, and can be used to
decorate a SUPAPolicyClause. Therefore, the external system is decorate a SUPAPolicyClause. Therefore, the external system is
responsible for providing a Boolean TRUE or FALSE return value, so responsible for providing a Boolean TRUE or FALSE return value, so
that the policy system can use that value to represent the that the policy system can use that value to represent the
computation of the function(s) performed in the computation of the function(s) performed in the
SUPAPolicyCollection in a Boolean clause. SUPAPolicyCollection in a Boolean clause.
5.13.3. SUPAPolicyCollection Attributes 5.13.3. SUPAPolicyCollection Attributes
Currently, SUPAVendorDecoratedComponent defines five attributes, Currently, SUPAGenericDecoratedComponent defines five attributes,
as described below. as described below.
5.13.3.1. The Attribute "supaPolCollectionContent[0..n]" 5.13.3.1. The Attribute "supaPolCollectionContent[0..n]"
This is an optional attribute that defines an array of strings. This is an optional attribute that defines an array of strings.
Each string in the array identifies a domain-suitable identifier of Each string in the array identifies a domain-suitable identifier of
an object that is collected by this SUPAPolicyCollection instance. an object that is collected by this SUPAPolicyCollection instance.
Note: [0..n] means that this is a multi-valued property that has
zero or more attributes.
5.13.3.2. The Attribute "supaPolCollectionEncoding" 5.13.3.2. The Attribute "supaPolCollectionEncoding"
This is an optional non-negative enumerated integer that defines This is an optional non-negative enumerated integer that defines
the data type of the content of this collection instance. Values the data type of the content of this collection instance. Values
include: include:
0: undefined 0: undefined
1: by regex (regular expression) 1: by regex (regular expression)
2: by URI 2: by URI
skipping to change at page 77, line 8 skipping to change at page 77, line 8
defined as one element (the key) followed by a colon followed defined as one element (the key) followed by a colon followed
by a second element (the value). Each item in a set of items is by a second element (the value). Each item in a set of items is
separated by a comma. Keys MUST NOT be NULL; values MAY be NULL. separated by a comma. Keys MUST NOT be NULL; values MAY be NULL.
An example of a dictionary is {20:"FTP", 21:"FTP", 22: "SSH"}. An example of a dictionary is {20:"FTP", 21:"FTP", 22: "SSH"}.
An example of a null dictionary is simply {}. An example of a null dictionary is simply {}.
5.13.4. SUPAPolicyCollection Relationships 5.13.4. SUPAPolicyCollection Relationships
Currently, no relationships are defiend for the Currently, no relationships are defiend for the
SUPAVendorDecoratedComponent class (note that the decorator SUPAGenericDecoratedComponent class (note that the decorator
pattern obviates the need for relationships such as those in [6]). pattern obviates the need for relationships such as those in [6]).
SUPAPolicyCollection participates in a single relationship, SUPAPolicyCollection participates in a single relationship,
SUPAHasDecoratedPolicyComponent, as defined in section 5.7.3. SUPAHasDecoratedPolicyComponent, as defined in section 5.7.3.
5.14. The Concrete Class "SUPAPolicySource" 5.14. The Concrete Class "SUPAPolicySource"
This is an optional class that defines a set of managed entities This is an optional class that defines a set of managed entities
that authored, or are otherwise responsible for, this that authored, or are otherwise responsible for, this
SUPAPolicyClause. Note that a SUPAPolicySource does NOT SUPAPolicyRule. Note that a SUPAPolicySource does NOT
evaluate or execute SUPAPolicies. Its primary use is for evaluate or execute SUPAPolicies. Its primary use is for
auditability and the implementation of deontic and/or alethic logic. auditability and the implementation of deontic and/or alethic logic.
A class diagram is shown in Figure 12. A class diagram is shown in Figure 12.
A SUPAPolicySource SHOULD be mapped to a role or set of roles A SUPAPolicySource SHOULD be mapped to a role or set of roles
(e.g., using the role-object pattern [11]). This enables (e.g., using the role-object pattern [11]). This enables
role-based access control to be used to restrict which entities role-based access control to be used to restrict which entities
can author a given policy. Note that Role is a type of can author a given policy. Note that Role is a type of
SUPAPolicyMetadata. SUPAPolicyMetadata.
skipping to change at page 81, line 38 skipping to change at page 81, line 38
5.16.2.2.3. The Attribute "supaPolMetadataConstraint[0..n]" 5.16.2.2.3. The Attribute "supaPolMetadataConstraint[0..n]"
This is an optional array of string attributes. Each attribute This is an optional array of string attributes. Each attribute
specifies a constraint to be applied using the format identified specifies a constraint to be applied using the format identified
by the value of the supaPolMetadataPolicyConstraintEncoding class by the value of the supaPolMetadataPolicyConstraintEncoding class
attribute. This provides a more rigorous and flexible treatment of attribute. This provides a more rigorous and flexible treatment of
constraints than is possible in [RFC3460]. constraints than is possible in [RFC3460].
If this class is instantiated, then this attribute SHOULD also be If this class is instantiated, then this attribute SHOULD also be
instantiated, and should be part of a conformant implementation. instantiated, and should be part of a conformant implementation.
Note: [0..n] means that this is a multi-valued property that has
zero or more attributes.
5.17. The Concrete Class "SUPAPolicyConcreteMetadata" 5.17. The Concrete Class "SUPAPolicyConcreteMetadata"
This is an optional concrete class. It defines an object that will This is an optional concrete class. It defines an object that will
be wrapped by concrete instances of the SUPAPolicyMetadataDecorator be wrapped by concrete instances of the SUPAPolicyMetadataDecorator
class. It can be viewed as a "carrier" for metadata that will be class. It can be viewed as a "carrier" for metadata that will be
attached to a subclass of SUPAPolicyObject. Since the decorator attached to a subclass of SUPAPolicyObject. Since the decorator
pattern is used, any number of concrete subclasses of the pattern is used, any number of concrete subclasses of the
SUPAPolicyMetadataDecorator class can wrap an instance of the SUPAPolicyMetadataDecorator class can wrap an instance of the
SUPAPolicyConcreteMetadata class. SUPAPolicyConcreteMetadata class.
skipping to change at page 84, line 21 skipping to change at page 84, line 21
This is an optional non-negative enumerated integer attribute. It This is an optional non-negative enumerated integer attribute. It
specifies the access privileges that external Applications have specifies the access privileges that external Applications have
when interacting with a specific SUPAPolicyObject that is adorned when interacting with a specific SUPAPolicyObject that is adorned
with an instance of this SUPAPolicyAccessMetadataDef object. This with an instance of this SUPAPolicyAccessMetadataDef object. This
enables the management system to control, in a consistent manner, enables the management system to control, in a consistent manner,
the set of operations that external Applications have for the set of operations that external Applications have for
SUPAPolicies and components of SUPAPolicies. Values include: SUPAPolicies and components of SUPAPolicies. Values include:
0: undefined 0: undefined
1: access only (for all policy components) 1: read only (for all policy components)
2: access and update (for all policy components) 2: read and write (for all policy components)
3: privileges are specified by an external MAC model 3: privileges are specified by an external MAC model
4: privileges are specified by an external DAC model 4: privileges are specified by an external DAC model
5: privileges are specified by an external RBAC model 5: privileges are specified by an external RBAC model
6: privileges are specified by an external ABAC model 6: privileges are specified by an external ABAC model
7: privileges are specified by an external custom model 7: privileges are specified by an external custom model
Values 1 and 2 apply to ALL SUPAPolicyObject instances that are Values 1 and 2 apply to ALL SUPAPolicyObject instances that are
adorned with this SUPAPolicyConcreteMetadata object instance; adorned with this SUPAPolicyConcreteMetadata object instance;
these two settings are "all-or-nothing" settings, and are included these two settings are "all-or-nothing" settings, and are included
for ease of use. for ease of use.
skipping to change at page 86, line 14 skipping to change at page 86, line 14
5.20.1.2. The Attribute "supaVersionMinor" 5.20.1.2. The Attribute "supaVersionMinor"
This is an optional string attribute, and contains a string This is an optional string attribute, and contains a string
(typically representing an integer) indicating that this release (typically representing an integer) indicating that this release
contains a set of features and/or bug fixes that collectively do contains a set of features and/or bug fixes that collectively do
not warrant incrementing the supaVersionMajor attribute. This not warrant incrementing the supaVersionMajor attribute. This
attribute should only be used if the supaVersionMajor attribute attribute should only be used if the supaVersionMajor attribute
is NOT NULL. is NOT NULL.
5.20.1.3. The Attribute "supaVersionRelTypeNum" 5.20.1.3. The Attribute "supaVersionRelType"
This is an optional integer attribute, and contains a string This is an optional integer attribute, and contains a string
defining the type of release of this SUPAPolicyObject. Values defining the type of release of this SUPAPolicyObject. Values
include: include:
0: undefined 0: undefined
1: internal 1: internal
2: alpha 2: alpha
3: beta 3: beta
4: release candidate 4: release candidate
skipping to change at page 101, line 9 skipping to change at page 101, line 9
This is an optional Boolean attribute. If the value of this This is an optional Boolean attribute. If the value of this
attribute is TRUE, then this SUPAPolicyEvent has been produced by attribute is TRUE, then this SUPAPolicyEvent has been produced by
the Policy Management System. If the value of this attribute is the Policy Management System. If the value of this attribute is
FALSE, then this SUPAPolicyEvent has been produced by an entity FALSE, then this SUPAPolicyEvent has been produced by an entity
in the system being managed. in the system being managed.
6.11.1.3. The Attribute "supaPolicyEventTopic[0..n]" 6.11.1.3. The Attribute "supaPolicyEventTopic[0..n]"
This is a mandatory array of string attributes, and contains the This is a mandatory array of string attributes, and contains the
subject that this PolicyEvent describes. subject that this PolicyEvent describes.
Note: [0..n] means that this is a multi-valued property that has
zero or more attributes.
6.11.1.4. The Attribute "supaPolicyEventEncoding" 6.11.1.4. The Attribute "supaPolicyEventEncoding"
This is a mandatory non-zero enumerated integer attribute, and This is a mandatory non-zero enumerated integer attribute, and
defines how to interpret the supaPolicyEventData class attribute. defines how to interpret the supaPolicyEventData class attribute.
These two attributes form a tuple, and together enable a machine These two attributes form a tuple, and together enable a machine
to understand the syntax and value of the data carried by the to understand the syntax and value of the data carried by the
object instance of this class. Values include: object instance of this class. Values include:
0: Undefined 0: Undefined
skipping to change at page 101, line 32 skipping to change at page 101, line 34
4: Floating Point 4: Floating Point
5: DateTime 5: DateTime
6.11.1.5. The Attribute "supaPolicyEventData[1..n]" 6.11.1.5. The Attribute "supaPolicyEventData[1..n]"
This is a mandatory attribute that defines an array of strings. This is a mandatory attribute that defines an array of strings.
Each string in the array represents an attribute name and value Each string in the array represents an attribute name and value
of an Event object. The format of each string is defined as of an Event object. The format of each string is defined as
name:value. The 'name' part is the name of the SUPAPolicyEvent name:value. The 'name' part is the name of the SUPAPolicyEvent
attribute, and the 'value' part is the value of that attribute. attribute, and the 'value' part is the value of that attribute.
Note: [1..n] means that this is a multi-valued property that has
For example, if this value of this attribute is: at least one (and possibly more) attributes. For example, if
this value of this attribute is:
{(startTime:0800), (endTime:1700)} {(startTime:0800), (endTime:1700)}
then this attribute contains two properties, called startTime and then this attribute contains two properties, called startTime and
endTime, whose values are 0800 and 1700, respectively. endTime, whose values are 0800 and 1700, respectively.
Note that the supaPolicyEventEncoding class attribute defines how Note that the supaPolicyEventEncoding class attribute defines how
to interpret the value portion of this attribute. to interpret the value portion of this attribute.
This attribute works with another class attribute, called This attribute works with another class attribute, called
skipping to change at page 102, line 24 skipping to change at page 102, line 24
6.12.1. SUPAPolicyCondition Attributes 6.12.1. SUPAPolicyCondition Attributes
Currently, two attributes are defined for the SUPAPolicyCondition Currently, two attributes are defined for the SUPAPolicyCondition
class, which are described in the following subsections. class, which are described in the following subsections.
6.12.1.1. The Attribute "supaPolicyConditionData[1..n]" 6.12.1.1. The Attribute "supaPolicyConditionData[1..n]"
This is a mandatory array of string attributes that contains the This is a mandatory array of string attributes that contains the
content of this SUPAPolicyCondition object. content of this SUPAPolicyCondition object.
Note: [1..n] means that this is a multi-valued property that has
at least one (and possibly more) attributes.
This attribute works with another class attribute, called This attribute works with another class attribute, called
supaPolicyConditionEncoding, which defines how to interpret this supaPolicyConditionEncoding, which defines how to interpret this
attribute. These two attributes form a tuple, and together enable attribute. These two attributes form a tuple, and together enable
a machine to understand the syntax and value of the data carried a machine to understand the syntax and value of the data carried
by the object instance of this class. by the object instance of this class.
6.12.1.2. The Attribute "supaPolicyConditionEncoding" 6.12.1.2. The Attribute "supaPolicyConditionEncoding"
This is a mandatory non-zero enumerated integer attribute, and This is a mandatory non-zero enumerated integer attribute, and
skipping to change at page 103, line 42 skipping to change at page 103, line 42
class, which are described in the following subsections. class, which are described in the following subsections.
6.13.1.1. The Attribute "supaPolicyActionData[1..n]" 6.13.1.1. The Attribute "supaPolicyActionData[1..n]"
This is a mandatory array of string attributes that contains the This is a mandatory array of string attributes that contains the
content of this SUPAPolicyAction object. This attribute works with content of this SUPAPolicyAction object. This attribute works with
another class attribute, called supaPolicyActionEncoding, which another class attribute, called supaPolicyActionEncoding, which
defines how to interpret this attribute. These two attributes form defines how to interpret this attribute. These two attributes form
a tuple, and together enable a machine to understand the syntax a tuple, and together enable a machine to understand the syntax
and value of the data carried by the object instance of this class. and value of the data carried by the object instance of this class.
Note: [1..n] means that this is a multi-valued property that has
at least one (and possibly more) attributes.
Since this attribute could represent a term in a SUPAPolicyClause Since this attribute could represent a term in a SUPAPolicyClause
(e.g., var = SUPAPolicyAction.supaPolicyActionData), a complete (e.g., var = SUPAPolicyAction.supaPolicyActionData), a complete
SUPAPolicyClause (e.g., the supaPolicyActionData attribute SUPAPolicyClause (e.g., the supaPolicyActionData attribute
contains text that defines the entire action clause), or the contains text that defines the entire action clause), or the
name of a SUPAECAPolicyRule to invoke, each element in the string name of a SUPAECAPolicyRule to invoke, each element in the string
array is prepended with one of the following strings: array is prepended with one of the following strings:
o 't:' (or 'term:'), to denote a term in a SUPAPolicyClause o 't:' (or 'term:'), to denote a term in a SUPAPolicyClause
o 'c:' (or 'clause:'), to denote an entire SUPAPolicyClause o 'c:' (or 'clause:'), to denote an entire SUPAPolicyClause
skipping to change at page 105, line 22 skipping to change at page 105, line 22
11. References 11. References
This section defines normative and informative references for this This section defines normative and informative references for this
document. document.
11.1. Normative References 11.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)",
RFC 6020, October 2010.
[RFC6991] Schoenwaelder, J., "Common YANG Data Types", RFC 6991,
July 2013.
11.2. Informative References
[RFC3060] Moore, B., Ellesson, E., Strassner, J., Westerinen, [RFC3060] Moore, B., Ellesson, E., Strassner, J., Westerinen,
A., "Policy Core Information Model -- Version 1 A., "Policy Core Information Model -- Version 1
Specification", RFC 3060, February 2001 Specification", RFC 3060, February 2001
[RFC3198] Westerinen, A., Schnizlein, J., Strassner, J., [RFC3198] Westerinen, A., Schnizlein, J., Strassner, J.,
Scherling, M., Quinn, B., Herzog, S., Huynh, A., Scherling, M., Quinn, B., Herzog, S., Huynh, A.,
Carlson, M., Perry, J., Waldbusser, S., "Terminology Carlson, M., Perry, J., Waldbusser, S., "Terminology
for Policy-Based Management", RFC 3198, November, 2001 for Policy-Based Management", RFC 3198, November, 2001
[RFC3460] Moore, B., ed., "Policy Core Information Model (PCIM) [RFC3460] Moore, B., ed., "Policy Core Information Model (PCIM)
Extensions, RFC 3460, January 2003 Extensions, RFC 3460, January 2003
[RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)",
RFC 6020, October 2010.
[RFC6021] Schoenwaelder, J., "Common YANG Data Types", RFC 6021,
October 2010.
11.2. Informative References
[1] Strassner, J., "Policy-Based Network Management", [1] Strassner, J., "Policy-Based Network Management",
Morgan Kaufman, ISBN 978-1558608597, Sep 2003 Morgan Kaufman, ISBN 978-1558608597, Sep 2003
[2] Strassner, J., ed., "The DEN-ng Information Model", [2] Strassner, J., ed., "The DEN-ng Information Model",
add stable URI add stable URI
[3] Riehle, D., "Composite Design Patterns", Proceedings [3] Riehle, D., "Composite Design Patterns", Proceedings
of the 1997 Conference on Object-Oriented Programming of the 1997 Conference on Object-Oriented Programming
Systems, Languages and Applications (OOPSLA '97). Systems, Languages and Applications (OOPSLA '97).
ACM Press, 1997, Page 218-228 ACM Press, 1997, Page 218-228
skipping to change at page 106, line 20 skipping to change at page 106, line 20
TM Forum ZOOM project, October 26, 2014 TM Forum ZOOM project, October 26, 2014
[6] TM Forum, "Information Framework (SID), GB922 and [6] TM Forum, "Information Framework (SID), GB922 and
associated Addenda, v14.5, associated Addenda, v14.5,
https://www.tmforum.org/information-framework-sid/ https://www.tmforum.org/information-framework-sid/
[7] Liskov, B.H., Wing, J.M., "A Behavioral Notion of [7] Liskov, B.H., Wing, J.M., "A Behavioral Notion of
subtyping", ACM Transactions on Programming languages subtyping", ACM Transactions on Programming languages
and Systems 16 (6): 1811 - 1841, 1994 and Systems 16 (6): 1811 - 1841, 1994
[8] Klyus, M., Strassner, J., editors, "SUPA Proposition", [8] Klyus, M., Strassner, J., Liu, W., Karagiannis, G.,
IETF Internet draft, draft-klyus-supa-proposition-01, Bi, J., "SUPA Value Proposition",
July 18015 draft-klyus-supa-value-proposition-00, March 21, 2016
[9] ISO/IEC 10746-3 (also ITU-T Rec X.903), "Reference [9] ISO/IEC 10746-3 (also ITU-T Rec X.903), "Reference
Model Open Distributed Processing Architecture", Model Open Distributed Processing Architecture",
April 20, 2010 April 20, 2010
[10] Davy, S., Jennings, B., Strassner, J., "The Policy [10] Davy, S., Jennings, B., Strassner, J., "The Policy
Continuum - A Formal Model", Proc. of the 2nd Intl. Continuum - A Formal Model", Proc. of the 2nd Intl.
IEEE Workshop on Modeling Autonomic Communication IEEE Workshop on Modeling Autonomic Communication
Environments (MACE), Multicon Lecture Notes, No. 6, Environments (MACE), Multicon Lecture Notes, No. 6,
Multicon, Berlin, 2007, pages 65-78 Multicon, Berlin, 2007, pages 65-78
skipping to change at page 107, line 4 skipping to change at page 106, line 51
Learning and Reasoning", Journal of Cluster Computing, Learning and Reasoning", Journal of Cluster Computing,
Vol 12, Issue 1, pages 17-43, March, 2009 Vol 12, Issue 1, pages 17-43, March, 2009
[13] Liskov, B.H., Wing, J.M., "A Behavioral Notion of [13] Liskov, B.H., Wing, J.M., "A Behavioral Notion of
subtyping", ACM Transactions on Programming languages subtyping", ACM Transactions on Programming languages
and Systems, 16 (6): 1811 - 1841, 1994 and Systems, 16 (6): 1811 - 1841, 1994
[14] Martin, R.C., "Agile Software Development, Principles, [14] Martin, R.C., "Agile Software Development, Principles,
Patterns, and Practices", Prentice-Hall, 2002, Patterns, and Practices", Prentice-Hall, 2002,
ISBN: 0-13-597444-5 ISBN: 0-13-597444-5
[15] Halpern, J., Strassner, J., "Generic Policy Data Model
for Simplified Use of Policy Abstractions (SUPA)"
draft-halpern-supa-generic-policy-data-model-00,
March 21, 2016
Authors' Addresses Authors' Addresses
John Strassner John Strassner
Huawei Technologies Huawei Technologies
2330 Central Expressway 2330 Central Expressway
Santa Clara, CA 95138 USA Santa Clara, CA 95138 USA
Email: john.sc.strassner@huawei.com Email: john.sc.strassner@huawei.com
Joel Halpern Joel Halpern
skipping to change at page 110, line 43 skipping to change at page 110, line 43
section 5.7) to provide more extensible types of conditions than is section 5.7) to provide more extensible types of conditions than is
possible with those classes. This also applies for the possible with those classes. This also applies for the
SimplePolicyAction and the ComplexPolicyAction classes defined in SimplePolicyAction and the ComplexPolicyAction classes defined in
[RFC3460]. [RFC3460].
More importantly, this removes the need for a complex set of More importantly, this removes the need for a complex set of
aggregations (i.e., PolicyComponent, PolicySetComponent, aggregations (i.e., PolicyComponent, PolicySetComponent,
PolicyConditionStructure, PolicyConditionInPolicyRule, PolicyConditionStructure, PolicyConditionInPolicyRule,
PolicyConditionInPolicyCondition, PolicyActionStructure, PolicyConditionInPolicyCondition, PolicyActionStructure,
PolicyActionInPolicyRule, and PolicyActionInPolicyAction). PolicyActionInPolicyRule, and PolicyActionInPolicyAction).
Instead, ANY SUPAECAComponent is defined as a decorator (i.e., ability Instead, ANY SUPAECAComponent is defined as a decorator (i.e., a
subclass of SUPAPolicyComponentDecorator), and hence, Any subclass of SUPAPolicyComponentDecorator), and hence, Any
SUPAECAComponent is wrapped onto a concrete subclass of SUPAECAComponent is wrapped onto a concrete subclass of
SUPAPolicyClause using the SAME aggregation SUPAPolicyClause using the SAME aggregation
(SUPAHasDecoratedPolicyComponent). This is a significantly simpler (SUPAHasDecoratedPolicyComponent). This is a significantly simpler
design that is also more powerful. design that is also more powerful.
A.5. The SUPAPolicyComponentDecorator Abstraction A.5. The SUPAPolicyComponentDecorator Abstraction
One of the problems in building a policy model is the tendency to One of the problems in building a policy model is the tendency to
have a multitude of classes, and hence object instances, to have a multitude of classes, and hence object instances, to
skipping to change at page 112, line 75 skipping to change at page 112, line 75
function as a decorator of other objects. function as a decorator of other objects.
3. Note that there is no way to enforce the constraint matching 3. Note that there is no way to enforce the constraint matching
in [RFC3460] and [6]; the burden is on the developer to in [RFC3460] and [6]; the burden is on the developer to
check and see if the constraints specified in one class are check and see if the constraints specified in one class are
honored in the other class. honored in the other class.
4. If these constraints are not honored, there is no mechanism 4. If these constraints are not honored, there is no mechanism
specified to define the clause as incorrectly formed. specified to define the clause as incorrectly formed.
A.7.3. Specification Ambiguities A.7.3. Specification Ambiguities
There are a number of ambiguities in [RFC2460]. There are a number of ambiguities in [RFC3460].
First, [RFC3460] says: "Variables are used for building individual First, [RFC3460] says: "Variables are used for building individual
conditions". While this is true, variables can also be used for conditions". While this is true, variables can also be used for
building individual actions. This is reflected in the definition building individual actions. This is reflected in the definition
for SUPAPolicyVariable. for SUPAPolicyVariable.
Second, [RFC3460] says: "The variable specifies the property of a Second, [RFC3460] says: "The variable specifies the property of a
flow or an event that should be matched when evaluating the flow or an event that should be matched when evaluating the
condition." While this is true, variables can be used to test many condition." While this is true, variables can be used to test many
other things than "just" a flow or an event. This is reflected in other things than "just" a flow or an event. This is reflected in
 End of changes. 57 change blocks. 
89 lines changed or deleted 114 lines changed or added

This html diff was produced by rfcdiff 1.44. The latest version is available from http://tools.ietf.org/tools/rfcdiff/