Internet Engineering Task Force John Strassner INTERNET DRAFT Cisco Systems 17 November 1998 Ed Ellesson IBM Policy Framework Core Information Model draft-ietf-policy-core-schema-00.txt Status of this Memo This document is an Internet-Draft. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." To learn the current status of any Internet-Draft, please check the "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow Directories on ftp.ietf.org (US East Coast), nic.nordu.net (Europe), ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific Rim). Copyright Notice Copyright (C) The Internet Society (1998). All Rights Reserved. Abstract This document defines an object-oriented information model for representing policies. This model defines structural information of objects that comprise and control policy (the 'schema', or class inheritance hierarchy) as well as information that describes how different objects are related to other objects (the relationship hierarchy). The information model described in this document consists of five very general classes: policyGroup, policyRule, policyValidityPeriod, policyCondition, and policyAction. While structural information is represented very well in LDAP schemas, relationships between objects are not. This document also defines how to map more abstract concepts, such as relationships, into LDAP schemas. One mechanism to do this mapping is to use auxiliary classes. This document defines one such class, the policyRuleContainmentAuxClass. While these classes are general, they are not abstract: they can all be instantiated. Policy solutions for specific areas, such as DiffServ and IPSec, may use the policyGroup, policyRule, policyValidityPeriod, and policyRuleContainmentAuxClass classes directly, while creating their own subclasses derived from policyCondition and policyAction. This memo does not specify a standard for the Internet community. Policy Framework WG Expires May 1999 [Page 1] Internet Draft Core Policy Information Model November 1998 Table of Contents 1.0 Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 2.0 Modeling Policies . . . . . . . . . . . . . . . . . . . . . 4 2.1 Policy Scope . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.0 Overview of the Schema . . . . . . . . . . . . . . . . . . . 5 3.1 Relationships . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2 Associations . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.3 Aggregations . . . . . . . . . . . . . . . . . . . . . . . . 6 3.4 Key Relationships of the Policy Framework Core Information Model 7 4.0 Inheritance Hierarchy . . . . . . . . . . . . . . . . . . . 9 5.0 Class Definitions . . . . . . . . . . . . . . . . . . . . . 9 5.1 Naming Attributes in the Core Schema . . . . . . . . . . . . 9 5.2 The Class policyGroup . . . . . . . . . . . . . . . . . . . 9 5.2.1 The Attribute cn . . . . . . . . . . . . . . . . . . . . . 10 5.2.2 The Attribute policyGroupName . . . . . . . . . . . . . . 10 5.2.3 The Attribute policyGroupsContainedSet . . . . . . . . . . 11 5.3 The Class policyRuleContainmentAuxClass . . . . . . . . . . 11 5.3.1 The Attribute policyRulesContainedSet . . . . . . . . . . . 12 5.4 The Class policyRule . . . . . . . . . . . . . . . . . . . . 12 5.4.1 The Attribute cn . . . . . . . . . . . . . . . . . . . . . 13 5.4.2 The Attribute policyRuleName. . . . . . . . . . . . . . . . 13 5.4.3 The Attribute policyEnabled . . . . . . . . . . . . . . . . 13 5.4.4 The Attribute policyValidityPeriodRef . . . . . . . . . . . 14 5.4.5 The Attribute policyConditionList . . . . . . . . . . . . . 14 5.4.6 The Attribute policyActionList. . . . . . . . . . . . . . . 15 5.4.7 The Attribute policyRulePriority. . . . . . . . . . . . . . 15 5.4.8 The Attribute policyErrorCode . . . . . . . . . . . . . . . 16 5.4.9 The Attribute policyErrorDescription . . . . . . . . . . . 16 5.4.10 The Attribute policyKeywords . . . . . . . . . . . . . . . 17 5.4.11 The Attribute policyModality . . . . . . . . . . . . . . . 17 5.4.12 The Attribute policyType . . . . . . . . . . . . . . . . 17 5.4.13 The Attribute policyUsage . . . . . . . . . . . . . . . . 18 5.5 The Class policyValidityPeriod . . . . . . . . . . . . . . . . 18 5.5.1 The Attribute cn . . . . . . . . . . . . . . . . . . . . . . 19 5.5.2 PolicyValidityPeriodName . . . . . . . . . . . . . . . . . 19 5.5.3 The Attribute policyValidityPeriodTime. . . . . . . . . . . 20 5.5.4 The Attribute policyValidityMonthMask . . . . . . . . . . . 20 5.5.5 The Attribute policyValidityDayOfMonthMask. . . . . . . . . 21 5.5.6 The Attribute policyValidityDayOfWeekMask . . . . . . . . . 21 5.5.7 The Attribute policyValidityTimeOfDayRange. . . . . . . . . 22 5.6 The Class policyCondition . . . . . . . . . . . . . . . . . . 23 5.6.1 The Attribute cn . . . . . . . . . . . . . . . . . . . . . . 23 5.6.2 policyConditionName . . . . . . . . . . . . . . . . . . . . 23 5.6.3 The Attribute policyConstraintData . . . . . . . . . . . . . 23 5.6.4 The Attribute policyConstraintEncoding . . . . . . . . . . . 24 5.7 The Class policyAction. . . . . . . . . . . . . . . . . . . . . 24 5.7.1 The Attribute cn . . . . . . . . . . . . . . . . . . . . . . 25 5.7.2 The Attribute policyActionName . . . . . . . . . . . . . . . 25 5.7.3 The Attribute policyActionData . . . . . . . . . . . . . . . 25 5.7.4 The Attribute policyActionEncoding . . . . . . . . . . . . . 25 6.0 Extending the Core Schema . . . . . . . . . . . . . . . . . . 26 6.1 Subclassing policyCondition and policyAction. . . . . . . . . 26 6.2 Subclassing policyRule . . . . . . . . . . . . . . . . . . . 26 6.2.1 Refining the Semantics of policyRule . . . . . . . . . . . 26 6.2.2 Optimizing the computation of a policyRule . . . . . . . . . 26 6.3 Using policyConstraintEncoding and policyActionEncoding . . . 27 7.0 Security Considerations . . . . . . . . . . . . . . . . . . . 27 Policy Framework WG Expires May 1999 [Page 2] Internet Draft Core Policy Information Model November 1998 8.0 Intellectual Property . . . . . . . . . . . . . . . . . . . . 27 9.0 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 28 10.0 References . . . . . . . . . . . . . . . . . . . . . . . . . 28 11.0 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 28 12.0 Full Copyright Statement . . . . . . . . . . . . . . . . . . 29 1.0 Introduction This document is a submission to the Policy Framework Working Group. It defines a schema containing six core classes for representing policies: policyGroup, policyRuleContainmentAuxClass, policyRule, policyValidityPeriod, policyCondition, and policyAction. This schema is intended for realization in a directory that uses LDAP as its access protocol; however, it is also intended to be extensible, such that other types of policy repositories, such as relational databases, can use this information. These six classes are sufficiently generic to allow them to represent policies related to anything. Their initial application will be for representing policies related to QoS (DiffServ and IntServ) and to IPSec. Policy models for specific areas such as these may extend the core schema in several ways. The preferred way is as follows: o Use the policyGroup, policyRule, policyValidityPeriod, and policyRuleContainmentAuxClass classes directly, and create their own subclasses derived from policyCondition and policyAction. Policy Framework WG Expires May 1999 [Page 3] Internet Draft Core Policy Information Model November 1998 Discussion of extension techniques follow in 6.0, "Extending the Core Schema" on page 26. This document fits into the overall framework for representing, deploying, and managing policies being developed by the Policy Framework Working Group. The initial work to define this framework is In reference [1]. More specifically, this document builds on the core policy classes first introduced in references [2] and [3]. It also draws on the work done for the Directory-enabled Networks (DEN) specification, reference [4]. Work on the DEN specification itself has been completed. Further work to standardize the models contained in it will be the responsibility of the Desktop Management Task Force (DMTF). 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 RFC 2119, reference [5]. 2.0 Modeling Policies The classes comprising the Policy Framework Core Information Model Class Hierarchy are intended to serve as an extensible class hierarchy (through specialization) for defining policy objects that enable application developers, network administrators, and policy administrators to represent policies of different types. The simplest way to think of a policy-controlled network is to first model the network as a state machine and then use policy to control which state a policy-controlled device should be in or is allowed to be in at any given time. Given this approach, policy is applied using a set of policy rules. Each policy rule consists of a set of conditions and a set of actions. Policy rules may be nested. The set of conditions specifies when the policy is applicable. The set of conditions is implemented as a set of condition lists - each of the condition lists is ORed. Each condition list can have a set of conditions that are ANDed. If all of the conditions are satisfied, then a set of actions that either maintain the current state of the object or transition the object to a new state may be executed. Actions can be prioritized, but this release of the draft does not specify conditional handling of the actions to be executed. This would be a relatively simple extension of the grammar; however, if this feature is implemented, then policies immediately become much more complex. Policy Framework WG Expires May 1999 [Page 4] Internet Draft Core Policy Information Model November 1998 Policies can be classified into two categories: simple and complex. Complex policies are policies that are comprised of simpler policies, and consist of a complex set of conditions and actions. Hierarchical policies are another example of complex policies. In general, complex policies model intricate interactions between objects that have complex interdependencies. Examples of this include a sophisticated user logon policy that sets up application access, security, and reconfigures network connections based on a combination of user identity, network location, logon method and time of day. Simple policies are those that can be expressed in a simple statement. They can be represented effectively in schemas or MIBs. Examples of this are VLAN assignments, simple YES/NO QoS requests, and IP address allocations. A specific design goal of this language is to support simple and complex policies. Policies can be further classified into two categories: service policies and usage policies. Service policies describe services available in the network. Usage policies describe which policies will use which services when the policies are satisfied. Usage policies describe particular mechanism(s) employed to either maintain the current state of the object, or to transition an object from one state to a new state, in order to utilize the specified services. Put another way, service policies describe what the network is capable of providing, and usage policies describe how to configure the network in order to take advantage of one or more services that the network provides. 2.1 Policy Scope Policies represent business goals and objectives. A translation must be made between these goals and objectives and their realization in the network. An example of this could be a Service Level Agreement (SLA). The Policy Framework Definition Language is specifically designed to model this translation. This translation is not domain-specific. That is, it applies equally to differentiated services quality of service (QoS) as it does to signaled QoS. Furthermore, it is envisioned that the definition of policy in this draft is generic in nature and is suitable for non-QoS networking applications (e.g., DHCP and IPSEC) as well as non-networking applications (e.g., backup policies, auditing access, etc.). 3.0 Overview of the Schema The following diagram provides an overview of the six classes that comprise the core schema, and their relationships to each other. Policy Framework WG Expires May 1999 [Page 5] Internet Draft Core Policy Information Model November 1998 ************** * * 0..n V * ContainedPolicyGroups +-------------+ * | policyGroup |****** | | 0..n +-------------+ 0..n * * *********** 1..n V * * ContainedPolicyRules +----------\/-+ * | |******* +----------------------+ | policyRule |*************>| policyValidityPeriod | | | +----------------------+ | | | | ContainedPolicyConditions (ANDed) | |************************* | | * | | 0..n * 0..n | | +---------\/-----------+ | | | policyCondition | | | +----------------------+ | | | | ContainedPolicyActions (ORed) | |************************* | | * | | 0..n * 0..n | | +---------\/-----------+ | | | policyAction | +-------------+ +----------------------+ +-------------------------------+ | policyRuleContainmentAuxClass | +-------------------------------+ 3.1 Relationships Relationships are a central feature of information models. A Relationship represents a physical or conceptual connection between objects. CIM and DEN define two types of relationships, called associations and aggregations. 3.2 Associations An association is a class that contains two or more references, where each reference identifies another class. An association is defined using a class. Associations can be defined between classes without effecting any of the related classes. That is, addition of an Association does not effect the interface of the related Classes. Policy Framework WG Expires May 1999 [Page 6] Internet Draft Core Policy Information Model November 1998 3.3 Aggregations An aggregation is a strong form of an association. An aggregation is usually used to represent a "whole-part" relationship. This type of relationship defines the containment relationship between a system and the components that make up the system. Aggregation often implies, but does not require, that the aggregated objects have mutual dependencies. 3.4 Key Relationships of the Policy Framework Core Information Model The following relationships are shown in the preceding figure: o The ContainedPolicyGroups relation enables policyGroups to be nested. This is critical for scalability and manageability, as it enables complex policies to be constructed from multiple simpler policies for administrative convenience. For example, a policyGroup representing policies for the US might have nested within it policy groups for the Eastern and Western US. For LDAP schemata, the ContainedPolicyGroup relation is mapped to the policyGroupsContainedSet attribute (note that other data stores may define a different mapping). This attribute enables a policyGroup to identify another policyGroup as its parent. o The ContainedPolicyRules relation is similar to the ContainedPolicyGroups relation, except that its purpose is to enable multiple policyRules to be nested. o A policy group may aggregate one or more policy rules, and a policy rule may be aggregated by one or more policy groups. Grouping of policy rules into policy groups is again for administrative convenience; a policy rule may also be used by itself, without belonging to a policy group. o A policy rule may also be aggregated by an instance of any class to which the policyRuleContainmentAuxClass class has been attached. Once again, this is for administrative convenience. If the directory entry to which the policyRuleContainmentAuxClass has been attached is a policy group, then the pointer in the policyRuleContainmentAuxClass realizes the relationship discussed above between the group and a policy rule; a separate attribute is not needed in the policyGroup class. o A condition of a policy rule may specify one or more policy validity periods. This can be used for several purposes. Two important conditions include representing time as a part of the condition (e.g., use this policy in the morning and a different policy in the afternoon) and to enable scheduled activation and deactivation of the policy rule. A policy validity period may be aggregated by multiple policy rules. A rule that does not point to a policy validity period is, from the point of view of scheduling, always active. It may, however, be inactive for other reasons. Policy Framework WG Expires May 1999 [Page 7] Internet Draft Core Policy Information Model November 1998 o A policy rule may aggregate one or more policy conditions. Any conditions aggregated by a policy rule are evaluated and AND-ed together to determine whether to perform the actions associated with the policy rule. The pointer supports an ordering among the conditions pointed to, indicating the order in which the conditions SHOULD be evaluated. This allows the policy administrator to optimize processing at the policy decision point by recommending that it evaluate first the condition most likely to evaluate to FALSE. One of the ordering values for the pointer is 0, indicating that the policy enforcement point is given no guidance on when to evaluate the associated condition. An instance of policyRule itself (as opposed to an instance of a subclass of policyRule) always points to at least one policy condition. A subclass of policyRule, however, may implicitly include one or more conditions within itself, in which case it need not point to any policy conditions at all outside itself. See 6.0, "Extending the Core Schema" on page 22 for further discussion of this point. o A policy rule may point to one or more policy actions. The pointer supports an ordering among the actions pointed to, indicating the order in which the actions SHOULD be performed. A subclass of policyRule may "upgrade" this SHOULD to a SHALL, i.e., indicate that if the actions cannot be performed in the specified order, then they SHALL not be performed at all. One of the ordering values for the pointer is 0, indicating that the policy enforcement point may perform the action at any point in the identified sequence of actions. An instance of policyRule itself (as opposed to an instance of a subclass of policyRule) always points to at least one policy action. A subclass of policyRule, however, may implicitly include one or more actions within itself, in which case it need not point to any policy actions at all outside itself. See 6.0, "Extending the Core Schema" on page 22 for further discussion of this point. Policy Framework WG Expires May 1999 [Page 8] Internet Draft Core Policy Schema November 1998 4.0 Inheritance Hierarchy The six classes defined in this document are all derived directly from the abstract class "top": top | +---policyGroup | +---policyRuleContainmentAuxClass | +---policyRule | +---policyValidityPeriod | +---policyCondition | +---policyAction 5.0 Class Definitions The classes described below contain certain optimizations in anticipation of being used specifically for a directory that uses LDAP as its access protocol. One example of this is the use of auxiliary classes, and another is the mapping of relationships into a pair of attributes, one each in the source and destination class. Other data stores that are not directories might need to implement this relationship differently. 5.1 Naming Attributes in the Core Schema Instances in a directory are identified by distinguished names (DNs), which provide the same type of hierarchical organization that a file system provides in a computer system. A distinguished name is a sequence of relative distinguished names (RDNs), where an RDN provides a unique identifier for an instance within the context of its immediate superior in the same way that a filename provides a unique identifier for a file within the context of the folder in which it resides. To preserve maximum naming flexibility for policy administrators, each of the classes defined in this schema has its own naming attribute. Since the naming attributes are different, the policy administrator is guaranteed that there will be no name collisions between instances of different classes, even if the same VALUE is assigned to the instances' respective naming attributes. 5.2 The Class policyGroup This class serves as a container for a related set of policy rules. A policy group may also contain other policy groups. Loops, including the degenerate case of a policy group that contains itself, are not allowed when policy groups contain other policy groups. Policy Framework WG Expires May 1999 [Page 9] Internet Draft Core Policy Schema November 1998 When a policy group contains policy rules, it does so in exactly the same way that any other class would: via the policyRulesContainedSet attribute in the auxiliary class policyRuleContainmentAuxClass (note: this is a specific optimization for directories using LDAP as their access protocol). The class definition is as follows: NAME policyGroup DESCRIPTION A container for a group of related policy rules DERIVED FROM top TYPE structural AUXILIARY CLASSES policyRuleContainmentAuxClass POSSIBLE SUPERIORS container, organization, organizationalUnit, policyGroup OID MUST cn, policyGroupName MAY policyGroupsContainedSet 5.2.1 The attribute cn The cn, or common name, attribute is an X.500 attribute. It stands for CommonName. It specifies a (possibly ambiguous) name by which the object is commonly known. This name is used in a limited scope (such as an organization). It conforms to the naming conventions of the country or culture with which it is associated. CN is used universally in DEN as the naming attribute for a class. NAME cn DESCRIPTION naming attribute of this class SYNTAX DirectoryString OID 2.4.5.3 EQUALITY caseExactMatch SINGLE-VALUED 5.2.2 The Attribute policyGroupName This attribute provides a user-friendly name for a policy group, and is normally what will be displayed to the end-user as the name of this class. It is defined as follows: NAME policyGroupName DESCRIPTION The user-friendly name of this policy group. SYNTAX IA5String OID EQUALITY caseExactIA5Match SINGLE-VALUED Policy Framework WG Expires May 1999 [Page 10] Internet Draft Core Policy Schema November 1998 5.2.3 The Attribute policyGroupsContainedSet This attribute provides an unordered set of DN pointers to zero or more other policy groups. The attribute definition is as follows: NAME policyGroupsContainedSet DESCRIPTION Distinguished names of other policy groups subsumed under this policy group. There is no order implied among the members of the set. SYNTAX DN OID EQUALITY distinguishedNameMatch MULTI-VALUED 5.3 The Class policyRuleContainmentAuxClass This auxiliary class provides a single, multi-valued attribute that points to a set of policy rules. By attaching this attribute to instances of various other classes, a policy administrator has a flexible way of providing an entry point into the directory that allows a client to locate and retrieve the policy rules relevant to it. A policy administrator might have several different pointers to a Policy rule in the overall directory structure. For example, there might be pointers to all policy rules for traffic originating in a particular subnet from a directory entry that represents that subnet. At the same time, there might be pointers to all policy rules related to DiffServ from an instance of policyGroup explicitly introduced as a container for DiffServ-related policy rules. The policyRuleContainmentAuxClass is the mechanism that makes it possible for the policy administrator to define all these pointers. Note that the cn attribute does NOT need to be defined for this class. This is because an auxiliary class is used as a means to collect common attributes and treat them as properties of an object. A good analogy is a #include file, except that since an auxiliary class is a class, all the benefits of a class (e.g., subclassing and inheritance) can be applied to an auxiliary class. The class definition is as follows: NAME policyRuleContainmentAuxClass DESCRIPTION An auxiliary class used to bind policy rules to an appropriate container object. DERIVED FROM top TYPE auxiliary AUXILIARY CLASSES none POSSIBLE SUPERIORS container, organization, organizationalUnit, policyRule OID MUST policyRulesContainedSet Policy Framework WG Expires May 1999 [Page 11] Internet Draft Core Policy Schema November 1998 5.3.1 The Attribute policyRulesContainedSet This attribute provides an unordered set of DN pointers to one or more policy rules associated with the instance of a structural class to which this attribute has been appended. The attribute definition is: NAME policyRulesContainedSet DESCRIPTION Distinguished names of policy rules associated in some way with the instance to which this attribute has been appended. No order is implied. SYNTAX DN OID EQUALITY distinguishedNameMatch MULTI-VALUED 5.4 The Class policyRule This class represents the "If Condition then Action" semantics associated with a policy. A policyRule aggregates sets of policy conditions and policy actions. The conditions that are AND-ed together are identified by DN pointers and/or by specific attributes introduced in subclasses of policyRule. The actions to be performed if all of the conditions in the policyRule evaluate to TRUE are identified by DN pointers and/or by specific attributes introduced in subclasses of policyRule. This class also contains several attributes designed to help directory clients locate the policy rules applicable to them. The class definition is as follows: NAME policyRule DESCRIPTION The class is the central class for representing the "If Condition then Action" semantics associated with a policy rule. DERIVED FROM top TYPE structural AUXILIARY CLASSES none POSSIBLE SUPERIORS policyGroup OID MUST cn policyRuleName policyEnabled MAY policyValidityPeriodRef policyConditionList policyActionList policyRulePriority policyErrorCode policyErrorDescription policyKeywords policyModality policyType policyUsage Policy Framework WG Expires May 1999 [Page 12] Internet Draft Core Policy Schema November 1998 5.4.1 The Attribute cn This is the exact same definition as in Section 5.2.1. It is repeated here because the PolicyGroup and PolicyRule classes are siblings, and both require a naming attribute. 5.4.2 The Attribute policyRuleName This attribute provides a user-friendly name for a policy rule. The attribute definition is as follows: NAME policyRuleName DESCRIPTION The user-friendly name of this policy rule. SYNTAX IA5String OID EQUALITY caseExactIA5Match SINGLE-VALUED 5.4.3 The Attribute policyRuleEnabled This flag indicates whether a policy rule is currently enabled, from an ADMINISTRATIVE point of view. Its purpose is to allow a policy administrator to enable or disable a policy rule without having to add it to, or remove it from, the directory. The attribute definition is as follows: NAME policyRuleEnabled DESCRIPTION A flag indicating whether this policy rule is enabled from an administrative point of view. SYNTAX Boolean OID EQUALITY booleanMatch SINGLE-VALUED 5.4.4 The Attribute policyValidityPeriodRef This attribute points to an object representing the policy validity period for this policy rule. The attribute definition is as follows: Policy Framework WG Expires May 1999 [Page 13] Internet Draft Core Policy Schema November 1998 NAME policyValidityPeriodRef DESCRIPTION A DN pointer to an instance of policyValidityPeriod representing either the scheduled periods of activity and inactivity for this policy rule, or possible times when this rule could be activated. SYNTAX DN OID EQUALITY distinguishedNameMatch SINGLE-VALUED 5.4.5 The Attribute policyConditionList This attribute provides an ORDERED list of DN pointers that identify a set of policy conditions associated with this policy rule. Order is used to indicate which the conditions MUST be evaluated by the policy decision point in which sequence. The purpose of providing an order is to cause conditions more likely to evaluate to FALSE to be tested early in the process. This speeds the condition examination process, since once a single FALSE condition has been found, the remaining conditions do not need to be evaluated. Since the order of the values returned by a multi-valued attribute is indeterminate, the order must be encoded within the attribute values themselves. To accomplish this, the values of this attribute are of the form "n:DN", where 'n' indicates the order, the colon (':') serves as a separator, and "DN" is a distinguished name encoded in the usual way. Values of 'n' that indicate order are character substrings that represent positive decimal integers: "1", "2", "45", etc. The special value "0" indicates "no order". When n = "0", the policy decision point is given no guidance on when to evaluate the associated condition. When n = a positive integer, then the larger the value, the lower the order of execution. Any condition that has n not equal to 0 is evaluated before any condition that has n equal to 0. All conditions whose n is equal to 0 MAY be evaluated in ANY order, as long as all conditions whose n is not equal to 0 have been evaluated first. Note that n may not be a negative number. If two or more identical non-zero values are included, the policy decision point is being told to evaluate the conditions associated with the repeated value in any order it chooses, but at the point where that number falls in the overall sequence of conditions. For example, suppose a policy decision point found the following three values in the policyConditionList for a policy rule: 2:DN-1 0:DN-2 1:DN-3 0:DN-4 Policy Framework WG Expires May 1999 [Page 14] Internet Draft Core Policy Schema November 1998 These values tell the policy decision point to evaluate the condition named by DN-3 before it evaluates the one named by DN-1, and to evaluate either the one named by DN-2 or the one named by DN-4 in any order, so long as they are evaluated after DN-1 and DN-3 have been evaluated. The attribute definition is as follows: NAME policyConditionList DESCRIPTION An ordered list of DN pointers indicating a recommended order for evaluating policy conditions. SYNTAX OctetString OID EQUALITY caseOctetStringOrderingMatch MULTI-VALUED FORMAT n:DN 5.4.6 The Attribute policyActionList This attribute provides an ORDERED list of DN pointers to a set of policy actions associated with this policy rule. The order indicates the order in which the actions MUST be performed by the policy decision point. If a policy decision point cannot perform the actions in the indicated order, then an error condition must be raised. Subclasses of policyRule may, however, override this rule. This may be done by, for example, stating that if a policy decision point cannot perform the actions in the indicated order, then it must not perform them at all. The ordering of the actions has the same semantics as the ordering of the conditions in the policyConditionList attribute. The attribute definition is as follows: NAME policyActionList DESCRIPTION An ordered list of DN pointers indicating the order in which policy actions SHOULD be performed. SYNTAX OctetString OID EQUALITY caseOctetStringOrderingMatch MULTI-VALUED FORMAT n:DN 5.4.7 The Attribute policyRulePriority This attribute provides a positive integer for prioritizing policy Rules relative to each other. For policy rules that have this attribute, smaller integer values indicate higher priority. Since one purpose of this attribute is to allow specific, ad hoc policy rules to override established policy rules temporarily, an instance that has this attribute has a higher priority than all instances that lacks it. Policy Framework WG Expires May 1999 [Page 15] Internet Draft Core Policy Schema November 1998 Prioritization among policy rules is important only when policy rules involve both conditions that can be satisfied simultaneously and actions that are incompatible. For example, one policy rule might specify that all Telnet traffic is to be placed on the medium-priority queue, while a second policy rule specifies that all traffic from a particular IP address is to be placed on the high-priority queue. If Telnet traffic can flow from or to the IP address whose traffic is to be placed on the high-priority queue, then these two rules conflict. A policy decision point can determine which queue should be used for Telnet traffic from this particular IP address based on which of the two (conflicting) policy rules has the higher priority. The attribute definition is as follows: NAME policyRulePriority DESCRIPTION A positive integer for prioritizing this policy rule relative to other policy rules in the directory. A smaller value indicates a higher priority. SYNTAX INTEGER OID EQUALITY integerMatch SINGLE-VALUED 5.4.8 The Attribute policyErrorCode This attribute is used in conjunction with the policyErrorDescription attribute to provide an indication of an error in executing a policy. The policyErrorCode attribute provides a generalized error code indicating a policy failure. The attribute definition is as follows: NAME policyErrorCode DESCRIPTION A generalized error code used to indicate that this policy rule failed to evaluate or execute properly. SYNTAX INTEGER OID EQUALITY integerMatch SINGLE-VALUED 5.4.9 The Attribute policyErrorDescription This attribute is used in conjunction with the policyErrorCode attribute to provide an indication of an error in executing a policy. The policyErrorDescription attribute provides a detailed description of the specific type of policy failure encountered. The attribute definition is as follows: Policy Framework WG Expires May 1999 [Page 16] Internet Draft Core Policy Schema November 1998 NAME policyErrorDescription DESCRIPTION A detailed description of the error that occurred When this policy rule failed to evaluate or execute properly. SYNTAX IA5String OID EQUALITY caseExactIA5Match SINGLE-VALUED 5.4.10 The Attribute policyKeywords This attribute provides a set of one or more ad hoc keywords that a policy administrator may define to assist directory clients in locating the policy rules applicable to them. Values for this attribute are installation dependent, and thus are not specified in any schema document. The attribute definition is as follows: NAME policyKeywords DESCRIPTION A set of ad hoc keywords to assist directory clients in locating the policy rules applicable to them. SYNTAX IA5String OID EQUALITY caseExactIA5Match MULTI-VALUED 5.4.11 The Attribute policyModality This attribute specifies whether the action(s) specified in this policy rule should be applied if the condition(s) is satisfied (value = 0) or not satisfied (value = 1). The attribute definition is as follows: NAME policyModality DESCRIPTION Specifies whether the actions of this policy rule should be executed if the conditions are satisfied (value = 0) or not satisfied (value = 1). SYNTAX INTEGER OID EQUALITY integerMatch SINGLE-VALUED 5.4.12 The Attribute policyType This attribute is used to specify the type of policy that this policy rule is. This can be used for classification (service policy or usage policy) or categorization (the type of service or usage policy that this policy is). Policy Framework WG Expires May 1999 [Page 17] Internet Draft Core Policy Schema November 1998 The attribute definition is as follows: NAME policyType DESCRIPTION Defines the type of policy that this policy is. This is used to help classify and categorize policies. SYNTAX INTEGER OID EQUALITY integerMatch SINGLE-VALUED 5.4.13 The Attribute policyUsage This attribute is used to provide guidelines on how this policy should be used. The attribute definition is as follows: NAME policyUsage DESCRIPTION This attribute is used to provide guidelines on how this policy should be used. SYNTAX DirectoryString OID EQUALITY caseIgnoreMatch SINGLE-VALUED 5.5 The Class policyValidityPeriod This class provides a means of representing the time periods during which a policy rule is valid, i.e., active. At all times that fall outside these time periods, the policy rule has no effect. A policy rule is treated as valid at all times if it does not specify a policyValidityPeriod (i.e., if it has a null policyValidityPeriodRef attribute). Instances of this class may have up to five attributes identifying time periods at different levels. The values of all the attributes present in an instance are AND-ed together to determine the validity period(s) for the instance. For example, an instance with an overall validity range of January 1, 1999 through December 31, 1999; a month mask of "001100000000" (March and April); a day-of-the-week mask of "0000100" (Fridays); and a time of day range of 8 AM through 4 PM would represent the following validity periods: Friday, March 5, 1999, from 8 AM through 4 PM; Friday, March 12, 1999, from 8 AM through 4 PM; Friday, March 19, 1999, from 8 AM through 4 PM; Friday, March 26, 1999, from 8 AM through 4 PM; Friday, April 3, 1999, from 8 AM through 4 PM; Friday, April 10, 1999, from 8 AM through 4 PM; Friday, April 17, 1999, from 8 AM through 4 PM; Friday, April 24, 1999, from 8 AM through 4 PM. Policy Framework WG Expires May 1999 [Page 18] Internet Draft Core Policy Schema November 1998 Attributes not present in an instance of policyValidityPeriod are implicitly treated as having the "always enabled" value. Thus, in the example above, the day-of-the-month mask is not present, and so the validity period for the instance implicitly includes a day-of-the-month mask containing 31 1's. If we apply this "missing attribute" rule to its fullest, we see that there is a second way to indicate that a policy rule is always enabled: have it point to an instance of policyValidityPeriod whose only attribute is policyValidityPeriodName. The class definition is as follows: NAME policyValidityPeriod DESCRIPTION A class that provides the capability of enabling / disabling a policy rule according to a pre-determined schedule. DERIVED FROM top TYPE structural AUXILIARY CLASSES none POSSIBLE SUPERIORS OID MUST cn policyValidityPeriodName MAY policyValidityPeriodTime policyValidityMonthMask policyValidityDayOfMonthMask policyValidityDayOfWeekMask policyValidityTimeOfDayRange 5.5.1 The Attribute cn This is the exact same definition as in Section 5.2.1. It is repeated here because the PolicyGroup and PolicyRule classes are siblings, and both require a naming attribute. 5.5.2 The Attribute policyValidityPeriodName This attribute provides a user-friendly name for a policy validity period. The attribute definition is as follows: NAME policyValidityPeriodName DESCRIPTION The user-friendly name of this entry. SYNTAX IA5String OID EQUALITY caseExactIA5Match SINGLE-VALUED Policy Framework WG Expires May 1999 [Page 19] Internet Draft Core Policy Schema November 1998 5.5.3 The Attribute policyValidityPeriodTime This attribute identifies an overall range of calendar dates / times over which a policy rule is valid. It is formatted as a string containing two dates / times, separated by a colon (':'), optionally followed by a second colon and a value indicating offset from UTC. The first date indicates the beginning of the range, while the second date indicates the end. Thus the second date / time must be later than the first. Dates are expressed as substrings of the form "yyyymmddhhmmss". The UTC offset indicator is either a 'Z', indicating UTC, or a Substring of the form '+' or '-' direction from UTC: '+' = east, '-' = west hh hours from UTC (00..13) mm minutes from UTC (00..59) If the time zone indicator is omitted, the time is interpreted as the local time at the policy decision point. Examples: 19990101080000:19990131120000 January 1, 1999, 8 AM through January 31, 1999, noon (local time) 19990101080000:19990131120000:Z January 1, 1999, 8 AM through January 31, 1999, noon (UTC) 19990101080000:19990131120000:-0500 January 1, 1999, 8 AM through January 31, 1999, noon (US EST) The attribute definition is as follows: NAME policyValidityPeriodTime DESCRIPTION The range of calendar dates on which a policy rule is valid. SYNTAX Printable String OID EQUALITY caseIgnoreMatch SINGLE-VALUED FORMAT yyyymmddhhmmss:yyyymmddhhmmss[:] 5.5.4 The Attribute policyValidityMonthMask This attribute identifies the months of the year in which a policy rule is valid. It is formatted as a string containing 12 ASCII '0's and '1's, where the '1's identify the months (beginning with January) in which the policy rule is valid. The value "000010010000", for example, indicates that a policy rule is valid only in the months May and August. The attribute definition is as follows: Policy Framework WG Expires May 1999 [Page 20] Internet Draft Core Policy Schema November 1998 NAME policyValidityMonthMask DESCRIPTION A mask identifying the months of the year in which a policy rule is valid. SYNTAX Printable String OID EQUALITY caseIgnoreMatch SINGLE-VALUED FORMAT A string of 12 ASCII '0's and '1's. 5.5.5 The Attribute policyValidityDayOfMonthMask This attribute identifies the days of the month on which a policy rule is valid. It is formatted as a string containing 31 ASCII '0's and '1's, where the '1's identify the days of the month (beginning with day 1 and going up through day 31) on which the policy rule is valid. The value "1110000000000000000000000000000", for example, indicates that a policy rule is valid only on the first three days of each month. For months with fewer than 31 days, the digits corresponding to days that the months do not have are ignored. The attribute definition is as follows: NAME policyValidityDayOfMonthMask DESCRIPTION A mask identifying the days of the month on which a policy rule is valid. SYNTAX Printable String OID EQUALITY caseIgnoreMatch SINGLE-VALUED FORMAT A string of 31 ASCII '0's and '1's. 5.5.6 The Attribute policyValidityDayOfWeekMask This attribute identifies the days of the week on which a policy rule Is valid. It is formatted as a string containing 7 ASCII '0's and '1's, where the '1's identify the days of the week (beginning with Monday and going up through Sunday) on which the policy rule is valid. The value "1111100", for example, indicates that a policy rule is valid Monday through Friday. The attribute definition is as follows: NAME policyValidityDayOfWeekMask DESCRIPTION A mask identifying the days of the week on which a policy rule is valid. SYNTAX Printable String OID EQUALITY caseIgnoreMatch SINGLE-VALUED FORMAT A string of 7 ASCII '0's and '1's. Policy Framework WG Expires May 1999 [Page 21] Internet Draft Core Policy Schema November 1998 5.5.7 The Attribute policyValidityTimeOfDayRange This attribute identifies a range of times over which a policy rule is valid. It is formatted as a string containing two times, separated by a colon (':'), optionally followed by a second colon and a value indicating offset from UTC. The first time indicates the beginning of the range, while the second time indicates the end. Times are expressed as substrings of the form "hhmmss". The second substring always identifies a later time than the first substring. To allow for ranges that span midnight, however, the value of the second string may be smaller than the value of the first substring. Thus "080000:210000" identifies the range from 8 AM until 9 PM, while "210000:080000" identifies the range from 9 PM until 8 AM of the following day. When a range spans midnight, it by definition includes parts of two successive days. When one of these days is selected by the intersection of the policyValidityMonthMask, policyValidityDayOfMonthMask, and policyValidityDayOfWeekMask, but the other day is not, then the policy is active only during the portion of the range that falls on the selected day. For example, if the range extends from 9 PM until 8 AM, and the day of week mask selects Monday and Tuesday, then the policy is active during the following three intervals: From midnight Sunday until 8 AM Monday; From 9 PM Monday until 8 AM Tuesday; From 9 PM Tuesday until 11:59:59 Tuesday. The UTC offset indicator is either a 'Z', indicating UTC, or a Substring of the form '+' or '-' direction from UTC: '+' = east, '-' = west hh hours from UTC (00..13) mm minutes from UTC (00..59) If the time zone indicator is omitted, the time is interpreted as the local time at the policy decision point. See the examples of the different kinds of UTC offsets under the policyValidityPeriodTime attribute. The attribute definition is as follows: NAME policyValidityTimeOfDayRange DESCRIPTION The range of times at which a policy rule is valid. If the second time is earlier than the first, then the interval spans midnight. SYNTAX Printable String OID EQUALITY caseIgnoreMatch SINGLE-VALUED FORMAT hhmmss:hhmmss[:] Policy Framework WG Expires May 1999 [Page 22] Internet Draft Core Policy Schema November 1998 5.6 The Class policyCondition The class definition is as follows: NAME policyCondition DESCRIPTION A class representing a condition to be evaluated in conjunction with a policy rule. DERIVED FROM top TYPE structural AUXILIARY CLASSES none POSSIBLE SUPERIORS policyRule OID MUST cn policyConditionName policyConstraintData policyConstraintEncoding 5.6.1 The Attribute cn This is the exact same definition as in Section 5.2.1. It is repeated here because the PolicyGroup and PolicyRule classes are siblings, and both require a naming attribute. 5.6.2 The Attribute policyConditionName This attribute provides a user-friendly name for a policy condition. The attribute definition is as follows: NAME policyConditionName DESCRIPTION The user-friendly name of this policy condition. SYNTAX IA5String OID EQUALITY caseExactIA5Match SINGLE-VALUED 5.6.3 The Attribute policyConstraintData This attribute provides an escape mechanism for representing policy constraints that have not been modeled with specific attributes. The format of the OctetString is left unspecified in this definition. It is determined by the OID value stored in the attribute policyConstraintEncoding. Since policyConstraintEncoding is single-valued, all the values of policyConstraintData share the same format and semantics. A policy decision point can readily determine whether it supports the values stored in an instance of policyConstraintData, by checking the OID value from policyConstraintEncoding against the set of OIDs it recognizes. The action for the policy decision point to take in case it does not recognize the format of this data could itself be modeled as a policy rule, governing the behavior of the policy decision point itself. Policy Framework WG Expires May 1999 [Page 23] Internet Draft Core Policy Schema November 1998 The attribute definition is as follows: NAME policyContraintData DESCRIPTION Escape mechanism for representing constraints that have not been modeled as specific attributes. The format of the values is identified by the OID stored in the attribute policyConstraintEncoding. SYNTAX OctetString OID EQUALITY octetStringMatch MULTI-VALUED 5.6.4 The Attribute policyConstraintEncoding This attribute identifies the encoding and semantics of the values of policyConstraintData in this instance. The value of this attribute is a single OID. The attribute definition is as follows: NAME policyContraintEncoding DESCRIPTION An OID identifying the format and semantics for this instance's policyConstraintData attribute. SYNTAX OID OID EQUALITY objectIdentifierMatch SINGLE-VALUED 5.7 The Class policyAction The class definition is as follows: NAME policyAction DESCRIPTION A class representing an action to be performed as a result of a policy rule. DERIVED FROM top TYPE structural AUXILIARY CLASSES none POSSIBLE SUPERIORS policyRule OID MUST cn policyActionName policyActionData policyActionEncoding Policy Framework WG Expires May 1999 [Page 24] Internet Draft Core Policy Schema November 1998 5.7.1 The Attribute cn This is the exact same definition as in Section 5.2.1. It is repeated here because the PolicyGroup and PolicyRule classes are siblings, and both require a naming attribute. 5.7.2 The Attribute policyActionName This attribute provides a user-friendly name for a policy action. The attribute definition is as follows: NAME policyActionName DESCRIPTION The user-friendly name of this policy action. SYNTAX IA5String OID EQUALITY caseExactIA5Match SINGLE-VALUED 5.7.3 The Attribute policyActionData This attribute provides an escape mechanism for representing policy actions that have not been modeled with specific attributes. The format of the OctetString is left unspecified in this definition. It is determined by the OID value stored in the attribute policyActionEncoding. Since policyActionEncoding is single-valued, all the values of policyActionData share the same format and semantics. A policy decision point can readily determine whether it supports the values stored in an instance of policyActionData, by checking the OID value from policyActionEncoding against the set of OIDs it recognizes. The action for the policy decision point to take in case it does not recognize the format of this data could itself be modeled as a policy rule, governing the behavior of the policy decision point itself. The attribute definition is as follows: NAME policyActionData DESCRIPTION Escape mechanism for representing actions that have not been modeled as specific attributes. The format of the values is identified by the OID stored in the attribute policyActionEncoding. SYNTAX OctetString OID EQUALITY octetStringMatch MULTI-VALUED 5.7.4 The Attribute policyActionEncoding This attribute identifies the encoding and semantics of the values of policyActionData in this instance. The value of this attribute is a single OID. Policy Framework WG Expires May 1999 [Page 25] Internet Draft Core Policy Schema November 1998 The attribute definition is as follows: NAME policyActionEncoding DESCRIPTION An OID identifying the format and semantics for this instance's policyActionData attribute. SYNTAX OID OID EQUALITY objectIdentifierMatch SINGLE-VALUED 6.0 Extending the Core Schema 6.1 Subclassing policyCondition and policyAction The simplest way of extending the core schema is to use the first four classes as they are, and simply subclass policyCondition and policyAction. An instance of policyRule ties everything together, with its very simple, invariant semantics: If the policyRule is active, then evaluate, possibly in a specified order, all conditions pointed to by policyConditionList. If all conditions evaluate to TRUE, then perform, possibly in a specified order, all actions pointed to by policyActionList. With this approach a new schema specifies the conditions it needs in subclasses of policyCondition (or, better still, reuses conditions that have already been specified in subclasses of policyCondition), and it specifies (or reuses) the actions it needs in subclasses of policyAction. 6.2 Subclassing policyRule There are two possible ways to subclass policyRule, as described below. 6.2.1 Refining the Semantics of policyRule This approach refines the structural and possibly behavioral semantics of what it means to be a policy rule. For example, additional attributes and relationships could be defined in a subclass of policyRule. These attributes and relationships could provide extra meaning for how to interpret the set of conditions and actions that a policyRule aggregates. 6.2.2 Optimizing the computation of a policyRule All preceding mechanisms for extending the core schema will work in all cases, but they comes at a price: in order to fully understand a policy rule, a client must retrieve at least three objects: a policy rule, at least one policy condition, and at least one policy action. A future version of this specification will define how to optimize the evaluation of a policy rule. Policy Framework WG Expires May 1999 [Page 26] Internet Draft Core Policy Schema November 1998 6.3 Using policyConstraintEncoding and policyActionEncoding As discussed in 5.6, "The Class policyCondition" on page 23, the attributes policyConstraint and policyConstraintEncoding are included in policyCondition to provide an escape mechanism for representing "exceptional" policy conditions. The attributes policyAction and policyActionEncoding play the same role with respect to actions. This enables interoperability between different vendors. For example, imagine a network comprised of access devices from vendor A, edge and core devices from vendor B, and a policy server from vendor C. It is desirable for the policy server to be able to configure and manage all of the devices from vendors A and B. Unfortunately, these devices will in general have little in common (e.g., different mechanisms, different ways for controlling those mechanisms, different operating systems, etc.). The escape conditions provide a way for vendor-specific commands to be encoded as OctetStrings so that they can be commonly managed by a single device. 7.0 Security Considerations Security and denial of service considerations are not explicitly considered in this memo, as they are appropriate for the underlying policy architecture. However, the policy architecture must be secure as far as the following aspects are concerned. First, the mechanisms proposed under the framework must minimize theft and denial of service threats. Second, it must be ensured that the entities (such as PEPs and PDPs) involved in policy control can verify each other's identity and establish necessary trust before communicating. The schema defined in this document MUST not compromise either of these goals. 8.0 Intellectual Property The IETF takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on the IETF's procedures with respect to rights in standards-track and standards-related documentation can be found in BCP-11. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF Secretariat. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to practice this standard. Please address the information to the IETF Executive Director. Policy Framework WG Expires May 1999 [Page 27] Internet Draft Core Policy Schema November 1998 9.0 Acknowledgments This document is closely aligned with the work being done in the Desktop Management Task Force (DMTF) Service Level Agreements and Networks working groups. As noted, the core schema described here was initially defined in references [2] and [3]. We would especially like to thank Bob Moore, Lee Rafalow, Andrea Westerinen, and David Jones for their helpful comments. 10.0 References [1] Strassner, J., and E. Ellesson, "Terminology for describing network policy and services", Internet-Draft work in progress, August 1998. [2] Bhattacharya, P., and R. Adams, W. Dixon, R. Pereira, R. Rajan, "An LDAP Schema for Configuration and Administration of IPSec based Virtual Private Networks (VPNs)", Internet-Draft work in progress, October 1998 [3] Rajan, R., and J. C. Martin, S. Kamat, M. See, R. Chaudhury, D. Verma, G. Powers, R. Yavatkar, "Schema for Differentiated Services and Integrated Services in Networks", Internet-Draft work in progress, October 1998 [4] Judd, S., and J. Strassner, "Directory-enabled Networks", version 3.0c5 (August 1998). [5] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [6] Hovey, R., and S. Bradner, "The Organizations Involved in the IETF Standards Process", BCP 11, RFC 2028, October 1996. 11.0 Authors' Addresses John Strassner Bldg 1 Cisco Systems 170 West Tasman Drive San Jose, CA 95134 Phone: +1-408-527-1069 Fax: +1-408-527-1722 E-mail: johns@cisco.com Ed Ellesson JDGA/501 IBM Corporation 4205 S. Miami Blvd. Research Triangle Park, NC 27709 Phone: +1-919-254-4115 Fax: +1-919-254-6243 E-mail: ellesson@raleigh.ibm.com Policy Framework WG Expires May 1999 [Page 28] Internet Draft Core Policy Schema November 1998 12.0 Full Copyright Statement Copyright (C) The Internet Society (1997). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Policy Framework WG Expires May 1999 [Page 29]