Internet Engineering Task Force | E. Haleplidis |
Internet-Draft | |
Intended status: Informational | J. Hadi Salim |
Expires: May 7, 2020 | Mojatatu Networks |
November 4, 2019 |
ForCES architecture CUSP applicability
draft-haleplidis-bcause-forces-gap-analysis-01
This document provides a gap-analysis on how the ForCES architecture meets the requirements for CUSP. In addition it provides a ForCES XML model that implements the current proposed CUSP information model.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 7, 2020.
Copyright (c) 2019 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
This document reiterates the terminology defined by the ForCES architecture in various documents for the sake of clarity.
The ForCES architecture comprises:
This document presents the ForCES architecture as a basis for CUSP. For contextual overview, any performance numbers or prescribed "experience" in this document are based on deployment experience over many years at large and small deployment environments for embedded, cloud as well as data centre environments. Some of these deployments (still operational at time of writting) have been publicly hinted at in media [media1], [media2].
In this section we present a quick overview of the ForCES architecture. The reader is encouraged to read the relevant documents, in particular 5810, 5812 and 5811.
The origins of ForCES lie in the desire to separate control and datapath; where "datapath" was intended to be packet processing resources. Over time, however, due to the convenience of the ForCES architecture it has been used for controlling and managing arbitrary (other than packet processing) resources. As long as one can abstract the resources using the ForCES model, the protocol semantics allows using ForCES protocol to control and manage said resources.
In the case of the CUSP BNG information model, as we will show later the attributes such as interfaces, user statistics and QoS parameters can all be modeled as resources.
The ForCES protocol features can be summarized as:
The ForCES Model features can be summarized as:
There could be multiple filters defined per event. Example of compound filtering: "Generate an event when the count reaches 5 or every 10 minutes when there is at least one event".
This section describes how ForCES meets the CUSP requirements. We hope to convince the reader that there already exists a robust IETF architecture which has a large deployment experience that meets all the CUSP requirements.
One of the main requirements for the CUSP protocol is the ability to efficiently transmit information tables. In a few words, ForCES is a wire-optimized protocol able to efficiently send and receive data. The following list addresses each of the stated requirements inCUSP requirements.
The authors believes that the ForCES framework meets the requirement to efficiently transmit information tables
The authors believe that ForCES meets the protocol message priority requirements.
The authors believe ForCES meets the requirements for reliability.
The authors believe ForCES meets the security requirements.
The authors believe that ForCES meets the requirements version negotiation requirements.
The authors believe that ForCES meets the protocol capability exchange requirement.
The authors believe that ForCES meets the protocol primary and backup requirement.
The authors believe this requirement is fully met by ForCES.
The authors believe this requirement is fully met by ForCES.
One requirement that believe is important but is not specified in the CUSP document is the separation of the protocol and the data model.
A singular protocol with varying data models makes it feasible to cater for various access technologies: it allows a single control interface for multi-access devices that provide termination of subscribers over fixed access nodes(DSLAM and OLTs), fixed-wireless and hybrid access. ForCES is an excellent fit for reasons described thus far. In addition, any changes or new types of access technologies will not require a protocol change, rather a new LFB model definition.
In this section we provide individual ForCES based XML models for different parts of the CUSP information model
<dataTypeDefs> <!-- User ID --> <dataTypeDef> <name>UserID</name> <synopsis>Identification of a user</synopsis> <typeRef>uint32</typeRef> </dataTypeDef> <!-- MAC address --> <dataTypeDef> <name>IEEEMac</name> <synopsis>MAC address</synopsis> <typeRef>byte[6]</typeRef> </dataTypeDef> <!-- Access Type --> <dataTypeDef> <name>AccessDataType</name> <synopsis>Indicates the protocol being used for the user's access</synopsis> <atomic> <baseType>uint16</baseType> <specialValues> <specialValue value="0"> <name>PPPoE</name> <synopsis/> </specialValue> <specialValue value="1"> <name>IPoE</name> <synopsis/> </specialValue> </specialValues> </atomic> </dataTypeDef> <!-- User Basic Information --> <dataTypeDef> <name>UserBasicRow</name> <synopsis>User Basic Information</synopsis> <struct> <component componentID="1"> <name>userID</name> <synopsis>The user id</synopsis> <typeRef>UserID</typeRef> </component> <component componentID="2"> <name>MacAddress</name> <synopsis>The MAC Address of the user</synopsis> <typeRef>IEEEMAC</typeRef> </component> <component componentID="3"> <name>AccessType</name> <synopsis>The access type of the user</synopsis> <optional/> <typeRef>AccessDataType</typeRef> </component> <component componentID="4"> <name>SessionID</name> <synopsis>Identifier of PPPoE session</synopsis> <optional/> <typeRef>uint32</typeRef> </component> <component componentID="5"> <name>InnerVLANID</name> <synopsis>Inner VLAN ID</synopsis> <optional/> <typeRef>uint16</typeRef> </component> <component componentID="6"> <name>OuterVLANID</name> <synopsis>Outer VLAN ID</synopsis> <optional/> <typeRef>uint16</typeRef> </component> <component componentID="7"> <name>UserInterface</name> <synopsis>Binding interface of a specific user </synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> <dataTypeDef> <name>IPv4InfoRow</name> <synopsis>IPv4 User Information</synopsis> <struct> <component componentID="1"> <name>userID</name> <synopsis>The user id</synopsis> <typeRef>UserID</typeRef> </component> <component componentID="2"> <name>UserIPv4</name> <synopsis>A user's IPv4 Address</synopsis> <typeRef>byte[4]</typeRef> </component> <component componentID="3"> <name>MaskLength</name> <synopsis>The subnet mask length</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="4"> <name>Gateway</name> <synopsis>The user's gateway</synopsis> <typeRef>byte[4]</typeRef> </component> <component componentID="5"> <name>VRF</name> <synopsis>Identifier of VRF instance</synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> <!-- IPv6 Selectory Type --> <dataTypeDef> <name>IPv6SelectorType</name> <synopsis>IPv6 Type selector</synopsis> <atomic> <baseType>uchar</baseType> <specialValues> <specialValue value="0"> <name>IPv6Address</name> <synopsis>Value contains an IPv6 Address</synopsis> </specialValue> <specialValue value="1"> <name>PDAddress</name> <synopsis>Value contains PD address</synopsis> </specialValue> </specialValues> </atomic> </dataTypeDef> <dataTypeDef> <name>IPv6InfoRow</name> <synopsis>IPv6 User Information</synopsis> <struct> <component componentID="1"> <name>userID</name> <synopsis>The user id</synopsis> <typeRef>UserID</typeRef> </component> <component componentID="2"> <name>IPv6Type</name> <synopsis>IPv6 Type selector</synopsis> <typeRef>IPv6SelectorType</typeRef> </component> <component componentID="3"> <name>IPv6orPD</name> <synopsis>An IPv6 address or a PD</synopsis> <typeRef>byte[16]</typeRef> </component> <component componentID="4"> <name>PrefixLen</name> <synopsis>The prefix length for either an IPv6 Address or Prefix Delegation</synopsis> <optional/> <typeRef>uint32</typeRef> </component> <component componentID="5"> <name>VRF</name> <synopsis>Identifier of VRF instance</synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> <!-- Rate and Size for committed and peak--> <dataTypeDef> <name>RateSizeType</name> <synopsis>Rate and size for committed and peak </synopsis> <struct> <component componentID="1"> <name>CIR</name> <synopsis>Commited Information Rate </synopsis> <typeRef>uint32</typeRef> </component> <component componentID="2"> <name>PIR</name> <synopsis>Peak Information Rate</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="3"> <name>CBS</name> <synopsis>Commited Burst Size</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="4"> <name>PBS</name> <synopsis>Peak Burst Size</synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> <dataTypeDef> <name>QoSRow</name> <synopsis>User's QoS</synopsis> <struct> <component componentID="1"> <name>userID</name> <synopsis>The user id</synopsis> <typeRef>UserID</typeRef> </component> <component componentID="2"> <name>RateSize</name> <synopsis>Rate and size for committed and peak </synopsis> <typeRef>RateSizeType</typeRef> </component> <component componentID="3"> <name>QoSProfile</name> <synopsis>Standard profile from operator</synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> </dataTypeDefs> <LFBClassDefs> <LFBClassDef LFBClassID="2001"> <name>ControlPlaneUser</name> <synopsis>The control plane components for users </synopsis> <version>1.0</version> <components> <component componentID="1"> <name>UserInfo</name> <synopsis>User Informational model</synopsis> <array> <struct> <component componentID="1"> <name>UserBasic</name> <synopsis>User Basic Information</synopsis> <typeRef>UserBasicRow</typeRef> </component> <component componentID="2"> <name>IPv4Info</name> <synopsis>Optional IPv4 information</synopsis> <optional/> <typeRef>IPv4InfoRow</typeRef> </component> <component componentID="3"> <name>IPv6Info</name> <synopsis>Optional IPv6 information</synopsis> <optional/> <typeRef>IPv6InfoRow</typeRef> </component> <component componentID="4"> <name>QoSInfo</name> <synopsis>Optional QoS Profile</synopsis> <optional/> <typeRef>QoSRow</typeRef> </component> </struct> </array> </component> </components> </LFBClassDef> </LFBClassDefs>
Figure 1: User related information
<dataTypeDefs> <!---Interface Related Information --> <!-- Service Data Type --> <dataTypeDef> <name>ServiceDataType</name> <synopsis>Service Type</synopsis> <struct> <component componentID="1"> <name>PPPonly</name> <synopsis>If true, interface only supports PPP user</synopsis> <typeRef>uint16</typeRef> </component> <component componentID="2"> <name>IPv4Trig</name> <synopsis>If true, interface supports the user being triggered to connect to internet via IPv4</synopsis> <typeRef>uint16</typeRef> </component> <component componentID="3"> <name>IPv6Trig</name> <synopsis>If true, interface supports the user being triggered to connect to internet via IPv6</synopsis> <typeRef>uint16</typeRef> </component> <component componentID="4"> <name>NDTrig</name> <synopsis>If true, interface supports the user being triggered to connect to Internet via neighbor discovery</synopsis> <typeRef>uint16</typeRef> </component> <component componentID="5"> <name>ARPProxy</name> <synopsis>If true, ARP Proxy is enabled on this interface</synopsis> <typeRef>uint16</typeRef> </component> </struct> </dataTypeDef> <!-- interface info row --> <dataTypeDef> <name>InterfaceInfoRow</name> <synopsis>Interface information</synopsis> <struct> <component componentID="1"> <name>IfIndex</name> <synopsis>Index assigned to an interface</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="2"> <name>bas_enable</name> <synopsis>Bas enable flag</synopsis> <typeRef>uint16</typeRef> </component> <component componentID="3"> <name>ServiceType</name> <synopsis>Service Type</synopsis> <typeRef>ServiceDataType</typeRef> </component> </struct> </dataTypeDef> </dataTypeDefs> <LFBClassDefs> <LFBClassDef LFBClassID="2002"> <name>ControlPlaneInterface</name> <synopsis>The control plane components for interfaces </synopsis> <version>1.0</version> <components> <component componentID="1"> <name>Interface</name> <synopsis>Interface Information</synopsis> <array> <typeRef>InterfaceInfoRow</typeRef> </array> </component> </components> </LFBClassDef> </LFBClassDefs>
Figure 2: Interface related information
<dataTypeDefs> <!-- Address Field --> <dataTypeDef> <name>AddressRow</name> <synopsis>Address field distribute table row </synopsis> <struct> <component componentID="1"> <name>AddressSegment</name> <synopsis>Address Segment</synopsis> <typeRef>byte[4]</typeRef> </component> <component componentID="2"> <name>AddressSegmentMask</name> <synopsis>Address Segment Mask</synopsis> <typeRef>byte[4]</typeRef> </component> <component componentID="3"> <name>AddressSegmentVRF</name> <synopsis>Address Segment VRF instance identifier</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="4"> <name>IfIndex</name> <synopsis>Index assigned to an interface </synopsis> <typeRef>uint32</typeRef> </component> <component componentID="5"> <name>maskLength</name> <synopsis>Length of the mask</synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> </dataTypeDefs> <LFBClassDefs> <LFBClassDef LFBClassID="2003"> <name>ControlPlaneDevice</name> <synopsis>The control plane components for device </synopsis> <version>1.0</version> <components> <component componentID="1"> <name>Device</name> <synopsis>Device Information</synopsis> <array> <typeRef>AddressRow</typeRef> </array> </component> </components> </LFBClassDef> </LFBClassDefs>
Figure 3: Device related information
<dataTypeDefs> <!-- User ID --> <dataTypeDef> <name>UserID</name> <synopsis>Identification of a user</synopsis> <typeRef>uint32</typeRef> </dataTypeDef> <!-- MAC address --> <dataTypeDef> <name>IEEEMac</name> <synopsis>MAC address</synopsis> <typeRef>byte[6]</typeRef> </dataTypeDef> <!-- IfTypeDataType --> <dataTypeDef> <name>IfTypeDataType</name> <synopsis>Type of Interface</synopsis> <atomic> <baseType>uint32</baseType> <specialValues> <specialValue value="0"> <name>Ethernet</name> <synopsis>An ethernet interface </synopsis> </specialValue> <specialValue value="1"> <name>GE</name> <synopsis>A Gigabit Ethernet interface </synopsis> </specialValue> <specialValue value="2"> <name>EtherTrunk</name> <synopsis>An EtherTrunk interfaces </synopsis> </specialValue> </specialValues> </atomic> </dataTypeDef> <!-- LinkTypeDataType --> <dataTypeDef> <name>LinkTypeDataType</name> <synopsis>Link Types</synopsis> <atomic> <baseType>uint32</baseType> <specialValues> <specialValue value="0"> <name>PointToPoint</name> <synopsis>A point to point link </synopsis> </specialValue> <specialValue value="1"> <name>Broadcast</name> <synopsis>A broadcast link</synopsis> </specialValue> <specialValue value="2"> <name>Multipoint</name> <synopsis>A multipoint link</synopsis> </specialValue> </specialValues> </atomic> </dataTypeDef> <!-- IfStateType --> <dataTypeDef> <name>IfStateType</name> <synopsis>Current operational state of the interface</synopsis> <atomic> <baseType>uchar</baseType> <specialValues> <specialValue value="1"> <name>Up</name> <synopsis>Up</synopsis> </specialValue> <specialValue value="2"> <name>Down</name> <synopsis>Down</synopsis> </specialValue> <specialValue value="3"> <name>Testing</name> <synopsis>In testing mode</synopsis> </specialValue> <specialValue value="4"> <name>Unknown</name> <synopsis>Status cannot be determined </synopsis> </specialValue> <specialValue value="5"> <name>Dormant</name> <synopsis>Dormant</synopsis> </specialValue> <specialValue value="6"> <name>NotPresent</name> <synopsis>Component is missing </synopsis> </specialValue> </specialValues> </atomic> </dataTypeDef> <!-- Port Resources of UP Informational model --> <dataTypeDef> <name>PortResourcesRow</name> <synopsis>Port resources table row</synopsis> <struct> <component componentID="1"> <name>IfIndex</name> <synopsis>Index assigned to an interface</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="2"> <name>IfName</name> <synopsis>Name of the interface</synopsis> <typeRef>string[64]</typeRef> </component> <component componentID="3"> <name>IfType</name> <synopsis>Type of Interface</synopsis> <typeRef>IfTypeDataType</typeRef> </component> <component componentID="4"> <name>LinkType</name> <synopsis>Link Types</synopsis> <typeRef>LinkTypeDataType</typeRef> </component> <component componentID="5"> <name>MacAddress</name> <synopsis>The MAC Address of the link</synopsis> <typeRef>IEEEMAC</typeRef> </component> <component componentID="6"> <name>IfState</name> <synopsis>Current operational state of the interface</synopsis> <typeRef>IfStateType</typeRef> </component> </struct> </dataTypeDef> <!-- Statistics data Type --> <dataTypeDef> <name>StatDataType</name> <synopsis>Traffic Type</synopsis> <atomic> <baseType>uint32</baseType> <specialValues> <specialValue value="0"> <name>IPv4</name> <synopsis>IPv4 traffic</synopsis> </specialValue> <specialValue value="1"> <name>IPv6</name> <synopsis>IPv6 traffic</synopsis> </specialValue> </specialValues> </atomic> </dataTypeDef> <!-- Traffic Statistics Informational model --> <dataTypeDef> <name>TrafficStatisticsRow</name> <synopsis>Traffic stats per user</synopsis> <struct> <component componentID="1"> <name>userID</name> <synopsis>The user id</synopsis> <typeRef>UserID</typeRef> </component> <component componentID="2"> <name>StatType</name> <synopsis>Traffic Type</synopsis> <typeRef>StatDataType</typeRef> </component> <component componentID="3"> <name>IngressPackets</name> <synopsis>Ingress packet stats</synopsis> <typeRef>uint64</typeRef> </component> <component componentID="4"> <name>IngressByte</name> <synopsis>Ingress byte stats</synopsis> <typeRef>uint64</typeRef> </component> <component componentID="5"> <name>EgressPackets</name> <synopsis>Egress packet stats</synopsis> <typeRef>uint64</typeRef> </component> <component componentID="6"> <name>EgressBytes</name> <synopsis>Egress byte stats</synopsis> <typeRef>uint64</typeRef> </component> </struct> </dataTypeDef> <!---Interface Related Information --> </dataTypeDefs> <LFBClassDefs> <LFBClassDef LFBClassID="2011"> <name>User</name> <synopsis>The user plane components</synopsis> <version>1.0</version> <components> <component componentID="1"> <name>PortResourceTable</name> <synopsis>The port resource table for available network resources</synopsis> <array> <typeRef>PortResourcesRow</typeRef> </array> </component> <component componentID="2"> <name>StatisticsTable</name> <synopsis>Stats per user</synopsis> <array> <typeRef>TrafficStatisticsRow</typeRef> </array> </component> </components> </LFBClassDef> </LFBClassDefs>
Figure 4: Information model for User Plane
In this section we provide the whole ForCES based XML model of the information model of the CUSP BNG.
<?xml version="1.0" encoding="UTF-8"?> <LFBLibrary xmlns="urn:ietf:params:xml:ns:forces:lfbmodel:1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" provides="vbng"> <frameDefs> <frameDef> <name>Arbitrary</name> <synopsis>Any kind of packet</synopsis> </frameDef> </frameDefs> <dataTypeDefs> <!-- User ID --> <dataTypeDef> <name>UserID</name> <synopsis>Identification of a user</synopsis> <typeRef>uint32</typeRef> </dataTypeDef> <!-- MAC address --> <dataTypeDef> <name>IEEEMac</name> <synopsis>MAC address</synopsis> <typeRef>byte[6]</typeRef> </dataTypeDef> <!-- Access Type --> <dataTypeDef> <name>AccessDataType</name> <synopsis>Indicates the protocol being used for the user's access</synopsis> <atomic> <baseType>uint16</baseType> <specialValues> <specialValue value="0"> <name>PPPoE</name> <synopsis/> </specialValue> <specialValue value="1"> <name>IPoE</name> <synopsis/> </specialValue> </specialValues> </atomic> </dataTypeDef> <!-- IfTypeDataType --> <dataTypeDef> <name>IfTypeDataType</name> <synopsis>Type of Interface</synopsis> <atomic> <baseType>uint32</baseType> <specialValues> <specialValue value="0"> <name>Ethernet</name> <synopsis>An ethernet interface </synopsis> </specialValue> <specialValue value="1"> <name>GE</name> <synopsis>A Gigabit Ethernet interface </synopsis> </specialValue> <specialValue value="2"> <name>EtherTrunk</name> <synopsis>An EtherTrunk interfaces </synopsis> </specialValue> </specialValues> </atomic> </dataTypeDef> <!-- LinkTypeDataType --> <dataTypeDef> <name>LinkTypeDataType</name> <synopsis>Link Types</synopsis> <atomic> <baseType>uint32</baseType> <specialValues> <specialValue value="0"> <name>PointToPoint</name> <synopsis>A point to point link </synopsis> </specialValue> <specialValue value="1"> <name>Broadcast</name> <synopsis>A broadcast link</synopsis> </specialValue> <specialValue value="2"> <name>Multipoint</name> <synopsis>A multipoint link</synopsis> </specialValue> </specialValues> </atomic> </dataTypeDef> <!-- IfStateType --> <dataTypeDef> <name>IfStateType</name> <synopsis>Current operational state of the interface</synopsis> <atomic> <baseType>uchar</baseType> <specialValues> <specialValue value="1"> <name>Up</name> <synopsis>Up</synopsis> </specialValue> <specialValue value="2"> <name>Down</name> <synopsis>Down</synopsis> </specialValue> <specialValue value="3"> <name>Testing</name> <synopsis>In testing mode</synopsis> </specialValue> <specialValue value="4"> <name>Unknown</name> <synopsis>Status cannot be determined </synopsis> </specialValue> <specialValue value="5"> <name>Dormant</name> <synopsis>Dormant</synopsis> </specialValue> <specialValue value="6"> <name>NotPresent</name> <synopsis>Component is missing </synopsis> </specialValue> </specialValues> </atomic> </dataTypeDef> <!-- Port Resources of UP Informational model --> <dataTypeDef> <name>PortResourcesRow</name> <synopsis>Port resources table row</synopsis> <struct> <component componentID="1"> <name>IfIndex</name> <synopsis>Index assigned to an interface</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="2"> <name>IfName</name> <synopsis>Name of the interface</synopsis> <typeRef>string[64]</typeRef> </component> <component componentID="3"> <name>IfType</name> <synopsis>Type of Interface</synopsis> <typeRef>IfTypeDataType</typeRef> </component> <component componentID="4"> <name>LinkType</name> <synopsis>Link Types</synopsis> <typeRef>LinkTypeDataType</typeRef> </component> <component componentID="5"> <name>MacAddress</name> <synopsis>The MAC Address of the link</synopsis> <typeRef>IEEEMAC</typeRef> </component> <component componentID="6"> <name>IfState</name> <synopsis>Current operational state of the interface</synopsis> <typeRef>IfStateType</typeRef> </component> </struct> </dataTypeDef> <dataTypeDef> <name>StatDataType</name> <synopsis>Traffic Type</synopsis> <atomic> <baseType>uint32</baseType> <specialValues> <specialValue value="0"> <name>IPv4</name> <synopsis>IPv4 traffic</synopsis> </specialValue> <specialValue value="1"> <name>IPv6</name> <synopsis>IPv6 traffic</synopsis> </specialValue> </specialValues> </atomic> </dataTypeDef> <!-- Statistics data Type --> <!-- Traffic Statistics Informational model --> <dataTypeDef> <name>TrafficStatisticsRow</name> <synopsis>Traffic stats per user</synopsis> <struct> <component componentID="1"> <name>userID</name> <synopsis>The user id</synopsis> <typeRef>UserID</typeRef> </component> <component componentID="2"> <name>StatType</name> <synopsis>Traffic Type</synopsis> <typeRef>StatDataType</typeRef> </component> <component componentID="3"> <name>IngressPackets</name> <synopsis>Ingress packet stats</synopsis> <typeRef>uint64</typeRef> </component> <component componentID="4"> <name>IngressByte</name> <synopsis>Ingress byte stats</synopsis> <typeRef>uint64</typeRef> </component> <component componentID="5"> <name>EgressPackets</name> <synopsis>Egress packet stats</synopsis> <typeRef>uint64</typeRef> </component> <component componentID="6"> <name>EgressBytes</name> <synopsis>Egress byte stats</synopsis> <typeRef>uint64</typeRef> </component> </struct> </dataTypeDef> <!-- User Basic Information --> <dataTypeDef> <name>UserBasicRow</name> <synopsis>User Basic Information</synopsis> <struct> <component componentID="1"> <name>userID</name> <synopsis>The user id</synopsis> <typeRef>UserID</typeRef> </component> <component componentID="2"> <name>MacAddress</name> <synopsis>The MAC Address of the user</synopsis> <typeRef>IEEEMAC</typeRef> </component> <component componentID="3"> <name>AccessType</name> <synopsis>The Access Type of the user</synopsis> <optional/> <typeRef>AccessDataType</typeRef> </component> <component componentID="4"> <name>SessionID</name> <synopsis>Identifier of PPPoE session</synopsis> <optional/> <typeRef>uint32</typeRef> </component> <component componentID="5"> <name>InnerVLANID</name> <synopsis>Inner VLAN ID</synopsis> <optional/> <typeRef>uint16</typeRef> </component> <component componentID="6"> <name>OuterVLANID</name> <synopsis>Outer VLAN ID</synopsis> <optional/> <typeRef>uint16</typeRef> </component> <component componentID="7"> <name>UserInterface</name> <synopsis>Binding interface of a specific user </synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> <dataTypeDef> <name>IPv4InfoRow</name> <synopsis>IPv4 User Information</synopsis> <struct> <component componentID="1"> <name>userID</name> <synopsis>The user id</synopsis> <typeRef>UserID</typeRef> </component> <component componentID="2"> <name>UserIPv4</name> <synopsis>A user's IPv4 Address</synopsis> <typeRef>byte[4]</typeRef> </component> <component componentID="3"> <name>MaskLength</name> <synopsis>The subnet mask length</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="4"> <name>Gateway</name> <synopsis>The user's gateway</synopsis> <typeRef>byte[4]</typeRef> </component> <component componentID="5"> <name>VRF</name> <synopsis>Identifier of VRF instance</synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> <!-- IPv6 Selectory Type --> <dataTypeDef> <name>IPv6SelectorType</name> <synopsis>IPv6 Type selector</synopsis> <atomic> <baseType>uchar</baseType> <specialValues> <specialValue value="0"> <name>IPv6Address</name> <synopsis>Value contains an IPv6 Address</synopsis> </specialValue> <specialValue value="1"> <name>PDAddress</name> <synopsis>Value contains PD address</synopsis> </specialValue> </specialValues> </atomic> </dataTypeDef> <dataTypeDef> <name>IPv6InfoRow</name> <synopsis>IPv6 User Information</synopsis> <struct> <component componentID="1"> <name>userID</name> <synopsis>The user id</synopsis> <typeRef>UserID</typeRef> </component> <component componentID="2"> <name>IPv6Type</name> <synopsis>IPv6 Type selector</synopsis> <typeRef>IPv6SelectorType</typeRef> </component> <component componentID="3"> <name>IPv6orPD</name> <synopsis>An IPv6 address or a PD</synopsis> <typeRef>byte[16]</typeRef> </component> <component componentID="4"> <name>PrefixLen</name> <synopsis>The prefix length for either an IPv6 Address or Prefix Delegation</synopsis> <optional/> <typeRef>uint32</typeRef> </component> <component componentID="5"> <name>VRF</name> <synopsis>Identifier of VRF instance</synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> <!-- Rate and Size for committed and peak--> <dataTypeDef> <name>RateSizeType</name> <synopsis>Rate and size for committed and peak </synopsis> <struct> <component componentID="1"> <name>CIR</name> <synopsis>Commited Information Rate </synopsis> <typeRef>uint32</typeRef> </component> <component componentID="2"> <name>PIR</name> <synopsis>Peak Information Rate</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="3"> <name>CBS</name> <synopsis>Commited Burst Size</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="4"> <name>PBS</name> <synopsis>Peak Burst Size</synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> <dataTypeDef> <name>QoSRow</name> <synopsis>User's QoS</synopsis> <struct> <component componentID="1"> <name>userID</name> <synopsis>The user id</synopsis> <typeRef>UserID</typeRef> </component> <component componentID="2"> <name>RateSize</name> <synopsis>Rate and size for committed and peak </synopsis> <typeRef>RateSizeType</typeRef> </component> <component componentID="3"> <name>QoSProfile</name> <synopsis>Standard profile from operator</synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> <!---Interface Related Information --> <!-- Service Data Type --> <dataTypeDef> <name>ServiceDataType</name> <synopsis>Service Type</synopsis> <struct> <component componentID="1"> <name>PPPonly</name> <synopsis>If true, interface only supports PPP user</synopsis> <typeRef>uint16</typeRef> </component> <component componentID="2"> <name>IPv4Trig</name> <synopsis>If true, interface supports the user being triggered to connect to internet via IPv4</synopsis> <typeRef>uint16</typeRef> </component> <component componentID="3"> <name>IPv6Trig</name> <synopsis>If true, interface supports the user being triggered to connect to internet via IPv6</synopsis> <typeRef>uint16</typeRef> </component> <component componentID="4"> <name>NDTrig</name> <synopsis>If true, interface supports the user being triggered to connect to Internet via neighbor discovery</synopsis> <typeRef>uint16</typeRef> </component> <component componentID="5"> <name>ARPProxy</name> <synopsis>If true, ARP Proxy is enabled on this interface</synopsis> <typeRef>uint16</typeRef> </component> </struct> </dataTypeDef> <!-- interface info row --> <dataTypeDef> <name>InterfaceInfoRow</name> <synopsis>Interface information</synopsis> <struct> <component componentID="1"> <name>IfIndex</name> <synopsis>Index assigned to an interface</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="2"> <name>bas_enable</name> <synopsis>Bas enable flag</synopsis> <typeRef>uint16</typeRef> </component> <component componentID="3"> <name>ServiceType</name> <synopsis>Service Type</synopsis> <typeRef>ServiceDataType</typeRef> </component> </struct> </dataTypeDef> <!-- Address Field --> <dataTypeDef> <name>AddressRow</name> <synopsis>Address field distribute table row </synopsis> <struct> <component componentID="1"> <name>AddressSegment</name> <synopsis>Address Segment</synopsis> <typeRef>byte[4]</typeRef> </component> <component componentID="2"> <name>AddressSegmentMask</name> <synopsis>Address Segment Mask</synopsis> <typeRef>byte[4]</typeRef> </component> <component componentID="3"> <name>AddressSegmentVRF</name> <synopsis>Address Segment VRF instance identifier</synopsis> <typeRef>uint32</typeRef> </component> <component componentID="4"> <name>IfIndex</name> <synopsis>Index assigned to an interface </synopsis> <typeRef>uint32</typeRef> </component> <component componentID="5"> <name>maskLength</name> <synopsis>Length of the mask</synopsis> <typeRef>uint32</typeRef> </component> </struct> </dataTypeDef> </dataTypeDefs> <LFBClassDefs> <LFBClassDef LFBClassID="2001"> <name>ControlPlaneUser</name> <synopsis>The control plane components for users </synopsis> <version>1.0</version> <components> <component componentID="1"> <name>UserInfo</name> <synopsis>User Informational model</synopsis> <array> <struct> <component componentID="1"> <name>UserBasic</name> <synopsis>User Basic Information</synopsis> <typeRef>UserBasicRow</typeRef> </component> <component componentID="2"> <name>IPv4Info</name> <synopsis>Optional IPv4 information</synopsis> <optional/> <typeRef>IPv4InfoRow</typeRef> </component> <component componentID="3"> <name>IPv6Info</name> <synopsis>Optional IPv6 information</synopsis> <optional/> <typeRef>IPv6InfoRow</typeRef> </component> <component componentID="4"> <name>QoSInfo</name> <synopsis>Optional QoS Profile</synopsis> <optional/> <typeRef>QoSRow</typeRef> </component> </struct> </array> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="2002"> <name>ControlPlaneInterface</name> <synopsis>The control plane components for interfaces </synopsis> <version>1.0</version> <components> <component componentID="1"> <name>Interface</name> <synopsis>Interface Information</synopsis> <array> <typeRef>InterfaceInfoRow</typeRef> </array> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="2003"> <name>ControlPlaneDevice</name> <synopsis>The control plane components for device </synopsis> <version>1.0</version> <components> <component componentID="1"> <name>Device</name> <synopsis>Device Information</synopsis> <array> <typeRef>AddressRow</typeRef> </array> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="2011"> <name>User</name> <synopsis>The user plane components</synopsis> <version>1.0</version> <components> <component componentID="1"> <name>PortResourceTable</name> <synopsis>The port resource table for available network resources</synopsis> <array> <typeRef>PortResourcesRow</typeRef> </array> </component> <component componentID="2"> <name>StatisticsTable</name> <synopsis>Stats per user</synopsis> <array> <typeRef>TrafficStatisticsRow</typeRef> </array> </component> </components> </LFBClassDef> </LFBClassDefs> </LFBLibrary>
Figure 5: ForCES based CUSP Info Model
Thanks to Joel Halpern and Diego Lopez for discussions (during IETF 104) that led to the creation of this document.
The activities of Evangelos Haleplidis have been carried out with funding provided via the StandICT.eu initiative, funded with Grant Agreement no. 780439 under the European Commission's Horizon 2020 Programme.
TBD
TBD
[media1] | , "Forces-vzn", , June 2016. |
[media2] | , "Forces-vzn2", , June 2016. |
[RFC2119] | Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997. |