draft-ietf-forces-model-04.txt   draft-ietf-forces-model-05.txt 
Internet Draft L. Yang Internet Draft L. Yang
Expiration: August 2005 Intel Corp. Expiration: August 2005 Intel Corp.
File: draft-ietf-forces-model-04.txt J. Halpern File: draft-ietf-forces-model-05.txt J. Halpern
Working Group: ForCES Megisto Systems Working Group: ForCES Megisto Systems
R. Gopal R. Gopal
Nokia Nokia
A. DeKok A. DeKok
Infoblox, Inc. Infoblox, Inc.
Z. Haraszti Z. Haraszti
Clovis Solutions Clovis Solutions
S. Blake S. Blake
Modular Networks Modular Networks
E. Deleganes E. Deleganes
Intel Corp. Intel Corp.
August 2005 August 2005
ForCES Forwarding Element Model ForCES Forwarding Element Model
draft-ietf-forces-model-04.txt draft-ietf-forces-model-05.txt
"By submitting this Internet-Draft, I certify that any applicable By submitting this Internet-Draft, each author represents that any
patent or other IPR claims of which I am aware have been disclosed, applicable patent or other IPR claims of which he or she is aware
or will be disclosed, and any of which I become aware will be have been or will be disclosed, and any of which he or
disclosed, in accordance with RFC 3668." she becomes aware will be disclosed, in accordance with Section 6
of BCP 79.
Status of this Memo Status of this Memo
This document is an Internet-Draft and is in full conformance with This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026. Internet-Drafts are all provisions of Section 10 of RFC2026. Internet-Drafts are
working documents of the Internet Engineering Task Force (IETF), its working documents of the Internet Engineering Task Force (IETF),
areas, and its working groups. Note that other groups may also its areas, and its working groups. Note that other groups may
distribute working documents as Internet-Drafts. also distribute working documents as Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six Internet-Drafts are draft documents valid for a maximum of six
months and may be updated, replaced, or obsoleted by other documents months and may be updated, replaced, or obsoleted by other
at any time. It is inappropriate to use Internet-Drafts as documents at any time. It is inappropriate to use Internet-Drafts
reference material or to cite them other than as ``work in as reference material or to cite them other than as ``work in
progress.'' progress.''
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt. http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html. http://www.ietf.org/shadow.html.
Abstract Abstract
This document defines the forwarding element (FE) model used in the This document defines the forwarding element (FE) model used in
Forwarding and Control Element Separation (ForCES) protocol. The the Forwarding and Control Element Separation (ForCES) protocol.
model represents the capabilities, state and configuration of The model represents the capabilities, state and configuration of
forwarding elements within the context of the ForCES protocol, so forwarding elements within the context of the ForCES protocol, so
that control elements (CEs) can control the FEs accordingly. More that control elements (CEs) can control the FEs accordingly. More
specifically, the model describes the logical functions that are specifically, the model describes the logical functions that are
present in an FE, what capabilities these functions support, and how present in an FE, what capabilities these functions support, and
these functions are or can be interconnected. This FE model is how these functions are or can be interconnected. This FE model
intended to satisfy the model requirements specified in the ForCES is intended to satisfy the model requirements specified in the
requirements draft, RFC 3564 [1]. A list of the basic logical ForCES requirements draft, RFC 3564 [1]. A list of the basic
functional blocks (LFBs) is also defined in the LFB class library to logical functional blocks (LFBs) is also defined in the LFB class
aid the effort in defining individual LFBs. library to aid the effort in defining individual LFBs.
Table of Contents Table of Contents
Abstract...........................................................2 Abstract...........................................................2
1. Definitions.....................................................4 1. Definitions.....................................................4
2. Introduction....................................................5 2. Introduction....................................................6
2.1. Requirements on the FE model...............................6 2.1. Requirements on the FE model...............................6
2.2. The FE Model in Relation to FE Implementations.............6 2.2. The FE Model in Relation to FE Implementations.............7
2.3. The FE Model in Relation to the ForCES Protocol............7 2.3. The FE Model in Relation to the ForCES Protocol............7
2.4. Modeling Language for the FE Model.........................7 2.4. Modeling Language for the FE Model.........................8
2.5. Document Structure.........................................8 2.5. Document Structure.........................................8
3. FE Model Concepts...............................................8 3. FE Model Concepts...............................................8
3.1. FE Capability Model and State Model........................9 3.1. FE Capability Model and State Model........................9
3.2. LFB (Logical Functional Block) Modeling...................11 3.2. LFB (Logical Functional Block) Modeling...................11
3.2.1. LFB Outputs..........................................13 3.2.1. LFB Outputs..........................................14
3.2.2. LFB Inputs...........................................16 3.2.2. LFB Inputs...........................................17
3.2.3. Packet Type..........................................19 3.2.3. Packet Type..........................................20
3.2.4. Metadata.............................................19 3.2.4. Metadata.............................................21
3.2.5. LFB Versioning.......................................26 3.2.5. LFB Events...........................................28
3.2.6. LFB Inheritance......................................27 3.2.6. LFB Element Properties...............................28
3.3. FE Datapath Modeling......................................28 3.2.7. LFB Versioning.......................................28
3.3.1. Alternative Approaches for Modeling FE Datapaths.....28 3.2.8. LFB Inheritance......................................29
3.3.2. Configuring the LFB Topology.........................32 3.3. FE Datapath Modeling......................................30
4. Model and Schema for LFB Classes...............................36 3.3.1. Alternative Approaches for Modeling FE Datapaths.....30
4.1. Namespace.................................................36 3.3.2. Configuring the LFB Topology.........................35
4.2. <LFBLibrary> Element......................................36 4. Model and Schema for LFB Classes...............................39
4.3. <load> Element............................................38 4.1. Namespace.................................................39
4.4. <frameDefs> Element for Frame Type Declarations...........38 4.2. <LFBLibrary> Element......................................39
4.5. <dataTypeDefs> Element for Data Type Definitions..........39 4.3. <load> Element............................................41
4.5.1. <typeRef> Element for Aliasing Existing Data Types...41 4.4. <frameDefs> Element for Frame Type Declarations...........41
4.5.2. <atomic> Element for Deriving New Atomic Types.......42 4.5. <dataTypeDefs> Element for Data Type Definitions..........42
4.5.3. <array> Element to Define Arrays.....................42 4.5.1. <typeRef> Element for Aliasing Existing Data Types...44
4.5.4. <struct> Element to Define Structures................46 4.5.2. <atomic> Element for Deriving New Atomic Types.......45
4.5.5. <union> Element to Define Union Types................47 4.5.3. <array> Element to Define Arrays.....................45
4.5.6. Augmentations........................................49 4.5.4. <struct> Element to Define Structures................49
4.6. <metadataDefs> Element for Metadata Definitions...........50 4.5.5. <union> Element to Define Union Types................50
4.7. <LFBClassDefs> Element for LFB Class Definitions..........51 4.5.6. Augmentations........................................51
4.7.1. <derivedFrom> Element to Express LFB Inheritance.....52 4.6. <metadataDefs> Element for Metadata Definitions...........52
4.7.2. <inputPorts> Element to Define LFB Inputs............53 4.7. <LFBClassDefs> Element for LFB Class Definitions..........53
4.7.3. <outputPorts> Element to Define LFB Outputs..........55 4.7.1. <derivedFrom> Element to Express LFB Inheritance.....54
4.7.2. <inputPorts> Element to Define LFB Inputs............55
4.7.3. <outputPorts> Element to Define LFB Outputs..........57
4.7.4. <attributes> Element to Define LFB Operational 4.7.4. <attributes> Element to Define LFB Operational
Attributes..................................................57 Attributes..................................................59
4.7.5. <capabilities> Element to Define LFB Capability 4.7.5. <capabilities> Element to Define LFB Capability
Attributes..................................................60 Attributes..................................................62
4.7.6. <description> Element for LFB Operational Specification 4.7.6. <events> Element for LFB Notification Generation.....63
............................................................61 4.7.7. <description> Element for LFB Operational
4.8. XML Schema for LFB Class Library Documents................61 Specification...............................................67
5. FE Attributes and Capabilities.................................71 4.8. Properties................................................67
5.1. XML for FEObject Class definition.........................72 4.9. XML Schema for LFB Class Library Documents................70
5.2. FE Capabilities...........................................80 5. FE Attributes and Capabilities.................................81
5.2.1. ModifiableLFBTopology................................80 5.1. XML for FEObject Class definition.........................82
5.2.2. SupportedLFBs and SupportedLFBType...................80 5.2. FE Capabilities...........................................88
5.2.3. SupportedAttributeType...............................82 5.2.1. ModifiableLFBTopology................................89
5.3. FEAttributes..............................................83 5.2.2. SupportedLFBs and SupportedLFBType...................89
5.3.1. FEStatus.............................................83 5.3. FEAttributes..............................................91
5.3.2. LFBSelectors and LFBSelectorType.....................83 5.3.1. FEStatus.............................................91
5.3.3. LFBTopology and LFBLinkType..........................83 5.3.2. LFBSelectors and LFBSelectorType.....................91
5.3.4. FENeighbors an FEConfiguredNeighborType..............84 5.3.3. LFBTopology and LFBLinkType..........................92
6. Satisfying the Requirements on FE Model........................85 5.3.4. FENeighbors an FEConfiguredNeighborType..............92
6.1. Port Functions............................................86 6. Satisfying the Requirements on FE Model........................93
6.2. Forwarding Functions......................................86 6.1. Port Functions............................................94
6.3. QoS Functions.............................................86 6.2. Forwarding Functions......................................94
6.4. Generic Filtering Functions...............................86 6.3. QoS Functions.............................................95
6.5. Vendor Specific Functions.................................86 6.4. Generic Filtering Functions...............................95
6.6. High-Touch Functions......................................87 6.5. Vendor Specific Functions.................................95
6.7. Security Functions........................................87 6.6. High-Touch Functions......................................95
6.8. Off-loaded Functions......................................87 6.7. Security Functions........................................95
6.9. IPFLOW/PSAMP Functions....................................87 6.8. Off-loaded Functions......................................96
7. Using the FE model in the ForCES Protocol......................88 6.9. IPFLOW/PSAMP Functions....................................96
7.1. FE Topology Query.........................................90 7. Using the FE model in the ForCES Protocol......................96
7.2. FE Capability Declarations................................91 7.1. FE Topology Query.........................................98
7.3. LFB Topology and Topology Configurability Query...........91 7.2. FE Capability Declarations...............................100
7.4. LFB Capability Declarations...............................91 7.3. LFB Topology and Topology Configurability Query..........100
7.5. State Query of LFB Attributes.............................92 7.4. LFB Capability Declarations..............................100
7.6. LFB Attribute Manipulation................................93 7.5. State Query of LFB Attributes............................101
7.7. LFB Topology Re-configuration.............................93 7.6. LFB Attribute Manipulation...............................102
8. Acknowledgments................................................93 7.7. LFB Topology Re-configuration............................102
9. Security Considerations........................................94 8. Example.......................................................103
10. Normative References..........................................94 8.1. Data Handling............................................110
11. Informative References........................................94 8.1.1. Setting up a DLCI...................................110
12. Authors' Addresses............................................95 8.1.2. Error Handling......................................111
13. Intellectual Property Right...................................96 8.2. LFB Attributes...........................................112
14. IANA consideration............................................96 8.3. Capabilities.............................................112
15. Copyright Statement...........................................96 8.4. Events...................................................113
9. Acknowledgments...............................................114
10. Security Considerations......................................114
11. Normative References.........................................114
12. Informative References.......................................114
13. Authors' Addresses...........................................115
14. Intellectual Property Right..................................116
15. IANA consideration...........................................116
16. Copyright Statement..........................................116
Conventions used in this document Conventions used in this document
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this NOT",
document are to be interpreted as described in [RFC-2119]. "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in
this document are to be interpreted as described in [RFC-2119].
1. 1.
Definitions Definitions
Terminology associated with the ForCES requirements is defined in Terminology associated with the ForCES requirements is defined in
RFC 3564 [1] and is not copied here. The following list of RFC 3564 [1] and is not copied here. The following list of
terminology relevant to the FE model is defined in this section. terminology relevant to the FE model is defined in this section.
FE Model -- The FE model is designed to model the logical processing FE Model -- The FE model is designed to model the logical
functions of an FE. The FE model proposed in this document includes processing functions of an FE. The FE model proposed in this
three components: the modeling of individual logical functional document includes three components: the modeling of individual
blocks (LFB model), the logical interconnection between LFBs (LFB logical functional blocks (LFB model), the logical interconnection
topology) and the FE level attributes, including FE capabilities. between LFBs (LFB topology) and the FE level attributes, including
The FE model provides the basis to define the information elements FE capabilities. The FE model provides the basis to define the
exchanged between the CE and the FE in the ForCES protocol. information elements exchanged between the CE and the FE in the
ForCES protocol.
Datapath -- A conceptual path taken by packets within the forwarding Datapath -- A conceptual path taken by packets within the
plane inside an FE. Note that more than one datapath can exist forwarding plane inside an FE. Note that more than one datapath
within an FE. can exist within an FE.
LFB (Logical Functional Block) Class (or type) -- A template LFB (Logical Functional Block) Class (or type) -- A template
representing a fine-grained, logically separable and well-defined representing a fine-grained, logically separable and well-defined
packet processing operation in the datapath. LFB classes are the packet processing operation in the datapath. LFB classes are the
basic building blocks of the FE model. basic building blocks of the FE model.
LFB Instance -- As a packet flows through an FE along a datapath, it LFB Instance -- As a packet flows through an FE along a datapath,
flows through one or multiple LFB instances, where each LFB is an it flows through one or multiple LFB instances, where each LFB is
instance of a specific LFB class. Multiple instances of the same an instance of a specific LFB class. Multiple instances of the
LFB class can be present in an FE's datapath. Note that we often same LFB class can be present in an FE's datapath. Note that we
refer to LFBs without distinguishing between an LFB class and LFB often refer to LFBs without distinguishing between an LFB class
instance when we believe the implied reference is obvious for the and LFB instance when we believe the implied reference is obvious
given context. for the given context.
LFB Model -- The LFB model describes the content and structures in LFB Model -- The LFB model describes the content and structures in
an LFB, plus the associated data definition. Four types of an LFB, plus the associated data definition. Four types of
information are defined in the LFB model. The core part of the LFB information are defined in the LFB model. The core part of the
model is the LFB class definitions; the other three types define the LFB model is the LFB class definitions; the other three types
associated data including common data types, supported frame formats define the associated data including common data types, supported
and metadata. frame formats and metadata.
LFB Metadata -- Metadata is used to communicate per-packet state LFB Metadata -- Metadata is used to communicate per-packet state
from one LFB to another, but is not sent across the network. The FE from one LFB to another, but is not sent across the network. The
model defines how such metadata is identified, produced and consumed FE model defines how such metadata is identified, produced and
by the LFBs, but not how the per-packet state is implemented within consumed by the LFBs, but not how the per-packet state is
actual hardware. implemented within actual hardware.
LFB Attribute -- Operational parameters of the LFBs that must be LFB Attribute -- Operational parameters of the LFBs that must be
visible to the CEs are conceptualized in the FE model as the LFB visible to the CEs are conceptualized in the FE model as the LFB
attributes. The LFB attributes include: flags, single parameter attributes. The LFB attributes include: flags, single parameter
arguments, complex arguments, and tables that the CE can read or/and arguments, complex arguments, and tables that the CE can read
write via the ForCES protocol. or/and write via the ForCES protocol.
LFB Topology -- A representation of the logical interconnection and LFB Topology -- A representation of the logical interconnection
the placement of LFB instances along the datapath within one FE. and the placement of LFB instances along the datapath within one
Sometimes this representation is called intra-FE topology, to be FE. Sometimes this representation is called intra-FE topology, to
distinguished from inter-FE topology. LFB topology is outside of be distinguished from inter-FE topology. LFB topology is outside
the LFB model, but is part of the FE model. of the LFB model, but is part of the FE model.
FE Topology -- A representation of how multiple FEs within a single FE Topology -- A representation of how multiple FEs within a
NE are interconnected. Sometimes this is called inter-FE topology, single NE are interconnected. Sometimes this is called inter-FE
to be distinguished from intra-FE topology (i.e., LFB topology). An topology, to be distinguished from intra-FE topology (i.e., LFB
individual FE might not have the global knowledge of the full FE topology). An individual FE might not have the global knowledge
topology, but the local view of its connectivity with other FEs is of the full FE topology, but the local view of its connectivity
considered to be part of the FE model. The FE topology is with other FEs is considered to be part of the FE model. The FE
discovered by the ForCES base protocol or by some other means. topology is discovered by the ForCES base protocol or by some
other means.
Inter-FE Topology -- See FE Topology. Inter-FE Topology -- See FE Topology.
Intra-FE Topology -- See LFB Topology. Intra-FE Topology -- See LFB Topology.
LFB class library -- A set of LFB classes that has been identified LFB class library -- A set of LFB classes that has been identified
as the most common functions found in most FEs and hence should be as the most common functions found in most FEs and hence should be
defined first by the ForCES Working Group. defined first by the ForCES Working Group.
2. 2.
Introduction Introduction
RFC 3746 [2] specifies a framework by which control elements (CEs) RFC 3746 [2] specifies a framework by which control elements (CEs)
can configure and manage one or more separate forwarding elements can configure and manage one or more separate forwarding elements
(FEs) within a networking element (NE) using the ForCES protocol. (FEs) within a networking element (NE) using the ForCES protocol.
The ForCES architecture allows Forwarding Elements of varying The ForCES architecture allows Forwarding Elements of varying
functionality to participate in a ForCES network element. The functionality to participate in a ForCES network element. The
implication of this varying functionality is that CEs can make only implication of this varying functionality is that CEs can make
minimal assumptions about the functionality provided by FEs in an only minimal assumptions about the functionality provided by FEs
NE. Before CEs can configure and control the forwarding behavior of in an NE. Before CEs can configure and control the forwarding
FEs, CEs need to query and discover the capabilities and states of behavior of FEs, CEs need to query and discover the capabilities
their FEs. RFC 3654 [1] mandates that the capabilities, states and and states of their FEs. RFC 3654 [1] mandates that the
configuration information be expressed in the form of an FE model. capabilities, states and configuration information be expressed in
the form of an FE model.
RFC 3444 [11] observed that information models (IMs) and data models RFC 3444 [11] observed that information models (IMs) and data
(DMs) are different because they serve different purposes. "The models (DMs) are different because they serve different purposes.
main purpose of an IM is to model managed objects at a conceptual "The main purpose of an IM is to model managed objects at a
level, independent of any specific implementations or protocols conceptual level, independent of any specific implementations or
used". "DMs, conversely, are defined at a lower level of protocols used". "DMs, conversely, are defined at a lower level
abstraction and include many details. They are intended for of abstraction and include many details. They are intended for
implementors and include protocol-specific constructs." Sometimes implementors and include protocol-specific constructs." Sometimes
it is difficult to draw a clear line between the two. The FE model it is difficult to draw a clear line between the two. The FE
described in this document is primarily an information model, but model described in this document is primarily an information
also includes some aspects of a data model, such as explicit model, but also includes some aspects of a data model, such as
definitions of the LFB class schema and FE schema. It is expected explicit definitions of the LFB class schema and FE schema. It is
that this FE model will be used as the basis to define the payload expected that this FE model will be used as the basis to define
for information exchange between the CE and FE in the ForCES the payload for information exchange between the CE and FE in the
protocol. ForCES protocol.
2.1. Requirements on the FE model 2.1. Requirements on the FE model
RFC 3654 [1] defines requirements that must be satisfied by a ForCES RFC 3654 [1] defines requirements that must be satisfied by a
FE model. To summarize, an FE model must define: ForCES FE model. To summarize, an FE model must define:
. Logically separable and distinct packet forwarding operations . Logically separable and distinct packet forwarding operations
in an FE datapath (logical functional blocks or LFBs); in an FE datapath (logical functional blocks or LFBs);
. The possible topological relationships (and hence the sequence . The possible topological relationships (and hence the
of packet forwarding operations) between the various LFBs; sequence of packet forwarding operations) between the various
LFBs;
. The possible operational capabilities (e.g., capacity limits, . The possible operational capabilities (e.g., capacity limits,
constraints, optional features, granularity of configuration) constraints, optional features, granularity of configuration)
of each type of LFB; of each type of LFB;
. The possible configurable parameters (i.e., attributes) of each . The possible configurable parameters (i.e., attributes) of
type of LFB; each type of LFB;
. Metadata that may be exchanged between LFBs. . Metadata that may be exchanged between LFBs.
2.2. The FE Model in Relation to FE Implementations 2.2. The FE Model in Relation to FE Implementations
The FE model proposed here is based on an abstraction of distinct The FE model proposed here is based on an abstraction of distinct
logical functional blocks (LFBs), which are interconnected in a logical functional blocks (LFBs), which are interconnected in a
directed graph, and receive, process, modify, and transmit packets directed graph, and receive, process, modify, and transmit packets
along with metadata. The FE model should be designed such that along with metadata. The FE model should be designed such that
different implementations of the forwarding datapath can be different implementations of the forwarding datapath can be
logically mapped onto the model with the functionality and sequence logically mapped onto the model with the functionality and
of operations correctly captured. However, the model is not sequence of operations correctly captured. However, the model is
intended to directly address how a particular implementation maps to not intended to directly address how a particular implementation
an LFB topology. It is left to the forwarding plane vendors to maps to an LFB topology. It is left to the forwarding plane
define how the FE functionality is represented using the FE model. vendors to define how the FE functionality is represented using
the FE model. Our goal is to design the FE model such that it is
Our goal is to design the FE model such that it is flexible enough flexible enough to accommodate most common implementations.
to accommodate most common implementations.
The LFB topology model for a particular datapath implementation MUST The LFB topology model for a particular datapath implementation
correctly capture the sequence of operations on the packet. MUST correctly capture the sequence of operations on the packet.
Metadata generation by certain LFBs must always precede any use of Metadata generation by certain LFBs must always precede any use of
that metadata by subsequent LFBs in the topology graph; this is that metadata by subsequent LFBs in the topology graph; this is
required for logically consistent operation. Further, modification required for logically consistent operation. Further,
of packet fields that are subsequently used as inputs for further modification of packet fields that are subsequently used as inputs
processing must occur in the order specified in the model for that for further processing must occur in the order specified in the
particular implementation to ensure correctness. model for that particular implementation to ensure correctness.
2.3. The FE Model in Relation to the ForCES Protocol 2.3. The FE Model in Relation to the ForCES Protocol
The ForCES base protocol is used by the CEs and FEs to maintain the The ForCES base protocol is used by the CEs and FEs to maintain
communication channel between the CEs and FEs. The ForCES protocol the communication channel between the CEs and FEs. The ForCES
may be used to query and discover the inter-FE topology. The protocol may be used to query and discover the inter-FE topology.
details of a particular datapath implementation inside an FE, The details of a particular datapath implementation inside an FE,
including the LFB topology, along with the operational capabilities including the LFB topology, along with the operational
and attributes of each individual LFB, are conveyed to the CE within capabilities and attributes of each individual LFB, are conveyed
information elements in the ForCES protocol. The model of an LFB to the CE within information elements in the ForCES protocol. The
class should define all of the information that needs to be model of an LFB class should define all of the information that
exchanged between an FE and a CE for the proper configuration and needs to be exchanged between an FE and a CE for the proper
management of that LFB. configuration and management of that LFB.
Specifying the various payloads of the ForCES messages in a Specifying the various payloads of the ForCES messages in a
systematic fashion is difficult without a formal definition of the systematic fashion is difficult without a formal definition of the
objects being configured and managed (the FE and the LFBs within). objects being configured and managed (the FE and the LFBs within).
The FE Model document defines a set of classes and attributes for The FE Model document defines a set of classes and attributes for
describing and manipulating the state of the LFBs within an FE. describing and manipulating the state of the LFBs within an FE.
These class definitions themselves will generally not appear in the These class definitions themselves will generally not appear in
ForCES protocol. Rather, ForCES protocol operations will reference the ForCES protocol. Rather, ForCES protocol operations will
classes defined in this model, including relevant attributes and the reference classes defined in this model, including relevant
defined operations. attributes and the defined operations.
Section 7 provides more detailed discussion on how the FE model Section 7 provides more detailed discussion on how the FE model
should be used by the ForCES protocol. should be used by the ForCES protocol.
2.4. Modeling Language for the FE Model 2.4. Modeling Language for the FE Model
Even though not absolutely required, it is beneficial to use a Even though not absolutely required, it is beneficial to use a
formal data modeling language to represent the conceptual FE model formal data modeling language to represent the conceptual FE model
described in this document. Use of a formal language can help to described in this document. Use of a formal language can help to
enforce consistency and logical compatibility among LFBs. A full enforce consistency and logical compatibility among LFBs. A full
specification will be written using such a data modeling language. specification will be written using such a data modeling language.
The formal definition of the LFB classes may facilitate the eventual The formal definition of the LFB classes may facilitate the
automation of some of the code generation process and the functional eventual automation of some of the code generation process and the
validation of arbitrary LFB topologies. functional validation of arbitrary LFB topologies.
Human readability was the most important factor considered when Human readability was the most important factor considered when
selecting the specification language, whereas encoding, decoding and selecting the specification language, whereas encoding, decoding
transmission performance was not a selection factor. The encoding and transmission performance was not a selection factor. The
method for over the wire transport is not dependent on the encoding method for over the wire transport is not dependent on
specification language chosen and is outside the scope of this the specification language chosen and is outside the scope of this
document and up to the ForCES protocol to define. document and up to the ForCES protocol to define.
XML was chosen as the specification language in this document, XML was chosen as the specification language in this document,
because XML has the advantage of being both human and machine because XML has the advantage of being both human and machine
readable with widely available tools support. readable with widely available tools support.
2.5. Document Structure 2.5. Document Structure
Section 3 provides a conceptual overview of the FE model, laying the Section 3 provides a conceptual overview of the FE model, laying
foundation for the more detailed discussion and specifications in the foundation for the more detailed discussion and specifications
the sections that follow. Section 4 and 5 constitute the core of in the sections that follow. Section 4 and 5 constitute the core
the FE model, detailing the two major components in the FE model: of the FE model, detailing the two major components in the FE
LFB model and FE level attributes including capability and LFB model: LFB model and FE level attributes including capability and
topology. Section 6 directly addresses the model requirements LFB topology. Section 6 directly addresses the model requirements
imposed by the ForCES requirement draft [1] while Section 7 explains imposed by the ForCES requirement draft [1] while Section 7
how the FE model should be used in the ForCES protocol. explains how the FE model should be used in the ForCES protocol.
3. 3.
FE Model Concepts FE Model Concepts
Some of the important concepts used throughout this document are Some of the important concepts used throughout this document are
introduced in this section. Section 3.1 explains the difference introduced in this section. Section 3.1 explains the difference
between a state model and a capability model, and describes how the between a state model and a capability model, and describes how
two can be combined in the FE model. Section 3.2 introduces the the two can be combined in the FE model. Section 3.2 introduces
concept of LFBs (Logical Functional Blocks) as the basic functional the concept of LFBs (Logical Functional Blocks) as the basic
building blocks in the FE model. Section 3.3 discusses the logical functional building blocks in the FE model. Section 3.3 discusses
inter-connection and ordering between LFB instances within an FE, the logical inter-connection and ordering between LFB instances
that is, the LFB topology. within an FE, that is, the LFB topology.
The FE model proposed in this document is comprised of two major The FE model proposed in this document is comprised of two major
components: the LFB model and FE level attributes, including FE components: the LFB model and FE level attributes, including FE
capabilities and LFB topology. The LFB model provides the content capabilities and LFB topology. The LFB model provides the content
and data structures to define each individual LFB class. FE and data structures to define each individual LFB class. FE
attributes provide information at the FE level, particularly the attributes provide information at the FE level, particularly the
capabilities of the FE at a coarse level. Part of the FE level capabilities of the FE at a coarse level. Part of the FE level
information is the LFB topology, which expresses the logical inter- information is the LFB topology, which expresses the logical
connection between the LFB instances along the datapath(s) within inter-connection between the LFB instances along the datapath(s)
the FE. Details of these components are described in Section 4 and within the FE. Details of these components are described in
5. The intent of this section is to discuss these concepts at the Section 4 and 5. The intent of this section is to discuss these
high level and lay the foundation for the detailed description in concepts at the high level and lay the foundation for the detailed
the following sections. description in the following sections.
3.1. FE Capability Model and State Model 3.1. FE Capability Model and State Model
The ForCES FE model must describe both a capability and a state The ForCES FE model must describe both a capability and a state
model. The FE capability model describes the capabilities and model. The FE capability model describes the capabilities and
capacities of an FE by specifying the variation in functions capacities of an FE by specifying the variation in functions
supported and any limitations. The FE state model describes the supported and any limitations. The FE state model describes the
current state of the FE, that is, the instantaneous values or current state of the FE, that is, the instantaneous values or
operational behavior of the FE. operational behavior of the FE.
Conceptually, the FE capability model tells the CE which states are Conceptually, the FE capability model tells the CE which states
allowed on an FE, with capacity information indicating certain are allowed on an FE, with capacity information indicating certain
quantitative limits or constraints. Thus, the CE has general quantitative limits or constraints. Thus, the CE has general
knowledge about configurations that are applicable to a particular knowledge about configurations that are applicable to a particular
FE. For example, an FE capability model may describe the FE at a FE. For example, an FE capability model may describe the FE at a
coarse level such as: coarse level such as:
. this FE can handle IPv4 and IPv6 forwarding; . this FE can handle IPv4 and IPv6 forwarding;
. this FE can perform classification on the following fields: . this FE can perform classification on the following fields:
source IP address, destination IP address, source port number, source IP address, destination IP address, source port
destination port number, etc; number, destination port number, etc;
. this FE can perform metering; . this FE can perform metering;
. this FE can handle up to N queues (capacity); . this FE can handle up to N queues (capacity);
. this FE can add and remove encapsulating headers of types . this FE can add and remove encapsulating headers of types
including IPSec, GRE, L2TP. including IPSec, GRE, L2TP.
While one could try and build an object model to fully represent the While one could try and build an object model to fully represent
FE capabilities, other efforts found this to be a significant the FE capabilities, other efforts found this to be a significant
undertaking. The main difficulty arises in describing detailed undertaking. The main difficulty arises in describing detailed
limits, such as the maximum number of classifiers, queues, buffer limits, such as the maximum number of classifiers, queues, buffer
pools, and meters the FE can provide. We believe that a good pools, and meters the FE can provide. We believe that a good
balance between simplicity and flexibility can be achieved for the balance between simplicity and flexibility can be achieved for the
FE model by combining coarse level capability reporting with an FE model by combining coarse level capability reporting with an
error reporting mechanism. That is, if the CE attempts to instruct error reporting mechanism. That is, if the CE attempts to
the FE to set up some specific behavior it cannot support, the FE instruct the FE to set up some specific behavior it cannot
will return an error indicating the problem. Examples of similar support, the FE will return an error indicating the problem.
approaches include DiffServ PIB [4] and Framework PIB [5]. Examples of similar approaches include DiffServ PIB [4] and
Framework PIB [5].
One common and shared aspect of capability will be handled in a
separate fashion. For all elements of information, certain
property information is needed. All elements need information as
to whether they are supported and if so whether the element is
readable or writeable. Based on their type, many elements have
additional common properties (for example, arrays have their
current size.) There is a specific model and protocol mechanism
for referencing this form of property information about elements
of the model.
The FE state model presents the snapshot view of the FE to the CE. The FE state model presents the snapshot view of the FE to the CE.
For example, using an FE state model, an FE may be described to its For example, using an FE state model, an FE may be described to
corresponding CE as the following: its corresponding CE as the following:
. on a given port, the packets are classified using a given . on a given port, the packets are classified using a given
classification filter; classification filter;
. the given classifier results in packets being metered in a . the given classifier results in packets being metered in a
certain way, and then marked in a certain way; certain way, and then marked in a certain way;
. the packets coming from specific markers are delivered into a . the packets coming from specific markers are delivered into a
shared queue for handling, while other packets are delivered to shared queue for handling, while other packets are delivered
a different queue; to a different queue;
. a specific scheduler with specific behavior and parameters will . a specific scheduler with specific behavior and parameters
service these collected queues. will service these collected queues.
Figure 1 shows the concepts of FE state, capabilities and Figure 1 shows the concepts of FE state, capabilities and
configuration in the context of CE-FE communication via the ForCES configuration in the context of CE-FE communication via the ForCES
protocol. protocol.
+-------+ +-------+ +-------+ +-------+
| | FE capabilities: what it can/cannot do. | | | | FE capabilities: what it can/cannot do. | |
| |<-----------------------------------------| | | |<-----------------------------------------| |
| | | | | | | |
| CE | FE state: what it is now. | FE | | CE | FE state: what it is now. | FE |
skipping to change at page 10, line 34 skipping to change at page 11, line 25
Figure 1. Illustration of FE state, capabilities and configuration Figure 1. Illustration of FE state, capabilities and configuration
exchange in the context of CE-FE communication via ForCES. exchange in the context of CE-FE communication via ForCES.
The concepts relating to LFBs, particularly capability at the LFB The concepts relating to LFBs, particularly capability at the LFB
level and LFB topology will be discussed in the rest of this level and LFB topology will be discussed in the rest of this
section. section.
Capability information at the LFB level is an integral part of the Capability information at the LFB level is an integral part of the
LFB model, and is modeled the same way as the other operational LFB model, and is modeled the same way as the other operational
parameters inside an LFB. For example, when certain features of an parameters inside an LFB. For example, when certain features of
LFB class are optional, it must be possible for the CE to determine an LFB class are optional, it must be possible for the CE to
whether those optional features are supported by a given LFB determine whether those optional features are supported by a given
instance. Such capability information can be modeled as a read-only LFB instance. Such capability information can be modeled as a
attribute in the LFB instance, see Section 4.7.5 for details. read-only attribute in the LFB instance, see Section 4.7.5 for
details.
Capability information at the FE level may describe the LFB classes Capability information at the FE level may describe the LFB
that the FE can instantiate; the number of instances of each that classes that the FE can instantiate; the number of instances of
can be created; the topological (linkage) limitations between these each that can be created; the topological (linkage) limitations
LFB instances, etc. Section 5 defines the FE level attributes between these LFB instances, etc. Section 5 defines the FE level
including capability information. attributes including capability information.
Once the FE capability is described to the CE, the FE state Once the FE capability is described to the CE, the FE state
information can be represented by two levels. The first level is information can be represented by two levels. The first level is
the logically separable and distinct packet processing functions, the logically separable and distinct packet processing functions,
called Logical Functional Blocks (LFBs). The second level of called Logical Functional Blocks (LFBs). The second level of
information describes how these individual LFBs are ordered and information describes how these individual LFBs are ordered and
placed along the datapath to deliver a complete forwarding plane placed along the datapath to deliver a complete forwarding plane
service. The interconnection and ordering of the LFBs is called LFB service. The interconnection and ordering of the LFBs is called
Topology. Section 3.2 discusses high level concepts around LFBs, LFB Topology. Section 3.2 discusses high level concepts around
whereas Section 3.3 discusses LFB topology issues. LFBs, whereas Section 3.3 discusses LFB topology issues.
3.2. LFB (Logical Functional Block) Modeling 3.2. LFB (Logical Functional Block) Modeling
Each LFB performs a well-defined action or computation on the Each LFB performs a well-defined action or computation on the
packets passing through it. Upon completion of its prescribed packets passing through it. Upon completion of its prescribed
function, either the packets are modified in certain ways (e.g., function, either the packets are modified in certain ways (e.g.,
decapsulator, marker), or some results are generated and stored, decapsulator, marker), or some results are generated and stored,
often in the form of metadata (e.g., classifier). Each LFB often in the form of metadata (e.g., classifier). Each LFB
typically performs a single action. Classifiers, shapers and meters typically performs a single action. Classifiers, shapers and
are all examples of such LFBs. Modeling LFBs at such a fine meters are all examples of such LFBs. Modeling LFBs at such a
granularity allows us to use a small number of LFBs to express the fine granularity allows us to use a small number of LFBs to
higher-order FE functions (such as an IPv4 forwarder) precisely, express the higher-order FE functions (such as an IPv4 forwarder)
which in turn can describe more complex networking functions and precisely, which in turn can describe more complex networking
vendor implementations of software and hardware. These LFBs will be functions and vendor implementations of software and hardware.
defined in detail in one or more documents. These LFBs will be defined in detail in one or more documents.
An LFB has one or more inputs, each of which takes a packet P, and An LFB has one or more inputs, each of which takes a packet P, and
optionally metadata M; and produces one or more outputs, each of optionally metadata M; and produces one or more outputs, each of
which carries a packet P', and optionally metadata M'. Metadata is which carries a packet P', and optionally metadata M'. Metadata
data associated with the packet in the network processing device is data associated with the packet in the network processing
(router, switch, etc.) and is passed from one LFB to the next, but device (router, switch, etc.) and is passed from one LFB to the
is not sent across the network. In general, multiple LFBs are next, but is not sent across the network. In general, multiple
contained in one FE, as shown in Figure 2, and all the LFBs share LFBs are contained in one FE, as shown in Figure 2, and all the
the same ForCES protocol termination point that implements the LFBs share the same ForCES protocol termination point that
ForCES protocol logic and maintains the communication channel to and implements the ForCES protocol logic and maintains the
from the CE. communication channel to and from the CE.
+-----------+ +-----------+
| CE | | CE |
+-----------+ +-----------+
^ ^
| Fp reference point | Fp reference point
| |
+--------------------------|-----------------------------------+ +--------------------------|-----------------------------------+
| FE | | | FE | |
| v | | v |
skipping to change at page 12, line 38 skipping to change at page 13, line 38
| | | |
+--------------------------------------------------------------+ +--------------------------------------------------------------+
Figure 2. Generic LFB Diagram Figure 2. Generic LFB Diagram
An LFB, as shown in Figure 2, has inputs, outputs and attributes An LFB, as shown in Figure 2, has inputs, outputs and attributes
that can be queried and manipulated by the CE indirectly via an Fp that can be queried and manipulated by the CE indirectly via an Fp
reference point (defined in RFC 3746 [2]) and the ForCES protocol reference point (defined in RFC 3746 [2]) and the ForCES protocol
termination point. The horizontal axis is in the forwarding plane termination point. The horizontal axis is in the forwarding plane
for connecting the inputs and outputs of LFBs within the same FE. for connecting the inputs and outputs of LFBs within the same FE.
The vertical axis between the CE and the FE denotes the Fp reference The vertical axis between the CE and the FE denotes the Fp
point where bidirectional communication between the CE and FE reference point where bidirectional communication between the CE
occurs: the CE to FE communication is for configuration, control and and FE occurs: the CE to FE communication is for configuration,
packet injection while FE to CE communication is used for packet re- control and packet injection while FE to CE communication is used
direction to the control plane, monitoring and accounting for packet re-direction to the control plane, monitoring and
information, errors, etc. Note that the interaction between the CE accounting information, errors, etc. Note that the interaction
and the LFB is only abstract and indirect. The result of such an between the CE and the LFB is only abstract and indirect. The
interaction is for the CE to indirectly manipulate the attributes of result of such an interaction is for the CE to indirectly
the LFB instances. manipulate the attributes of the LFB instances.
A namespace is used to associate a unique name or ID with each LFB A namespace is used to associate a unique name or ID with each LFB
class. The namespace must be extensible so that a new LFB class can class. The namespace must be extensible so that a new LFB class
be added later to accommodate future innovation in the forwarding can be added later to accommodate future innovation in the
plane. forwarding plane.
LFB operation must be specified in the model to allow the CE to LFB operation must be specified in the model to allow the CE to
understand the behavior of the forwarding datapath. For instance, understand the behavior of the forwarding datapath. For instance,
the CE must understand at what point in the datapath the IPv4 header the CE must understand at what point in the datapath the IPv4
TTL is decremented. That is, the CE needs to know if a control header TTL is decremented. That is, the CE needs to know if a
packet could be delivered to it either before or after this point in control packet could be delivered to it either before or after
the datapath. In addition, the CE must understand where and what this point in the datapath. In addition, the CE must understand
type of header modifications (e.g., tunnel header append or strip) where and what type of header modifications (e.g., tunnel header
are performed +by the FEs. Further, the CE must verify that the append or strip) are performed +by the FEs. Further, the CE must
various LFBs along a datapath within an FE are compatible to link verify that the various LFBs along a datapath within an FE are
together. compatible to link together.
There is value to vendors if the operation of LFB classes can be There is value to vendors if the operation of LFB classes can be
expressed in sufficient detail so that physical devices implementing expressed in sufficient detail so that physical devices
different LFB functions can be integrated easily into an FE design. implementing different LFB functions can be integrated easily into
Therefore, a semi-formal specification is needed; that is, a text an FE design. Therefore, a semi-formal specification is needed;
description of the LFB operation (human readable), but sufficiently that is, a text description of the LFB operation (human readable),
specific and unambiguous to allow conformance testing and efficient but sufficiently specific and unambiguous to allow conformance
design, so that interoperability between different CEs and FEs can testing and efficient design, so that interoperability between
be achieved. different CEs and FEs can be achieved.
The LFB class model specifies information such as: The LFB class model specifies information such as:
. number of inputs and outputs (and whether they are . number of inputs and outputs (and whether they are
configurable) configurable)
. metadata read/consumed from inputs; . metadata read/consumed from inputs;
. metadata produced at the outputs; . metadata produced at the outputs;
. packet type(s) accepted at the inputs and emitted at the . packet type(s) accepted at the inputs and emitted at the
outputs; outputs;
. packet content modifications (including encapsulation or . packet content modifications (including encapsulation or
decapsulation); decapsulation);
. packet routing criteria (when multiple outputs on an LFB are . packet routing criteria (when multiple outputs on an LFB are
present); present);
. packet timing modifications; . packet timing modifications;
. packet flow ordering modifications; . packet flow ordering modifications;
. LFB capability information; . LFB capability information;
. Events that can be detected by the LFB, with notification to
the CE;
. LFB operational attributes, etc. . LFB operational attributes, etc.
Section 4 of this document provides a detailed discussion of the LFB Section 4 of this document provides a detailed discussion of the
model with a formal specification of LFB class schema. The rest of LFB model with a formal specification of LFB class schema. The
Section 3.2 only intends to provide a conceptual overview of some rest of Section 3.2 only intends to provide a conceptual overview
important issues in LFB modeling, without covering all the specific of some important issues in LFB modeling, without covering all the
details. specific details.
3.2.1. LFB Outputs 3.2.1. LFB Outputs
An LFB output is a conceptual port on an LFB that can send An LFB output is a conceptual port on an LFB that can send
information to another LFB. The information is typically a packet information to another LFB. The information is typically a packet
and its associated metadata, although in some cases it might consist and its associated metadata, although in some cases it might
of only metadata, i.e., with no packet data. consist of only metadata, i.e., with no packet data.
A single LFB output can be connected to only one LFB input. This is A single LFB output can be connected to only one LFB input. This
required to make the packet flow through the LFB topology is required to make the packet flow through the LFB topology
unambiguously. unambiguously.
Some LFBs will have a single output, as depicted in Figure 3.a. Some LFBs will have a single output, as depicted in Figure 3.a.
+---------------+ +-----------------+ +---------------+ +-----------------+
| | | | | | | |
| | | OUT +--> | | | OUT +-->
... OUT +--> ... | ... OUT +--> ... |
| | | EXCEPTIONOUT +--> | | | EXCEPTIONOUT +-->
| | | | | | | |
skipping to change at page 14, line 36 skipping to change at page 15, line 38
... OUT:2 +--> ... OUT:1 +--> ... OUT:2 +--> ... OUT:1 +-->
| ... +... | OUT:2 +--> | ... +... | OUT:2 +-->
| OUT:n +--> | ... +... | OUT:n +--> | ... +...
+---------------+ | OUT:n +--> +---------------+ | OUT:n +-->
+-----------------+ +-----------------+
c. One output group d. One output and one output group c. One output group d. One output and one output group
Figure 3. Examples of LFBs with various output combinations. Figure 3. Examples of LFBs with various output combinations.
To accommodate a non-trivial LFB topology, multiple LFB outputs are To accommodate a non-trivial LFB topology, multiple LFB outputs
needed so that an LFB class can fork the datapath. Two mechanisms are needed so that an LFB class can fork the datapath. Two
are provided for forking: multiple singleton outputs and output mechanisms are provided for forking: multiple singleton outputs
groups, which can be combined in the same LFB class. and output groups, which can be combined in the same LFB class.
Multiple separate singleton outputs are defined in an LFB class to Multiple separate singleton outputs are defined in an LFB class to
model a pre-determined number of semantically different outputs. model a pre-determined number of semantically different outputs.
That is, the number of outputs must be known when the LFB class is That is, the number of outputs must be known when the LFB class is
defined. Additional singleton outputs cannot be created at LFB defined. Additional singleton outputs cannot be created at LFB
instantiation time, nor can they be created on the fly after the LFB instantiation time, nor can they be created on the fly after the
is instantiated. LFB is instantiated.
For example, an IPv4 LPM (Longest-Prefix-Matching) LFB may have one For example, an IPv4 LPM (Longest-Prefix-Matching) LFB may have
output(OUT) to send those packets for which the LPM look-up was one output(OUT) to send those packets for which the LPM look-up
successful, passing a META_ROUTEID as metadata; and have another was successful, passing a META_ROUTEID as metadata; and have
output (EXCEPTIONOUT) for sending exception packets when the LPM another output (EXCEPTIONOUT) for sending exception packets when
look-up failed. This example is depicted in Figure 3.b. Packets the LPM look-up failed. This example is depicted in Figure 3.b.
emitted by these two outputs not only require different downstream Packets emitted by these two outputs not only require different
treatment, but they are a result of two different conditions in the downstream treatment, but they are a result of two different
LFB and each output carries different metadata. This concept conditions in the LFB and each output carries different metadata.
assumes the number of distinct outputs is known when the LFB class This concept assumes the number of distinct outputs is known when
is defined. For each singleton output, the LFB class definition the LFB class is defined. For each singleton output, the LFB class
defines the types of frames and metadata the output emits. definition defines the types of frames and metadata the output
emits.
An output group, on the other hand, is used to model the case where An output group, on the other hand, is used to model the case
a flow of similar packets with an identical set of metadata needs to where a flow of similar packets with an identical set of metadata
be split into multiple paths. In this case, the number of such paths needs to be split into multiple paths. In this case, the number of
is not known when the LFB class is defined because it is not an such paths is not known when the LFB class is defined because it
inherent property of the LFB class. An output group consists of a is not an inherent property of the LFB class. An output group
number of outputs, called the output instances of the group, where consists of a number of outputs, called the output instances of
all output instances share the same frame and metadata emission the group, where all output instances share the same frame and
definitions (see Figure 3.c). Each output instance can connect to a metadata emission definitions (see Figure 3.c). Each output
different downstream LFB, just as if they were separate singleton instance can connect to a different downstream LFB, just as if
outputs, but the number of output instances can differ between LFB they were separate singleton outputs, but the number of output
instances of the same LFB class. The class definition may include a instances can differ between LFB instances of the same LFB class.
lower and/or an upper limit on the number of outputs. In addition, The class definition may include a lower and/or an upper limit on
for configurable FEs, the FE capability information may define the number of outputs. In addition, for configurable FEs, the FE
further limits on the number of instances in specific output groups capability information may define further limits on the number of
for certain LFBs. The actual number of output instances in a group instances in specific output groups for certain LFBs. The actual
is an attribute of the LFB instance, which is read-only for static number of output instances in a group is an attribute of the LFB
topologies, and read-write for dynamic topologies. The output instance, which is read-only for static topologies, and read-write
instances in a group are numbered sequentially, from 0 to N-1, and for dynamic topologies. The output instances in a group are
are addressable from within the LFB. The LFB has a built-in numbered sequentially, from 0 to N-1, and are addressable from
mechanism to select one specific output instance for each packet. within the LFB. The LFB has a built-in mechanism to select one
This mechanism is described in the textual definition of the class specific output instance for each packet. This mechanism is
and is typically configurable via some attributes of the LFB. described in the textual definition of the class and is typically
configurable via some attributes of the LFB.
For example, consider a re-director LFB, whose sole purpose is to For example, consider a re-director LFB, whose sole purpose is to
direct packets to one of N downstream paths based on one of the direct packets to one of N downstream paths based on one of the
metadata associated with each arriving packet. Such an LFB is metadata associated with each arriving packet. Such an LFB is
fairly versatile and can be used in many different places in a fairly versatile and can be used in many different places in a
topology. For example, a redirector can be used to divide the data topology. For example, a redirector can be used to divide the
path into an IPv4 and an IPv6 path based on a FRAMETYPE metadata data path into an IPv4 and an IPv6 path based on a FRAMETYPE
(N=2), or to fork into color specific paths after metering using the metadata (N=2), or to fork into color specific paths after
COLOR metadata (red, yellow, green; N=3), etc. metering using the COLOR metadata (red, yellow, green; N=3), etc.
Using an output group in the above LFB class provides the desired Using an output group in the above LFB class provides the desired
flexibility to adapt each instance of this class to the required flexibility to adapt each instance of this class to the required
operation. The metadata to be used as a selector for the output operation. The metadata to be used as a selector for the output
instance is a property of the LFB. For each packet, the value of instance is a property of the LFB. For each packet, the value of
the specified metadata may be used as a direct index to the output the specified metadata may be used as a direct index to the output
instance. Alternatively, the LFB may have a configurable selector instance. Alternatively, the LFB may have a configurable selector
table that maps a metadata value to output instance. table that maps a metadata value to output instance.
Note that other LFBs may also use the output group concept to build Note that other LFBs may also use the output group concept to
in similar adaptive forking capability. For example, a classifier build in similar adaptive forking capability. For example, a
LFB with one input and N outputs can be defined easily by using the classifier LFB with one input and N outputs can be defined easily
output group concept. Alternatively, a classifier LFB with one by using the output group concept. Alternatively, a classifier
singleton output in combination with an explicit N-output re- LFB with one singleton output in combination with an explicit N-
director LFB models the same processing behavior. The decision of output re-director LFB models the same processing behavior. The
whether to use the output group model for a certain LFB class is decision of whether to use the output group model for a certain
left to the LFB class designers. LFB class is left to the LFB class designers.
The model allows the output group be combined with other singleton The model allows the output group be combined with other singleton
output(s) in the same class, as demonstrated in Figure 3.d. The LFB output(s) in the same class, as demonstrated in Figure 3.d. The
here has two types of outputs, OUT, for normal packet output, and LFB here has two types of outputs, OUT, for normal packet output,
EXCEPTIONOUT for packets that triggered some exception. The normal and EXCEPTIONOUT for packets that triggered some exception. The
OUT has multiple instances, thus, it is an output group. normal OUT has multiple instances, thus, it is an output group.
In summary, the LFB class may define one output, multiple singleton In summary, the LFB class may define one output, multiple
outputs, one or more output groups, or a combination thereof. singleton outputs, one or more output groups, or a combination
Multiple singleton outputs should be used when the LFB must provide thereof. Multiple singleton outputs should be used when the LFB
for forking the datapath, and at least one of the following must provide for forking the datapath, and at least one of the
conditions hold: following conditions hold:
. the number of downstream directions are inherent from the . the number of downstream directions are inherent from the
definition of the class and hence fixed; definition of the class and hence fixed;
. the frame type and set of metadata emitted on any of the . the frame type and set of metadata emitted on any of the
outputs are substantially different from what is emitted on outputs are substantially different from what is emitted on
the other outputs (i.e., they cannot share frame-type and the other outputs (i.e., they cannot share frame-type and
metadata definitions); metadata definitions);
An output group is appropriate when the LFB must provide for forking An output group is appropriate when the LFB must provide for
the datapath, and at least one of the following conditions hold: forking the datapath, and at least one of the following conditions
hold:
. the number of downstream directions is not known when the LFB . the number of downstream directions is not known when the LFB
class is defined; class is defined;
. the frame type and set of metadata emitted on these outputs are . the frame type and set of metadata emitted on these outputs
sufficiently similar or ideally identical, such they can share are sufficiently similar or ideally identical, such they can
the same output definition. share the same output definition.
3.2.2. LFB Inputs 3.2.2. LFB Inputs
An LFB input is a conceptual port on an LFB where the LFB can An LFB input is a conceptual port on an LFB where the LFB can
receive information from other LFBs. The information is typically a receive information from other LFBs. The information is typically
packet and associated metadata, although in some cases it might a packet and associated metadata, although in some cases it might
consist of only metadata, without any packet data. consist of only metadata, without any packet data.
For LFB instances that receive packets from more than one other LFB For LFB instances that receive packets from more than one other
instance (fan-in). There are three ways to model fan-in, all LFB instance (fan-in). There are three ways to model fan-in, all
supported by the LFB model and can be combined in the same LFB: supported by the LFB model and can be combined in the same LFB:
. Implicit multiplexing via a single input . Implicit multiplexing via a single input
. Explicit multiplexing via multiple singleton inputs . Explicit multiplexing via multiple singleton inputs
. Explicit multiplexing via a group of inputs (input group) . Explicit multiplexing via a group of inputs (input group)
The simplest form of multiplexing uses a singleton input (Figure The simplest form of multiplexing uses a singleton input (Figure
4.a). Most LFBs will have only one singleton input. Multiplexing 4.a). Most LFBs will have only one singleton input. Multiplexing
into a single input is possible because the model allows more than into a single input is possible because the model allows more than
one LFB output to connect to the same LFB input. This property one LFB output to connect to the same LFB input. This property
applies to any LFB input without any special provisions in the LFB applies to any LFB input without any special provisions in the LFB
class. Multiplexing into a single input is applicable when the class. Multiplexing into a single input is applicable when the
packets from the upstream LFBs are similar in frame-type and packets from the upstream LFBs are similar in frame-type and
accompanying metadata, and require similar processing. Note that accompanying metadata, and require similar processing. Note that
this model does not address how potential contention is handled when this model does not address how potential contention is handled
multiple packets arrive simultaneously. If contention handling when multiple packets arrive simultaneously. If contention
needs to be explicitly modeled, one of the other two modeling handling needs to be explicitly modeled, one of the other two
solutions must be used. modeling solutions must be used.
The second method to model fan-in uses individually defined The second method to model fan-in uses individually defined
singleton inputs (Figure 4.b). This model is meant for situations singleton inputs (Figure 4.b). This model is meant for situations
where the LFB needs to handle distinct types of packet streams, where the LFB needs to handle distinct types of packet streams,
requiring input-specific handling inside the LFB, and where the requiring input-specific handling inside the LFB, and where the
number of such distinct cases is known when the LFB class is number of such distinct cases is known when the LFB class is
defined. For example, a Layer 2 Decapsulation/Encapsulation LFB may defined. For example, a Layer 2 Decapsulation/Encapsulation LFB
have two inputs, one for receiving Layer 2 frames for decapsulation, may have two inputs, one for receiving Layer 2 frames for
and one for receiving Layer 3 frames for encapsulation. This LFB decapsulation, and one for receiving Layer 3 frames for
type expects different frames (L2 vs. L3) at its inputs, each with encapsulation. This LFB type expects different frames (L2 vs. L3)
different sets of metadata, and would thus apply different at its inputs, each with different sets of metadata, and would
processing on frames arriving at these inputs. This model is thus apply different processing on frames arriving at these
capable of explicitly addressing packet contention by defining how inputs. This model is capable of explicitly addressing packet
the LFB class handles the contending packets. contention by defining how the LFB class handles the contending
packets.
+--------------+ +------------------------+ +--------------+ +------------------------+
| LFB X +---+ | | | LFB X +---+ | |
+--------------+ | | | +--------------+ | | |
| | | | | |
+--------------+ v | | +--------------+ v | |
| LFB Y +---+-->|input Meter LFB | | LFB Y +---+-->|input Meter LFB |
+--------------+ ^ | | +--------------+ ^ | |
| | | | | |
+--------------+ | | | +--------------+ | | |
| LFB Z |---+ | | | LFB Z |---+ | |
+--------------+ +------------------------+ +--------------+ +------------------------+
(a) An LFB connects with multiple upstream LFBs via a single input. (a) An LFB connects with multiple upstream LFBs via a single
input.
+--------------+ +------------------------+ +--------------+ +------------------------+
| LFB X +---+ | | | LFB X +---+ | |
+--------------+ +-->|layer2 | +--------------+ +-->|layer2 |
+--------------+ | | +--------------+ | |
| LFB Y +------>|layer3 LFB | | LFB Y +------>|layer3 LFB |
+--------------+ +------------------------+ +--------------+ +------------------------+
(b) An LFB connects with multiple upstream LFBs via two separate (b) An LFB connects with multiple upstream LFBs via two separate
singleton inputs. singleton inputs.
skipping to change at page 18, line 28 skipping to change at page 19, line 43
| | | | | |
+--------------+ +-->|in:0 \ | +--------------+ +-->|in:0 \ |
| Queue LFB #2 +------>|in:1 | input group | | Queue LFB #2 +------>|in:1 | input group |
+--------------+ |... | | +--------------+ |... | |
+-->|in:N-1 / | +-->|in:N-1 / |
... | | | ... | | |
+--------------+ | | | +--------------+ | | |
| Queue LFB #N |---+ | Scheduler LFB | | Queue LFB #N |---+ | Scheduler LFB |
+--------------+ +------------------------+ +--------------+ +------------------------+
(c) A Scheduler LFB uses an input group to differentiate which queue (c) A Scheduler LFB uses an input group to differentiate which
LFB packets are coming from. queue LFB packets are coming from.
Figure 3. Input modeling concepts (examples). Figure 3. Input modeling concepts (examples).
The third method to model fan-in uses the concept of an input group. The third method to model fan-in uses the concept of an input
The concept is similar to the output group introduced in the group. The concept is similar to the output group introduced in
previous section, and is depicted in Figure 4.c. An input group the previous section, and is depicted in Figure 4.c. An input
consists of a number of input instances, all sharing the properties group consists of a number of input instances, all sharing the
(same frame and metadata expectations). The input instances are properties (same frame and metadata expectations). The input
numbered from 0 to N-1. From the outside, these inputs appear as instances are numbered from 0 to N-1. From the outside, these
normal inputs, i.e., any compatible upstream LFB can connect its inputs appear as normal inputs, i.e., any compatible upstream LFB
output to one of these inputs. When a packet is presented to the can connect its output to one of these inputs. When a packet is
LFB at a particular input instance, the index of the input where the presented to the LFB at a particular input instance, the index of
packet arrived is known to the LFB and this information may be used the input where the packet arrived is known to the LFB and this
in the internal processing. For example, the input index can be information may be used in the internal processing. For example,
used as a table selector, or as an explicit precedence selector to the input index can be used as a table selector, or as an explicit
resolve contention. As with output groups, the number of input precedence selector to resolve contention. As with output groups,
instances in an input group is not defined in the LFB class. the number of input instances in an input group is not defined in
However, the class definition may include restrictions on the range the LFB class. However, the class definition may include
of possible values. In addition, if an FE supports configurable restrictions on the range of possible values. In addition, if an
topologies, it may impose further limitations on the number of FE supports configurable topologies, it may impose further
instances for a particular port group(s) of a particular LFB class. limitations on the number of instances for a particular port
group(s) of a particular LFB class. Within these limitations,
Within these limitations, different instances of the same class may different instances of the same class may have a different number
have a different number of input instances. The number of actual of input instances. The number of actual input instances in the
input instances in the group is an attribute of the LFB class, which group is an attribute of the LFB class, which is read-only for
is read-only for static topologies, and is read-write for static topologies, and is read-write for configurable topologies.
configurable topologies.
As an example for the input group, consider the Scheduler LFB As an example for the input group, consider the Scheduler LFB
depicted in Figure 3.c. Such an LFB receives packets from a number depicted in Figure 3.c. Such an LFB receives packets from a
of Queue LFBs via a number of input instances, and uses the input number of Queue LFBs via a number of input instances, and uses the
index information to control contention resolution and scheduling. input index information to control contention resolution and
scheduling.
In summary, the LFB class may define one input, multiple singleton In summary, the LFB class may define one input, multiple singleton
inputs, one or more input groups, or a combination thereof. Any inputs, one or more input groups, or a combination thereof. Any
input allows for implicit multiplexing of similar packet streams via input allows for implicit multiplexing of similar packet streams
connecting multiple outputs to the same input. Explicit multiple via connecting multiple outputs to the same input. Explicit
singleton inputs are useful when either the contention handling must multiple singleton inputs are useful when either the contention
be handled explicitly, or when the LFB class must receive and handling must be handled explicitly, or when the LFB class must
process a known number of distinct types of packet streams. An receive and process a known number of distinct types of packet
input group is suitable when contention handling must be modeled streams. An input group is suitable when contention handling must
explicitly, but the number of inputs are not inherent from the class be modeled explicitly, but the number of inputs are not inherent
(and hence is not known when the class is defined), or when it is from the class (and hence is not known when the class is defined),
critical for LFB operation to know exactly on which input the packet or when it is critical for LFB operation to know exactly on which
was received. input the packet was received.
3.2.3. Packet Type 3.2.3. Packet Type
When LFB classes are defined, the input and output packet formats When LFB classes are defined, the input and output packet formats
(e.g., IPv4, IPv6, Ethernet, etc.) must be specified. These are the (e.g., IPv4, IPv6, Ethernet, etc.) must be specified. These are
types of packets a given LFB input is capable of receiving and the types of packets a given LFB input is capable of receiving and
processing, or a given LFB output is capable of producing. This processing, or a given LFB output is capable of producing. This
requires distinct packet types be uniquely labeled with a symbolic requires distinct packet types be uniquely labeled with a symbolic
name and/or ID. name and/or ID.
Note that each LFB has a set of packet types that it operates on, Note that each LFB has a set of packet types that it operates on,
but does not care whether the underlying implementation is passing a but does not care whether the underlying implementation is passing
greater portion of the packets. For example, an IPv4 LFB might only a greater portion of the packets. For example, an IPv4 LFB might
operate on IPv4 packets, but the underlying implementation may or only operate on IPv4 packets, but the underlying implementation
may not be stripping the L2 header before handing it over -- whether may or may not be stripping the L2 header before handing it over -
that is happening or not is opaque to the CE. - whether that is happening or not is opaque to the CE.
3.2.4. Metadata 3.2.4. Metadata
Metadata is the per-packet state that is passed from one LFB to Metadata is the per-packet state that is passed from one LFB to
another. The metadata is passed with the packet to assist subsequent another. The metadata is passed with the packet to assist
LFBs to process that packet. The ForCES model captures how the per- subsequent LFBs to process that packet. The ForCES model captures
packet state information is propagated from one LFB to other LFBs. how the per-packet state information is propagated from one LFB to
Practically, such metadata propagation can happen within one FE, or other LFBs. Practically, such metadata propagation can happen
cross the FE boundary between two interconnected FEs. We believe within one FE, or cross the FE boundary between two interconnected
that the same metadata model can be used for either situation; FEs. We believe that the same metadata model can be used for
however, our focus here is for intra-FE metadata. either situation; however, our focus here is for intra-FE
metadata.
3.2.4.1. Metadata Vocabulary 3.2.4.1. Metadata Vocabulary
Metadata has historically been understood to mean "data about data". Metadata has historically been understood to mean "data about
While this definition is a start, it is inadequate to describe the data". While this definition is a start, it is inadequate to
multiple forms of metadata, which may appear within a complex describe the multiple forms of metadata, which may appear within a
network element. The discussion here categorizes forms of metadata complex network element. The discussion here categorizes forms of
by two orthogonal axes. metadata by two orthogonal axes.
The first axis is "internal" versus "external", which describes The first axis is "internal" versus "external", which describes
where the metadata exists in the network model or implementation. where the metadata exists in the network model or implementation.
For example, a particular vendor implementation of an IPv4 forwarder For example, a particular vendor implementation of an IPv4
may make decisions inside of a chip that are not visible externally. forwarder may make decisions inside of a chip that are not visible
Those decisions are metadata for the packet that is "internal" to externally. Those decisions are metadata for the packet that is
the chip. When a packet is forwarded out of the chip, it may be "internal" to the chip. When a packet is forwarded out of the
marked with a traffic management header. That header, which is chip, it may be marked with a traffic management header. That
metadata for the packet, is visible outside of the chip, and is header, which is metadata for the packet, is visible outside of
therefore called "external" metadata. the chip, and is therefore called "external" metadata.
The second axis is "implicit" versus "expressed", which specifies The second axis is "implicit" versus "expressed", which specifies
whether or not the metadata has a visible physical representation. whether or not the metadata has a visible physical representation.
For example, the traffic management header described in the previous For example, the traffic management header described in the
paragraph may be represented as a series of bits in some format, and previous paragraph may be represented as a series of bits in some
that header is associated with the packet. Those bits have physical format, and that header is associated with the packet. Those bits
representation, and are therefore "expressed" metadata. If the have physical representation, and are therefore "expressed"
metadata does not have a physical representation, it is called metadata. If the metadata does not have a physical
"implicit" metadata. This situation occurs, for example, when a representation, it is called "implicit" metadata. This situation
particular path through a network device is intended to be traversed occurs, for example, when a particular path through a network
only by particular kinds of packets, such as an IPv4 router. An device is intended to be traversed only by particular kinds of
implementation may not mark every packet along this path as being of packets, such as an IPv4 router. An implementation may not mark
type "IPv4", but the intention of the designers is that every packet every packet along this path as being of type "IPv4", but the
is of that type. This understanding can be thought of as metadata intention of the designers is that every packet is of that type.
about the packet, which is implicitly attached to the packet through This understanding can be thought of as metadata about the packet,
the intent of the designers. which is implicitly attached to the packet through the intent of
the designers.
In the ForCES model, we do NOT discuss or represent metadata In the ForCES model, we do NOT discuss or represent metadata
"internal" to vendor implementations of LFBs. Our focus is solely "internal" to vendor implementations of LFBs. Our focus is solely
on metadata "external" to the LFBs, and therefore visible in the on metadata "external" to the LFBs, and therefore visible in the
ForCES model. The metadata discussed within this model may, or may ForCES model. The metadata discussed within this model may, or
not, be visible outside of the particular FE implementing the LFB may not, be visible outside of the particular FE implementing the
model. In this regard, the scope of the metadata within ForCES is LFB model. In this regard, the scope of the metadata within
very narrowly defined. ForCES is very narrowly defined.
Note also that while we define metadata within this model, it is Note also that while we define metadata within this model, it is
only a model. There is no requirement that vendor implementations only a model. There is no requirement that vendor implementations
of ForCES use the exact metadata representations described in this of ForCES use the exact metadata representations described in this
document. The only implementation requirement is that vendors document. The only implementation requirement is that vendors
implement the ForCES protocol, not the model. implement the ForCES protocol, not the model.
3.2.4.2. Metadata lifecycle within the ForCES model 3.2.4.2. Metadata lifecycle within the ForCES model
Each metadata can be conveniently modeled as a <label, value> pair, Each metadata can be conveniently modeled as a <label, value>
where the label identifies the type of information, (e.g., "color"), pair, where the label identifies the type of information, (e.g.,
and its value holds the actual information (e.g., "red"). The tag "color"), and its value holds the actual information (e.g.,
here is shown as a textual label, but it can be replaced or "red"). The tag here is shown as a textual label, but it can be
associated with a unique numeric value (identifier). replaced or associated with a unique numeric value (identifier).
The metadata life-cycle is defined in this model using three types The metadata life-cycle is defined in this model using three types
of events: "write", "read" and "consume". The first "write" of events: "write", "read" and "consume". The first "write"
implicitly creates and initializes the value of the metadata, and implicitly creates and initializes the value of the metadata, and
hence starts the life-cycle. The explicit "consume" event hence starts the life-cycle. The explicit "consume" event
terminates the life-cycle. Within the life-cycle, that is, after a terminates the life-cycle. Within the life-cycle, that is, after
"write" event, but before the next "consume" event, there can be an a "write" event, but before the next "consume" event, there can be
arbitrary number of "write" and "read" events. These "read" and an arbitrary number of "write" and "read" events. These "read"
"write" events can be mixed in an arbitrary order within the life- and "write" events can be mixed in an arbitrary order within the
cycle. Outside of the life-cycle of the metadata, that is, before life-cycle. Outside of the life-cycle of the metadata, that is,
the first "write" event, or between a "consume" event and the next before the first "write" event, or between a "consume" event and
"write" event, the metadata should be regarded non-existent or non- the next "write" event, the metadata should be regarded non-
initialized. Thus, reading a metadata outside of its life-cycle is existent or non-initialized. Thus, reading a metadata outside of
considered an error. its life-cycle is considered an error.
To ensure inter-operability between LFBs, the LFB class To ensure inter-operability between LFBs, the LFB class
specification must define what metadata the LFB class "reads" or specification must define what metadata the LFB class "reads" or
"consumes" on its input(s) and what metadata it "produces" on its "consumes" on its input(s) and what metadata it "produces" on its
output(s). For maximum extensibility, this definition should output(s). For maximum extensibility, this definition should
neither specify which LFBs the metadata is expected to come from for neither specify which LFBs the metadata is expected to come from
a consumer LFB, nor which LFBs are expected to consume metadata for for a consumer LFB, nor which LFBs are expected to consume
a given producer LFB. metadata for a given producer LFB.
While it is important to define the metadata types passing between While it is important to define the metadata types passing between
LFBs, it is not appropriate to define the exact encoding mechanism LFBs, it is not appropriate to define the exact encoding mechanism
used by LFBs for that metadata. Different implementations are used by LFBs for that metadata. Different implementations are
allowed to use different encoding mechanisms for metadata. For allowed to use different encoding mechanisms for metadata. For
example, one implementation may store metadata in registers or example, one implementation may store metadata in registers or
shared memory, while another implementation may encode metadata in- shared memory, while another implementation may encode metadata
band as a preamble in the packets. in-band as a preamble in the packets.
At any link between two LFBs, the packet is marked with a finite set At any link between two LFBs, the packet is marked with a finite
of active metadata, where active means the metadata is within its set of active metadata, where active means the metadata is within
life-cycle. There are two corollaries of this model: its life-cycle. There are two corollaries of this model:
1. No un-initialized metadata exists in the model. 1. No un-initialized metadata exists in the model.
2. No more than one occurrence of each metadata tag can be 2. No more than one occurrence of each metadata tag can be
associated with a packet at any given time. associated with a packet at any given time.
3.2.4.3. LFB Operations on Metadata 3.2.4.3. LFB Operations on Metadata
When the packet is processed by an LFB (i.e., between the time it is When the packet is processed by an LFB (i.e., between the time it
received and forwarded by the LFB), the LFB may perform read, write is received and forwarded by the LFB), the LFB may perform read,
and/or consume operations on any active metadata associated with the write and/or consume operations on any active metadata associated
packet. If the LFB is considered to be a black box, one of the with the packet. If the LFB is considered to be a black box, one
following operations is performed on each active metadata. of the following operations is performed on each active metadata.
. IGNORE: ignores and forwards the metadata . IGNORE: ignores and forwards the metadata
. READ: reads and forwards the metadata . READ: reads and forwards the metadata
. READ/RE-WRITE: reads, over-writes and forwards the metadata . READ/RE-WRITE: reads, over-writes and forwards the
metadata
. WRITE: writes and forwards the metadata . WRITE: writes and forwards the metadata
(can also be used to create new metadata) (can also be used to create new metadata)
. READ-AND-CONSUME: reads and consumes the metadata . READ-AND-CONSUME: reads and consumes the metadata
. CONSUME consumes metadata without reading . CONSUME consumes metadata without reading
The last two operations terminate the life-cycle of the metadata, The last two operations terminate the life-cycle of the metadata,
meaning that the metadata is not forwarded with the packet when the meaning that the metadata is not forwarded with the packet when
packet is sent to the next LFB. the packet is sent to the next LFB.
In our model, a new metadata is generated by an LFB when the LFB In our model, a new metadata is generated by an LFB when the LFB
applies a WRITE operation to a metadata type that was not present applies a WRITE operation to a metadata type that was not present
when the packet was received by the LFB. Such implicit creation may when the packet was received by the LFB. Such implicit creation
be unintentional by the LFB, that is, the LFB may apply the WRITE may be unintentional by the LFB, that is, the LFB may apply the
operation without knowing or caring if the given metadata existed or WRITE operation without knowing or caring if the given metadata
not. If it existed, the metadata gets over-written; if it did not existed or not. If it existed, the metadata gets over-written; if
exist, the metadata is created. it did not exist, the metadata is created.
For LFBs that insert packets into the model, WRITE is the only For LFBs that insert packets into the model, WRITE is the only
meaningful metadata operation. meaningful metadata operation.
For LFBs that remove the packet from the model, they may either For LFBs that remove the packet from the model, they may either
READ-AND-CONSUME (read) or CONSUME (ignore) each active metadata READ-AND-CONSUME (read) or CONSUME (ignore) each active metadata
associated with the packet. associated with the packet.
3.2.4.4. Metadata Production and Consumption 3.2.4.4. Metadata Production and Consumption
For a given metadata on a given packet path, there must be at least For a given metadata on a given packet path, there must be at
one producer LFB that creates that metadata and should be at least least one producer LFB that creates that metadata and should be at
one consumer LFB that needs that metadata. In this model, the least one consumer LFB that needs that metadata. In this model,
producer and consumer LFBs of a metadata are not required to be the producer and consumer LFBs of a metadata are not required to
adjacent. In addition, there may be multiple producers and be adjacent. In addition, there may be multiple producers and
consumers for the same metadata. When a packet path involves consumers for the same metadata. When a packet path involves
multiple producers of the same metadata, then subsequent producers multiple producers of the same metadata, then subsequent producers
overwrite that metadata value. overwrite that metadata value.
The metadata that is produced by an LFB is specified by the LFB The metadata that is produced by an LFB is specified by the LFB
class definition on a per output port group basis. A producer may class definition on a per output port group basis. A producer may
always generate the metadata on the port group, or may generate it always generate the metadata on the port group, or may generate it
only under certain conditions. We call the former an only under certain conditions. We call the former an
"unconditional" metadata, whereas the latter is a "conditional" "unconditional" metadata, whereas the latter is a "conditional"
metadata. In the case of conditional metadata, it should be metadata. In the case of conditional metadata, it should be
possible to determine from the definition of the LFB when a possible to determine from the definition of the LFB when a
"conditional" metadata is produced. "conditional" metadata is produced.
The consumer behavior of an LFB, that is, the metadata that the LFB The consumer behavior of an LFB, that is, the metadata that the
needs for its operation, is defined in the LFB class definition on a LFB needs for its operation, is defined in the LFB class
per input port group basis. An input port group may "require" a definition on a per input port group basis. An input port group
given metadata, or may treat it as "optional" information. In the may "require" a given metadata, or may treat it as "optional"
latter case, the LFB class definition must explicitly define what information. In the latter case, the LFB class definition must
happens if an optional metadata is not provided. One approach is to explicitly define what happens if an optional metadata is not
specify a default value for each optional metadata, and assume that provided. One approach is to specify a default value for each
the default value is used if the metadata is not provided with the optional metadata, and assume that the default value is used if
packet. the metadata is not provided with the packet.
When a consumer LFB requires a given metadata, it has dependencies When a consumer LFB requires a given metadata, it has dependencies
on its up-stream LFBs. That is, the consumer LFB can only function on its up-stream LFBs. That is, the consumer LFB can only
if there is at least one producer of that metadata and no function if there is at least one producer of that metadata and no
intermediate LFB consumes the metadata. intermediate LFB consumes the metadata.
The model should expose these inter-dependencies. Furthermore, it The model should expose these inter-dependencies. Furthermore, it
should be possible to take inter-dependencies into consideration should be possible to take inter-dependencies into consideration
when constructing LFB topologies, and also that the dependencies can when constructing LFB topologies, and also that the dependencies
be verified when validating topologies. can be verified when validating topologies.
For extensibility reasons, the LFB specification should define what For extensibility reasons, the LFB specification should define
metadata the LFB requires without specifying which LFB(s) it expects what metadata the LFB requires without specifying which LFB(s) it
a certain metadata to come from. Similarly, LFBs should specify expects a certain metadata to come from. Similarly, LFBs should
what metadata they produce without specifying which LFBs the specify what metadata they produce without specifying which LFBs
metadata is meant for. the metadata is meant for.
When specifying the metadata tags, some harmonization effort must be When specifying the metadata tags, some harmonization effort must
made so that the producer LFB class uses the same tag as its be made so that the producer LFB class uses the same tag as its
intended consumer(s), or vice versa. intended consumer(s), or vice versa.
3.2.4.5. Fixed, Variable and Configurable Tag 3.2.4.5. Fixed, Variable and Configurable Tag
When the produced metadata is defined for a given LFB class, most When the produced metadata is defined for a given LFB class, most
metadata will be specified with a fixed tag. For example, a Rate metadata will be specified with a fixed tag. For example, a Rate
Meter LFB will always produce the "Color" metadata. Meter LFB will always produce the "Color" metadata.
A small subset of LFBs need the capability to produce one or more of A small subset of LFBs need the capability to produce one or more
their metadata with tags that are not fixed in the LFB class of their metadata with tags that are not fixed in the LFB class
definition, but instead can be selected per LFB instance. An definition, but instead can be selected per LFB instance. An
example of such an LFB class is a Generic Classifier LFB. We call example of such an LFB class is a Generic Classifier LFB. We call
this capability "variable tag metadata production". If an LFB this capability "variable tag metadata production". If an LFB
produces metadata with a variable tag, the corresponding LFB produces metadata with a variable tag, the corresponding LFB
attribute, called the tag selector, specifies the tag for each such attribute, called the tag selector, specifies the tag for each
metadata. This mechanism improves the versatility of certain multi- such metadata. This mechanism improves the versatility of certain
purpose LFB classes, since it allows the same LFB class to be used multi-purpose LFB classes, since it allows the same LFB class to
in different topologies, producing the right metadata tags according be used in different topologies, producing the right metadata tags
to the needs of the topology. according to the needs of the topology.
Depending on the capability of the FE, the tag selector can be Depending on the capability of the FE, the tag selector can be
either a read-only or a read-write attribute. If the selector is either a read-only or a read-write attribute. If the selector is
read-only, the tag cannot be modified by the CE. If the selector is read-only, the tag cannot be modified by the CE. If the selector
read-write, the tag can be configured by the CE, hence we call this is read-write, the tag can be configured by the CE, hence we call
"configurable tag metadata production." Note that using this this "configurable tag metadata production." Note that using this
definition, configurable tag metadata production is a subset of definition, configurable tag metadata production is a subset of
variable tag metadata production. variable tag metadata production.
Similar concepts can be introduced for the consumer LFBs to satisfy Similar concepts can be introduced for the consumer LFBs to
different metadata needs. Most LFB classes will specify their satisfy different metadata needs. Most LFB classes will specify
metadata needs using fixed metadata tags. For example, a Next Hop their metadata needs using fixed metadata tags. For example, a
LFB may always require a "NextHopId" metadata; but the Redirector Next Hop LFB may always require a "NextHopId" metadata; but the
LFB may need a "ClassID" metadata in one instance, and a Redirector LFB may need a "ClassID" metadata in one instance, and
"ProtocolType" metadata in another instance as a basis for selecting a "ProtocolType" metadata in another instance as a basis for
the right output port. In this case, an LFB attribute is used to selecting the right output port. In this case, an LFB attribute
provide the required metadata tag at run-time. This metadata tag is used to provide the required metadata tag at run-time. This
selector attribute may be read-only or read-write, depending on the metadata tag selector attribute may be read-only or read-write,
capabilities of the LFB instance and the FE. depending on the capabilities of the LFB instance and the FE.
3.2.4.6. Metadata Usage Categories 3.2.4.6. Metadata Usage Categories
Depending on the role and usage of a metadata, various amounts of Depending on the role and usage of a metadata, various amounts of
encoding information must be provided when the metadata is defined, encoding information must be provided when the metadata is
where some cases offer less flexibility in the value selection than defined, where some cases offer less flexibility in the value
others. selection than others.
There are three types of metadata related to metadata usage: There are three types of metadata related to metadata usage:
. Relational (or binding) metadata . Relational (or binding) metadata
. Enumerated metadata . Enumerated metadata
. Explicit/external value metadata . Explicit/external value metadata
The purpose of the relational metadata is to refer in one LFB The purpose of the relational metadata is to refer in one LFB
instance (producer LFB) to a "thing" in another downstream LFB instance (producer LFB) to a "thing" in another downstream LFB
instance (consumer LFB), where the "thing" is typically an entry in instance (consumer LFB), where the "thing" is typically an entry
a table attribute of the consumer LFB. in a table attribute of the consumer LFB.
For example, the Prefix Lookup LFB executes an LPM search using its For example, the Prefix Lookup LFB executes an LPM search using
prefix table and resolves to a next-hop reference. This reference its prefix table and resolves to a next-hop reference. This
needs to be passed as metadata by the Prefix Lookup LFB (producer) reference needs to be passed as metadata by the Prefix Lookup LFB
to the Next Hop LFB (consumer), and must refer to a specific entry (producer) to the Next Hop LFB (consumer), and must refer to a
in the next-hop table within the consumer. specific entry in the next-hop table within the consumer.
Expressing and propagating such a binding relationship is probably Expressing and propagating such a binding relationship is probably
the most common usage of metadata. One or more objects in the the most common usage of metadata. One or more objects in the
producer LFB are bound to a specific object in the consumer LFB. producer LFB are bound to a specific object in the consumer LFB.
Such a relationship is established by the CE explicitly by properly Such a relationship is established by the CE explicitly by
configuring the attributes in both LFBs. Available methods include properly configuring the attributes in both LFBs. Available
the following: methods include the following:
The binding may be expressed by tagging the involved objects in both The binding may be expressed by tagging the involved objects in
LFBs with the same unique, but otherwise arbitrary, identifier. The both LFBs with the same unique, but otherwise arbitrary,
value of the tag is explicitly configured by the CE by writing the identifier. The value of the tag is explicitly configured by the
value into both LFBs, and this value is also carried by the metadata CE by writing the value into both LFBs, and this value is also
between the LFBs. carried by the metadata between the LFBs.
Another way of setting up binding relations is to use a naturally Another way of setting up binding relations is to use a naturally
occurring unique identifier of the consumer's object as a reference occurring unique identifier of the consumer's object as a
and as a value of the metadata (e.g., the array index of a table reference and as a value of the metadata (e.g., the array index of
entry). In this case, the index is either read or inferred by the a table entry). In this case, the index is either read or
CE by communicating with the consumer LFB. Once the CE obtains the inferred by the CE by communicating with the consumer LFB. Once
index, it needs to write it into the producer LFB to establish the the CE obtains the index, it needs to write it into the producer
binding. LFB to establish the binding.
Important characteristics of the binding usage of metadata are: Important characteristics of the binding usage of metadata are:
. The value of the metadata shows up in the CE-FE communication . The value of the metadata shows up in the CE-FE communication
for BOTH the consumer and the producer. That is, the metadata for BOTH the consumer and the producer. That is, the
value must be carried over the ForCES protocol. Using the metadata value must be carried over the ForCES protocol.
tagging technique, the value is WRITTEN to both LFBs. Using Using the tagging technique, the value is WRITTEN to both
the other technique, the value is WRITTEN to only the producer LFBs. Using the other technique, the value is WRITTEN to
LFB and may be READ from the consumer LFB. only the producer LFB and may be READ from the consumer LFB.
. The metadata value is irrelevant to the CE, the binding is . The metadata value is irrelevant to the CE, the binding is
simply expressed by using the SAME value at the consumer and simply expressed by using the SAME value at the consumer and
producer LFBs. producer LFBs.
. Hence the metadata definition is not required to include value . Hence the metadata definition is not required to include
assignments. The only exception is when some special value(s) value assignments. The only exception is when some special
of the metadata must be reserved to convey special events. value(s) of the metadata must be reserved to convey special
Even though these special cases must be defined with the events. Even though these special cases must be defined with
metadata specification, their encoded values can be selected the metadata specification, their encoded values can be
arbitrarily. For example, for the Prefix Lookup LFB example, a selected arbitrarily. For example, for the Prefix Lookup LFB
special value may be reserved to signal the NO-MATCH case, and example, a special value may be reserved to signal the NO-
the value of zero may be assigned for this purpose. MATCH case, and the value of zero may be assigned for this
purpose.
The second class of metadata is the enumerated type. An example is The second class of metadata is the enumerated type. An example
the "Color" metadata that is produced by a Meter LFB. As the name is the "Color" metadata that is produced by a Meter LFB. As the
suggests, enumerated metadata has a relatively small number of name suggests, enumerated metadata has a relatively small number
possible values, each with a specific meaning. All possible cases of possible values, each with a specific meaning. All possible
must be enumerated when defining this class of metadata. Although a cases must be enumerated when defining this class of metadata.
value encoding must be included in the specification, the actual Although a value encoding must be included in the specification,
values can be selected arbitrarily (e.g., <Red=0, Yellow=1, Green=2> the actual values can be selected arbitrarily (e.g., <Red=0,
and <Red=3, Yellow=2, Green 1> would be both valid encodings, what Yellow=1, Green=2> and <Red=3, Yellow=2, Green 1> would be both
is important is that an encoding is specified). valid encodings, what is important is that an encoding is
specified).
The value of the enumerated metadata may or may not be conveyed via The value of the enumerated metadata may or may not be conveyed
the ForCES protocol between the CE and FE. via the ForCES protocol between the CE and FE.
The third class of metadata is the explicit type. This refers to The third class of metadata is the explicit type. This refers to
cases where the metadata value is explicitly used by the consumer cases where the metadata value is explicitly used by the consumer
LFB to change some packet header fields. In other words, the value LFB to change some packet header fields. In other words, the
has a direct and explicit impact on some field and will be visible value has a direct and explicit impact on some field and will be
externally when the packet leaves the NE. Examples are: TTL visible externally when the packet leaves the NE. Examples are:
increment given to a Header Modifier LFB, and DSCP value for a TTL increment given to a Header Modifier LFB, and DSCP value for a
Remarker LFB. For explicit metadata, the value encoding must be Remarker LFB. For explicit metadata, the value encoding must be
explicitly provided in the metadata definition. The values cannot explicitly provided in the metadata definition. The values cannot
be selected arbitrarily and should conform to what is commonly be selected arbitrarily and should conform to what is commonly
expected. For example, a TTL increment metadata should be encoded expected. For example, a TTL increment metadata should be encoded
as zero for the no increment case, one for the single increment as zero for the no increment case, one for the single increment
case, etc. A DSCP metadata should use 0 to encode DSCP=0, 1 to case, etc. A DSCP metadata should use 0 to encode DSCP=0, 1 to
encode DSCP=1, etc. encode DSCP=1, etc.
3.2.5. LFB Versioning 3.2.5. LFB Events
LFB class versioning is a method to enable incremental evolution of During operation, various conditions may occur that can be
LFB classes. In general, an FE is not allowed to contain an LFB detected by LFBs. Examples range from link failure or restart, to
timer expiration in special purpose LFBs. The CE may wish to be
notified of the occurrence of such events. The PL protocol
provides for such notifications. The LFB definition includes the
necessary declarations of events. The declarations include
identifiers necessary for subscribing to events (so that the CE
can indicate to the FE which events it wishes to receive) and to
indicate in event notification messages which event is being
reported.
3.2.6. LFB Element Properties
LFBs are made up of elements, containing the information that the
CE needs to see and / or change about the functioning of the LFB.
These elements, as described in detail elsewhere, may be basic
values, complex structures, or tables (containing values,
structures, or tables.) Some of these elements are optional.
Some elements may be readable or writeable at the discretion of
the FE implementation. The CE needs to know these properties.
Additionally, certain kinds of elements (arrays, aliases, and
events as of this writing) have additional property information
that the CE may need to read or write. This model defines the
structure of the property information for all defined data types.
The reports with events are designed to allow for the common,
closely related information that the CE can be strongly expected
to need to react to the event. These reports are not intended to
carry information the CE already has, large volumes of
information, nor information related in complex fashions.
3.2.7. LFB Versioning
LFB class versioning is a method to enable incremental evolution
of LFB classes. In general, an FE is not allowed to contain an LFB
instance for more than one version of a particular class. instance for more than one version of a particular class.
Inheritance (discussed next in Section 3.2.6) has special rules. If Inheritance (discussed next in Section 3.2.6) has special rules.
an FE datapath model containing an LFB instance of a particular If an FE datapath model containing an LFB instance of a particular
class C also simultaneously contains an LFB instance of a class C' class C also simultaneously contains an LFB instance of a class C'
inherited from class C; C could have a different version than C'. inherited from class C; C could have a different version than C'.
LFB class versioning is supported by requiring a version string in LFB class versioning is supported by requiring a version string in
the class definition. CEs may support multiple versions of a the class definition. CEs may support multiple versions of a
particular LFB class to provide backward compatibility, but FEs are particular LFB class to provide backward compatibility, but FEs
not allowed to support more than one version of a particular class. are not allowed to support more than one version of a particular
class.
3.2.6. LFB Inheritance 3.2.8. LFB Inheritance
LFB class inheritance is supported in the FE model as a method to LFB class inheritance is supported in the FE model as a method to
define new LFB classes. This also allows FE vendors to add vendor- define new LFB classes. This also allows FE vendors to add
specific extensions to standardized LFBs. An LFB class vendor-specific extensions to standardized LFBs. An LFB class
specification MUST specify the base class and version number it specification MUST specify the base class and version number it
inherits from (the default is the base LFB class). Multiple- inherits from (the default is the base LFB class). Multiple-
inheritance is not allowed, however, to avoid unnecessary inheritance is not allowed, however, to avoid unnecessary
complexity. complexity.
Inheritance should be used only when there is significant reuse of Inheritance should be used only when there is significant reuse of
the base LFB class definition. A separate LFB class should be the base LFB class definition. A separate LFB class should be
defined if little or no reuse is possible between the derived and defined if little or no reuse is possible between the derived and
the base LFB class. the base LFB class.
An interesting issue related to class inheritance is backward An interesting issue related to class inheritance is backward
compatibility between a descendant and an ancestor class. Consider compatibility between a descendant and an ancestor class.
the following hypothetical scenario where a standardized LFB class Consider the following hypothetical scenario where a standardized
"L1" exists. Vendor A builds an FE that implements LFB "L1" and LFB class "L1" exists. Vendor A builds an FE that implements LFB
vendor B builds a CE that can recognize and operate on LFB "L1". "L1" and vendor B builds a CE that can recognize and operate on
Suppose that a new LFB class, "L2", is defined based on the existing LFB "L1". Suppose that a new LFB class, "L2", is defined based on
"L1" class by extending its capabilities incrementally. Let us the existing "L1" class by extending its capabilities
examine the FE backward compatibility issue by considering what incrementally. Let us examine the FE backward compatibility issue
would happen if vendor B upgrades its FE from "L1" to "L2" and by considering what would happen if vendor B upgrades its FE from
vendor C's CE is not changed. The old L1-based CE can interoperate "L1" to "L2" and vendor C's CE is not changed. The old L1-based
with the new L2-based FE if the derived LFB class "L2" is indeed CE can interoperate with the new L2-based FE if the derived LFB
backward compatible with the base class "L1". class "L2" is indeed backward compatible with the base class "L1".
The reverse scenario is a much less problematic case, i.e., when CE The reverse scenario is a much less problematic case, i.e., when
vendor B upgrades to the new LFB class "L2", but the FE is not CE vendor B upgrades to the new LFB class "L2", but the FE is not
upgraded. Note that as long as the CE is capable of working with upgraded. Note that as long as the CE is capable of working with
older LFB classes, this problem does not affect the model; hence we older LFB classes, this problem does not affect the model; hence
will use the term "backward compatibility" to refer to the first we will use the term "backward compatibility" to refer to the
scenario concerning FE backward compatibility. first scenario concerning FE backward compatibility.
Backward compatibility can be designed into the inheritance model by Backward compatibility can be designed into the inheritance model
constraining LFB inheritance to require the derived class be a by constraining LFB inheritance to require the derived class be a
functional superset of the base class (i.e. the derived class can functional superset of the base class (i.e. the derived class can
only add functions to the base class, but not remove functions). only add functions to the base class, but not remove functions).
Additionally, the following mechanisms are required to support FE Additionally, the following mechanisms are required to support FE
backward compatibility: backward compatibility:
1. When detecting an LFB instance of an LFB type that is unknown 1. When detecting an LFB instance of an LFB type that is
to the CE, the CE MUST be able to query the base class of such unknown to the CE, the CE MUST be able to query the base
an LFB from the FE. class of such an LFB from the FE.
2. The LFB instance on the FE SHOULD support a backward 2. The LFB instance on the FE SHOULD support a backward
compatibility mode (meaning the LFB instance reverts itself compatibility mode (meaning the LFB instance reverts itself
back to the base class instance), and the CE SHOULD be able to back to the base class instance), and the CE SHOULD be able
configure the LFB to run in such a mode. to configure the LFB to run in such a mode.
3.3. FE Datapath Modeling 3.3. FE Datapath Modeling
Packets coming into the FE from ingress ports generally flow through Packets coming into the FE from ingress ports generally flow
multiple LFBs before leaving out of the egress ports. How an FE through multiple LFBs before leaving out of the egress ports. How
treats a packet depends on many factors, such as type of the packet an FE treats a packet depends on many factors, such as type of the
(e.g., IPv4, IPv6 or MPLS), actual header values, time of arrival, packet (e.g., IPv4, IPv6 or MPLS), actual header values, time of
etc. The result of LFB processing may have an impact on how the arrival, etc. The result of LFB processing may have an impact on
packet is to be treated in downstream LFBs. This differentiation of how the packet is to be treated in downstream LFBs. This
packet treatment downstream can be conceptualized as having differentiation of packet treatment downstream can be
alternative datapaths in the FE. For example, the result of a 6- conceptualized as having alternative datapaths in the FE. For
tuple classification performed by a classifier LFB could control example, the result of a 6-tuple classification performed by a
which rate meter is applied to the packet by a rate meter LFB in a classifier LFB could control which rate meter is applied to the
later stage in the datapath. packet by a rate meter LFB in a later stage in the datapath.
LFB topology is a directed graph representation of the logical LFB topology is a directed graph representation of the logical
datapaths within an FE, with the nodes representing the LFB datapaths within an FE, with the nodes representing the LFB
instances and the directed link depicting the packet flow direction instances and the directed link depicting the packet flow
from one LFB to the next. Section 3.3.1 discusses how the FE direction from one LFB to the next. Section 3.3.1 discusses how
datapaths can be modeled as LFB topology; while Section 3.3.2 the FE datapaths can be modeled as LFB topology; while Section
focuses on issues related to LFB topology reconfiguration. 3.3.2 focuses on issues related to LFB topology reconfiguration.
3.3.1. Alternative Approaches for Modeling FE Datapaths 3.3.1. Alternative Approaches for Modeling FE Datapaths
There are two basic ways to express the differentiation in packet There are two basic ways to express the differentiation in packet
treatment within an FE, one represents the datapath directly and treatment within an FE, one represents the datapath directly and
graphically (topological approach) and the other utilizes metadata graphically (topological approach) and the other utilizes metadata
(the encoded state approach). (the encoded state approach).
. Topological Approach . Topological Approach
Using this approach, differential packet treatment is expressed by Using this approach, differential packet treatment is expressed
splitting the LFB topology into alternative paths. In other by splitting the LFB topology into alternative paths. In other
words, if the result of an LFB must control how the packet is words, if the result of an LFB must control how the packet is
further processed, then such an LFB will have separate output further processed, then such an LFB will have separate output
ports, one for each alternative treatment, connected to separate ports, one for each alternative treatment, connected to
sub-graphs, each expressing the respective treatment downstream. separate sub-graphs, each expressing the respective treatment
downstream.
. Encoded State Approach . Encoded State Approach
An alternate way of expressing differential treatment is by using An alternate way of expressing differential treatment is by
metadata. The result of the operation of an LFB can be encoded in using metadata. The result of the operation of an LFB can be
a metadata, which is passed along with the packet to downstream encoded in a metadata, which is passed along with the packet to
LFBs. A downstream LFB, in turn, can use the metadata and its downstream LFBs. A downstream LFB, in turn, can use the
value (e.g., as an index into some table) to determine how to metadata and its value (e.g., as an index into some table) to
treat the packet. determine how to treat the packet.
Theoretically, either approach could substitute for the other, so Theoretically, either approach could substitute for the other, so
one could consider using a single pure approach to describe all one could consider using a single pure approach to describe all
datapaths in an FE. However, neither model by itself results in the datapaths in an FE. However, neither model by itself results in
best representation for all practically relevant cases. For a given the best representation for all practically relevant cases. For a
FE with certain logical datapaths, applying the two different given FE with certain logical datapaths, applying the two
modeling approaches will result in very different looking LFB different modeling approaches will result in very different
topology graphs. A model using only the topological approach may looking LFB topology graphs. A model using only the topological
require a very large graph with many links or paths, and nodes approach may require a very large graph with many links or paths,
(i.e., LFB instances) to express all alternative datapaths. On the and nodes (i.e., LFB instances) to express all alternative
other hand, a model using only the encoded state model would be datapaths. On the other hand, a model using only the encoded
restricted to a string of LFBs, which is not an intuitive way to state model would be restricted to a string of LFBs, which is not
describe different datapaths (such as MPLS and IPv4). Therefore, a an intuitive way to describe different datapaths (such as MPLS and
mix of these two approaches will likely be used for a practical IPv4). Therefore, a mix of these two approaches will likely be
model. In fact, as we illustrate below, the two approaches can be used for a practical model. In fact, as we illustrate below, the
mixed even within the same LFB. two approaches can be mixed even within the same LFB.
Using a simple example of a classifier with N classification outputs
followed by other LFBs, Figure 5(a) shows what the LFB topology
looks like when using the pure topological approach. Each output
from the classifier goes to one of the N LFBs where no metadata is
needed. The topological approach is simple, straightforward and
graphically intuitive. However, if N is large and the N nodes
following the classifier (LFB#1, LFB#2, ..., LFB#N) all belong to
the same LFB type (e.g., meter), but each has its own independent
attributes, the encoded state approach gives a much simpler topology
representation, as shown in Figure 5(b). The encoded state approach
requires that a table of N rows of meter attributes is provided in
the Meter node itself, with each row representing the attributes for
one meter instance. A metadata M is also needed to pass along with
the packet P from the classifier to the meter, so that the meter can
use M as a look-up key (index) to find the corresponding row of the
attributes that should be used for any particular packet P.
What if those N nodes (LFB#1, LFB#2, ..., LFB#N) are not of the same Using a simple example of a classifier with N classification
type? For example, if LFB#1 is a queue while the rest are all outputs followed by other LFBs, Figure 5(a) shows what the LFB
meters, what is the best way to represent such datapaths? While it topology looks like when using the pure topological approach.
is still possible to use either the pure topological approach or the Each output from the classifier goes to one of the N LFBs where no
pure encoded state approach, the natural combination of the two metadata is needed. The topological approach is simple,
appears to be the best option. Figure 5(c) depicts two different straightforward and graphically intuitive. However, if N is large
functional datapaths using the topological approach while leaving and the N nodes following the classifier (LFB#1, LFB#2, ...,
the N-1 meter instances distinguished by metadata only, as shown in LFB#N) all belong to the same LFB type (e.g., meter), but each has
Figure 5(c). its own independent attributes, the encoded state approach gives a
much simpler topology representation, as shown in Figure 5(b).
The encoded state approach requires that a table of N rows of
meter attributes is provided in the Meter node itself, with each
row representing the attributes for one meter instance. A
metadata M is also needed to pass along with the packet P from the
classifier to the meter, so that the meter can use M as a look-up
key (index) to find the corresponding row of the attributes that
should be used for any particular packet P.
What if those N nodes (LFB#1, LFB#2, ..., LFB#N) are not of the
same type? For example, if LFB#1 is a queue while the rest are all
meters, what is the best way to represent such datapaths? While
it is still possible to use either the pure topological approach
or the pure encoded state approach, the natural combination of the
two appears to be the best option. Figure 5(c) depicts two
different functional datapaths using the topological approach
while leaving the N-1 meter instances distinguished by metadata
only, as shown in Figure 5(c).
+----------+ +----------+
P | LFB#1 | P | LFB#1 |
+--------->|(Attrib-1)| +--------->|(Attrib-1)|
+-------------+ | +----------+ +-------------+ | +----------+
| 1|------+ P +----------+ | 1|------+ P +----------+
| 2|---------------->| LFB#2 | | 2|---------------->| LFB#2 |
| classifier 3| |(Attrib-2)| | classifier 3| |(Attrib-2)|
| ...|... +----------+ | ...|... +----------+
| N|------+ ... | N|------+ ...
+-------------+ | P +----------+ +-------------+ | P +----------+
skipping to change at page 30, line 44 skipping to change at page 33, line 16
+-------------+ (P, M) | queue | +-------------+ (P, M) | queue |
| 1|------------->| (Attrib-1) | | 1|------------->| (Attrib-1) |
| 2| +-------------+ | 2| +-------------+
| 3| (P, M) +-------------+ | 3| (P, M) +-------------+
| ...|------------->| Meter | | ...|------------->| Meter |
| N| | (Attrib-2) | | N| | (Attrib-2) |
+-------------+ | ... | +-------------+ | ... |
| (Attrib-N) | | (Attrib-N) |
+-------------+ +-------------+
5(c) Using a combination of the two, if LFB#1, LFB#2, ..., and 5(c) Using a combination of the two, if LFB#1, LFB#2, ...,
LFB#N are of different types (e.g., queue and meter). and LFB#N are of different types (e.g., queue and meter).
Figure 5. An example of how to model FE datapaths Figure 5. An example of how to model FE datapaths
From this example, we demonstrate that each approach has a distinct From this example, we demonstrate that each approach has a
advantage depending on the situation. Using the encoded state distinct advantage depending on the situation. Using the encoded
approach, fewer connections are typically needed between a fan-out state approach, fewer connections are typically needed between a
node and its next LFB instances of the same type because each packet fan-out node and its next LFB instances of the same type because
carries metadata the following nodes can interpret and hence invoke each packet carries metadata the following nodes can interpret and
a different packet treatment. For those cases, a pure topological hence invoke a different packet treatment. For those cases, a
approach forces one to build elaborate graphs with many more pure topological approach forces one to build elaborate graphs
connections and often results in an unwieldy graph. On the other with many more connections and often results in an unwieldy graph.
hand, a topological approach is the most intuitive for representing On the other hand, a topological approach is the most intuitive
functionally different datapaths. for representing functionally different datapaths.
For complex topologies, a combination of the two is the most For complex topologies, a combination of the two is the most
flexible. A general design guideline is provided to indicate which flexible. A general design guideline is provided to indicate
approach is best used for a particular situation. The topological which approach is best used for a particular situation. The
approach should primarily be used when the packet datapath forks to topological approach should primarily be used when the packet
distinct LFB classes (not just distinct parameterizations of the datapath forks to distinct LFB classes (not just distinct
same LFB class), and when the fan-outs do not require changes, such parameterizations of the same LFB class), and when the fan-outs do
as adding/removing LFB outputs, or require only very infrequent not require changes, such as adding/removing LFB outputs, or
changes. Configuration information that needs to change frequently require only very infrequent changes. Configuration information
should be expressed by using the internal attributes of one or more that needs to change frequently should be expressed by using the
LFBs (and hence using the encoded state approach). internal attributes of one or more LFBs (and hence using the
encoded state approach).
+---------------------------------------------+ +---------------------------------------------+
| | | |
+----------+ V +----------+ +------+ | +----------+ V +----------+ +------+ |
| | | | |if IP-in-IP| | | | | | | |if IP-in-IP| | |
---->| ingress |->+----->|classifier|---------->|Decap.|---->---+ ---->| ingress |->+----->|classifier|---------->|Decap.|---->---+
| ports | | |----+ | | | ports | | |----+ | |
+----------+ +----------+ |others+------+ +----------+ +----------+ |others+------+
| |
V V
(a) The LFB topology with a logical loop (a) The LFB topology with a logical loop
+-------+ +-----------+ +------+ +-----------+ +-------+ +-----------+ +------+ +-----------+
| | | |if IP-in-IP | | | | | | | |if IP-in-IP | | | |
--->|ingress|-->|classifier1|----------->|Decap.|-->+classifier2|-> --->|ingress|-->|classifier1|----------->|Decap.|-->+classifier2|-
>
| ports | | |----+ | | | | | ports | | |----+ | | | |
+-------+ +-----------+ |others +------+ +-----------+ +-------+ +-----------+ |others +------+ +-----------+
| |
V V
(b) The LFB topology without the loop utilizing two (b) The LFB topology without the loop utilizing two
independent classifier instances. independent classifier instances.
Figure 6. An LFB topology example. Figure 6. An LFB topology example.
It is important to point out that the LFB topology described here is It is important to point out that the LFB topology described here
the logical topology, not the physical topology of how the FE is the logical topology, not the physical topology of how the FE
hardware is actually laid out. Nevertheless, the actual hardware is actually laid out. Nevertheless, the actual
implementation may still influence how the functionality is mapped implementation may still influence how the functionality is mapped
to the LFB topology. Figure 6 shows one simple FE example. In this to the LFB topology. Figure 6 shows one simple FE example. In
example, an IP-in-IP packet from an IPSec application like VPN may this example, an IP-in-IP packet from an IPSec application like
go to the classifier first and have the classification done based on VPN may go to the classifier first and have the classification
the outer IP header; upon being classified as an IP-in-IP packet, done based on the outer IP header; upon being classified as an IP-
the packet is then sent to a decapsulator to strip off the outer IP in-IP packet, the packet is then sent to a decapsulator to strip
header, followed by a classifier again to perform classification on off the outer IP header, followed by a classifier again to perform
the inner IP header. If the same classifier hardware or software is classification on the inner IP header. If the same classifier
used for both outer and inner IP header classification with the same hardware or software is used for both outer and inner IP header
set of filtering rules, a logical loop is naturally present in the classification with the same set of filtering rules, a logical
LFB topology, as shown in Figure 6(a). However, if the loop is naturally present in the LFB topology, as shown in Figure
classification is implemented by two different pieces of hardware or 6(a). However, if the classification is implemented by two
software with different filters (i.e., one set of filters for the different pieces of hardware or software with different filters
outer IP header and another set for the inner IP header), then it is (i.e., one set of filters for the outer IP header and another set
more natural to model them as two different instances of classifier for the inner IP header), then it is more natural to model them as
LFB, as shown in Figure 6(b). two different instances of classifier LFB, as shown in Figure
6(b).
To distinguish between multiple instances of the same LFB class, To distinguish between multiple instances of the same LFB class,
each LFB instance has its own LFB instance ID. One way to encode each LFB instance has its own LFB instance ID. One way to encode
the LFB instance ID is to encode it as x.y where x is the LFB class the LFB instance ID is to encode it as x.y where x is the LFB
ID and y is the instance ID within each LFB class. class ID and y is the instance ID within each LFB class.
3.3.2. Configuring the LFB Topology 3.3.2. Configuring the LFB Topology
While there is little doubt that an individual LFB must be While there is little doubt that an individual LFB must be
configurable, the configurability question is more complicated for configurable, the configurability question is more complicated for
LFB topology. Since the LFB topology is really the graphic LFB topology. Since the LFB topology is really the graphic
representation of the datapaths within an FE, configuring the LFB representation of the datapaths within an FE, configuring the LFB
topology means dynamically changing the datapaths, including topology means dynamically changing the datapaths, including
changing the LFBs along the datapaths on an FE (e.g., creating, changing the LFBs along the datapaths on an FE (e.g., creating,
instantiating or deleting LFBs) and setting up or deleting instantiating or deleting LFBs) and setting up or deleting
interconnections between outputs of upstream LFBs to inputs of interconnections between outputs of upstream LFBs to inputs of
downstream LFBs. downstream LFBs.
Why would the datapaths on an FE ever change dynamically? The Why would the datapaths on an FE ever change dynamically? The
datapaths on an FE are set up by the CE to provide certain data datapaths on an FE are set up by the CE to provide certain data
plane services (e.g., DiffServ, VPN, etc.) to the Network Element's plane services (e.g., DiffServ, VPN, etc.) to the Network
(NE) customers. The purpose of reconfiguring the datapaths is to Element's (NE) customers. The purpose of reconfiguring the
enable the CE to customize the services the NE is delivering at run datapaths is to enable the CE to customize the services the NE is
time. The CE needs to change the datapaths when the service delivering at run time. The CE needs to change the datapaths when
requirements change, such as adding a new customer or when an the service requirements change, such as adding a new customer or
existing customer changes their service. However, note that not all when an existing customer changes their service. However, note
datapath changes result in changes in the LFB topology graph. that not all datapath changes result in changes in the LFB
Changes in the graph are dependent on the approach used to map the topology graph. Changes in the graph are dependent on the approach
datapaths into LFB topology. As discussed in 3.3.1, the topological used to map the datapaths into LFB topology. As discussed in
approach and encoded state approach can result in very different 3.3.1, the topological approach and encoded state approach can
looking LFB topologies for the same datapaths. In general, an LFB result in very different looking LFB topologies for the same
topology based on a pure topological approach is likely to datapaths. In general, an LFB topology based on a pure
experience more frequent topology reconfiguration than one based on topological approach is likely to experience more frequent
an encoded state approach. However, even an LFB topology based topology reconfiguration than one based on an encoded state
entirely on an encoded state approach may have to change the approach. However, even an LFB topology based entirely on an
topology at times, for example, to bypass some LFBs or insert new encoded state approach may have to change the topology at times,
LFBs. Since a mix of these two approaches is used to model the for example, to bypass some LFBs or insert new LFBs. Since a mix
datapaths, LFB topology reconfiguration is considered an important of these two approaches is used to model the datapaths, LFB
aspect of the FE model. topology reconfiguration is considered an important aspect of the
FE model.
We want to point out that allowing a configurable LFB topology in We want to point out that allowing a configurable LFB topology in
the FE model does not mandate that all FEs must have this the FE model does not mandate that all FEs must have this
capability. Even if an FE supports configurable LFB topology, the capability. Even if an FE supports configurable LFB topology, the
FE may impose limitations on what can actually be configured. FE may impose limitations on what can actually be configured.
Performance-optimized hardware implementations may have zero or very Performance-optimized hardware implementations may have zero or
limited configurability, while FE implementations running on network very limited configurability, while FE implementations running on
processors may provide more flexibility and configurability. It is network processors may provide more flexibility and
entirely up to the FE designers to decide whether or not the FE configurability. It is entirely up to the FE designers to decide
actually implements reconfiguration and if so, how much. Whether a whether or not the FE actually implements reconfiguration and if
simple runtime switch is used to enable or disable (i.e., bypass) so, how much. Whether a simple runtime switch is used to enable
certain LFBs, or more flexible software reconfiguration is used, is or disable (i.e., bypass) certain LFBs, or more flexible software
implementation detail internal to the FE and outside of the scope of reconfiguration is used, is implementation detail internal to the
FE model. In either case, the CE(s) must be able to learn the FE's FE and outside of the scope of FE model. In either case, the
configuration capabilities. Therefore, the FE model must provide a CE(s) must be able to learn the FE's configuration capabilities.
mechanism for describing the LFB topology configuration capabilities Therefore, the FE model must provide a mechanism for describing
of an FE. These capabilities may include (see Section 5 for full the LFB topology configuration capabilities of an FE. These
details): capabilities may include (see Section 5 for full details):
. Which LFB classes the FE can instantiate . Which LFB classes the FE can instantiate
. Maximum number of instances of the same LFB class that can be . Maximum number of instances of the same LFB class that can be
created created
. Any topological limitations, For example: . Any topological limitations, For example:
o The maximum number of instances of the same class or any o The maximum number of instances of the same class or any
class that can be created on any given branch of the graph class that can be created on any given branch of the
graph
o Ordering restrictions on LFBs (e.g., any instance of LFB o Ordering restrictions on LFBs (e.g., any instance of LFB
class A must be always downstream of any instance of LFB class A must be always downstream of any instance of LFB
class B). class B).
Note that even when the CE is allowed to configure LFB topology for Note that even when the CE is allowed to configure LFB topology
the FE, the CE is not expected to be able to interpret an arbitrary for the FE, the CE is not expected to be able to interpret an
LFB topology and determine which specific service or application arbitrary LFB topology and determine which specific service or
(e.g. VPN, DiffServ, etc.) is supported by the FE. However, once application (e.g. VPN, DiffServ, etc.) is supported by the FE.
the CE understands the coarse capability of an FE, it is the However, once the CE understands the coarse capability of an FE,
responsibility of the CE to configure the LFB topology to implement it is the responsibility of the CE to configure the LFB topology
the network service the NE is supposed to provide. Thus, the to implement the network service the NE is supposed to provide.
mapping the CE has to understand is from the high level NE service Thus, the mapping the CE has to understand is from the high level
to a specific LFB topology, not the other way around. The CE is not NE service to a specific LFB topology, not the other way around.
expected to have the ultimate intelligence to translate any high The CE is not expected to have the ultimate intelligence to
level service policy into the configuration data for the FEs. translate any high level service policy into the configuration
However, it is conceivable that within a given network service data for the FEs. However, it is conceivable that within a given
domain, a certain amount of intelligence can be programmed into the network service domain, a certain amount of intelligence can be
CE to give the CE a general understanding of the LFBs involved to programmed into the CE to give the CE a general understanding of
allow the translation from a high level service policy to the low the LFBs involved to allow the translation from a high level
level FE configuration to be done automatically. Note that this is service policy to the low level FE configuration to be done
considered an implementation issue internal to the control plane and automatically. Note that this is considered an implementation
outside the scope of the FE model. Therefore, it is not discussed issue internal to the control plane and outside the scope of the
any further in this draft. FE model. Therefore, it is not discussed any further in this
draft.
+----------+ +-----------+ +----------+ +-----------+
---->| Ingress |---->|classifier |--------------+ ---->| Ingress |---->|classifier |--------------+
| | |chip | | | | |chip | |
+----------+ +-----------+ | +----------+ +-----------+ |
v v
+-------------------------------------------+ +-------------------------------------------+
+--------+ | Network Processor | +--------+ | Network Processor |
<----| Egress | | +------+ +------+ +-------+ | <----| Egress | | +------+ +------+ +-------+ |
+--------+ | |Meter | |Marker| |Dropper| | +--------+ | |Meter | |Marker| |Dropper| |
skipping to change at page 35, line 43 skipping to change at page 38, line 43
Figure 7. An example of configuring LFB topology. Figure 7. An example of configuring LFB topology.
Figure 7 shows an example where a QoS-enabled router has several Figure 7 shows an example where a QoS-enabled router has several
line cards that have a few ingress ports and egress ports, a line cards that have a few ingress ports and egress ports, a
specialized classification chip, a network processor containing specialized classification chip, a network processor containing
codes for FE blocks like meter, marker, dropper, counter, queue, codes for FE blocks like meter, marker, dropper, counter, queue,
scheduler and Ipv4 forwarder. Some of the LFB topology is already scheduler and Ipv4 forwarder. Some of the LFB topology is already
fixed and has to remain static due to the physical layout of the fixed and has to remain static due to the physical layout of the
line cards. For example, all of the ingress ports might be hard- line cards. For example, all of the ingress ports might be hard-
wired into the classification chip so all packets must flow from the wired into the classification chip so all packets must flow from
ingress port into the classification engine. On the other hand, the the ingress port into the classification engine. On the other
LFBs on the network processor and their execution order are hand, the LFBs on the network processor and their execution order
programmable. However, certain capacity limits and linkage are programmable. However, certain capacity limits and linkage
constraints could exist between these LFBs. Examples of the capacity constraints could exist between these LFBs. Examples of the
limits might be: 8 meters; 16 queues in one FE; the scheduler can capacity limits might be: 8 meters; 16 queues in one FE; the
handle at most up to 16 queues; etc. The linkage constraints might scheduler can handle at most up to 16 queues; etc. The linkage
dictate that the classification engine may be followed by a meter, constraints might dictate that the classification engine may be
marker, dropper, counter, queue or IPv4 forwarder, but not a followed by a meter, marker, dropper, counter, queue or IPv4
scheduler; queues can only be followed by a scheduler; a scheduler forwarder, but not a scheduler; queues can only be followed by a
must be followed by the IPv4 forwarder; the last LFB in the datapath scheduler; a scheduler must be followed by the IPv4 forwarder; the
before going into the egress ports must be the IPv4 forwarder, etc. last LFB in the datapath before going into the egress ports must
be the IPv4 forwarder, etc.
Once the FE reports these capabilities and capacity limits to the Once the FE reports these capabilities and capacity limits to the
CE, it is now up to the CE to translate the QoS policy into a CE, it is now up to the CE to translate the QoS policy into a
desirable configuration for the FE. Figure 7(a) depicts the FE desirable configuration for the FE. Figure 7(a) depicts the FE
capability while 7(b) and 7(c) depict two different topologies that capability while 7(b) and 7(c) depict two different topologies
the CE may request the FE to configure. Note that both the ingress that the CE may request the FE to configure. Note that both the
and egress are omitted in (b) and (c) to simplify the ingress and egress are omitted in (b) and (c) to simplify the
representation. The topology in 7(c) is considerably more complex representation. The topology in 7(c) is considerably more complex
than 7(b) but both are feasible within the FE capabilities, and so than 7(b) but both are feasible within the FE capabilities, and so
the FE should accept either configuration request from the CE. the FE should accept either configuration request from the CE.
4. 4.
Model and Schema for LFB Classes Model and Schema for LFB Classes
The main goal of the FE model is to provide an abstract, generic, The main goal of the FE model is to provide an abstract, generic,
modular, implementation-independent representation of the FEs. This modular, implementation-independent representation of the FEs.
is facilitated using the concept of LFBs, which are instantiated This is facilitated using the concept of LFBs, which are
from LFB classes. LFB classes and associated definitions will be instantiated from LFB classes. LFB classes and associated
provided in a collection of XML documents. The collection of these definitions will be provided in a collection of XML documents. The
XML documents is called a LFB class library, and each document is collection of these XML documents is called a LFB class library,
called an LFB class library document (or library document, for and each document is called an LFB class library document (or
short). Each of the library documents will conform to the schema library document, for short). Each of the library documents will
presented in this section. The root element of the library document conform to the schema presented in this section. The root element
is the <LFBLibrary> element. of the library document is the <LFBLibrary> element.
It is not expected that library documents will be exchanged between It is not expected that library documents will be exchanged
FEs and CEs "over-the-wire". But the model will serve as an between FEs and CEs "over-the-wire". But the model will serve as
important reference for the design and development of the CEs an important reference for the design and development of the CEs
(software) and FEs (mostly the software part). It will also serve (software) and FEs (mostly the software part). It will also serve
as a design input when specifying the ForCES protocol elements for as a design input when specifying the ForCES protocol elements for
CE-FE communication. CE-FE communication.
4.1. Namespace 4.1. Namespace
The LFBLibrary element and all of its sub-elements are defined in The LFBLibrary element and all of its sub-elements are defined in
the following namespace: the following namespace:
http://ietf.org/forces/1.0/lfbmodel http://ietf.org/forces/1.0/lfbmodel
skipping to change at page 37, line 14 skipping to change at page 40, line 14
. <frameTypeDefs> for the frame declarations; . <frameTypeDefs> for the frame declarations;
. <dataTypeDefs> for defining common data types; . <dataTypeDefs> for defining common data types;
. <metadataDefs> for defining metadata, and . <metadataDefs> for defining metadata, and
. <LFBClassDefs> for defining LFB classes. . <LFBClassDefs> for defining LFB classes.
Each block is optional, that is, one library document may contain Each block is optional, that is, one library document may contain
only metadata definitions, another may contain only LFB class only metadata definitions, another may contain only LFB class
definitions, yet another may contain all of the above. definitions, yet another may contain all of the above.
In addition to the above main blocks, a library document can import In addition to the above main blocks, a library document can
other library documents if it needs to refer to definitions import other library documents if it needs to refer to definitions
contained in the included document. This concept is similar to the contained in the included document. This concept is similar to
"#include" directive in C. Importing is expressed by the <load> the "#include" directive in C. Importing is expressed by the
elements, which must precede all the above elements in the document. <load> elements, which must precede all the above elements in the
For unique referencing, each LFBLibrary instance document has a document. For unique referencing, each LFBLibrary instance
unique label defined in the "provide" attribute of the LFBLibrary document has a unique label defined in the "provide" attribute of
element. the LFBLibrary element.
The <LFBLibrary> element also includes an optional <description> The <LFBLibrary> element also includes an optional <description>
element, which can be used to provide textual description about the element, which can be used to provide textual description about
library document. the library document.
The following is a skeleton of a library document: The following is a skeleton of a library document:
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<LFBLibrary xmlns="http://ietf.org/forces/1.0/lfbmodel" <LFBLibrary xmlns="http://ietf.org/forces/1.0/lfbmodel"
provides="this_library"> provides="this_library">
<description> <description>
... ...
</description> </description>
skipping to change at page 38, line 38 skipping to change at page 41, line 38
Three examples for the <load> elements: Three examples for the <load> elements:
<load library="a_library"/> <load library="a_library"/>
<load library="another_library" location="another_lib.xml"/> <load library="another_library" location="another_lib.xml"/>
<load library="yetanother_library" <load library="yetanother_library"
location="http://www.petrimeat.com/forces/1.0/lfbmodel/lpm.xml"/> location="http://www.petrimeat.com/forces/1.0/lfbmodel/lpm.xml"/>
4.4. <frameDefs> Element for Frame Type Declarations 4.4. <frameDefs> Element for Frame Type Declarations
Frame names are used in the LFB definition to define the types of Frame names are used in the LFB definition to define the types of
frames the LFB expects at its input port(s) and emits at its output frames the LFB expects at its input port(s) and emits at its
port(s). The <frameDefs> optional element in the library document output port(s). The <frameDefs> optional element in the library
contains one or more <frameDef> elements, each declaring one frame document contains one or more <frameDef> elements, each declaring
type. one frame type.
Each frame definition contains a unique name (NMTOKEN) and a brief Each frame definition contains a unique name (NMTOKEN) and a brief
synopsis. In addition, an optional detailed description may be synopsis. In addition, an optional detailed description may be
provided. provided.
Uniqueness of frame types must be ensured among frame types defined Uniqueness of frame types must be ensured among frame types
in the same library document and in all directly or indirectly defined in the same library document and in all directly or
included library documents. indirectly included library documents.
The following example defines two frame types: The following example defines two frame types:
<frameDefs> <frameDefs>
<frameDef> <frameDef>
<name>ipv4</name> <name>ipv4</name>
<synopsis>IPv4 packet</synopsis> <synopsis>IPv4 packet</synopsis>
<description> <description>
This frame type refers to an IPv4 packet. This frame type refers to an IPv4 packet.
</description> </description>
skipping to change at page 39, line 31 skipping to change at page 42, line 31
<synopsis>IPv6 packet</synopsis> <synopsis>IPv6 packet</synopsis>
<description> <description>
This frame type refers to an IPv6 packet. This frame type refers to an IPv6 packet.
</description> </description>
</frameDef> </frameDef>
... ...
</frameDefs> </frameDefs>
4.5. <dataTypeDefs> Element for Data Type Definitions 4.5. <dataTypeDefs> Element for Data Type Definitions
The (optional) <dataTypeDefs> element can be used to define commonly The (optional) <dataTypeDefs> element can be used to define
used data types. It contains one or more <dataTypeDef> elements, commonly used data types. It contains one or more <dataTypeDef>
each defining a data type with a unique name. Such data types can be elements, each defining a data type with a unique name. Such data
used in several places in the library documents, including: types can be used in several places in the library documents,
including:
. Defining other data types . Defining other data types
. Defining metadata . Defining metadata
. Defining attributes of LFB classes . Defining attributes of LFB classes
This is similar to the concept of having a common header file for This is similar to the concept of having a common header file for
shared data types. shared data types.
Each <dataTypeDef> element contains a unique name (NMTOKEN), a brief Each <dataTypeDef> element contains a unique name (NMTOKEN), a
synopsis, an optional longer description, and a type definition brief synopsis, an optional longer description, and a type
element. The name must be unique among all data types defined in definition element. The name must be unique among all data types
the same library document and in any directly or indirectly included defined in the same library document and in any directly or
library documents. For example: indirectly included library documents. For example:
<dataTypeDefs> <dataTypeDefs>
<dataTypeDef> <dataTypeDef>
<name>ieeemacaddr</name> <name>ieeemacaddr</name>
<synopsis>48-bit IEEE MAC address</synopsis> <synopsis>48-bit IEEE MAC address</synopsis>
... type definition ... ... type definition ...
</dataTypeDef> </dataTypeDef>
<dataTypeDef> <dataTypeDef>
<name>ipv4addr</name> <name>ipv4addr</name>
<synopsis>IPv4 address</synopsis> <synopsis>IPv4 address</synopsis>
... type definition ... ... type definition ...
</dataTypeDef> </dataTypeDef>
... ...
</dataTypeDefs> </dataTypeDefs>
There are two kinds of data types: atomic and compound. Atomic data There are two kinds of data types: atomic and compound. Atomic
types are appropriate for single-value variables (e.g. integer, data types are appropriate for single-value variables (e.g.
ASCII string, byte array). integer, ASCII string, byte array).
The following built-in atomic data types are provided, but The following built-in atomic data types are provided, but
additional atomic data types can be defined with the <typeRef> and additional atomic data types can be defined with the <typeRef> and
<atomic> elements: <atomic> elements:
<name> Meaning <name> Meaning
---- ------- ---- -------
char 8-bit signed integer char 8-bit signed integer
uchar 8-bit unsigned integer uchar 8-bit unsigned integer
int16 16-bit signed integer int16 16-bit signed integer
uint16 16-bit unsigned integer uint16 16-bit unsigned integer
int32 32-bit signed integer int32 32-bit signed integer
uint32 32-bit unsigned integer uint32 32-bit unsigned integer
int64 64-bit signed integer int64 64-bit signed integer
uint64 64-bit unisgned integer uint64 64-bit unisgned integer
boolean A true / false value where boolean A true / false value where
0 = false, 1 = true 0 = false, 1 = true
string[N] ASCII null-terminated string with string[N] ASCII null-terminated string with
buffer of N characters (string max buffer of N characters (string max
length is N-1) length is N-1)
string ASCII null-terminated string without
length limitation
byte[N] A byte array of N bytes byte[N] A byte array of N bytes
octetstring[N] A buffer of N octets, which may octetstring[N] A buffer of N octets, which may
contain fewer than N octets. Hence contain fewer than N octets. Hence
the encoded value will always have the encoded value will always have
a length. a length.
float16 16-bit floating point number float16 16-bit floating point number
float32 32-bit IEEE floating point number float32 32-bit IEEE floating point number
float64 64-bit IEEE floating point number float64 64-bit IEEE floating point number
These built-in data types can be readily used to define metadata or These built-in data types can be readily used to define metadata
LFB attributes, but can also be used as building blocks when or LFB attributes, but can also be used as building blocks when
defining new data types. The boolean data type is defined here defining new data types. The boolean data type is defined here
because it is so common, even though it can be built by sub-ranging because it is so common, even though it can be built by sub-
the uchar data type. ranging the uchar data type.
Compound data types can build on atomic data types and other Compound data types can build on atomic data types and other
compound data types. Compound data types can be defined in one of compound data types. Compound data types can be defined in one of
four ways. They may be defined as an array of elements of some four ways. They may be defined as an array of elements of some
compound or atomic data type. They may be a structure of named compound or atomic data type. They may be a structure of named
elements of compound or atomic data types (ala C structures). They elements of compound or atomic data types (ala C structures).
may be a union of named elements of compound or atomic data types They may be a union of named elements of compound or atomic data
(ala C unions). They may also be defined as augmentations types (ala C unions). They may also be defined as augmentations
(explained below in 4.5.6) of existing compound data types. (explained below in 4.5.6) of existing compound data types.
Given that the FORCES protocol will be getting and setting attribute Given that the FORCES protocol will be getting and setting
values, all atomic data types used here must be able to be conveyed attribute values, all atomic data types used here must be able to
in the FORCES protocol. Further, the FORCES protocol will need a be conveyed in the FORCES protocol. Further, the FORCES protocol
mechanism to convey compound data types. However, the details of will need a mechanism to convey compound data types. However, the
such representations are for the protocol document to define, not details of such representations are for the protocol document to
the model document. define, not the model document.
For the definition of the actual type in the <dataTypeDef> element, For the definition of the actual type in the <dataTypeDef>
the following elements are available: <typeRef>, <atomic>, <array>, element, the following elements are available: <typeRef>,
<struct>, and <union>. <atomic>, <array>, <struct>, and <union>.
The predefined type alias is somewhere between the atomic and The predefined type alias is somewhere between the atomic and
compound data types. It behaves like a structure, one element of compound data types. It behaves like a structure, one element of
which has special behavior. Given that the special behavior is tied which has special behavior. Given that the special behavior is
to the other parts of the structure, the compound result is treated tied to the other parts of the structure, the compound result is
as a predefined construct. treated as a predefined construct.
[EDITOR: How to support augmentation is for further study.]
4.5.1. <typeRef> Element for Aliasing Existing Data Types 4.5.1. <typeRef> Element for Aliasing Existing Data Types
The <typeRef> element refers to an existing data type by its name. The <typeRef> element refers to an existing data type by its name.
The referred data type must be defined either in the same library The referred data type must be defined either in the same library
document, or in one of the included library documents. If the document, or in one of the included library documents. If the
referred data type is an atomic data type, the newly defined type referred data type is an atomic data type, the newly defined type
will also be regarded as atomic. If the referred data type is a will also be regarded as atomic. If the referred data type is a
compound type, the new type will also be compound. Some usage compound type, the new type will also be compound. Some usage
examples follow: examples follow:
skipping to change at page 42, line 18 skipping to change at page 45, line 20
<typeRef>int16</typeRef> <typeRef>int16</typeRef>
</dataTypeDef> </dataTypeDef>
<dataTypeDef> <dataTypeDef>
<name>ieeemacaddr</name> <name>ieeemacaddr</name>
<synopsis>48-bit IEEE MAC address</synopsis> <synopsis>48-bit IEEE MAC address</synopsis>
<typeRef>byte[6]</typeRef> <typeRef>byte[6]</typeRef>
</dataTypeDef> </dataTypeDef>
4.5.2. <atomic> Element for Deriving New Atomic Types 4.5.2. <atomic> Element for Deriving New Atomic Types
The <atomic> element allows the definition of a new atomic type from The <atomic> element allows the definition of a new atomic type
an existing atomic type, applying range restrictions and/or from an existing atomic type, applying range restrictions and/or
providing special enumerated values. Note that the <atomic> element providing special enumerated values. Note that the <atomic>
can only use atomic types as base types, and its result is always element can only use atomic types as base types, and its result is
another atomic type. always another atomic type.
For example, the following snippet defines a new "dscp" data type: For example, the following snippet defines a new "dscp" data type:
<dataTypeDef> <dataTypeDef>
<name>dscp</name> <name>dscp</name>
<synopsis>Diffserv code point.</synopsis> <synopsis>Diffserv code point.</synopsis>
<atomic> <atomic>
<baseType>uchar</baseType> <baseType>uchar</baseType>
<rangeRestriction> <rangeRestriction>
<allowedRange min="0" max="63"/> <allowedRange min="0" max="63"/>
skipping to change at page 42, line 48 skipping to change at page 45, line 50
</specialValue> </specialValue>
... ...
</specialValues> </specialValues>
</atomic> </atomic>
</dataTypeDef> </dataTypeDef>
4.5.3. <array> Element to Define Arrays 4.5.3. <array> Element to Define Arrays
The <array> element can be used to create a new compound data type The <array> element can be used to create a new compound data type
as an array of a compound or an atomic data type. The type of the as an array of a compound or an atomic data type. The type of the
array entry can be specified either by referring to an existing type array entry can be specified either by referring to an existing
(using the <typeRef> element) or defining an unnamed type inside the type (using the <typeRef> element) or defining an unnamed type
<array> element using any of the <atomic>, <array>, <struct>, or inside the <array> element using any of the <atomic>, <array>,
<union> elements. <struct>, or <union> elements.
The array can be "fixed-size" or "variable-size", which is specified The array can be "fixed-size" or "variable-size", which is
by the "type" attribute of the <array> element. The default is specified by the "type" attribute of the <array> element. The
"variable-size". For variable size arrays, an optional "max-length" default is "variable-size". For variable size arrays, an optional
attribute specifies the maximum allowed length. This attribute "max-length" attribute specifies the maximum allowed length. This
should be used to encode semantic limitations, not implementation attribute should be used to encode semantic limitations, not
limitations. The latter should be handled by capability attributes implementation limitations. The latter should be handled by
of LFB classes, and should never be included in data type capability attributes of LFB classes, and should never be included
definitions. If the "max-length" attribute is not provided, the in data type definitions. If the "max-length" attribute is not
array is regarded as of unlimited-size. provided, the array is regarded as of unlimited-size.
For fixed-size arrays, a "length" attribute must be provided that For fixed-size arrays, a "length" attribute must be provided that
specifies the constant size of the array. specifies the constant size of the array.
The result of this construct is always a compound type, even if the The result of this construct is always a compound type, even if
array has a fixed size of 1. the array has a fixed size of 1.
Arrays can only be subscripted by integers, and will be presumed to Arrays can only be subscripted by integers, and will be presumed
start with index 0. to start with index 0.
In addition to their subscripts, arrays may be declared to have In addition to their subscripts, arrays may be declared to have
content keys. Such a declaration has several effects: content keys. Such a declaration has several effects:
. Any declared key can be used in the ForCES protocol to select . Any declared key can be used in the ForCES protocol to select
an element for operations (for details, see the protocol). an element for operations (for details, see the protocol).
. In any instance of the array, each declared key must be unique . In any instance of the array, each declared key must be
within that instance. No two elements of an array may have the unique within that instance. No two elements of an array may
same values on all the fields which make up a key. have the same values on all the fields which make up a key.
Each key is declared with a keyID for use in the protocol, where the Each key is declared with a keyID for use in the protocol, where
unique key is formed by combining one or more specified key fields. the unique key is formed by combining one or more specified key
To support the case where an array of an atomic type with unique fields. To support the case where an array of an atomic type with
values can be referenced by those values, the key field identifier unique values can be referenced by those values, the key field
may be "*" (i.e., the array entry is the key). If the value type of identifier may be "*" (i.e., the array entry is the key). If the
the array is a structure or an array, then the key is one or more value type of the array is a structure or an array, then the key
fields, each identified by name. Since the field may be an element is one or more fields, each identified by name. Since the field
of the structure, the element of an element of a structure, or may be an element of the structure, the element of an element of a
further nested, the field name is actually a concatenated sequence structure, or further nested, the field name is actually a
of part identifiers, separated by decimal points (˘.÷). The syntax concatenated sequence of part identifiers, separated by decimal
for key field identification is given following the array examples. points ("."). The syntax for key field identification is given
following the array examples.
The following example shows the definition of a fixed size array The following example shows the definition of a fixed size array
with a pre-defined data type as the array elements: with a pre-defined data type as the array elements:
<dataTypeDef> <dataTypeDef>
<name>dscp-mapping-table</name> <name>dscp-mapping-table</name>
<synopsis> <synopsis>
A table of 64 DSCP values, used to re-map code space. A table of 64 DSCP values, used to re-map code space.
</synopsis> </synopsis>
<array type="fixed-size" length="64"> <array type="fixed-size" length="64">
skipping to change at page 44, line 26 skipping to change at page 47, line 29
limit on its size: limit on its size:
<dataTypeDef> <dataTypeDef>
<name>mac-alias-table</name> <name>mac-alias-table</name>
<synopsis>A table with up to 8 IEEE MAC addresses</synopsis> <synopsis>A table with up to 8 IEEE MAC addresses</synopsis>
<array type="variable-size" max-length="8"> <array type="variable-size" max-length="8">
<typeRef>ieeemacaddr</typeRef> <typeRef>ieeemacaddr</typeRef>
</array> </array>
</dataTypeDef> </dataTypeDef>
The following example shows the definition of an array with a local The following example shows the definition of an array with a
(unnamed) type definition: local (unnamed) type definition:
<dataTypeDef> <dataTypeDef>
<name>classification-table</name> <name>classification-table</name>
<synopsis> <synopsis>
A table of classification rules and result opcodes. A table of classification rules and result opcodes.
</synopsis> </synopsis>
<array type="variable-size"> <array type="variable-size">
<struct> <struct>
<element elementID=÷1÷> <element elementID="1">
<name>rule</name> <name>rule</name>
<synopsis>The rule to match</synopsis> <synopsis>The rule to match</synopsis>
<typeRef>classrule</typeRef> <typeRef>classrule</typeRef>
</element> </element>
<element ˘elementID=÷2÷> <element elementID="2">
<name>opcode</name> <name>opcode</name>
<synopsis>The result code</synopsis> <synopsis>The result code</synopsis>
<typeRef>opcode</typeRef> <typeRef>opcode</typeRef>
</element> </element>
</struct> </struct>
</array> </array>
</dataTypeDef> </dataTypeDef>
In the above example, each entry of the array is a <struct> of two In the above example, each entry of the array is a <struct> of two
fields ("rule" and "opcode"). fields ("rule" and "opcode").
The following example shows a table of IP Prefix information that The following example shows a table of IP Prefix information that
can be accessed by a multi-field content key on the IP Address and can be accessed by a multi-field content key on the IP Address and
prefix length. This means that in any instance of this table, no prefix length. This means that in any instance of this table, no
two entries can have the same IP address and prefix length. two entries can have the same IP address and prefix length.
<dataTypeDef> <dataTypeDef>
<name>ipPrefixInfo_table</name> <name>ipPrefixInfo_table</name>
skipping to change at page 45, line 15 skipping to change at page 48, line 17
The following example shows a table of IP Prefix information that The following example shows a table of IP Prefix information that
can be accessed by a multi-field content key on the IP Address and can be accessed by a multi-field content key on the IP Address and
prefix length. This means that in any instance of this table, no prefix length. This means that in any instance of this table, no
two entries can have the same IP address and prefix length. two entries can have the same IP address and prefix length.
<dataTypeDef> <dataTypeDef>
<name>ipPrefixInfo_table</name> <name>ipPrefixInfo_table</name>
<synopsis> <synopsis>
A table of information about known prefixes A table of information about known prefixes
</synopsis> </synopsis>
<array type=÷variable-size÷> <array type="variable-size">
<struct> <struct>
<element elementID=÷1÷> <element elementID="1">
<name>address-prefix</name> <name>address-prefix</name>
<synopsis>the prefix being described</synopsis> <synopsis>the prefix being described</synopsis>
<typeRef>ipv4Prefix</typeRef> <typeRef>ipv4Prefix</typeRef>
</element> </element>
<element elementID=÷2÷> <element elementID="2">
<name>source</name> <name>source</name>
<synopsis>where is this from</synopsis> <synopsis>where is this from</synopsis>
<typeRef>uint16</typeRef> <typeRef>uint16</typeRef>
</element> </element>
<element elementID=÷3÷> <element elementID="3">
<name>prefInfo</name> <name>prefInfo</name>
<synopsis>the information we care about</synopsis> <synopsis>the information we care about</synopsis>
<typeRef>hypothetical-info-type</typeRef> <typeRef>hypothetical-info-type</typeRef>
</element> </element>
</struct> </struct>
<key keyID=÷1÷> <key keyID="1">
<keyField> address-prefix.ipv4addr </keyField> <keyField> address-prefix.ipv4addr </keyField>
<keyField> address-prefix.prefixlen </keyField> <keyField> address-prefix.prefixlen </keyField>
<keyField> source </keyField> <keyField> source </keyField>
</key> </key>
</array> </array>
</dataTypeDef> </dataTypeDef>
Note that the keyField elements could also have been simply address- Note that the keyField elements could also have been simply
prefix and source, since all of the fields of address-prefix are address-prefix and source, since all of the fields of address-
being used. prefix are being used.
4.5.3.1 Key Field References 4.5.3.1 Key Field References
In order to use key declarations, one must refer to fields that are In order to use key declarations, one must refer to fields that
potentially nested inside other fields in the array. If there are are potentially nested inside other fields in the array. If there
nested arrays, one might even use an array element as a key (but are nested arrays, one might even use an array element as a key
great care would be needed to ensure uniqueness.) (but great care would be needed to ensure uniqueness.)
The key is the combination of the values of each field declared in a
keyField element. The key is the combination of the values of each field declared in
a keyField element.
Therefore, the value of a keyField element is defined as a Therefore, the value of a keyField element is defined as a
concatenated Sequence of field identifiers, separated by a "." concatenated Sequence of field identifiers, separated by a "."
(period) character. Whitespace is permitted and ignored. (period) character. Whitespace is permitted and ignored.
A valid string for a single field identifier within a keyField A valid string for a single field identifier within a keyField
depends upon the current context. Initially, in an array key depends upon the current context. Initially, in an array key
declaration, the context is the type of the array. Progressively, declaration, the context is the type of the array. Progressively,
the context is whatever type is selected by the field identifiers the context is whatever type is selected by the field identifiers
processed so far in the current key field declaration. processed so far in the current key field declaration.
skipping to change at page 46, line 31 skipping to change at page 49, line 34
When the current context is a structure, the valid values for the When the current context is a structure, the valid values for the
field identifiers are the names of the elements of the structure. field identifiers are the names of the elements of the structure.
In the special case of declaring a key for an array containing an In the special case of declaring a key for an array containing an
atomic type, where that content is unique and is to be used as a atomic type, where that content is unique and is to be used as a
key, the value "*" can be used as the single key field identifier. key, the value "*" can be used as the single key field identifier.
4.5.4. <struct> Element to Define Structures 4.5.4. <struct> Element to Define Structures
A structure is comprised of a collection of data elements. Each A structure is comprised of a collection of data elements. Each
data element has a data type (either an atomic type or an existing data element has a data type (either an atomic type or an existing
compound type) and is assigned a name unique within the scope of the compound type) and is assigned a name unique within the scope of
compound data type being defined. These serve the same function as the compound data type being defined. These serve the same
"struct" in C, etc. function as "struct" in C, etc.
The actual type of the field can be defined by referring to an The actual type of the field can be defined by referring to an
existing type (using the <typeDef> element), or can be a locally existing type (using the <typeDef> element), or can be a locally
defined (unnamed) type created by any of the <atomic>, <array>, defined (unnamed) type created by any of the <atomic>, <array>,
<struct>, or <union> elements. <struct>, or <union> elements.
A structure definition is a series of element declarations. Each A structure definition is a series of element declarations. Each
element carries an elementID for use by the ForCES protocol. In element carries an elementID for use by the ForCES protocol. In
addition, the element contains the name, a synopsis, an optional addition, the element contains the name, a synopsis, an optional
description, an optional declaration that the element itself is description, an optional declaration that the element itself is
optional, and the typeRef declaration that specifies the element optional, and the typeRef declaration that specifies the element
type. type.
For a dataTypeDefinition of a struct, the structure definition may For a dataTypeDef of a struct, the structure definition may be
be inherited from, and augment, a previously defined structured type. inherited from, and augment, a previously defined structured type.
This is indicated by including the derivedFrom attribute on the This is indicated by including the derivedFrom attribute on the
struct declaration. struct declaration.
The result of this construct is always regarded a compound type, The result of this construct is always regarded a compound type,
even when the <struct> contains only one field. even when the <struct> contains only one field.
An example: An example:
<dataTypeDef> <dataTypeDef>
<name>ipv4prefix</name> <name>ipv4prefix</name>
<synopsis> <synopsis>
IPv4 prefix defined by an address and a prefix length IPv4 prefix defined by an address and a prefix length
</synopsis> </synopsis>
<struct> <struct>
<element elementID=÷1÷> <element elementID="1">
<name>address</name> <name>address</name>
<synopsis>Address part</synopsis> <synopsis>Address part</synopsis>
<typeRef>ipv4addr</typeRef> <typeRef>ipv4addr</typeRef>
</element> </element>
<element elementID=÷2÷> <element elementID="2">
<name>prefixlen</name> <name>prefixlen</name>
<synopsis>Prefix length part</synopsis> <synopsis>Prefix length part</synopsis>
<atomic> <atomic>
<baseType>uchar</baseType> <baseType>uchar</baseType>
<rangeRestriction> <rangeRestriction>
<allowedRange min="0" max="32"/> <allowedRange min="0" max="32"/>
</rangeRestriction> </rangeRestriction>
</atomic> </atomic>
</element> </element>
</struct> </struct>
skipping to change at page 47, line 45 skipping to change at page 50, line 50
Similar to the union declaration in C, this construct allows the Similar to the union declaration in C, this construct allows the
definition of overlay types. Its format is identical to the definition of overlay types. Its format is identical to the
<struct> element. <struct> element.
The result of this construct is always regarded a compound type, The result of this construct is always regarded a compound type,
even when the union contains only one element. even when the union contains only one element.
4.5.6 <alias> Element 4.5.6 <alias> Element
It is sometimes necessary to have an element in an LFB or structure It is sometimes necessary to have an element in an LFB or
refer to information in other LFBs. The <alias> declaration creates structure refer to information in other LFBs. The <alias>
the constructs for this. An <alias> element creates a structure declaration creates the constructs for this. The content of an
with fields to control the alias and a field to access the aliased <alias> element is a named type. It can be a base type of a
information. derived type. The actual value referenced by an alias is known as
its target. When a GET or SET operation references the alias
An <alias> declaration is used wherever a type reference can occur, element, the value of the target is returned or replaced. Write
just like a <struct> or <array>. A typical alias usage would look access to an alias element is permitted if write access to both
like: the alias and the target are permitted.
<dataTypeDef>
<name>anAliasedVariable</name>
<synopsis>a reference to something, somewhere</synopsis>
<alias>the-underlying-type</alias>
</dataTypeDef>
This definition declares a type to be used for an alias to things of
type ˘the-underlying-type÷. This would more likely occur inside a
structure rather than directly in a dataTypeDef.
An alias is a complex structure in order to hold the pieces
necessary to make it useful. If "alias" was an actual declared
structure, and if "tiedReference" was a usable type, the structure
declaration would look like:
<dataTypeDef> The target of an <alias> element is determined by its properties.
<name>alias</name> Like all elements, the properties include the support / read /
<synopsis>a reference to information in another LFB</synopsis> write permission for the alias. In addition, several fields in
<struct> the property elements define the target of the alias. These
<element elementID=÷1÷> fields are the ID of the LFB class of the target, the ID of the
<name>referenceClass</name> LFB instance of the target, and a sequence of integers
<synopsis> representing the path within the target LFB instance to the target
The class of LFB this alias is currently pointing to element. The type of the target element must match the declared
</synopsis> type of the alias. Details of the alias property structure are
<typeRef>uint32</typeRef> contained in the section of this document on properties.
</element>
<element elementID=÷2÷>
<name>referenceInstance</name>
<synopsis>
The LFB Instance this alias is currently pointing to
</synopsis>
<typeRef>uint32</typeRef>
</element>
<element elementID=÷3÷>
<name>referencePath</name>
<synopsis>
The path to the LFB field this alias is currently
pointing to
</synopsis>
<typeRef)octetString[128]</typeRef>
</element>
<element elementID=÷4÷>
<name>referenceClass</name>
<synopsis>
The element to use to follow the alias
</synopsis>
<typeRef>tiedReference</typeRef>
</element>
</struct>
</dataTypeDef>
The referencePath is the identifier in the form used by the ForCES Note that the read / write property of the alias refers to the
protocol for the actual field being referenced. Its type must be value. The CE can only determine if it can write the target
the same as the type declared for the alias. (And the FE MUST ensure selection properties of the alias by attempting such a write
the types are the same on any effort to set the referenceClass, operation. (Property elements do not themselves have properties.)
referenceInstance, or referencePath elements). Note that "128" is
the length limit for paths in the ForCES protocol.) Thus, by
setting the three control fields, the CE controls which LFB and the
field in that LFB, the alias data points to. Typically, this will
be information needed by the LFB containing the element with an
<alias> declaration.
4.5.6. Augmentations 4.5.6. Augmentations
Compound types can also be defined as augmentations of existing Compound types can also be defined as augmentations of existing
compound types. If the existing compound type is a structure, compound types. If the existing compound type is a structure,
augmentation may add new elements to the type. The type of an augmentation may add new elements to the type. The type of an
existing element can only be replaced with an augmentation derived existing element can only be replaced with an augmentation derived
from the current type, an existing element cannot be deleted. If from the current type, an existing element cannot be deleted. If
the existing compound type is an array, augmentation means the existing compound type is an array, augmentation means
augmentation of the array element type. augmentation of the array element type.
One consequence of this is that augmentations are compatible with One consequence of this is that augmentations are compatible with
the compound type from which they are derived. As such, the compound type from which they are derived. As such,
augmentations are useful in defining attributes for LFB subclasses augmentations are useful in defining attributes for LFB subclasses
with backward compatibility. In addition to adding new attributes with backward compatibility. In addition to adding new attributes
to a class, the data type of an existing attribute may be replaced to a class, the data type of an existing attribute may be replaced
by an augmentation of that attribute, and still meet the by an augmentation of that attribute, and still meet the
compatibility rules for subclasses. compatibility rules for subclasses.
For example, consider a simple base LFB class A that has only one For example, consider a simple base LFB class A that has only one
attribute (attr1) of type X. One way to derive class A1 from A can attribute (attr1) of type X. One way to derive class A1 from A
be by simply adding a second attribute (of any type). Another way can be by simply adding a second attribute (of any type). Another
to derive a class A2 from A can be by replacing the original way to derive a class A2 from A can be by replacing the original
attribute (attr1) in A of type X with one of type Y, where Y is an attribute (attr1) in A of type X with one of type Y, where Y is an
augmentation of X. Both classes A1 and A2 are backward compatible augmentation of X. Both classes A1 and A2 are backward compatible
with class A. with class A.
The syntax for augmentations is to include a derivedFrom attribute The syntax for augmentations is to include a derivedFrom element
in a structure definition, indicating what structure type is being in a structure definition, indicating what structure type is being
augmented. Element names and element IDs within the augmentation augmented. Element names and element IDs within the augmentation
must not be the same as those in the structure type being augmented. must not be the same as those in the structure type being
augmented.
[EDITOR: This is a preliminary proposal for handling augmentation of
structures.]
4.6. <metadataDefs> Element for Metadata Definitions 4.6. <metadataDefs> Element for Metadata Definitions
The (optional) <metadataDefs> element in the library document The (optional) <metadataDefs> element in the library document
contains one or more <metadataDef> elements. Each <metadataDef> contains one or more <metadataDef> elements. Each <metadataDef>
element defines a metadata. element defines a metadata.
Each <metadataDef> element contains a unique name (NMTOKEN). Each <metadataDef> element contains a unique name (NMTOKEN).
Uniqueness is defined to be over all metadata defined in this Uniqueness is defined to be over all metadata defined in this
library document and in all directly or indirectly included library library document and in all directly or indirectly included
documents. The <metadataDef> element also contains a brief library documents. The <metadataDef> element also contains a brief
synopsis, an optional detailed description, and a compulsory type synopsis, an optional detailed description, and a compulsory type
definition information. Only atomic data types can be used as value definition information. Only atomic data types can be used as
types for metadata. value types for metadata.
Two forms of type definitions are allowed. The first form uses the Two forms of type definitions are allowed. The first form uses the
<typeRef> element to refer to an existing atomic data type defined <typeRef> element to refer to an existing atomic data type defined
in the <dataTypeDefs> element of the same library document or in one in the <dataTypeDefs> element of the same library document or in
of the included library documents. The usage of the <typeRef> one of the included library documents. The usage of the <typeRef>
element is identical to how it is used in the <dataTypeDef> element is identical to how it is used in the <dataTypeDef>
elements, except here it can only refer to atomic types. elements, except here it can only refer to atomic types.
[EDITOR: The latter restriction is not yet enforced by the XML [EDITOR: The latter restriction is not yet enforced by the XML
schema.] schema.]
The second form is an explicit type definition using the <atomic> The second form is an explicit type definition using the <atomic>
element. This element is used here in the same way as in the element. This element is used here in the same way as in the
<dataTypeDef> elements. <dataTypeDef> elements.
skipping to change at page 51, line 25 skipping to change at page 53, line 28
</metadataDef> </metadataDef>
</metadataDefs> </metadataDefs>
4.7. <LFBClassDefs> Element for LFB Class Definitions 4.7. <LFBClassDefs> Element for LFB Class Definitions
The (optional) <LFBClassDefs> element can be used to define one or The (optional) <LFBClassDefs> element can be used to define one or
more LFB classes using <LFBClassDef> elements. Each <LFBClassDef> more LFB classes using <LFBClassDef> elements. Each <LFBClassDef>
element defines an LFB class and includes the following elements: element defines an LFB class and includes the following elements:
. <name> provides the symbolic name of the LFB class. Example: . <name> provides the symbolic name of the LFB class. Example:
"ipv4lpm" "ipv4lpm"
. <synopsis> provides a short synopsis of the LFB class. Example: . <synopsis> provides a short synopsis of the LFB class.
"IPv4 Longest Prefix Match Lookup LFB" Example: "IPv4 Longest Prefix Match Lookup LFB"
. <version> is the version indicator . <version> is the version indicator
. <derivedFrom> is the inheritance indicator . <derivedFrom> is the inheritance indicator
. <inputPorts> lists the input ports and their specifications . <inputPorts> lists the input ports and their specifications
. <outputPorts> lists the output ports and their specifications . <outputPorts> lists the output ports and their specifications
. <attributes> defines the operational attributes of the LFB . <attributes> defines the operational attributes of the LFB
. <capabilities> defines the capability attributes of the LFB . <capabilities> defines the capability attributes of the LFB
. <description> contains the operational specification of the LFB . <description> contains the operational specification of the
. The LFBClassID attribute of the LFBClassDef element defines the LFB
ID for this class. These must be globally unique. . The LFBClassID attribute of the LFBClassDef element defines
the ID for this class. These must be globally unique.
. <events> defines the events that can be generated by
instances of this LFB.
[EDITOR: LFB class names should be unique not only among classes [EDITOR: LFB class names should be unique not only among classes
defined in this document and in all included documents, but also defined in this document and in all included documents, but also
unique across a large collection of libraries. Obviously some global unique across a large collection of libraries. Obviously some
control is needed to ensure such uniqueness. This subject requires global control is needed to ensure such uniqueness. This subject
further study. The uniqueness of the class IDs also requires further requires further study. The uniqueness of the class IDs also
study.] requires further study.]
Here is a skeleton of an example LFB class definition: Here is a skeleton of an example LFB class definition:
<LFBClassDefs> <LFBClassDefs>
<LFBClassDef LFBClassID=÷12345÷> <LFBClassDef LFBClassID="12345">
<name>ipv4lpm</name> <name>ipv4lpm</name>
<synopsis>IPv4 Longest Prefix Match Lookup LFB</synopsis> <synopsis>IPv4 Longest Prefix Match Lookup LFB</synopsis>
<version>1.0</version> <version>1.0</version>
<derivedFrom>baseclass</derivedFrom> <derivedFrom>baseclass</derivedFrom>
<inputPorts> <inputPorts>
... ...
</inputPorts> </inputPorts>
<outputPorts> <outputPorts>
skipping to change at page 52, line 33 skipping to change at page 54, line 39
This LFB represents the IPv4 longest prefix match lookup This LFB represents the IPv4 longest prefix match lookup
operation. operation.
The modeled behavior is as follows: The modeled behavior is as follows:
Blah-blah-blah. Blah-blah-blah.
</description> </description>
</LFBClassDef> </LFBClassDef>
... ...
</LFBClassDefs> </LFBClassDefs>
The individual attributes and capabilities will have elementIDs for The individual attributes and capabilities will have elementIDs
use by the ForCES protocol. These parallel the elementIDs used in for use by the ForCES protocol. These parallel the elementIDs
structs, and are used the same way. Attribute and capability used in structs, and are used the same way. Attribute and
elementIDs must be unique within the LFB class definition. capability elementIDs must be unique within the LFB class
definition.
Note that the <name>, <synopsis>, and <version> elements are Note that the <name>, <synopsis>, and <version> elements are
required, all other elements are optional in <LFBClassDef>. However, required, all other elements are optional in <LFBClassDef>.
when they are present, they must occur in the above order. However, when they are present, they must occur in the above
order.
4.7.1. <derivedFrom> Element to Express LFB Inheritance 4.7.1. <derivedFrom> Element to Express LFB Inheritance
The optional <derivedFrom> element can be used to indicate that
The optional <derivedFrom> element can be used to indicate that this this class is a derivative of some other class. The content of
class is a derivative of some other class. The content of this this element must be the unique name (<name>) of another LFB
element must be the unique name (<name>) of another LFB class. The class. The referred LFB class must be defined in the same library
referred LFB class must be defined in the same library document or document or in one of the included library documents.
in one of the included library documents.
[EDITOR: The <derivedFrom> element will likely need to specify the [EDITOR: The <derivedFrom> element will likely need to specify the
version of the ancestor, which is not included in the schema yet. version of the ancestor, which is not included in the schema yet.
The process and rules of class derivation are still being studied.] The process and rules of class derivation are still being
studied.]
It is assumed that the derived class is backwards compatible with It is assumed that the derived class is backwards compatible with
the base class. the base class.
4.7.2. <inputPorts> Element to Define LFB Inputs 4.7.2. <inputPorts> Element to Define LFB Inputs
The optional <inputPorts> element is used to define input ports. An The optional <inputPorts> element is used to define input ports.
LFB class may have zero, one, or more inputs. If the LFB class has An LFB class may have zero, one, or more inputs. If the LFB class
no input ports, the <inputPorts> element must be omitted. The has no input ports, the <inputPorts> element must be omitted. The
<inputPorts> element can contain one or more <inputPort> elements, <inputPorts> element can contain one or more <inputPort> elements,
one for each port or port-group. We assume that most LFBs will have one for each port or port-group. We assume that most LFBs will
exactly one input. Multiple inputs with the same input type are have exactly one input. Multiple inputs with the same input type
modeled as one input group. Input groups are defined the same way are modeled as one input group. Input groups are defined the same
as input ports by the <inputPort> element, differentiated only by an way as input ports by the <inputPort> element, differentiated only
optional "group" attribute. by an optional "group" attribute.
Multiple inputs with different input types should be avoided if Multiple inputs with different input types should be avoided if
possible (see discussion in Section 3.2.1). Some special LFBs will possible (see discussion in Section 3.2.1). Some special LFBs
have no inputs at all. For example, a packet generator LFB does not will have no inputs at all. For example, a packet generator LFB
need an input. does not need an input.
Single input ports and input port groups are both defined by the Single input ports and input port groups are both defined by the
<inputPort> element, they are differentiated by only an optional <inputPort> element, they are differentiated by only an optional
"group" attribute. "group" attribute.
The <inputPort> element contains the following elements: The <inputPort> element contains the following elements:
. <name> provides the symbolic name of the input. Example: "in". . <name> provides the symbolic name of the input. Example: "in".
Note that this symbolic name must be unique only within the scope Note that this symbolic name must be unique only within the
of the LFB class. scope of the LFB class.
. <synopsis> contains a brief description of the input. Example: . <synopsis> contains a brief description of the input. Example:
"Normal packet input". "Normal packet input".
. <expectation> lists all allowed frame formats. Example: {"ipv4" . <expectation> lists all allowed frame formats. Example:
and "ipv6"}. Note that this list should refer to names specified {"ipv4" and "ipv6"}. Note that this list should refer to names
in the <frameDefs> element of the same library document or in any specified in the <frameDefs> element of the same library
included library documents. The <expectation> element can also document or in any included library documents. The
provide a list of required metadata. Example: {"classid", <expectation> element can also provide a list of required
"vifid"}. This list should refer to names of metadata defined in metadata. Example: {"classid", "vifid"}. This list should
the <metadataDefs> element in the same library document or in any refer to names of metadata defined in the <metadataDefs>
included library documents. For each metadata, it must be element in the same library document or in any included library
specified whether the metadata is required or optional. For each documents. For each metadata, it must be specified whether the
optional metadata, a default value must be specified, which is metadata is required or optional. For each optional metadata,
used by the LFB if the metadata is not provided with a packet. a default value must be specified, which is used by the LFB if
the metadata is not provided with a packet.
In addition, the optional "group" attribute of the <inputPort> In addition, the optional "group" attribute of the <inputPort>
element can specify if the port can behave as a port group, i.e., it element can specify if the port can behave as a port group, i.e.,
is allowed to be instantiated. This is indicated by a "yes" value it is allowed to be instantiated. This is indicated by a "yes"
(the default value is "no"). value (the default value is "no").
An example <inputPorts> element, defining two input ports, the An example <inputPorts> element, defining two input ports, the
second one being an input port group: second one being an input port group:
<inputPorts> <inputPorts>
<inputPort> <inputPort>
<name>in</name> <name>in</name>
<synopsis>Normal input</synopsis> <synopsis>Normal input</synopsis>
<expectation> <expectation>
<frameExpected> <frameExpected>
skipping to change at page 54, line 34 skipping to change at page 56, line 41
<ref>vifid</ref> <ref>vifid</ref>
<ref dependency="optional" defaultValue="0">vrfid</ref> <ref dependency="optional" defaultValue="0">vrfid</ref>
</metadataExpected> </metadataExpected>
</expectation> </expectation>
</inputPort> </inputPort>
<inputPort group="yes"> <inputPort group="yes">
... another input port ... ... another input port ...
</inputPort> </inputPort>
</inputPorts> </inputPorts>
For each <inputPort>, the frame type expectations are defined by the For each <inputPort>, the frame type expectations are defined by
<frameExpected> element using one or more <ref> elements (see the <frameExpected> element using one or more <ref> elements (see
example above). When multiple frame types are listed, it means that example above). When multiple frame types are listed, it means
"one of these" frame types are expected. A packet of any other that "one of these" frame types are expected. A packet of any
frame type is regarded as incompatible with this input port of the other frame type is regarded as incompatible with this input port
LFB class. The above example list two frames as expected frame of the LFB class. The above example list two frames as expected
types: "ipv4" and "ipv6". frame types: "ipv4" and "ipv6".
Metadata expectations are specified by the <metadataExpected> Metadata expectations are specified by the <metadataExpected>
element. In its simplest form, this element can contain a list of element. In its simplest form, this element can contain a list of
<ref> elements, each referring to a metadata. When multiple <ref> elements, each referring to a metadata. When multiple
instances of metadata are listed by <ref> elements, it means that instances of metadata are listed by <ref> elements, it means that
"all of these" metadata must be received with each packet (except "all of these" metadata must be received with each packet (except
metadata that are marked as "optional" by the "dependency" attribute metadata that are marked as "optional" by the "dependency"
of the corresponding <ref> element). For a metadata that is attribute of the corresponding <ref> element). For a metadata
specified "optional", a default value must be provided using the that is specified "optional", a default value must be provided
"defaultValue" attribute. The above example lists three metadata as using the "defaultValue" attribute. The above example lists three
expected metadata, two of which are mandatory ("classid" and metadata as expected metadata, two of which are mandatory
"vifid"), and one being optional ("vrfid"). ("classid" and "vifid"), and one being optional ("vrfid").
[EDITOR: How to express default values for byte[N] atomic types is [EDITOR: How to express default values for byte[N] atomic types is
yet to be defined.] yet to be defined.]
The schema also allows for more complex definitions of metadata The schema also allows for more complex definitions of metadata
expectations. For example, using the <one-of> element, a list of expectations. For example, using the <one-of> element, a list of
metadata can be specified to express that at least one of the metadata can be specified to express that at least one of the
specified metadata must be present with any packet. For example: specified metadata must be present with any packet. For example:
<metadataExpected> <metadataExpected>
<one-of> <one-of>
<ref>prefixmask</ref> <ref>prefixmask</ref>
<ref>prefixlen</ref> <ref>prefixlen</ref>
</one-of> </one-of>
</metadataExpected> </metadataExpected>
The above example specifies that either the "prefixmask" or the The above example specifies that either the "prefixmask" or the
"prefixlen" metadata must be provided with any packet. "prefixlen" metadata must be provided with any packet.
The two forms can also be combined, as it is shown in the following The two forms can also be combined, as it is shown in the
example: following example:
<metadataExpected> <metadataExpected>
<ref>classid</ref> <ref>classid</ref>
<ref>vifid</ref> <ref>vifid</ref>
<ref dependency="optional" defaultValue="0">vrfid</ref> <ref dependency="optional" defaultValue="0">vrfid</ref>
<one-of> <one-of>
<ref>prefixmask</ref> <ref>prefixmask</ref>
<ref>prefixlen</ref> <ref>prefixlen</ref>
</one-of> </one-of>
</metadataExpected> </metadataExpected>
Although the schema is constructed to allow even more complex Although the schema is constructed to allow even more complex
definitions of metadata expectations, we do not discuss those here. definitions of metadata expectations, we do not discuss those
here.
4.7.3. <outputPorts> Element to Define LFB Outputs 4.7.3. <outputPorts> Element to Define LFB Outputs
The optional <outputPorts> element is used to define output
The optional <outputPorts> element is used to define output ports. ports. An LFB class may have zero, one, or more outputs. If the
An LFB class may have zero, one, or more outputs. If the LFB class LFB class has no output ports, the <outputPorts> element must be
has no output ports, the <outputPorts> element must be omitted. The omitted. The <outputPorts> element can contain one or more
<outputPorts> element can contain one or more <outputPort> elements, <outputPort> elements, one for each port or port-group. If there
one for each port or port-group. If there are multiple outputs with are multiple outputs with the same output type, we model them as
the same output type, we model them as an output port group. Some an output port group. Some special LFBs may have no outputs at
special LFBs may have no outputs at all (e.g., Dropper). all (e.g., Dropper).
Single output ports and output port groups are both defined by the Single output ports and output port groups are both defined by the
<outputPort> element; they are differentiated by only an optional <outputPort> element; they are differentiated by only an optional
"group" attribute. "group" attribute.
The <outputPort> element contains the following elements: The <outputPort> element contains the following elements:
. <name> provides the symbolic name of the output. Example: "out". . <name> provides the symbolic name of the output. Example:
Note that the symbolic name must be unique only within the scope "out". Note that the symbolic name must be unique only within
of the LFB class. the scope of the LFB class.
. <synopsis> contains a brief description of the output port. . <synopsis> contains a brief description of the output port.
Example: "Normal packet output". Example: "Normal packet output".
. <product> lists the allowed frame formats. Example: {"ipv4", . <product> lists the allowed frame formats. Example: {"ipv4",
"ipv6"}. Note that this list should refer to symbols specified in "ipv6"}. Note that this list should refer to symbols specified
the <frameDefs> element in the same library document or in any in the <frameDefs> element in the same library document or in
included library documents. The <product> element may also any included library documents. The <product> element may also
contain the list of emitted (generated) metadata. Example: contain the list of emitted (generated) metadata. Example:
{"classid", "color"}. This list should refer to names of metadata {"classid", "color"}. This list should refer to names of
specified in the <metadataDefs> element in the same library metadata specified in the <metadataDefs> element in the same
document or in any included library documents. For each generated library document or in any included library documents. For
metadata, it should be specified whether the metadata is always each generated metadata, it should be specified whether the
generated or generated only in certain conditions. This metadata is always generated or generated only in certain
information is important when assessing compatibility between conditions. This information is important when assessing
LFBs. compatibility between LFBs.
In addition, the optional "group" attribute of the <outputPort> In addition, the optional "group" attribute of the <outputPort>
element can specify if the port can behave as a port group, i.e., it element can specify if the port can behave as a port group, i.e.,
is allowed to be instantiated. This is indicated by a "yes" value it is allowed to be instantiated. This is indicated by a "yes"
(the default value is "no"). value (the default value is "no").
The following example specifies two output ports, the second being The following example specifies two output ports, the second being
an output port group: an output port group:
<outputPorts> <outputPorts>
<outputPort> <outputPort>
<name>out</name> <name>out</name>
<synopsis>Normal output</synopsis> <synopsis>Normal output</synopsis>
<product> <product>
<frameProduced> <frameProduced>
skipping to change at page 57, line 21 skipping to change at page 59, line 30
<metadataProduced> <metadataProduced>
<ref availability="conditional">errorid</ref> <ref availability="conditional">errorid</ref>
</metadataProduced> </metadataProduced>
</product> </product>
</outputPort> </outputPort>
</outputPorts> </outputPorts>
The types of frames and metadata the port produces are defined The types of frames and metadata the port produces are defined
inside the <product> element in each <outputPort>. Within the inside the <product> element in each <outputPort>. Within the
<product> element, the list of frame types the port produces is <product> element, the list of frame types the port produces is
listed in the <frameProduced> element. When more than one frame is listed in the <frameProduced> element. When more than one frame
listed, it means that "one of" these frames will be produced. is listed, it means that "one of" these frames will be produced.
The list of metadata that is produced with each packet is listed in The list of metadata that is produced with each packet is listed
the optional <metadataProduced> element of the <product>. In its in the optional <metadataProduced> element of the <product>. In
simplest form, this element can contain a list of <ref> elements, its simplest form, this element can contain a list of <ref>
each referring to a metadata type. The meaning of such a list is elements, each referring to a metadata type. The meaning of such
that "all of" these metadata are provided with each packet, except a list is that "all of" these metadata are provided with each
those that are listed with the optional "availability" attribute set packet, except those that are listed with the optional
to "conditional". Similar to the <metadataExpected> element of the "availability" attribute set to "conditional". Similar to the
<inputPort>, the <metadataProduced> element supports more complex <metadataExpected> element of the <inputPort>, the
forms, which we do not discuss here further. <metadataProduced> element supports more complex forms, which we
do not discuss here further.
4.7.4. <attributes> Element to Define LFB Operational Attributes 4.7.4. <attributes> Element to Define LFB Operational Attributes
Operational parameters of the LFBs that must be visible to the CEs Operational parameters of the LFBs that must be visible to the CEs
are conceptualized in the model as the LFB attributes. These are conceptualized in the model as the LFB attributes. These
include, for example, flags, single parameter arguments, complex include, for example, flags, single parameter arguments, complex
arguments, and tables. Note that the attributes here refer to only arguments, and tables. Note that the attributes here refer to
those operational parameters of the LFBs that must be visible to the only those operational parameters of the LFBs that must be visible
CEs. Other variables that are internal to LFB implementation are to the CEs. Other variables that are internal to LFB
not regarded as LFB attributes and hence are not covered. implementation are not regarded as LFB attributes and hence are
not covered.
Some examples for LFB attributes are: Some examples for LFB attributes are:
. Configurable flags and switches selecting between operational . Configurable flags and switches selecting between operational
modes of the LFB modes of the LFB
. Number of inputs or outputs in a port group . Number of inputs or outputs in a port group
. Metadata CONSUME vs. PROPAGATE mode selectors . Metadata CONSUME vs. PROPAGATE mode selectors
. Various configurable lookup tables, including interface tables, . Various configurable lookup tables, including interface
prefix tables, classification tables, DSCP mapping tables, MAC tables, prefix tables, classification tables, DSCP mapping
address tables, etc. tables, MAC address tables, etc.
. Packet and byte counters . Packet and byte counters
. Various event counters . Various event counters
. Number of current inputs or outputs for each input or output . Number of current inputs or outputs for each input or output
group group
. Metadata CONSUME/PROPAGATE mode selector . Metadata CONSUME/PROPAGATE mode selector
There may be various access permission restrictions on what the CE There may be various access permission restrictions on what the CE
can do with an LFB attribute. The following categories may be can do with an LFB attribute. The following categories may be
supported: supported:
. No-access attributes. This is useful when multiple access . No-access attributes. This is useful when multiple access
modes may be defined for a given attribute to allow some modes may be defined for a given attribute to allow some
flexibility for different implementations. flexibility for different implementations.
. Read-only attributes. . Read-only attributes.
. Read-write attributes. . Read-write attributes.
. Write-only attributes. This could be any configurable data for . Write-only attributes. This could be any configurable data
which read capability is not provided to the CEs. (e.g., the for which read capability is not provided to the CEs. (e.g.,
security key information) the security key information)
. Read-reset attributes. The CE can read and reset this . Read-reset attributes. The CE can read and reset this
resource, but cannot set it to an arbitrary value. Example: resource, but cannot set it to an arbitrary value. Example:
Counters. Counters.
. Firing-only attributes. A write attempt to this resource will . Firing-only attributes. A write attempt to this resource
trigger some specific actions in the LFB, but the actual value will trigger some specific actions in the LFB, but the actual
written is ignored. value written is ignored.
The LFB class may define more than one possible access mode for a The LFB class may define more than one possible access mode for a
given attribute (for example, "write-only" and "read-write"), in given attribute (for example, "write-only" and "read-write"), in
which case it is left to the actual implementation to pick one of which case it is left to the actual implementation to pick one of
the modes. In such cases, a corresponding capability attribute must the modes. In such cases, a corresponding capability attribute
inform the CE about the access mode the actual LFB instance supports must inform the CE about the access mode the actual LFB instance
(see next subsection on capability attributes). supports (see next subsection on capability attributes).
The attributes of the LFB class are listed in the <attributes> The attributes of the LFB class are listed in the <attributes>
element. Each attribute is defined by an <attribute> element. An element. Each attribute is defined by an <attribute> element. An
<attribute> element contains the following elements: <attribute> element contains the following elements:
. <name> defines the name of the attribute. This name must be . <name> defines the name of the attribute. This name must be
unique among the attributes of the LFB class. Example: unique among the attributes of the LFB class. Example:
"version". "version".
. <synopsis> should provide a brief description of the purpose of . <synopsis> should provide a brief description of the purpose
the attribute. of the attribute.
. <optional/> indicates that this attribute is optional. . <optional/> indicates that this attribute is optional.
. The data type of the attribute can be defined either via a . The data type of the attribute can be defined either via a
reference to a predefined data type or providing a local reference to a predefined data type or providing a local
definition of the type. The former is provided by using the definition of the type. The former is provided by using the
<typeRef> element, which must refer to the unique name of an <typeRef> element, which must refer to the unique name of an
existing data type defined in the <dataTypeDefs> element in the existing data type defined in the <dataTypeDefs> element in
same library document or in any of the included library the same library document or in any of the included library
documents. When the data type is defined locally (unnamed documents. When the data type is defined locally (unnamed
type), one of the following elements can be used: <atomic>, type), one of the following elements can be used: <atomic>,
<array>, <struct>, and <union>. Their usage is identical to how <array>, <struct>, and <union>. Their usage is identical to
they are used inside <dataTypeDef> elements (see Section 4.5). how they are used inside <dataTypeDef> elements (see Section
. The optional <defaultValue> element can specify a default value 4.5).
for the attribute, which is applied when the LFB is initialized . The optional <defaultValue> element can specify a default
or reset. [EDITOR: A convention to define default values for value for the attribute, which is applied when the LFB is
compound data types and byte[N] atomic types is yet to be initialized or reset. [EDITOR: A convention to define
defined.] default values for compound data types and byte[N] atomic
types is yet to be defined.]
The attribute element also has a mandatory elementID attribute, The attribute element also has a mandatory elementID attribute,
which is a numeric value used by the ForCES protocol. which is a numeric value used by the ForCES protocol.
In addition to the above elements, the <attribute> element includes In addition to the above elements, the <attribute> element
an optional "access" attribute, which can take any of the following includes an optional "access" attribute, which can take any of the
values or even a list of these values: "read-only", "read-write", following values or even a list of these values: "read-only",
"write-only", "read-reset", and "trigger-only". The default access "read-write", "write-only", "read-reset", and "trigger-only". The
mode is "read-write". default access mode is "read-write".
By reading the property information of an element the CE can
determine whether optional elements are supported and whether
elements defined as read-write can actually be written for a given
LFB instance.
The following example defines two attributes for an LFB: The following example defines two attributes for an LFB:
<attributes> <attributes>
<attribute access="read-only" elementID=÷1÷> <attribute access="read-only" elementID=÷1÷>
<name>foo</name> <name>foo</name>
<synopsis>number of things</synopsis> <synopsis>number of things</synopsis>
<typeRef>uint32</typeRef> <typeRef>uint32</typeRef>
</attribute> </attribute>
<attribute access="read-write write-only" elementID=÷2÷> <attribute access="read-write write-only" elementID=÷2÷>
skipping to change at page 59, line 46 skipping to change at page 62, line 15
<atomic> <atomic>
<baseType>uint32</baseType> <baseType>uint32</baseType>
<rangeRestriction> <rangeRestriction>
<allowedRange min="10" max="2000"/> <allowedRange min="10" max="2000"/>
</rangeRestriction> </rangeRestriction>
</atomic> </atomic>
<defaultValue>10</defaultValue> <defaultValue>10</defaultValue>
</attribute> </attribute>
</attributes> </attributes>
The first attribute ("foo") is a read-only 32-bit unsigned integer, The first attribute ("foo") is a read-only 32-bit unsigned
defined by referring to the built-in "uint32" atomic type. The integer, defined by referring to the built-in "uint32" atomic
second attribute ("bar") is also an integer, but uses the <atomic> type. The second attribute ("bar") is also an integer, but uses
element to provide additional range restrictions. This attribute has the <atomic> element to provide additional range restrictions.
two possible access modes, "read-write" or "write-only". A default This attribute has two possible access modes, "read-write" or
value of 10 is provided. "write-only". A default value of 10 is provided.
Note that not all attributes are likely to exist at all times in a Note that not all attributes are likely to exist at all times in a
particular implementation. While the capabilities will frequently particular implementation. While the capabilities will frequently
indicate this non-existence, CEs may attempt to reference non- indicate this non-existence, CEs may attempt to reference non-
existent or non-permitted attributes anyway. The FORCES protocol existent or non-permitted attributes anyway. The FORCES protocol
mechanisms should include appropriate error indicators for this mechanisms should include appropriate error indicators for this
case. case.
The mechanism defined above for non-supported attributes can also The mechanism defined above for non-supported attributes can also
apply to attempts to reference non-existent array elements or to set apply to attempts to reference non-existent array elements or to
read-only elements. set read-only elements.
4.7.5. <capabilities> Element to Define LFB Capability Attributes 4.7.5. <capabilities> Element to Define LFB Capability Attributes
The LFB class specification will provide some flexibility for the FE The LFB class specification will provide some flexibility for the
implementation regarding how the LFB class is implemented. For FE implementation regarding how the LFB class is implemented. For
example, the class may define some optional features, in which case example, the instance may have some limitations that are not
the actual implementation may or may not provide the given feature. inherent from the class definition, but rather the result of some
In these cases the CE must be able to query the LFB instance about implementation limitations. For example, an array attribute may
the availability of the feature. In addition, the instance may have be defined in the class definition as "unlimited" size, but the
some limitations that are not inherent from the class definition, physical implementation may impose a hard limit on the size of the
but rather the result of some implementation limitations. For array.
example, an array attribute may be defined in the class definition
as "unlimited" size, but the physical implementation may impose a
hard limit on the size of the array.
Such capability related information is expressed by the capability Such capability related information is expressed by the capability
attributes of the LFB class. The capability attributes are always attributes of the LFB class. The capability attributes are always
read-only attributes, and they are listed in a separate read-only attributes, and they are listed in a separate
<capabilities> element in the <LFBClassDef>. The <capabilities> <capabilities> element in the <LFBClassDef>. The <capabilities>
element contains one or more <capability> elements, each defining element contains one or more <capability> elements, each defining
one capability attribute. The format of the <capability> element is one capability attribute. The format of the <capability> element
almost the same as the <attribute> element, it differs in two is almost the same as the <attribute> element, it differs in two
aspects: it lacks the access mode attribute (because it is always aspects: it lacks the access mode attribute (because it is always
read-only), and it lacks the <defaultValue> element (because default read-only), and it lacks the <defaultValue> element (because
value is not applicable to read-only attributes). default value is not applicable to read-only attributes).
Some examples of capability attributes: Some examples of capability attributes:
. The version of the LFB class that this LFB instance complies . The version of the LFB class that this LFB instance complies
with; with;
. Supported optional features of the LFB class; . Supported optional features of the LFB class;
. Maximum number of configurable outputs for an output group; . Maximum number of configurable outputs for an output group;
. Metadata pass-through limitations of the LFB; . Metadata pass-through limitations of the LFB;
. Maximum size of configurable attribute tables; . Maximum size of configurable attribute tables;
. Additional range restriction on operational attributes; . Additional range restriction on operational attributes;
. Supported access modes of certain attributes (if the access . Supported access modes of certain attributes (if the access
mode of an operational attribute is specified as a list of two mode of an operational attribute is specified as a list of
or mode modes). two or mode modes).
The following example lists two capability attributes: The following example lists two capability attributes:
<capabilities> <capabilities>
<capability elementID="3"> <capability elementID="3">
<name>version</name> <name>version</name>
<synopsis> <synopsis>
LFB class version this instance is compliant with. LFB class version this instance is compliant with.
</synopsis> </synopsis>
<typeRef>version</typeRef> <typeRef>version</typeRef>
</capability> </capability>
<capability elementID="4"> <capability elementID="4">
<name>limitBar</name> <name>limitBar</name>
<synopsis> <synopsis>
Maximum value of the "bar" attribute. Maximum value of the "bar" attribute.
</synopsis> </synopsis>
<typeRef>uint16</typeRef> <typeRef>uint16</typeRef>
</capability> </capability>
</capabilities> </capabilities>
4.7.6. <description> Element for LFB Operational Specification 4.7.6. <events> Element for LFB Notification Generation
The <events> element contains the information about the
occurrences for which instances of this LFB class can generate
notifications to the CE.
The <events> element includes a baseID attribute, so it is always
<events baseID=÷number÷>. The value of the baseID is the starting
element for the path which identifies events. It must not be the
same as the elementID of any top level attribute or capability of
the LFB class. In a derived LFB (i.e. one with a <derivedFrom>
element) the baseID must not.
[Editors note: It may make sense to instead require the baseID
attribute and require it to have the same value as the parent
class events baseID. Both choices leave room for errors not
covered by the XML Schema.]
The <events> element contains 0 or more <event> elements, each of
which declares a single event. The <event> element has an eventID
attribute giving the unique ID of the event. The element will
include:
. <eventTarget> element indicating which LFB field is tested to
generate the event;
. condition element indicating what condition on the field will
generate the event from a list of defined conditions;
. <eventReports> element indicating what values are to be
reported in the notification of the event.
The <eventTarget> element contains information identifying a field
in the LFB. Specifically, the <target> element contains one or
more <eventField> or <eventSubscript> elements. These elements
represent the textual equivalent of a path select a component of
the LFB. The <eventField> element contains the name of an element
of the LFB or struct. The first element in a <target> must be an
<eventField> element and must name a field in the LFB. The
following element must identify a valid field within the
containing context. If an <eventField> identifies an array, and
is not the last element in the target, then the next element MUST
be an <eventSubscript>. <eventSubscript> elements MUST occur only
after <eventField> names that identifies an array. An
<eventSubscript> may contain a numeric value to indicate that this
event applies to a specific element of the array. More commonly,
the event is being defined across all elements of the array. In
that case, <eventSubscript> will contain a name. The name in an
<eventSubscript> element is not a field name. It is a variable
name for use in the <report> elements of this LFB definition.
This name MUST be distinct from any field name that can validly
occur in the <eventReport> clause. Hence it SHOULD be distinct
from any field name used in the LFB or in structures used within
the LFB.
The <eventTarget> provides additional components for the path used
to reference the event. The path will be the baseID for events,
followed by the ID for the specific event, followed by a value for
each <eventSubscript> element in the <eventTarget>. This will
identify a specific occurrence of the event. So, for example, it
will appear in the event notification LFB. It is also used for
the SET-PROPERTY operation to subscribe to a specific event. A
SET-PROPERTY of the subscription property (but not of any other
writeable properties) may sent be the CE with any prefix of the
path of the event. So, for an event defined on a table, a SET-
PROPERTY with a path of the baseID and the eventID will subscribe
the CE to all occurrences of that event on any element of the
table. This is particularly useful for the <eventCreated/> and
<eventDestroyed/> conditions. Events using those conditions will
generally be defined with a field / subscript sequence that
identifies an array, and that ends with an <eventSubscript>
element. Thus, the event notification will indicate which array
entry has been created or destroyed. A typical subscribe however
will subscribe for the array, not for a specific element, so it
will use a shorter path.
The condition element represents a condition that triggers a
notification. The list of conditions is:
. <eventCreated/> the target must be an array, ending with a
subscript indication. The event is generated when an entry
in the array is created. This occurs even if the entry is
created by CE direction.
. <eventDeleted/> the target must be an array, ending with a
subscript indication. The event is generated when an entry
in the array is destroyed. This occurs even if the entry is
destroyed by CE direction.
. <eventChanged/> the event is generated whenever the target
element changes in any way, subject to hysteresis suppression
for integer targets. The hysteresis suppression level is
part of the properties of the event.
. <eventGreaterThan/> the event is generated whenever the
target element becomes greater than the threshold, subject to
hysteresis suppression. The threshold and hysteresis
suppression are part of the properties of the event.
. <eventLessThan/> the event is generated whenever the target
element becomes less than the threshold, subject to
hysteresis suppression. The threshold and hysteresis
suppression are part of the properties of the event.
Numeric conditions will have hysteresis. The level of the
hysteresis is defined by a property of the event. This allows the
FE to notify the CE of the hysteresis applied, and if it chooses
the FE can allow the CE to modify the hysteresis. This applies to
<eventChanged/> for a numeric field, and to <eventGreaterThan/>
and <eventLessThan/>. The content of a <variance> element is a
numeric value. The FE is required to track the value of the
element and make sure that the condition has become untrue by at
least the hysteresis from the event property. To be specific, if
the hysteresis is V, then
. For a <eventChanged/> condition, if the last notification was
for value X, then the <changed/> notification will not be
generated until the value reaches X +/- V.
. For a <eventGreaterThan/> condition with threshold T, once
the event has been generated at least once it will not be
generated again until the field first becomes less than or
equal to T ű V, and then exceeds T.
. For a <eventLessThan/> condition with threshold T, once the
event has been generated at least once it will not be
generated again until the field first becomes greater than or
equal to T + V, and then becomes less than T.
This allows the FE to suppress floods of events resulting from
oscillation around a condition value. For FEs that do not support
flood suppression, the hysteresis property will be set to 0, and
the property will be read only.
The <eventReports> element of an <event> describes what
information is to be delivered by the FE along with the
notification of the occurance of the event. The <reports> element
contains one or more <eventReport> elements. Each <report>
element identifies a piece of data from the LFB which will be
reported. The notification carries as a DATARAW the data as if
the collection of <eventReport> elements has been defined in a
structure. Each <eventReport> element thus needs to identify a
field in the LFB. The syntax is exactly the same as used in the
<eventTarget> element, using <eventField> and <eventSubscript>
elements. <eventSubcripts> may contain integers. If they contain
names, they must be names from <eventSubscript> elements of the
<eventTarget>. The selection for the report will use the value
for that subscript that identifies that specific element
triggering the event. This can be used to reference the structure
/ field causing the event, or to reference related information in
parallel tables. This event reporting structure is designed to
allow the LFB designer to specify information that is likely not
known a priori by the CE and is likely needed by the CE to process
the event. While the structure allows for pointing at large
blocks of information (full arrays or complex structures) this is
not recommended. Also, the variable reference / subscripting in
reporting only captures a small portion of the kinds of related
information. Chaining through index fields stored in a table, for
example, is not supported. In general, the <eventReports>
mechanism is an optimization for cases that have been found to be
common.
4.7.7. <description> Element for LFB Operational Specification
The <description> element of the <LFBClass> provides unstructured The <description> element of the <LFBClass> provides unstructured
text (in XML sense) to verbally describe what the LFB does. text (in XML sense) to verbally describe what the LFB does.
4.8. XML Schema for LFB Class Library Documents 4.8.Properties
Elements of LFBs have properties which are important to the CE.
The most important property is the existence / readability /
writeability of the element. Depending up the type of the
element, other information may be of importance.
The model provides the definition of the structure of property
information. There is a base class of property information. For
the array, alias, and event elements there are subclasses of
property information providing additional fields. This
information is accessed by the CE (and updated where applicable)
via the PL protocol. While some property information is
writeable, there is no mechanism currently provided for checking
the properties of a property element. Writeability can only be
checked by attempting to modify the value.
The basic property definition, along with the scalar for
accessibility is below. Note that this access permission
information is generally read-only.
<dataTypeDef>
<name>accessPermissionValues</name>
<synopsis>
The possible values of attribute access permission
</synopsis>
<atomic>
<baseType>uchar</baseType>
<specialValues>
<specialValue value="0">
<name>None</name>
<synopsis>Access is prohibited</synopsis>
</specialValue>
<specialValue value="1">
<name> Read-Only </name>
<synopsis>Access is read only</synopsis>
</specialValue>
<specialValue value="2">
<name>Write-Only</name>
<synopsis>
The attribute may be written, but not read
</synopsis>
</specialValue>
<specialValue value="3">
<name>Read-Write</name>
<synopsis>
The attribute may be read or written
</synopsis>
</specialValue>
</specialValues>
</atomic>
</dataTypeDef>
<dataTypeDef>
<name>baseElementProperties</name>
<synopsis>basic properties, accessibility</synopsis>
<struct>
<element elementID="1">
<name>accessibility</name>
<synopsis>
does the element exist, and can it be read or written
</synopsis>
<typeRef>accessPermissionValues</typeRef>
</element>
</struct>
</dataTypeDef>
The properties for an array add a number of important pieces of
information. These properties are also read-only.
<dataTypeDef>
<name>arrayElementProperties</name>
<struct>
<derivedFrom>baseElementProperties</derivedFrom>
<element elementID=÷2÷>
<name>entryCount</name>
<synopsis>the number of entries in the array</synopsis>
<typeRef>uint32</typeRef>
</element>
<element elementID=÷3÷>
<name>highestUsedSubscript</name>
<synopsis>the last used subscript in the array</synopsis>
<typeRef>uint32</typeRef>
</element>
<element elementID=÷4÷>
<name>firstUnusedSubscript</name>
<synopsis>
The subscript of the first unused array element
</synopsis>
<typeRef>uint32</typeRef>
</element>
</struct>
</dataTypeDef>
The properties for an event add three (usually) writeable fields.
One is the subscription field. 0 means no notification is
generated. Any non-zero value (typically 1 is used) means that a
notification is generated. The hysteresis field is used to
suppress generation of notifications for oscillations around a
condition value, and is described in the text for events. The
threshold field is used for the <eventGreaterThan/> and
<eventLessThan/> conditions. It indicates the value to compare
the event target against. Using the properties allows the CE to
set the level of interest. FEs which do not supporting setting
the threshold for events will make this field read-only.
<dataTypeDef>
<name>eventElementProperties</name>
<struct>
<derivedFrom>baseElementProperties</derivedFrom>
<element elementID=÷2÷>
<name>registration</name>
<synopsis>has the CE registered to be notified of this
event
</synopsis>
<typeRef>uint32</typeRef>
</element>
<element elementID=÷3÷>
<name>hysteresis</name>
<synopsis>region to suppress event recurrence notices
</synopsis>
<typeRef>uint32</typeRef>
</element>
<element elementID=÷4÷>
<name>threshold</name>
<synopsis> comparison value for level crossing events
</synopsis>
<typeRef>uint32</typeRef>
</element>
</struct>
<dataTypeDef>
The properties for an alias add three (usually) writeable fields.
These combine to identify the target element the subject alias
refers to.
<dataTypeDef>
<name>aliasElementProperties</name>
<struct>
<derivedFrom>baseElementProperties</derivedFrom>
<element elementID=÷2÷>
<name>targetLFBClass</name>
<synopsis>the class ID of the alias target</synopsis>
<typeRef>uint32</typeRef>
</element>
<element elementID=÷3÷>
<name>targetLFBInstance</name>
<synopsis>the instance ID of the alias target</synopsis>
<typeRef>uint32</typeRef>
</element>
<element elementID=÷4÷>
<name>targetElementPath</name>
<synopsis>
The path to the element target, each 4 octets is read
as one path element, using the path construction in
the PL protocol.
</synopsis>
<typeRef>octetstring[128]</typeRef>
</element>
</struct>
</dataTypeDef>
4.9. XML Schema for LFB Class Library Documents
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://ietf.org/forces/1.0/lfbmodel" xmlns="http://ietf.org/forces/1.0/lfbmodel"
xmlns:lfb="http://ietf.org/forces/1.0/lfbmodel" xmlns:lfb="http://ietf.org/forces/1.0/lfbmodel"
targetNamespace="http://ietf.org/forces/1.0/lfbmodel" targetNamespace="http://ietf.org/forces/1.0/lfbmodel"
attributeFormDefault="unqualified" attributeFormDefault="unqualified"
elementFormDefault="qualified"> elementFormDefault="qualified">
<xsd:annotation> <xsd:annotation>
<xsd:documentation xml:lang="en"> <xsd:documentation xml:lang="en">
skipping to change at page 62, line 18 skipping to change at page 71, line 16
maxOccurs="unbounded"/> maxOccurs="unbounded"/>
<xsd:element name="frameDefs" type="frameDefsType" <xsd:element name="frameDefs" type="frameDefsType"
minOccurs="0"/> minOccurs="0"/>
<xsd:element name="dataTypeDefs" type="dataTypeDefsType" <xsd:element name="dataTypeDefs" type="dataTypeDefsType"
minOccurs="0"/> minOccurs="0"/>
<xsd:element name="metadataDefs" type="metadataDefsType" <xsd:element name="metadataDefs" type="metadataDefsType"
minOccurs="0"/> minOccurs="0"/>
<xsd:element name="LFBClassDefs" type="LFBClassDefsType" <xsd:element name="LFBClassDefs" type="LFBClassDefsType"
minOccurs="0"/> minOccurs="0"/>
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="provides" type="xsd:Name" use="required"/> <xsd:attribute name="provides" type="xsd:Name"
use="required"/>
</xsd:complexType> </xsd:complexType>
<!-- Uniqueness constraints --> <!-- Uniqueness constraints -->
<xsd:key name="frame"> <xsd:key name="frame">
<xsd:selector xpath="lfb:frameDefs/lfb:frameDef"/> <xsd:selector xpath="lfb:frameDefs/lfb:frameDef"/>
<xsd:field xpath="lfb:name"/> <xsd:field xpath="lfb:name"/>
</xsd:key> </xsd:key>
<xsd:key name="dataType"> <xsd:key name="dataType">
<xsd:selector xpath="lfb:dataTypeDefs/lfb:dataTypeDef"/> <xsd:selector xpath="lfb:dataTypeDefs/lfb:dataTypeDef"/>
<xsd:field xpath="lfb:name"/> <xsd:field xpath="lfb:name"/>
</xsd:key> </xsd:key>
skipping to change at page 62, line 40 skipping to change at page 71, line 39
<xsd:selector xpath="lfb:metadataDefs/lfb:metadataDef"/> <xsd:selector xpath="lfb:metadataDefs/lfb:metadataDef"/>
<xsd:field xpath="lfb:name"/> <xsd:field xpath="lfb:name"/>
</xsd:key> </xsd:key>
<xsd:key name="LFBClassDef"> <xsd:key name="LFBClassDef">
<xsd:selector xpath="lfb:LFBClassDefs/lfb:LFBClassDef"/> <xsd:selector xpath="lfb:LFBClassDefs/lfb:LFBClassDef"/>
<xsd:field xpath="lfb:name"/> <xsd:field xpath="lfb:name"/>
</xsd:key> </xsd:key>
</xsd:element> </xsd:element>
<xsd:complexType name="loadType"> <xsd:complexType name="loadType">
<xsd:attribute name="library" type="xsd:Name" use="required"/> <xsd:attribute name="library" type="xsd:Name" use="required"/>
<xsd:attribute name="location" type="xsd:anyURI" use="optional"/> <xsd:attribute name="location" type="xsd:anyURI"
use="optional"/>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="frameDefsType"> <xsd:complexType name="frameDefsType">
<xsd:sequence> <xsd:sequence>
<xsd:element name="frameDef" maxOccurs="unbounded"> <xsd:element name="frameDef" maxOccurs="unbounded">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="name" type="xsd:NMTOKEN"/> <xsd:element name="name" type="xsd:NMTOKEN"/>
<xsd:element ref="synopsis"/> <xsd:element ref="synopsis"/>
<xsd:element ref="description" minOccurs="0"/> <xsd:element ref="description" minOccurs="0"/>
</xsd:sequence> </xsd:sequence>
skipping to change at page 63, line 25 skipping to change at page 72, line 25
<xsd:element ref="description" minOccurs="0"/> <xsd:element ref="description" minOccurs="0"/>
<xsd:group ref="typeDeclarationGroup"/> <xsd:group ref="typeDeclarationGroup"/>
</xsd:sequence> </xsd:sequence>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:sequence> </xsd:sequence>
</xsd:complexType> </xsd:complexType>
<!-- <!--
Predefined (built-in) atomic data-types are: Predefined (built-in) atomic data-types are:
char, uchar, int16, uint16, int32, uint32, int64, uint64, char, uchar, int16, uint16, int32, uint32, int64, uint64,
string[N], byte[N], boolean, string[N], string, byte[N], boolean, octetstring[N]
float16, float32, float64 float16, float32, float64
--> -->
<xsd:group name="typeDeclarationGroup"> <xsd:group name="typeDeclarationGroup">
<xsd:choice> <xsd:choice>
<xsd:element name="typeRef" type="typeRefNMTOKEN"/> <xsd:element name="typeRef" type="typeRefNMTOKEN"/>
<xsd:element name="atomic" type="atomicType"/> <xsd:element name="atomic" type="atomicType"/>
<xsd:element name="array" type="arrayType"/> <xsd:element name="array" type="arrayType"/>
<xsd:element name="struct" type="structType"/> <xsd:element name="struct" type="structType"/>
<xsd:element name="union" type="structType"/> <xsd:element name="union" type="structType"/>
<xsd:element name=÷alias÷ type="typeRefNMTOKEN"/> <xsd:element name=÷alias÷ type="typeRefNMTOKEN"/>
</xsd:choice> </xsd:choice>
</xsd:group> </xsd:group>
<xsd:simpleType name="typeRefNMTOKEN"> <xsd:simpleType name="typeRefNMTOKEN">
<xsd:restriction base="xsd:token"> <xsd:restriction base="xsd:token">
<xsd:pattern value="\c+"/> <xsd:pattern value="\c+"/>
<xsd:pattern value="string\[\d+\]"/> <xsd:pattern value="string\[\d+\]"/>
<xsd:pattern value="byte\[\d+\]"/> <xsd:pattern value="byte\[\d+\]"/>
<xsd:pattern value="octetstring\[\d+\]"/>
</xsd:restriction> </xsd:restriction>
</xsd:simpleType> </xsd:simpleType>
<xsd:complexType name="atomicType"> <xsd:complexType name="atomicType">
<xsd:sequence> <xsd:sequence>
<xsd:element name="baseType" type="typeRefNMTOKEN"/> <xsd:element name="baseType" type="typeRefNMTOKEN"/>
<xsd:element name="rangeRestriction" <xsd:element name="rangeRestriction"
type="rangeRestrictionType minOccurs="0"/> type="rangeRestrictionType" minOccurs="0"/>
<xsd:element name="specialValues" type="specialValuesType" <xsd:element name="specialValues" type="specialValuesType"
minOccurs="0"/> minOccurs="0"/>
</xsd:sequence> </xsd:sequence>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="rangeRestrictionType"> <xsd:complexType name="rangeRestrictionType">
<xsd:sequence> <xsd:sequence>
<xsd:element name="allowedRange" maxOccurs="unbounded"> <xsd:element name="allowedRange" maxOccurs="unbounded">
<xsd:complexType> <xsd:complexType>
<xsd:attribute name="min" type="xsd:integer" <xsd:attribute name="min" type="xsd:integer"
use="required"/> use="required"/>
skipping to change at page 64, line 35 skipping to change at page 73, line 36
<xsd:element ref="synopsis"/> <xsd:element ref="synopsis"/>
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="value" type="xsd:token"/> <xsd:attribute name="value" type="xsd:token"/>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:sequence> </xsd:sequence>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="arrayType"> <xsd:complexType name="arrayType">
<xsd:sequence> <xsd:sequence>
<xsd:group ref="typeDeclarationGroup"/> <xsd:group ref="typeDeclarationGroup"/>
<xsd:element name="key" maxOccurs="unbounded"> <xsd:element name="contentKey" minOccurs="0
maxOccurs="unbounded">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="keyField" maxOccurs="unbound" <xsd:element name="contentKeyField"
maxOccurs="unbounded"
type="xsd:string"/> type="xsd:string"/>
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="keyID" use="required" <xsd:attribute name="contentKeyID" use="required"
type="xsd:integer"/> type="xsd:integer"/>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="type" use="optional" <xsd:attribute name="type" use="optional"
default="variable-size"> default="variable-size">
<xsd:simpleType> <xsd:simpleType>
<xsd:restriction base="xsd:string"> <xsd:restriction base="xsd:string">
<xsd:enumeration value="fixed-size"/> <xsd:enumeration value="fixed-size"/>
<xsd:enumeration value="variable-size"/> <xsd:enumeration value="variable-size"/>
</xsd:restriction> </xsd:restriction>
</xsd:simpleType> </xsd:simpleType>
</xsd:attribute> </xsd:attribute>
<xsd:attribute name="length" type="xsd:integer" use="optional"/> <xsd:attribute name="length" type="xsd:integer" use="optional"/>
<xsd:attribute name="maxLength" type="xsd:integer" <xsd:attribute name="maxLength" type="xsd:integer"
use="optional"/> use="optional"/>
<!¨declare keys to have unique IDs --> <!--declare keys to have unique IDs -->
<xsd:key name="keyID"> <xsd:key name="contentKeyID">
<xsd:selector xpath="lfb:key"/> <xsd:selector xpath="lfb:contentKey"/>
<xsd:field xpath="@keyID"/> <xsd:field xpath="@contentKeyID"/>
</xsd:key> </xsd:key>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="structType"> <xsd:complexType name="structType">
<xsd:sequence> <xsd:sequence>
<xsd:element name=÷derivedFrom÷ type=÷typeRefNMTOKEN÷
minOccurs=÷0÷/>
<xsd:element name="element" maxOccurs="unbounded"> <xsd:element name="element" maxOccurs="unbounded">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<xsd:element name="name" type="xsd:NMTOKEN"/> <xsd:element name="name" type="xsd:NMTOKEN"/>
<xsd:element ref="synopsis"/> <xsd:element ref="synopsis"/>
<xsd:element name="optional" minOccurs="0"/> <xsd:element name="optional" minOccurs="0"/>
<xsd:group ref="typeDeclarationGroup"/> <xsd:group ref="typeDeclarationGroup"/>
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="elementID" use="required" <xsd:attribute name="elementID" use="required"
type="xsd:integer"/> type="xsd:integer"/>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:sequence> <xsd:attribute name="derivedFrom" use="optional" </xsd:sequence>
type="typeRefNMTOKEN"/>
<!-- key declaration to make elementIDs unique in a struct --> <!-- key declaration to make elementIDs unique in a struct -->
<xsd:key name="structElementID"> <xsd:key name="structElementID">
<xsd:selector xpath="lfb:element"/> <xsd:selector xpath="lfb:element"/>
<xsd:field xpath="@elementID"/> <xsd:field xpath="@elementID"/>
</xsd:key> </xsd:key>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="metadataDefsType"> <xsd:complexType name="metadataDefsType">
<xsd:sequence> <xsd:sequence>
<xsd:element name="metadataDef" maxOccurs="unbounded"> <xsd:element name="metadataDef" maxOccurs="unbounded">
<xsd:complexType> <xsd:complexType>
skipping to change at page 66, line 27 skipping to change at page 75, line 31
<xsd:element name="derivedFrom" type="xsd:NMTOKEN" <xsd:element name="derivedFrom" type="xsd:NMTOKEN"
minOccurs="0"/> minOccurs="0"/>
<xsd:element name="inputPorts" type="inputPortsType" <xsd:element name="inputPorts" type="inputPortsType"
minOccurs="0"/> minOccurs="0"/>
<xsd:element name="outputPorts" type="outputPortsType" <xsd:element name="outputPorts" type="outputPortsType"
minOccurs="0"/> minOccurs="0"/>
<xsd:element name="attributes" type="LFBAttributesType" <xsd:element name="attributes" type="LFBAttributesType"
minOccurs="0"/> minOccurs="0"/>
<xsd:element name="capabilities" <xsd:element name="capabilities"
type="LFBCapabilitiesType" minOccurs="0"/> type="LFBCapabilitiesType" minOccurs="0"/>
<xsd:element name="events"
type="eventsType" minOccurs="0"/>
<xsd:element ref="description" minOccurs="0"/> <xsd:element ref="description" minOccurs="0"/>
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="LFBClassID" use="required" <xsd:attribute name="LFBClassID" use="required"
type="xsd:integer"/> type="xsd:integer"/>
</xsd:complexType> </xsd:complexType>
<!-- Key constraint to ensure unique attribute names within <!-- Key constraint to ensure unique attribute names within
a class: a class:
--> -->
<xsd:key name="attributes"> <xsd:key name="attributes">
<xsd:selector xpath="lfb:attributes/lfb:attribute"/> <xsd:selector xpath="lfb:attributes/lfb:attribute"/>
<xsd:field xpath="lfb:name"/> <xsd:field xpath="lfb:name"/>
</xsd:key> </xsd:key>
<xsd:key name="capabilities"> <xsd:key name="capabilities">
<xsd:selector xpath="lfb:capabilities/lfb:capability"/> <xsd:selector xpath="lfb:capabilities/lfb:capability"/>
<xsd:field xpath="lfb:name"/> <xsd:field xpath="lfb:name"/>
</xsd:key> </xsd:key>
<! í does the above ensure that attributes and capabilities <!-- does the above ensure that attributes and capabilities
have different names? have different names?
If so, the following is the elementID constraint . If so, the following is the elementID constraint -->
<xsd:key name="attributeIDs"> <xsd:key name="attributeIDs">
<xsd:selector xpath="lfb:attributes/lfb:attribute"/> <xsd:selector xpath="lfb:attributes/lfb:attribute"/>
<xsd:field xpath="@elementID"/> <xsd:field xpath="@elementID"/>
</xsd:key> </xsd:key>
<xsd:key name="capabilityIDs"> <xsd:key name="capabilityIDs">
<xsd:selector xpath="lfb:attributes/lfb:capability"/> <xsd:selector xpath="lfb:attributes/lfb:capability"/>
<xsd:field xpath="@elementID"/> <xsd:field xpath="@elementID"/>
</xsd:key> </xsd:key>
</xsd:element> </xsd:element>
</xsd:sequence> </xsd:sequence>
skipping to change at page 67, line 36 skipping to change at page 76, line 42
<xsd:element ref="description" minOccurs="0"/> <xsd:element ref="description" minOccurs="0"/>
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="group" type="booleanType" use="optional" <xsd:attribute name="group" type="booleanType" use="optional"
default="no"/> default="no"/>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="portExpectationType"> <xsd:complexType name="portExpectationType">
<xsd:sequence> <xsd:sequence>
<xsd:element name="frameExpected" minOccurs="0"> <xsd:element name="frameExpected" minOccurs="0">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<!-- ref must refer to a name of a defined frame type --> <!-- ref must refer to a name of a defined frame type --
>
<xsd:element name="ref" type="xsd:string" <xsd:element name="ref" type="xsd:string"
maxOccurs="unbounded"/> maxOccurs="unbounded"/>
</xsd:sequence> </xsd:sequence>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="metadataExpected" minOccurs="0"> <xsd:element name="metadataExpected" minOccurs="0">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<!-- ref must refer to a name of a defined metadata --> <!-- ref must refer to a name of a defined metadata -->
<xsd:element name="ref" type="metadataInputRefType"/> <xsd:element name="ref" type="metadataInputRefType"/>
skipping to change at page 69, line 13 skipping to change at page 78, line 20
<xsd:element ref="description" minOccurs="0"/> <xsd:element ref="description" minOccurs="0"/>
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="group" type="booleanType" use="optional" <xsd:attribute name="group" type="booleanType" use="optional"
default="no"/> default="no"/>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="portProductType"> <xsd:complexType name="portProductType">
<xsd:sequence> <xsd:sequence>
<xsd:element name="frameProduced"> <xsd:element name="frameProduced">
<xsd:complexType> <xsd:complexType>
<xsd:sequence> <xsd:sequence>
<!-- ref must refer to a name of a defined frame type --> <!-- ref must refer to a name of a defined frame type --
>
<xsd:element name="ref" type="xsd:NMTOKEN" <xsd:element name="ref" type="xsd:NMTOKEN"
maxOccurs="unbounded"/> maxOccurs="unbounded"/>
</xsd:sequence> </xsd:sequence>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
<xsd:element name="metadataProduced" minOccurs="0"> <xsd:element name="metadataProduced" minOccurs="0">
<xsd:complexType> <xsd:complexType>
<xsd:choice maxOccurs="unbounded"> <xsd:choice maxOccurs="unbounded">
<!-- ref must refer to a name of a defined metadata --> <!-- ref must refer to a name of a defined metadata -->
<xsd:element name="ref" type="metadataOutputRefType"/> <xsd:element name="ref" type="metadataOutputRefType"/>
skipping to change at page 71, line 18 skipping to change at page 80, line 26
<xsd:element ref="description" minOccurs="0"/> <xsd:element ref="description" minOccurs="0"/>
<xsd:element name="optional" minOccurs="0"/> <xsd:element name="optional" minOccurs="0"/>
<xsd:group ref="typeDeclarationGroup"/> <xsd:group ref="typeDeclarationGroup"/>
</xsd:sequence> </xsd:sequence>
<xsd:attribute name="elementID" use="required" <xsd:attribute name="elementID" use="required"
type="xsd:integer"/> type="xsd:integer"/>
</xsd:complexType> </xsd:complexType>
</xsd:element> </xsd:element>
</xsd:sequence> </xsd:sequence>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="eventsType">
<xsd:sequence>
<xsd:element name="event" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:NMTOKEN"/>
<xsd:element ref="synopsis"/>
<xsd:element name="eventTarget" type="eventPathType"/>
<xsd:element ref="eventCondition"/>
<xsd:element name="eventReports" type="eventReportsType"
minOccurs="0"/>
<xsd:element ref="description" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="eventID" use="required"
type="xsd:integer"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="baseID" type="xsd:integer"
use="optional"/>
</xsd:complexType>
<!-- the substitution group for the event conditions -->
<xsd:element name="eventCondition" abstract="true"/>
<xsd:element name="eventCreated"
substitutionGroup="eventCondition"/>
<xsd:element name="eventDeleted"
substitutionGroup="eventCondition"/>
<xsd:element name="eventChanged"
substitutionGroup="eventCondition"/>
<xsd:element name="eventGreaterThan"
substitutionGroup="eventCondition"/>
<xsd:element name="eventLessThan"
substitutionGroup="eventCondition"/>
<xsd:complexType name="eventPathType">
<xsd:sequence>
<xsd:element ref="eventPathPart" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<!-- the substitution group for the event path parts -->
<xsd:element name="eventPathPart" type="xsd:string"
abstract="true"/>
<xsd:element name="eventField" type="xsd:string"
substitutionGroup="eventPathPart"/>
<xsd:element name="eventSubscript" type="xsd:string"
substitutionGroup="eventPathPart"/>
<xsd:complexType name="eventReportsType">
<xsd:sequence>
<xsd:element name="eventReport" type="eventPathType"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="booleanType"> <xsd:simpleType name="booleanType">
<xsd:restriction base="xsd:string"> <xsd:restriction base="xsd:string">
<xsd:enumeration value="yes"/> <xsd:enumeration value="yes"/>
<xsd:enumeration value="no"/> <xsd:enumeration value="no"/>
</xsd:restriction> </xsd:restriction>
</xsd:simpleType> </xsd:simpleType>
</xsd:schema> </xsd:schema>
5. 5.
FE Attributes and Capabilities FE Attributes and Capabilities
A ForCES forwarding element handles traffic on behalf of a ForCES A ForCES forwarding element handles traffic on behalf of a ForCES
control element. While the standards will describe the protocol and control element. While the standards will describe the protocol
mechanisms for this control, different implementations and different and mechanisms for this control, different implementations and
instances will have different capabilities. The CE needs to be able different instances will have different capabilities. The CE
to determine what each instance it is responsible for is actually needs to be able to determine what each instance it is responsible
capable of doing. As stated previously, this is an approximation. for is actually capable of doing. As stated previously, this is
The CE is expected to be prepared to cope with errors in requests an approximation. The CE is expected to be prepared to cope with
and variations in detail not captured by the capabilities errors in requests and variations in detail not captured by the
information about an FE. capabilities information about an FE.
In addition to its capabilities, an FE will have attribute In addition to its capabilities, an FE will have attribute
information that can be used in understanding and controlling the information that can be used in understanding and controlling the
forwarding operations. Some of the attributes will be read only, forwarding operations. Some of the attributes will be read only,
while others will also be writeable. while others will also be writeable.
In order to make the FE attribute information easily accessible, the In order to make the FE attribute information easily accessible,
information will be stored in an LFB. This LFB will have a class, the information will be stored in an LFB. This LFB will have a
FEObject. The LFBClassID for this class is 1. Only one instance of class, FEObject. The LFBClassID for this class is 1. Only one
this class will ever be present, and the instance ID of that instance of this class will ever be present, and the instance ID
instance in the protocol is 1. Thus, by referencing the elements of of that instance in the protocol is 1. Thus, by referencing the
class:1, instance:1 a CE can get all the information about the FE. elements of class:1, instance:1 a CE can get all the information
For model completeness, this LFB Class is described in this section. about the FE. For model completeness, this LFB Class is described
in this section.
There will also be an FEProtocol LFB Class. LFBClassID 2 is There will also be an FEProtocol LFB Class. LFBClassID 2 is
reserved for that class. There will be only one instance of that reserved for that class. There will be only one instance of that
class as well. Details of that class are defined in the ForCES class as well. Details of that class are defined in the ForCES
protocol document. protocol document.
5.1. XML for FEObject Class definition 5.1. XML for FEObject Class definition
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<LFBLibrary xmlns="http://ietf.org/forces/1.0/lfbmodel" <LFBLibrary xmlns="http://ietf.org/forces/1.0/lfbmodel"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ietf.org/forces/1.0/lfbmodel xsi:schemaLocation="http://ietf.org/forces/1.0/lfbmodel"
provides="FEObject"> provides="FEObject">
<dataTypeDefs> <dataTypeDefs>
<dataTypeDef> <dataTypeDef>
<name>LFBAdjacencyLimitType</name> <name>LFBAdjacencyLimitType</name>
<synopsis>Describing the Adjacent LFB</synopsis> <synopsis>Describing the Adjacent LFB</synopsis>
<struct> <struct>
<element elementID="1"> <element elementID="1">
<name>NeighborLFB</name> <name>NeighborLFB</name>
<synopsis>ID for that LFB Class</synopsis> <synopsis>ID for that LFB Class</synopsis>
<typeRef>uint32</typeRef> <typeRef>uint32</typeRef>
</element> </element>
<element elementID="2"> <element elementID="2">
<name>ViaPorts</name> <name>ViaPorts</name>
<synopsis> <synopsis>
the ports on which we can connect the ports on which we can connect
</synopsis> </synopsis>
<array type="variable-size"> <array type="variable-size">
<!-- It is necessary to define the length limit <typeRef>String</typeRef>
This should be whatever we define elsewhere as the
limit of a port name
-->
<typeRef>String[40]</typeRef>
</array> </array>
</element> </element>
</struct> </struct>
</dataTypeDef> </dataTypeDef>
<dataTypeDef> <dataTypeDef>
<name>PortGroupLimitType</name> <name>PortGroupLimitType</name>
<synopsis> <synopsis>
Limits on the number of ports in a given group Limits on the number of ports in a given group
</synopsis> </synopsis>
<struct> <struct>
<element elementID="1"> <element elementID="1">
<name>PortGroupName</name> <name>PortGroupName</name>
<synopsis>Group Name</synopsis> <synopsis>Group Name</synopsis>
<!-- Again, a length limit is needed --> <typeRef>String</typeRef>
<typeRef>String[4]</typeRef>
</element> </element>
<element elementID="2"> <element elementID="2">
<name>MinPortCount</name> <name>MinPortCount</name>
<synopsis>Minimum Port Count</synopsis> <synopsis>Minimum Port Count</synopsis>
<optional/> <optional/>
<typeRef>uint32</typeRef> <typeRef>uint32</typeRef>
</element> </element>
<element elementID="3"> <element elementID="3">
<name>MaxPortCount</name> <name>MaxPortCount</name>
<synopsis>Max Port Count</synopsis> <synopsis>Max Port Count</synopsis>
skipping to change at page 73, line 29 skipping to change at page 83, line 38
</dataTypeDef> </dataTypeDef>
<dataTypeDef> <dataTypeDef>
<name>SupportedLFBType</name> <name>SupportedLFBType</name>
<synopsis>table entry for supported LFB</synopsis> <synopsis>table entry for supported LFB</synopsis>
<struct> <struct>
<element elementID="1"> <element elementID="1">
<name>LFBName</name> <name>LFBName</name>
<synopsis> <synopsis>
The name of a supported LFB Class The name of a supported LFB Class
</synopsis> </synopsis>
<!-- again with the length limit --> <typeRef>string</typeRef>
<typeRef>string[40]</typeRef>
</element> </element>
<element elementID="2"> <element elementID="2">
<name>LFBClassID</name> <name>LFBClassID</name>
<synopsis>the id of a supported LFB Class</synopsis> <synopsis>the id of a supported LFB Class</synopsis>
<typeRef>uint32</typeRef> <typeRef>uint32</typeRef>
</element> </element>
<element elementID="3"> <element elementID="3">
<name>LFBOccurrenceLimit</name> <name>LFBOccurrenceLimit</name>
<synopsis> <synopsis>
the upper limit of instances of LFBs of this class the upper limit of instances of LFBs of this class
skipping to change at page 75, line 23 skipping to change at page 85, line 31
<name>NeighborID</name> <name>NeighborID</name>
<synopsis>Neighbors FEID</synopsis> <synopsis>Neighbors FEID</synopsis>
<typeRef>uint32</typeRef> <typeRef>uint32</typeRef>
</element> </element>
<element elementID="2"> <element elementID="2">
<name>interfaceToNeighbor</name> <name>interfaceToNeighbor</name>
<synopsis> <synopsis>
FE's interface that connects to this neighbor FE's interface that connects to this neighbor
</synopsis> </synopsis>
<optional/> <optional/>
<!-- the length here is the length of interface name. <typeRef>String</typeRef>
It is unfortunate to have to limit it, since it has
nothing to do with the model
-->
<typeRef>String[20]</typeRef>
</element> </element>
<element elementID="3"> <element elementID="3">
<name>neighborNetworkAddress</name> <name>neighborNetworkAddress</name>
<synopsis>The network layer address of the neighbor <synopsis>The network layer address of the neighbor
Presumably, the network type can be Presumably, the network type can be
determined from the interface information determined from the interface information
</synopsis> </synopsis>
<typeRef>OctetSting[16]</typeRef> <typeRef>OctetSting[16]</typeRef>
</element> </element>
<element elementID="4"> <element elementID="4">
<name>neighborMACAdddress</name> <name>neighborMACAdddress</name>
<synopsis>the media access control address of <synopsis>the media access control address of
the neighbor. Again, it is presumed the neighbor. Again, it is presumed
the type can be determined the type can be determined
from the interface information from the interface information
</synopsis> </synopsis>
<typeRef>OctetString[8]</typeRef> <typeRef>octetstring[8]</typeRef>
</element>
</struct>
</dataTypeDef>
<dataTypeDef>
<name>AccessPermissionValues</name>
<synopsis>
The possible values of attribute access permission
</synopsis>
<!-- can this use the access from the schema somehow? -->
<atomic>
<baseType>uchar</baseType>
<specialValues>
<specialValue value="0">
<name>None</name>
<synopsis>Access is prohibited</synopsis>
</specialValue>
<specialValue value="1">
<name> Read-Only </name>
<synopsis>Access is read only</synopsis>
</specialValue>
<specialValue value="2">
<name>Write-Only</name>
<synopsis>
The attribute may be written, but not read
</synopsis>
</specialValue>
<specialValue value="3">
<name>Read-Write</name>
<synopsis>
The attribute may be read or written
</synopsis>
</specialValue>
</specialValues>
</atomic>
</dataTypeDef>
<dataTypeDef>
<name>SupportedAttributeType</name>
<synopsis>
Mapping between attributes and access modes
</synopsis>
<struct>
<element elementID="1">
<name>AttributeName</name>
<synopsis>
Name of referenced Attribute
</synopsis>
<!-- the length limit issue again -->
<typeRef>String[40]</typeRef>
</element>
<element elementID=÷2÷>
<name>AttributeID</name>
<synopsis>
The ID in the FE Object of the attribute
</synopsis>
<typeRef>uint32</typeRef>
</element>
<element elementID="3">
<name>AccessModes</name>
<synopsis>Access Modes</synopsis>
<typeRef>AccessPermissionValues</typeRef>
</element> </element>
</struct> </struct>
</dataTypeDef> </dataTypeDef>
<dataTypeDef> <dataTypeDef>
<name>LFBSelectorType</name> <name>LFBSelectorType</name>
<synopsis> <synopsis>
Unique identification of a LFB class-instance Unique identification of a LFB class-instance
</synopsis> </synopsis>
<struct> <struct>
<element elementID="1"> <element elementID="1">
skipping to change at page 77, line 46 skipping to change at page 86, line 37
</synopsis> </synopsis>
<struct> <struct>
<element elementID="1"> <element elementID="1">
<name>FromLFBID</name> <name>FromLFBID</name>
<synopsis>LFB src</synopsis> <synopsis>LFB src</synopsis>
<typeRef>LFBSelector</typeRef> <typeRef>LFBSelector</typeRef>
</element> </element>
<element elementID="2"> <element elementID="2">
<name>FromPortGroup</name> <name>FromPortGroup</name>
<synopsis>src port group</synopsis> <synopsis>src port group</synopsis>
<!-- again the length limit on strings pops up --> <typeRef>String</typeRef>
<typeRef>String[4]</typeRef>
</element> </element>
<element elementID="3"> <element elementID="3">
<name>FromPortIndex</name> <name>FromPortIndex</name>
<synopsis>src port index</synopsis> <synopsis>src port index</synopsis>
<typeRef>uint32</typeRef> <typeRef>uint32</typeRef>
</element> </element>
<element elementID="4"> <element elementID="4">
<name>ToLFBID</name> <name>ToLFBID</name>
<synopsis>dst LFBID</synopsis> <synopsis>dst LFBID</synopsis>
<typeRef>LFBSelector</typeRef> <typeRef>LFBSelector</typeRef>
</element> </element>
<element elementID="5"> <element elementID="5">
<name>ToPortGroup</name> <name>ToPortGroup</name>
<synopsis>dst port group</synopsis> <synopsis>dst port group</synopsis>
<!-- again the string length limit --> <typeRef>String</typeRef>
<typeRef>String[40]</typeRef>
</element> </element>
<element elementID="6"> <element elementID="6">
<name>ToPortIndex</name> <name>ToPortIndex</name>
<synopsis>dst port index</synopsis> <synopsis>dst port index</synopsis>
<typeRef>uint32</typeRef> <typeRef>uint32</typeRef>
</element> </element>
</struct> </struct>
</dataTypeDef> </dataTypeDef>
</dataTypeDefs> </dataTypeDefs>
<LFBClassDefs> <LFBClassDefs>
<LFBClassDef LFBClassID="1"> <LFBClassDef LFBClassID="1">
<name>FEObject</name> <name>FEObject</name>
<synopsis>Core LFB: FE Object</synopsis> <synopsis>Core LFB: FE Object</synopsis>
<capabilities> <version>1.0<version/>
<capability elementID="30">
<name>ModifiableLFBTopology</name>
<synopsis>
Whether Modifiable LFB is supported
</synopsis>
<optional/>
<typeRef>boolean</typeRef>
</capability>
<capability elementID="31">
<name>SupportedLFBs</name>
<synopsis>List of all supported LFBs</synopsis>
<optional/>
<array type="variable-size">
<typeRef>SupportedLFBType</typeRef>
</array>
</capability>
<capability elementID="32">
<synopsis>List of attribute ACLs</synopsis>
<optional/>
<array type="variable-size">
<typeRef>SupportedAttributeType</typeRef>
</array>
</capability>
</capabilities>
<attributes> <attributes>
<attribute access="read-write" elementID="1"> <attribute access="read-write" elementID="1">
<name>LFBTopology</name> <name>LFBTopology</name>
<synopsis>the table of known Topologies</synopsis> <synopsis>the table of known Topologies</synopsis>
<array type="variable-size"> <array type="variable-size">
<typeRef>LFBLinkType</typeRef> <typeRef>LFBLinkType</typeRef>
</array> </array>
</attribute> </attribute>
<attribute access="read-write" elementID="2"> <attribute access="read-write" elementID="2">
<name>LFBSelectors</name> <name>LFBSelectors</name>
skipping to change at page 80, line 12 skipping to change at page 88, line 24
<typeRef>FEStatusValues</typeRef> <typeRef>FEStatusValues</typeRef>
</attribute> </attribute>
<attribute access="read-write" elementID="8"> <attribute access="read-write" elementID="8">
<name>FENeighbors</name> <name>FENeighbors</name>
<synopsis>table of known neighbors</synopsis> <synopsis>table of known neighbors</synopsis>
<array type="variable-size"> <array type="variable-size">
<typeRef>FEConfiguredNeighborType</typeRef> <typeRef>FEConfiguredNeighborType</typeRef>
</array> </array>
</attribute> </attribute>
</attributes> </attributes>
<capabilities>
<capability elementID="30">
<name>ModifiableLFBTopology</name>
<synopsis>
Whether Modifiable LFB is supported
</synopsis>
<optional/>
<typeRef>boolean</typeRef>
</capability>
<capability elementID="31">
<name>SupportedLFBs</name>
<synopsis>List of all supported LFBs</synopsis>
<optional/>
<array type="variable-size">
<typeRef>SupportedLFBType</typeRef>
</array>
</capability>
</capabilities>
</LFBClassDef> </LFBClassDef>
</LFBClassDefs> </LFBClassDefs>
</LFBLibrary> </LFBLibrary>
5.2. FE Capabilities 5.2. FE Capabilities
The FE Capability information is contained in the capabilities The FE Capability information is contained in the capabilities
element of the class definition. As described elsewhere, capability element of the class definition. As described elsewhere,
information is always considered to be read-only. capability information is always considered to be read-only.
The currently defined capabilities are ModifiableLFBTopology, The currently defined capabilities are ModifiableLFBTopology and
SupportedLFBs and SupportedAttributeType. SupportedLFBs. Information as to which attributes of the FE LFB
are supported is contained in the properties information for those
elements.
5.2.1. ModifiableLFBTopology 5.2.1. ModifiableLFBTopology
This element has a boolean value that indicates whether the LFB This element has a boolean value that indicates whether the LFB
topology of the FE may be changed by the CE. If the element is topology of the FE may be changed by the CE. If the element is
absent, the default value is assumed to be true, and the CE presumes absent, the default value is assumed to be true, and the CE
the LFB topology may be changed. If the value is present and set to presumes the LFB topology may be changed. If the value is present
false, the LFB topology of the FE is fixed. If the topology is and set to false, the LFB topology of the FE is fixed. If the
fixed, the LFBs supported clause may be omitted, and the list of topology is fixed, the LFBs supported clause may be omitted, and
supported LFBs is inferred by the CE from the LFB topology the list of supported LFBs is inferred by the CE from the LFB
information. If the list of supported LFBs is provided when topology information. If the list of supported LFBs is provided
ModifiableLFBTopology is false, the CanOccurBefore and CanOccurAfter when ModifiableLFBTopology is false, the CanOccurBefore and
information should be omitted. CanOccurAfter information should be omitted.
5.2.2. SupportedLFBs and SupportedLFBType 5.2.2. SupportedLFBs and SupportedLFBType
One capability that the FE should include is the list of supported One capability that the FE should include is the list of supported
LFB classes. The SupportedLFBs element, is an array that contains LFB classes. The SupportedLFBs element, is an array that contains
the information about each supported LFB Class. The array structure the information about each supported LFB Class. The array
type is defined as the SupportedLFBType dataTypeDef. structure type is defined as the SupportedLFBType dataTypeDef.
Each occurrence of the SupportedLFBs array element describes an LFB
class that the FE supports. In addition to indicating that the FE
supports the class, FEs with modifiable LFB topology should include
information about how LFBs of the specified class may be connected
to other LFBs. This information should describe which LFB classes
the specified LFB class may succeed or precede in the LFB topology.
The FE should include information as to which port groups may be Each occurrence of the SupportedLFBs array element describes an
connected to the given adjacent LFB class. If port group LFB class that the FE supports. In addition to indicating that
information is omitted, it is assumed that all port groups may be the FE supports the class, FEs with modifiable LFB topology should
used. include information about how LFBs of the specified class may be
connected to other LFBs. This information should describe which
LFB classes the specified LFB class may succeed or precede in the
LFB topology. The FE should include information as to which port
groups may be connected to the given adjacent LFB class. If port
group information is omitted, it is assumed that all port groups
may be used.
5.2.2.1. LFBName 5.2.2.1. LFBName
This element has as its value the name of the LFB being described. This element has as its value the name of the LFB being described.
5.2.2.2. LFBOccurrenceLimit 5.2.2.2. LFBOccurrenceLimit
This element, if present, indicates the largest number of instances This element, if present, indicates the largest number of
of this LFB class the FE can support. For FEs that do not have the instances of this LFB class the FE can support. For FEs that do
capability to create or destroy LFB instances, this can either be not have the capability to create or destroy LFB instances, this
omitted or be the same as the number of LFB instances of this class can either be omitted or be the same as the number of LFB
contained in the LFB list attribute. instances of this class contained in the LFB list attribute.
5.2.2.3. PortGroupLimits and PortGroupLimitType 5.2.2.3. PortGroupLimits and PortGroupLimitType
The PortGroupLimits element is an array of information about the The PortGroupLimits element is an array of information about the
port groups supported by the LFB class. The structure of the port port groups supported by the LFB class. The structure of the port
group limit information is defined by the PortGroupLimitType group limit information is defined by the PortGroupLimitType
dataTypeDef. dataTypeDef.
Each PortGroupLimits array element contains information describing a Each PortGroupLimits array element contains information describing
single port group of the LFB class. Each array element contains the a single port group of the LFB class. Each array element contains
name of the port group in the PortGroupName element, the fewest the name of the port group in the PortGroupName element, the
number of ports that can exist in the group in the MinPortCount fewest number of ports that can exist in the group in the
element, and the largest number of ports that can exist in the group MinPortCount element, and the largest number of ports that can
in the MaxPortCount element. exist in the group in the MaxPortCount element.
5.2.2.4.CanOccurAfters and LFBAdjacencyLimitType 5.2.2.4.CanOccurAfters and LFBAdjacencyLimitType
The CanOccurAfters element is an array that contains the list of The CanOccurAfters element is an array that contains the list of
LFBs the described class can occur after. The array elements are LFBs the described class can occur after. The array elements are
defined in the LFBAdjacencyLimitType dataTypeDef. defined in the LFBAdjacencyLimitType dataTypeDef.
The array elements describe a permissible positioning of the The array elements describe a permissible positioning of the
described LFB class, referred to here as the SupportedLFB. described LFB class, referred to here as the SupportedLFB.
Specifically, each array element names an LFB that can topologically Specifically, each array element names an LFB that can
precede that LFB class. That is, the SupportedLFB can have an input topologically precede that LFB class. That is, the SupportedLFB
port connected to an output port of an LFB that appears in the can have an input port connected to an output port of an LFB that
CanOccurAfters array. The LFB class that the SupportedLFB can appears in the CanOccurAfters array. The LFB class that the
follow is identified by the NeighborLFB element of the SupportedLFB can follow is identified by the NeighborLFB element
LFBAdjacencyLimitType array element. If this neighbor can only be of the LFBAdjacencyLimitType array element. If this neighbor can
connected to a specific set of input port groups, then the viaPort only be connected to a specific set of input port groups, then the
element is included. This element occurs once for each input port viaPort element is included. This element occurs once for each
group of the SupportedLFB that can be connected to an output port of input port group of the SupportedLFB that can be connected to an
the NeighborLFB. output port of the NeighborLFB.
[e.g., Within a SupportedLFBs element, each array element of the [e.g., Within a SupportedLFBs element, each array element of the
CanOccurAfters array must have a unique NeighborLFB, and within each CanOccurAfters array must have a unique NeighborLFB, and within
array element each viaPort must represent a distinct and valid input each array element each viaPort must represent a distinct and
port group of the SupportedLFB. The LFB Class definition schema valid input port group of the SupportedLFB. The LFB Class
does not yet support uniqueness declarations] definition schema does not yet support uniqueness declarations]
5.2.2.5. CanOccurBefores and LFBAdjacencyLimitType 5.2.2.5. CanOccurBefores and LFBAdjacencyLimitType
The CanOccurBefores array holds the information about which LFB The CanOccurBefores array holds the information about which LFB
classes can follow the described class. Structurally this element classes can follow the described class. Structurally this element
parallels CanOccurAfters, and uses the same type definition for the parallels CanOccurAfters, and uses the same type definition for
array element. the array element.
The array elements list those LFB classes that the SupportedLFB may The array elements list those LFB classes that the SupportedLFB
precede in the topology. In this element, the may precede in the topology. In this element, the
viaPort element of the array value represents the output port group viaPort element of the array value represents the output port
of the SupportedLFB that may be connected to the NeighborLFB. As group of the SupportedLFB that may be connected to the
with CanOccurAfters, viaPort may occur multiple times if multiple NeighborLFB. As with CanOccurAfters, viaPort may occur multiple
output ports may legitimately connect to the given NeighborLFB times if multiple output ports may legitimately connect to the
class. given NeighborLFB class.
[And a similar set of uniqueness constraints apply to the [And a similar set of uniqueness constraints apply to the
CanOccurBefore clauses, even though an LFB may occur both in CanOccurBefore clauses, even though an LFB may occur both in
CanOccurAfter and CanOccurBefore.] CanOccurAfter and CanOccurBefore.]
5.2.2.6. LFBClassCapabilities 5.2.2.6. LFBClassCapabilities
This element contains capability information about the subject LFB This element contains capability information about the subject LFB
class whose structure and semantics are defined by the LFB class class whose structure and semantics are defined by the LFB class
definition. definition.
[Note: Important Omissions] [Note: Important Omissions]
However, this element does not appear in the definition, because the However, this element does not appear in the definition, because
author can not figure out how to write it. the author can not figure out how to write it.
5.2.3. SupportedAttributeType
This element serves as a wrapper to hold the information about
attributed related capabilities. Specifically, attributes should be
described in this element if:
a) they are optional elements in the standard and are supported by
the FE, or
b) the standard allows for a range of access permissions (for
example, read-only or read-write).
Each attribute so described is contained in the
SupportedAttributeType element. That element contains an
AttributeName element whose value is the name of the element being
described, and AttributeID element whose value is the ID in the FE
Object of the Attribute, and an AccessModes element whose value is
the list of permissions.
5.3.FEAttributes 5.3.FEAttributes
The attributes element is included if the class definition contains The attributes element is included if the class definition
the attributes of the FE that are not considered "capabilities". contains the attributes of the FE that are not considered
Some of these attributes are writeable, and some are read-only, "capabilities". Some of these attributes are writeable, and some
which should be indicated by the capability information. are read-only, which should be indicated by the capability
information.
[Editors note - At the moment, the set of attributes is woefully [Editors note - At the moment, the set of attributes is woefully
incomplete.] incomplete.]
5.3.1. FEStatus 5.3.1. FEStatus
This attribute carries the overall state of the FE. For now, it is This attribute carries the overall state of the FE. For now, it
restricted to the strings AdminDisable, OperDisable and OperEnable. is restricted to the strings AdminDisable, OperDisable and
OperEnable.
5.3.2. LFBSelectors and LFBSelectorType 5.3.2. LFBSelectors and LFBSelectorType
The LFBSelectors element is an array of information about the LFBs The LFBSelectors element is an array of information about the LFBs
currently accessible via ForCES in the FE. The structure of the LFB currently accessible via ForCES in the FE. The structure of the
information is defined by the LFBSelectorType. LFB information is defined by the LFBSelectorType.
Each entry in the array describes a single LFB instance in the FE. Each entry in the array describes a single LFB instance in the FE.
The array element contains the numeric class ID of the class of the The array element contains the numeric class ID of the class of
LFB instance and the numeric instance ID for this instance. the LFB instance and the numeric instance ID for this instance.
5.3.3. LFBTopology and LFBLinkType 5.3.3. LFBTopology and LFBLinkType
The optional LFBTopology element contains information about each The optional LFBTopology element contains information about each
inter-LFB link inside the FE, where each link is described in an inter-LFB link inside the FE, where each link is described in an
LFBLinkType element. The LFBLinkType element contains sufficient LFBLinkType element. The LFBLinkType element contains sufficient
information to identify precisely the end points of a link. The information to identify precisely the end points of a link. The
FromLFBID and ToLFBID fields specify the LFB instances at each end FromLFBID and ToLFBID fields specify the LFB instances at each end
of the link, and must reference LFBs in the LFB instance table. The of the link, and must reference LFBs in the LFB instance table.
FromPortGroup and ToPortGroup must identify output and input port The FromPortGroup and ToPortGroup must identify output and input
groups defined in the LFB classes of the LFB instances identified by port groups defined in the LFB classes of the LFB instances
FromLFBID and ToLFBID. The FromPortIndex and ToPortIndex fields identified by FromLFBID and ToLFBID. The FromPortIndex and
select the elements from the port groups that this link connects. ToPortIndex fields select the elements from the port groups that
this link connects. All links are uniquely identified by the
All links are uniquely identified by the FromLFBID, FromPortGroup, FromLFBID, FromPortGroup, and FromPortIndex fields. Multiple
and FromPortIndex fields. Multiple links may have the same ToLFBID, links may have the same ToLFBID, ToPortGroup, and ToPortIndex as
ToPortGroup, and ToPortIndex as this model supports fan in of inter- this model supports fan in of inter-LFB links but not fan out.
LFB links but not fan out.
5.3.4. FENeighbors an FEConfiguredNeighborType 5.3.4. FENeighbors an FEConfiguredNeighborType
The FENeighbors element is an array of information about manually The FENeighbors element is an array of information about manually
configured adjacencies between this FE and other FEs. The content configured adjacencies between this FE and other FEs. The content
of the array is defined by the FEConfiguredNeighborType element. of the array is defined by the FEConfiguredNeighborType element.
This array is intended to capture information that may be configured This array is intended to capture information that may be
on the FE and is needed by the CE, where one array entry corresponds configured on the FE and is needed by the CE, where one array
to each configured neighbor. Note that this array is not intended entry corresponds to each configured neighbor. Note that this
to represent the results of any discovery protocols, as those will array is not intended to represent the results of any discovery
have their own LFBs. protocols, as those will have their own LFBs.
Similarly, the MAC address information in the table is intended to Similarly, the MAC address information in the table is intended to
be used in situations where neighbors are configured by MAC address. be used in situations where neighbors are configured by MAC
Resolution of network layer to MAC address information should be address. Resolution of network layer to MAC address information
captured in ARP LFBs and not duplicated in this table. Note that should be captured in ARP LFBs and not duplicated in this table.
the same neighbor may be reached through multiple interfaces or at Note that the same neighbor may be reached through multiple
multiple addresses. There is no uniqueness requirement of any sort interfaces or at multiple addresses. There is no uniqueness
on occurrences of the FENeighbors element. requirement of any sort on occurrences of the FENeighbors element.
Information about the intended forms of exchange with a given Information about the intended forms of exchange with a given
neighbor is not captured here, only the adjacency information is neighbor is not captured here, only the adjacency information is
included. included.
5.3.4.1.NeighborID 5.3.4.1.NeighborID
This is the ID in some space meaningful to the CE for the neighbor. This is the ID in some space meaningful to the CE for the
If this table remains, we probably should add an FEID from the same neighbor. If this table remains, we probably should add an FEID
space as an attribute of the FE. from the same space as an attribute of the FE.
5.3.4.2.NeighborInterface 5.3.4.2.NeighborInterface
This identifies the interface through which the neighbor is reached. This identifies the interface through which the neighbor is
reached.
[Editors note: As the port structures become better defined, the [Editors note: As the port structures become better defined, the
type for this should be filled in with the types necessary to type for this should be filled in with the types necessary to
reference the various possible neighbor interfaces, include physical reference the various possible neighbor interfaces, include
interfaces, logical tunnels, virtual circuits, etc.] physical interfaces, logical tunnels, virtual circuits, etc.]
5.3.4.3. NeighborNetworkAddress 5.3.4.3. NeighborNetworkAddress
Neighbor configuration is frequently done on the basis of a network
layer address. For neighbors configured in that fashion, this is Neighbor configuration is frequently done on the basis of a
where that address is stored. network layer address. For neighbors configured in that fashion,
this is where that address is stored.
5.3.4.4.NeighborMacAddress 5.3.4.4.NeighborMacAddress
Neighbors are sometimes configured using MAC level addresses Neighbors are sometimes configured using MAC level addresses
(Ethernet MAC address, circuit identifiers, etc.) If such addresses (Ethernet MAC address, circuit identifiers, etc.) If such
are used to configure the adjacency, then that information is stored addresses are used to configure the adjacency, then that
here. Note that over some ports such as physical point to point information is stored here. Note that over some ports such as
links or virtual circuits considered as individual interfaces, there physical point to point links or virtual circuits considered as
is no need for either form of address. individual interfaces, there is no need for either form of
address.
6. 6.
Satisfying the Requirements on FE Model Satisfying the Requirements on FE Model
This section describes how the proposed FE model meets the This section describes how the proposed FE model meets the
requirements outlined in Section 5 of RFC 3654 [1]. The requirements outlined in Section 5 of RFC 3654 [1]. The
requirements can be separated into general requirements (Sections 5, requirements can be separated into general requirements (Sections
5.1 - 5.4) and the specification of the minimal set of logical 5, 5.1 - 5.4) and the specification of the minimal set of logical
functions that the FE model must support (Section 5.5). functions that the FE model must support (Section 5.5).
The general requirement on the FE model is that it be able to The general requirement on the FE model is that it be able to
express the logical packet processing capability of the FE, through express the logical packet processing capability of the FE,
both a capability and a state model. In addition, the FE model is through both a capability and a state model. In addition, the FE
expected to allow flexible implementations and be extensible to model is expected to allow flexible implementations and be
allow defining new logical functions. extensible to allow defining new logical functions.
A major component of the proposed FE model is the Logical Function A major component of the proposed FE model is the Logical
Block (LFB) model. Each distinct logical function in an FE is Function Block (LFB) model. Each distinct logical function in an
modeled as an LFB. Operational parameters of the LFB that must be FE is modeled as an LFB. Operational parameters of the LFB that
visible to the CE are conceptualized as LFB attributes. These must be visible to the CE are conceptualized as LFB attributes.
attributes express the capability of the FE and support flexible These attributes express the capability of the FE and support
implementations by allowing an FE to specify which optional features flexible implementations by allowing an FE to specify which
are supported. The attributes also indicate whether they are optional features are supported. The attributes also indicate
configurable by the CE for an LFB class. Configurable attributes whether they are configurable by the CE for an LFB class.
provide the CE some flexibility in specifying the behavior of an Configurable attributes provide the CE some flexibility in
LFB. When multiple LFBs belonging to the same LFB class are specifying the behavior of an LFB. When multiple LFBs belonging
instantiated on an FE, each of those LFBs could be configured with to the same LFB class are instantiated on an FE, each of those
different attribute settings. By querying the settings of the LFBs could be configured with different attribute settings. By
attributes for an instantiated LFB, the CE can determine the state querying the settings of the attributes for an instantiated LFB,
of that LFB. the CE can determine the state of that LFB.
Instantiated LFBs are interconnected in a directed graph that Instantiated LFBs are interconnected in a directed graph that
describes the ordering of the functions within an FE. This directed describes the ordering of the functions within an FE. This
graph is described by the topology model. The combination of the directed graph is described by the topology model. The
attributes of the instantiated LFBs and the topology describe the combination of the attributes of the instantiated LFBs and the
packet processing functions available on the FE (current state). topology describe the packet processing functions available on
the FE (current state).
Another key component of the FE model is the FE attributes. The FE Another key component of the FE model is the FE attributes. The
attributes are used mainly to describe the capabilities of the FE, FE attributes are used mainly to describe the capabilities of the
but they also convey information about the FE state. FE, but they also convey information about the FE state.
The FE model also includes a definition of the minimal set of LFBs The FE model also includes a definition of the minimal set of LFBs
that is required by Section 5.5 of RFC 3564[1]. The sections that that is required by Section 5.5 of RFC 3564[1]. The sections that
follow provide more detail on the specifics of each of those LFBs. follow provide more detail on the specifics of each of those LFBs.
Note that the details of the LFBs are contained in a separate LFB Note that the details of the LFBs are contained in a separate LFB
Class Library document. [EDITOR - need to add a reference to that Class Library document. [EDITOR - need to add a reference to that
document]. document].
6.1. Port Functions 6.1. Port Functions
The FE model can be used to define a Port LFB class and its The FE model can be used to define a Port LFB class and its
technology-specific subclasses to map the physical port of the technology-specific subclasses to map the physical port of the
device to the LFB model with both static and configurable device to the LFB model with both static and configurable
attributes. The static attributes model the type of port, link attributes. The static attributes model the type of port, link
speed, etc. The configurable attributes model the addressing, speed, etc. The configurable attributes model the addressing,
administrative status, etc. administrative status, etc.
6.2. Forwarding Functions 6.2. Forwarding Functions
Because forwarding function is one of the most common and
Because forwarding function is one of the most common and important important functions in the forwarding plane, it requires special
functions in the forwarding plane, it requires special attention in attention in modeling to allow design flexibility, implementation
modeling to allow design flexibility, implementation efficiency, efficiency, modeling accuracy and configuration simplicity.
modeling accuracy and configuration simplicity. Toward that end, it Toward that end, it is recommended that the core forwarding
is recommended that the core forwarding function being modeled by function being modeled by the combination of two LFBs -- Longest
the combination of two LFBs -- Longest Prefix Match (LPM) classifier Prefix Match (LPM) classifier LFB and Next Hop LFB. Special header
LFB and Next Hop LFB. Special header writer LFB is also needed to writer LFB is also needed to take care of TTL decrement and
take care of TTL decrement and checksum etc. checksum etc.
6.3. QoS Functions 6.3. QoS Functions
The LFB class library includes descriptions of the Meter, Queue , The LFB class library includes descriptions of the Meter, Queue ,
Scheduler, Counter and Dropper LFBs to support the QoS functions in Scheduler, Counter and Dropper LFBs to support the QoS functions
the forwarding path. The FE model can also be used to define other in the forwarding path. The FE model can also be used to define
useful QoS functions as needed. These LFBs allow the CE to other useful QoS functions as needed. These LFBs allow the CE to
manipulate the attributes to model IntServ or DiffServ functions. manipulate the attributes to model IntServ or DiffServ functions.
6.4. Generic Filtering Functions 6.4. Generic Filtering Functions
Various combinations of Classifier, Redirector, Meter and Dropper Various combinations of Classifier, Redirector, Meter and Dropper
LFBs can be used to model a complex set of filtering functions. LFBs can be used to model a complex set of filtering functions.
6.5. Vendor Specific Functions 6.5. Vendor Specific Functions
New LFB classes can be defined according to the LFB model as New LFB classes can be defined according to the LFB model as
described in Section 4 to support vendor specific functions. A new described in Section 4 to support vendor specific functions. A
LFB class can also be derived from an existing LFB class through new LFB class can also be derived from an existing LFB class
inheritance. through inheritance.
6.6.High-Touch Functions 6.6.High-Touch Functions
High-touch functions are those that take action on the contents or High-touch functions are those that take action on the contents or
headers of a packet based on content other than what is found in the headers of a packet based on content other than what is found in
IP header. Examples of such functions include NAT, ALG, firewall, the IP header. Examples of such functions include NAT, ALG,
tunneling and L7 content recognition. It is not practical to firewall, tunneling and L7 content recognition. It is not
include all possible high-touch functions in the initial LFB library practical to include all possible high-touch functions in the
due to the number and complexity. However, the flexibility of the initial LFB library due to the number and complexity. However, the
LFB model and the power of interconnection in LFB topology should flexibility of the LFB model and the power of interconnection in
make it possible to model any high-touch functions. LFB topology should make it possible to model any high-touch
functions.
6.7. Security Functions 6.7. Security Functions
Security functions are not included in the initial LFB class Security functions are not included in the initial LFB class
library. However, the FE model is flexible and powerful enough to library. However, the FE model is flexible and powerful enough to
model the types of encryption and/or decryption functions that an FE model the types of encryption and/or decryption functions that an
supports and the associated attributes for such functions. FE supports and the associated attributes for such functions.
The IP Security Policy (IPSP) Working Group in the IETF has started The IP Security Policy (IPSP) Working Group in the IETF has
work in defining the IPSec Policy Information Base [8]. We will try started work in defining the IPSec Policy Information Base [8].
to reuse as much of the work as possible. We will try to reuse as much of the work as possible.
6.8. Off-loaded Functions 6.8. Off-loaded Functions
In addition to the packet processing functions typically found on In addition to the packet processing functions typically found on
the FEs, some logical functions may also be executed asynchronously the FEs, some logical functions may also be executed
by some FEs, as directed by a finite-state machine and triggered not asynchronously by some FEs, as directed by a finite-state machine
only by packet events, but by timer events as well. Examples of and triggered not only by packet events, but by timer events as
such functions include; finite-state machine execution required by well. Examples of such functions include; finite-state machine
TCP termination or OSPF Hello processing off-loaded from the CE. By execution required by TCP termination or OSPF Hello processing
defining LFBs for such functions, the FE model is capable of off-loaded from the CE. By defining LFBs for such functions, the
expressing these asynchronous functions to allow the CE to take FE model is capable of expressing these asynchronous functions to
advantage of such off-loaded functions on the FEs. allow the CE to take advantage of such off-loaded functions on the
FEs.
6.9. IPFLOW/PSAMP Functions 6.9. IPFLOW/PSAMP Functions
RFC 3917 [9] defines an architecture for IP traffic flow monitoring, RFC 3917 [9] defines an architecture for IP traffic flow
measuring and exporting. The LFB model supports statistics monitoring, measuring and exporting. The LFB model supports
collection on the LFB by including statistical attributes (Section statistics collection on the LFB by including statistical
4.7.4) in the LFB class definitions; in addition, special statistics attributes (Section 4.7.4) in the LFB class definitions; in
collection LFBs such as meter LFBs and counter LFBs can also be used addition, special statistics collection LFBs such as meter LFBs
to support accounting functions in the FE. and counter LFBs can also be used to support accounting functions
in the FE.
[10] describes a framework to define a standard set of capabilities [10] describes a framework to define a standard set of
for network elements to sample subsets of packets by statistical and capabilities for network elements to sample subsets of packets by
other methods. Time event generation, filter LFB, and counter/meter statistical and other methods. Time event generation, filter LFB,
LFB are the elements needed to support packet filtering and sampling and counter/meter LFB are the elements needed to support packet
functions -- these elements can all be supported in the FE model. filtering and sampling functions -- these elements can all be
supported in the FE model.
7. 7.
Using the FE model in the ForCES Protocol Using the FE model in the ForCES Protocol
The actual model of the forwarding plane in a given NE is something The actual model of the forwarding plane in a given NE is
the CE must learn and control by communicating with the FEs (or by something the CE must learn and control by communicating with the
other means). Most of this communication will happen in the post- FEs (or by other means). Most of this communication will happen
association phase using the ForCES protocol. The following types of in the post-association phase using the ForCES protocol. The
information must be exchanged between CEs and FEs via the ForCES following types of information must be exchanged between CEs and
protocol: FEs via the ForCES protocol:
1) FE topology query; 1) FE topology query;
2) FE capability declaration; 2) FE capability declaration;
3) LFB topology (per FE) and configuration capabilities query; 3) LFB topology (per FE) and configuration capabilities
query;
4) LFB capability declaration; 4) LFB capability declaration;
5) State query of LFB attributes; 5) State query of LFB attributes;
6) Manipulation of LFB attributes; 6) Manipulation of LFB attributes;
7) LFB topology reconfiguration. 7) LFB topology reconfiguration.
Items 1) through 5) are query exchanges, where the main flow of Items 1) through 5) are query exchanges, where the main flow of
information is from the FEs to the CEs. Items 1) through 4) are information is from the FEs to the CEs. Items 1) through 4) are
typically queried by the CE(s) in the beginning of the post- typically queried by the CE(s) in the beginning of the post-
association (PA) phase, though they may be repeatedly queried at any association (PA) phase, though they may be repeatedly queried at
time in the PA phase. Item 5) (state query) will be used at the any time in the PA phase. Item 5) (state query) will be used at
beginning of the PA phase, and often frequently during the PA phase the beginning of the PA phase, and often frequently during the PA
(especially for the query of statistical counters). phase (especially for the query of statistical counters).
Items 6) and 7) are "command" types of exchanges, where the main Items 6) and 7) are "command" types of exchanges, where the main
flow of information is from the CEs to the FEs. Messages in Item 6) flow of information is from the CEs to the FEs. Messages in Item
(the LFB re-configuration commands) are expected to be used 6) (the LFB re-configuration commands) are expected to be used
frequently. Item 7) (LFB topology re-configuration) is needed only frequently. Item 7) (LFB topology re-configuration) is needed
if dynamic LFB topologies are supported by the FEs and it is only if dynamic LFB topologies are supported by the FEs and it is
expected to be used infrequently. expected to be used infrequently.
Among the seven types of payload information the ForCES protocol Among the seven types of payload information the ForCES protocol
carries between CEs and FEs, the FE model covers all of them except carries between CEs and FEs, the FE model covers all of them
item 1), which concerns the inter-FE topology. The FE model focuses except item 1), which concerns the inter-FE topology. The FE
on the LFB and LFB topology within a single FE. Since the model focuses on the LFB and LFB topology within a single FE.
information related to item 1) requires global knowledge about all Since the information related to item 1) requires global
of the FEs and their inter-connection with each other, this exchange knowledge about all of the FEs and their inter-connection with
is part of the ForCES base protocol instead of the FE model. each other, this exchange is part of the ForCES base protocol
instead of the FE model.
The relationship between the FE model and the seven post-association The relationship between the FE model and the seven post-
messages are visualized in Figure 9: association messages are visualized in Figure 9:
+--------+ +--------+
..........-->| CE | ..........-->| CE |
/----\ . +--------+ /----\ . +--------+
\____/ FE Model . ^ | \____/ FE Model . ^ |
| |................ (1),2 | | 6, 7 | |................ (1),2 | | 6, 7
| | (off-line) . 3, 4, 5 | | | | (off-line) . 3, 4, 5 | |
\____/ . | v \____/ . | v
. +--------+ . +--------+
e.g. RFCs ..........-->| FE | e.g. RFCs ..........-->| FE |
+--------+ +--------+
Figure 9. Relationship between the FE model and the ForCES protocol Figure 9. Relationship between the FE model and the ForCES
messages, where (1) is part of the ForCES base protocol, and the protocol messages, where (1) is part of the ForCES base protocol,
rest are defined by the FE model. and the rest are defined by the FE model.
The actual encoding of these messages is defined by the ForCES The actual encoding of these messages is defined by the ForCES
protocol and beyond the scope of the FE model. Their discussion is protocol and beyond the scope of the FE model. Their discussion
nevertheless important here for the following reasons: is nevertheless important here for the following reasons:
. These PA model components have considerable impact on the FE . These PA model components have considerable impact on the FE
model. For example, some of the above information can be model. For example, some of the above information can be
represented as attributes of the LFBs, in which case such represented as attributes of the LFBs, in which case such
attributes must be defined in the LFB classes. attributes must be defined in the LFB classes.
. The understanding of the type of information that must be . The understanding of the type of information that must be
exchanged between the FEs and CEs can help to select the exchanged between the FEs and CEs can help to select the
appropriate protocol format and the actual encoding method appropriate protocol format and the actual encoding method
(such as XML, TLVs). (such as XML, TLVs).
. Understanding the frequency of these types of messages should . Understanding the frequency of these types of messages
influence the selection of the protocol format (efficiency should influence the selection of the protocol format
considerations). (efficiency considerations).
An important part of the FE model is the port the FE uses for its An important part of the FE model is the port the FE uses for its
message exchanges to and from the CE. In the case that a dedicated message exchanges to and from the CE. In the case that a
port is used for CE-FE communication, we propose to use a special dedicated port is used for CE-FE communication, we propose to use
port LFB, called the CE-FE Port LFB (a subclass of the general Port a special port LFB, called the CE-FE Port LFB (a subclass of the
LFB in Section 6.1), to model this dedicated CE-FE port. The CE-FE general Port LFB in Section 6.1), to model this dedicated CE-FE
Port LFB acts as both a source and sink for the traffic from and to port. The CE-FE Port LFB acts as both a source and sink for the
the CE. Sometimes the CE-FE traffic does not have its own dedicated traffic from and to the CE. Sometimes the CE-FE traffic does not
port, instead the data fabric is shared for the data plane traffic have its own dedicated port, instead the data fabric is shared
and the CE-FE traffic. A special processing LFB can be used to for the data plane traffic and the CE-FE traffic. A special
model the ForCES packet encapsulation and decapsulation in such processing LFB can be used to model the ForCES packet
cases. encapsulation and decapsulation in such cases.
The remaining sub-sections of this section address each of the seven The remaining sub-sections of this section address each of the
message types. seven message types.
7.1. FE Topology Query 7.1. FE Topology Query
An FE may contain zero, one or more external ingress ports. An FE may contain zero, one or more external ingress ports.
Similarly, an FE may contain zero, one or more external egress Similarly, an FE may contain zero, one or more external egress
ports. In other words, not every FE has to contain any external ports. In other words, not every FE has to contain any external
ingress or egress interfaces. For example, Figure 10 shows two ingress or egress interfaces. For example, Figure 10 shows two
cascading FEs. FE #1 contains one external ingress interface but no cascading FEs. FE #1 contains one external ingress interface but
external egress interface, while FE #2 contains one external egress no external egress interface, while FE #2 contains one external
interface but no ingress interface. It is possible to connect these egress interface but no ingress interface. It is possible to
two FEs together via their internal interfaces to achieve the connect these two FEs together via their internal interfaces to
complete ingress-to-egress packet processing function. This provides achieve the complete ingress-to-egress packet processing function.
the flexibility to spread the functions across multiple FEs and This provides the flexibility to spread the functions across
interconnect them together later for certain applications. multiple FEs and interconnect them together later for certain
applications.
While the inter-FE communication protocol is out of scope for While the inter-FE communication protocol is out of scope for
ForCES, it is up to the CE to query and understand how multiple FEs ForCES, it is up to the CE to query and understand how multiple
are inter-connected to perform a complete ingress-egress packet FEs are inter-connected to perform a complete ingress-egress
processing function, such as the one described in Figure 10. The packet processing function, such as the one described in Figure
inter-FE topology information may be provided by FEs, may be hard- 10. The inter-FE topology information may be provided by FEs, may
coded into CE, or may be provided by some other entity (e.g., a bus be hard-coded into CE, or may be provided by some other entity
manager) independent of the FEs. So while the ForCES protocol (e.g., a bus manager) independent of the FEs. So while the ForCES
supports FE topology query from FEs, it is optional for the CE to protocol supports FE topology query from FEs, it is optional for
use it, assuming the CE has other means to gather such topology the CE to use it, assuming the CE has other means to gather such
information. topology information.
+-----------------------------------------------------+ +-----------------------------------------------------+
| +---------+ +------------+ +---------+ | | +---------+ +------------+ +---------+ |
input| | | | | | output | input| | | | | | output |
---+->| Ingress |-->|Header |-->|IPv4 |---------+--->+ ---+->| Ingress |-->|Header |-->|IPv4 |---------+--->+
| | port | |Decompressor| |Forwarder| FE | | | | port | |Decompressor| |Forwarder| FE | |
| +---------+ +------------+ +---------+ #1 | | | +---------+ +------------+ +---------+ #