draft-ietf-i2rs-rib-info-model-00.txt | draft-ietf-i2rs-rib-info-model-01.txt | |||
---|---|---|---|---|
Network Working Group N. Bahadur, Ed. | Network Working Group N. Bahadur, Ed. | |||
Internet-Draft R. Folkes, Ed. | Internet-Draft | |||
Intended status: Informational Juniper Networks, Inc. | Intended status: Informational R. Folkes, Ed. | |||
Expires: March 20, 2014 S. Kini | Expires: April 21, 2014 Juniper Networks, Inc. | |||
S. Kini | ||||
Ericsson | Ericsson | |||
J. Medved | J. Medved | |||
Cisco | Cisco | |||
September 16, 2013 | October 18, 2013 | |||
Routing Information Base Info Model | Routing Information Base Info Model | |||
draft-ietf-i2rs-rib-info-model-00 | draft-ietf-i2rs-rib-info-model-01 | |||
Abstract | Abstract | |||
Routing and routing functions in enterprise and carrier networks are | Routing and routing functions in enterprise and carrier networks are | |||
typically performed by network devices (routers and switches) using a | typically performed by network devices (routers and switches) using a | |||
routing information base (RIB). Protocols and configuration push | routing information base (RIB). Protocols and configuration push | |||
data into the RIB and the RIB manager install state into the | data into the RIB and the RIB manager install state into the | |||
hardware; for packet forwarding. This draft specifies an information | hardware; for packet forwarding. This draft specifies an information | |||
model for the RIB to enable defining a standardized data model. Such | model for the RIB to enable defining a standardized data model. Such | |||
a data model can be used to define an interface to the RIB from an | a data model can be used to define an interface to the RIB from an | |||
skipping to change at page 1, line 43 | skipping to change at page 1, line 44 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on March 20, 2014. | This Internet-Draft will expire on April 21, 2014. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 3, line 13 | skipping to change at page 3, line 13 | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.1. Conventions used in this document . . . . . . . . . . . . 6 | 1.1. Conventions used in this document . . . . . . . . . . . . 6 | |||
2. RIB data . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. RIB data . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
2.1. RIB definition . . . . . . . . . . . . . . . . . . . . . . 6 | 2.1. RIB definition . . . . . . . . . . . . . . . . . . . . . . 6 | |||
2.2. Routing instance . . . . . . . . . . . . . . . . . . . . . 7 | 2.2. Routing instance . . . . . . . . . . . . . . . . . . . . . 7 | |||
2.3. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2.3. Route . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
2.4. Nexthop . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 2.4. Nexthop . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
2.4.1. Nexthop types . . . . . . . . . . . . . . . . . . . . 12 | 2.4.1. Nexthop types . . . . . . . . . . . . . . . . . . . . 12 | |||
2.4.2. Nexthop list attributes . . . . . . . . . . . . . . . 13 | 2.4.2. Nexthop list attributes . . . . . . . . . . . . . . . 12 | |||
2.4.3. Nexthop content . . . . . . . . . . . . . . . . . . . 14 | 2.4.3. Nexthop content . . . . . . . . . . . . . . . . . . . 13 | |||
2.4.4. Nexthop attributes . . . . . . . . . . . . . . . . . . 14 | 2.4.4. Special nexthops . . . . . . . . . . . . . . . . . . . 14 | |||
2.4.5. Nexthop vendor attributes . . . . . . . . . . . . . . 15 | 3. Reading from the RIB . . . . . . . . . . . . . . . . . . . . . 14 | |||
2.4.6. Special nexthops . . . . . . . . . . . . . . . . . . . 15 | 4. Writing to the RIB . . . . . . . . . . . . . . . . . . . . . . 15 | |||
3. Reading from the RIB . . . . . . . . . . . . . . . . . . . . . 16 | 5. Events and Notifications . . . . . . . . . . . . . . . . . . . 15 | |||
4. Writing to the RIB . . . . . . . . . . . . . . . . . . . . . . 16 | 6. RIB grammar . . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
5. Events and Notifications . . . . . . . . . . . . . . . . . . . 16 | 7. Inter-domain extensions to the RIB . . . . . . . . . . . . . . 18 | |||
6. RIB grammar . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 7.1. Extension to Routing Instance . . . . . . . . . . . . . . 18 | |||
7. Using the RIB grammar . . . . . . . . . . . . . . . . . . . . 19 | 7.2. Extension to Route . . . . . . . . . . . . . . . . . . . . 19 | |||
7.1. Using route preference and metric . . . . . . . . . . . . 20 | 7.3. Inter-domain extensions to RIB grammar . . . . . . . . . . 19 | |||
7.2. Using different nexthops types . . . . . . . . . . . . . . 20 | 8. Using the RIB grammar . . . . . . . . . . . . . . . . . . . . 19 | |||
7.2.1. Tunnel nexthops . . . . . . . . . . . . . . . . . . . 20 | 8.1. Using route preference . . . . . . . . . . . . . . . . . . 19 | |||
7.2.2. Replication lists . . . . . . . . . . . . . . . . . . 20 | 8.2. Using different nexthops types . . . . . . . . . . . . . . 20 | |||
7.2.3. Weighted lists . . . . . . . . . . . . . . . . . . . . 21 | 8.2.1. Tunnel nexthops . . . . . . . . . . . . . . . . . . . 20 | |||
7.2.4. Protection lists . . . . . . . . . . . . . . . . . . . 21 | 8.2.2. Replication lists . . . . . . . . . . . . . . . . . . 20 | |||
7.2.5. Nexthop chains . . . . . . . . . . . . . . . . . . . . 22 | 8.2.3. Weighted lists . . . . . . . . . . . . . . . . . . . . 20 | |||
7.2.6. Lists of lists . . . . . . . . . . . . . . . . . . . . 22 | 8.2.4. Protection lists . . . . . . . . . . . . . . . . . . . 21 | |||
7.3. Performing multicast . . . . . . . . . . . . . . . . . . . 22 | 8.2.5. Nexthop chains . . . . . . . . . . . . . . . . . . . . 21 | |||
7.4. Solving optimized exit control . . . . . . . . . . . . . . 23 | 8.2.6. Lists of lists . . . . . . . . . . . . . . . . . . . . 22 | |||
8. RIB operations at scale . . . . . . . . . . . . . . . . . . . 23 | 8.3. Performing multicast . . . . . . . . . . . . . . . . . . . 22 | |||
8.1. RIB reads . . . . . . . . . . . . . . . . . . . . . . . . 24 | 8.4. Solving optimized exit control . . . . . . . . . . . . . . 22 | |||
8.2. RIB writes . . . . . . . . . . . . . . . . . . . . . . . . 24 | 9. RIB operations at scale . . . . . . . . . . . . . . . . . . . 23 | |||
8.3. RIB events and notifications . . . . . . . . . . . . . . . 24 | 9.1. RIB reads . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | 9.2. RIB writes . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | 9.3. RIB events and notifications . . . . . . . . . . . . . . . 23 | |||
11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 24 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . . 25 | 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
12.2. Informative References . . . . . . . . . . . . . . . . . . 25 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 26 | 13.1. Normative References . . . . . . . . . . . . . . . . . . . 24 | |||
13.2. Informative References . . . . . . . . . . . . . . . . . . 24 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 25 | ||||
1. Introduction | 1. Introduction | |||
Routing and routing functions in enterprise and carrier networks are | Routing and routing functions in enterprise and carrier networks are | |||
traditionally performed in network devices. Traditionally routers | traditionally performed in network devices. Traditionally routers | |||
run routing protocols and the routing protocols (along with static | run routing protocols and the routing protocols (along with static | |||
config) populates the Routing information base (RIB) of the router. | config) populates the Routing information base (RIB) of the router. | |||
The RIB is managed by the RIB manager and it provides a north-bound | The RIB is managed by the RIB manager and it provides a north-bound | |||
interface to its clients i.e. the routing protocols to insert routes | interface to its clients i.e. the routing protocols to insert routes | |||
into the RIB. The RIB manager consults the RIB and decides how to | into the RIB. The RIB manager consults the RIB and decides how to | |||
skipping to change at page 6, line 4 | skipping to change at page 6, line 4 | |||
RIB. Using the information model, one can build a detailed data | RIB. Using the information model, one can build a detailed data | |||
model for the RIB. And that data model could then be used by an | model for the RIB. And that data model could then be used by an | |||
external entity to program a network device. | external entity to program a network device. | |||
The rest of this document is organized as follows. Section 2 goes | The rest of this document is organized as follows. Section 2 goes | |||
into the details of what constitutes and can be programmed in a RIB. | into the details of what constitutes and can be programmed in a RIB. | |||
Guidelines for reading and writing the RIB are provided in Section 3 | Guidelines for reading and writing the RIB are provided in Section 3 | |||
and Section 4 respectively. Section 5 provides a high-level view of | and Section 4 respectively. Section 5 provides a high-level view of | |||
the events and notifications going from a network device to an | the events and notifications going from a network device to an | |||
external entity, to update the external entity on asynchronous | external entity, to update the external entity on asynchronous | |||
events. The RIB grammar is specified in Section 6. Examples of | events. The RIB grammar is specified in Section 6. Section 7 | |||
using the RIB grammar are shown in Section 7. Section 8 covers | extends the RIB for use in inter-domain cases. Examples of using the | |||
considerations for performing RIB operations at scale. | RIB grammar are shown in Section 8. Section 9 covers considerations | |||
for performing RIB operations at scale. | ||||
1.1. Conventions used in this document | 1.1. Conventions used in this document | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
2. RIB data | 2. RIB data | |||
This section describes the details of a RIB. It makes forward | This section describes the details of a RIB. It makes forward | |||
skipping to change at page 6, line 35 | skipping to change at page 6, line 36 | |||
| | | | | | |||
interface(s) RIB(s) | interface(s) RIB(s) | |||
| | | | |||
| | | | |||
| 0..N | | 0..N | |||
route(s) | route(s) | |||
Figure 2: RIB model | ||||
2.1. RIB definition | 2.1. RIB definition | |||
A RIB is an entity that contains routes. A RIB is identified by its | A RIB is an entity that contains routes. A RIB is identified by its | |||
name and a RIB is contained within a routing instance (Section 2.2). | name and a RIB is contained within a routing instance (Section 2.2). | |||
The name MUST be unique within a routing instance. All routes in a | The name MUST be unique within a routing instance. All routes in a | |||
given RIB MUST be of the same type (e.g. IPv4). Each RIB MUST | given RIB MUST be of the same type (e.g. IPv4). Each RIB MUST | |||
belong to some routing instance. | belong to some routing instance. | |||
A RIB can be tagged with a MULTI_TOPOLOGY_ID. If a routing instance | A RIB can be tagged with a MULTI_TOPOLOGY_ID. If a routing instance | |||
is divided into multiple logical topologies, then the multi-topology | is divided into multiple logical topologies, then the multi-topology | |||
skipping to change at page 7, line 41 | skipping to change at page 7, line 44 | |||
The set of interfaces indicates which interfaces are associated with | The set of interfaces indicates which interfaces are associated with | |||
this routing instance. The RIBs specify how incoming traffic is to | this routing instance. The RIBs specify how incoming traffic is to | |||
be forwarded. And the routing parameters control the information in | be forwarded. And the routing parameters control the information in | |||
the RIBs. The intersection set of interfaces of 2 routing instances | the RIBs. The intersection set of interfaces of 2 routing instances | |||
SHOULD be the null set. In other words, an interface MUST NOT be | SHOULD be the null set. In other words, an interface MUST NOT be | |||
present in 2 routing instances. Thus a routing instance describes | present in 2 routing instances. Thus a routing instance describes | |||
the routing information and parameters across a set of interfaces. | the routing information and parameters across a set of interfaces. | |||
A routing instance MUST contain the following mandatory fields. | A routing instance MUST contain the following mandatory fields. | |||
o INSTANCE_NAME: A routing instance is identified by its name, | o INSTANCE_NAME: A routing instance is identified by its name, | |||
INSTANCE_NAME. This SHOULD be unique across all routing instances | INSTANCE_NAME. This MUST be unique across all routing instances | |||
in a given network device. | in a given network device. | |||
o INSTANCE_DISTINGUISHER: Each routing instance MUST have a | ||||
distinguisher associated with it. It enables one to distinguish | ||||
routes across routing instances. The route distinguisher MUST be | ||||
unique across all routing instances in a given network device. | ||||
How the INSTANCE_DISTINGUISHER is allocated and kept unique is | ||||
outside the scope of this document. The instance distinguisher | ||||
maps well to BGP route-distinguisher for virtual private networks | ||||
(VPNs). However, the same concept can be used for other use-cases | ||||
as well. | ||||
o rib-list: This is the list of RIBs associated with this routing | o rib-list: This is the list of RIBs associated with this routing | |||
instance. Each routing instance can have multiple RIBs to | instance. Each routing instance can have multiple RIBs to | |||
represent routes of different types. For example, one would put | represent routes of different types. For example, one would put | |||
IPv4 routes in one RIB and MPLS routes in another RIB. | IPv4 routes in one RIB and MPLS routes in another RIB. | |||
A routing instance MAY contain the following optional fields. | A routing instance MAY contain the following optional fields. | |||
o interface-list: This represents the list of interfaces associated | o interface-list: This represents the list of interfaces associated | |||
with this routing instance. The interface list helps constrain | with this routing instance. The interface list helps constrain | |||
the boundaries of packet forwarding. Packets coming on these | the boundaries of packet forwarding. Packets coming on these | |||
interfaces are directly associated with the given routing | interfaces are directly associated with the given routing | |||
instance. The interface list contains a list of identifiers, with | instance. The interface list contains a list of identifiers, with | |||
each identifier uniquely identifying an interface. | each identifier uniquely identifying an interface. | |||
o ROUTER_ID: The router-id field identifies the network device in | o ROUTER_ID: The router-id field identifies the network device in | |||
control plane interactions with other network devices. This field | control plane interactions with other network devices. This field | |||
is to be used if one wants to virtualize a physical router into | is to be used if one wants to virtualize a physical router into | |||
multiple virtual routers. Each virtual router MUST have a unique | multiple virtual routers. Each virtual router MUST have a unique | |||
skipping to change at page 8, line 23 | skipping to change at page 8, line 17 | |||
the boundaries of packet forwarding. Packets coming on these | the boundaries of packet forwarding. Packets coming on these | |||
interfaces are directly associated with the given routing | interfaces are directly associated with the given routing | |||
instance. The interface list contains a list of identifiers, with | instance. The interface list contains a list of identifiers, with | |||
each identifier uniquely identifying an interface. | each identifier uniquely identifying an interface. | |||
o ROUTER_ID: The router-id field identifies the network device in | o ROUTER_ID: The router-id field identifies the network device in | |||
control plane interactions with other network devices. This field | control plane interactions with other network devices. This field | |||
is to be used if one wants to virtualize a physical router into | is to be used if one wants to virtualize a physical router into | |||
multiple virtual routers. Each virtual router MUST have a unique | multiple virtual routers. Each virtual router MUST have a unique | |||
router-id. ROUTER_ID MUST be unique across all network devices in | router-id. ROUTER_ID MUST be unique across all network devices in | |||
a given domain. | a given domain. | |||
o as-data: This is an identifier of the administrative domain to | ||||
which the routing instance belongs. The as-data fields is used | ||||
when the routes in this instance are to be tagged with certain | ||||
autonomous system (AS) characteristics. The RIB manager can use | ||||
AS length as one of the parameters for making route selection. as- | ||||
data consists of a AS number and an optional Confederation AS | ||||
number ([RFC5065]). | ||||
2.3. Route | 2.3. Route | |||
A route is essentially a match condition and an action following the | A route is essentially a match condition and an action following the | |||
match. The match condition specifies the kind of route (IPv4, MPLS, | match. The match condition specifies the kind of route (IPv4, MPLS, | |||
etc.) and the set of fields to match on. Figure 2 represents the | etc.) and the set of fields to match on. Figure 3 represents the | |||
overall contents of a route. | overall contents of a route. | |||
artwork | artwork | |||
route | route | |||
| | | | | | | | |||
+---------+ | +----------+ | +---------+ | +----------+ | |||
| | | | | | | | |||
0..N | | | 0..N | 0..N | | | 1..N | |||
route-attributes match nexthop-list | route-attributes match nexthop-list | |||
| | | | |||
| | | | |||
+-------+-------+-------+--------+ | +-------+-------+-------+--------+ | |||
| | | | | | | | | | | | |||
| | | | | | | | | | | | |||
IPv4 IPv6 MPLS MAC Interface | IPv4 IPv6 MPLS MAC Interface | |||
Figure 2: Route model | (Unicast/Multicast) | |||
Figure 3: Route model | ||||
This document specifies the following match types: | This document specifies the following match types: | |||
o IPv4: Match on destination IP in IPv4 header | o IPv4: Match on destination IP in IPv4 header | |||
o IPv6: Match on destination IP in IPv6 header | o IPv6: Match on destination IP in IPv6 header | |||
o MPLS: Match on a MPLS tag | o MPLS: Match on a MPLS tag | |||
o MAC: Match on ethernet destination addresses | o MAC: Match on ethernet destination addresses | |||
o Interface: Match on incoming interface of packet | o Interface: Match on incoming interface of packet | |||
o IP multicast: Match on (S, G) or (*, G), where S and G are IP | o IP multicast: Match on (S, G) or (*, G), where S and G are IP | |||
prefixes | prefixes | |||
skipping to change at page 9, line 45 | skipping to change at page 9, line 20 | |||
attributes. | attributes. | |||
o ROUTE_PREFERENCE: This is a numerical value that allows for | o ROUTE_PREFERENCE: This is a numerical value that allows for | |||
comparing routes from different protocols (where static | comparing routes from different protocols (where static | |||
configuration is also considered a protocol for the purpose of | configuration is also considered a protocol for the purpose of | |||
this field). It is also known as administrative-distance. The | this field). It is also known as administrative-distance. The | |||
lower the value, the higher the preference. For example there can | lower the value, the higher the preference. For example there can | |||
be an OSPF route for 192.0.2.1/32 with a preference of 5. If a | be an OSPF route for 192.0.2.1/32 with a preference of 5. If a | |||
controller programs a route for 192.0.2.1/32 with a preference of | controller programs a route for 192.0.2.1/32 with a preference of | |||
2, then the controller entered route will be preferred by the RIB | 2, then the controller entered route will be preferred by the RIB | |||
manager. Preference should be used to dictate behavior. For more | manager. Preference should be used to dictate behavior. For more | |||
examples of preference, see Section 7.1. | examples of preference, see Section 8.1. | |||
o ROUTE_METRIC: Route preference is used for comparing routes from | ||||
different protocols. Route metric is used for comparing routes | ||||
learned by the same protocol. If a controller wishes to program 2 | ||||
or more routes to the same destination, then it can use the metric | ||||
field to disambiguate the 2 routes. For more examples, see | ||||
Section 7.1. | ||||
o LOCAL_ONLY: This is a boolean value. If this is present, then it | o LOCAL_ONLY: This is a boolean value. If this is present, then it | |||
means that this route should not be exported into other RIBs or | means that this route should not be exported into other RIBs or | |||
other RIBs. | other RIBs. | |||
o rpf-check-interface: Reverse path forwarding (RPF) check is used | o rpf-check-interface: Reverse path forwarding (RPF) check is used | |||
to prevent spoofing and limit malicious traffic. For IP packets, | to prevent spoofing and limit malicious traffic. For IP packets, | |||
the IP source address is looked up and the rpf-check-interface | the IP source address is looked up and the rpf-check-interface | |||
associated with the route for that IP source address is found. If | associated with the route for that IP source address is found. If | |||
the incoming IP packet's interface matches one of the rpf-check- | the incoming IP packet's interface matches one of the rpf-check- | |||
interfaces, then the IP packet is forwarded based on its IP | interfaces, then the IP packet is forwarded based on its IP | |||
destination address; otherwise, the IP packet is discarded. For | destination address; otherwise, the IP packet is discarded. For | |||
MPLS routes, there is no source address to be looked up, so the | MPLS routes, there is no source address to be looked up, so the | |||
usage is slightly different. For an MPLS route, a packet with the | usage is slightly different. For an MPLS route, a packet with the | |||
specified MPLS label will only be forwarded if it is received on | specified MPLS label will only be forwarded if it is received on | |||
one of the interfaces specified by the rpf-check-interface. If no | one of the interfaces specified by the rpf-check-interface. If no | |||
rpf-check-interface is specified, then matching packets are no | rpf-check-interface is specified, then matching packets are no | |||
subject to this check. This field overrides the | subject to this check. This field overrides the | |||
ENABLE_IP_RPF_CHECK flag on the RIB and interfaces provided in | ENABLE_IP_RPF_CHECK flag on the RIB and interfaces provided in | |||
this list are used for doing the RPF check. | this list are used for doing the RPF check. | |||
o as-path: A route can have an as-path associated with it to | ||||
indicate which set of autonomous systems has to be traversed to | ||||
reach the final destination. The as-path attribute can be used by | ||||
the RIB manager in multiple ways. The RIB manager can choose | ||||
paths with lower as-path length. Or the RIB manager can choose to | ||||
not install paths going via a particular AS. How exactly the RIB | ||||
manager uses the as-path is outside the scope of this document. | ||||
For details of how the as-path is formed, see Section 5.1.2 of | ||||
[RFC4271] and Section 3 of [RFC5065]. | ||||
o route-vendor-attributes: Vendors can specify vendor-specific | o route-vendor-attributes: Vendors can specify vendor-specific | |||
attributes using this. The details of this field is outside the | attributes using this. The details of this field is outside the | |||
scope of this document. | scope of this document. | |||
2.4. Nexthop | 2.4. Nexthop | |||
A nexthop represents an object or action resulting from a route | A nexthop represents an object or action resulting from a route | |||
lookup. For example, if a route lookup results in sending the packet | lookup. For example, if a route lookup results in sending the packet | |||
out a given interface, then the nexthop represents that interface. | out a given interface, then the nexthop represents that interface. | |||
skipping to change at page 11, line 39 | skipping to change at page 11, line 30 | |||
| | | | |||
nexthop-chain | nexthop-chain | |||
| | | | |||
1..N | | 1..N | | |||
nexthop | nexthop | |||
| | | | |||
+------- nexthop-attributes | ||||
| | ||||
| | | | |||
+--------+------+------------------+------------------+ | +--------+------+------------------+------------------+ | |||
| | | | | | | | | | |||
| | | | | | | | | | |||
nexthop-id egress-interface logical-tunnel tunnel-encap | nexthop-id egress-interface logical-tunnel tunnel-encap | |||
Figure 4: Nexthop model | ||||
Nexthops can be identified by an identifier to create a level of | Nexthops can be identified by an identifier to create a level of | |||
indirection. The identifier is set by the RIB manager and returned | indirection. The identifier is set by the RIB manager and returned | |||
to the external entity on request. The RIB data-model SHOULD support | to the external entity on request. The RIB data-model SHOULD support | |||
a way to optionally receive a nexthop identifier for a given nexthop. | a way to optionally receive a nexthop identifier for a given nexthop. | |||
For example, one can create a nexthop that points to a BGP peer. The | For example, one can create a nexthop that points to a BGP peer. The | |||
returned nexthop identifier can then be used for programming routes | returned nexthop identifier can then be used for programming routes | |||
to point to the same nexthop. Given that the RIB manager has created | to point to the same nexthop. Given that the RIB manager has created | |||
an indirection for that BGP peer using the nexthop identifier, if the | an indirection for that BGP peer using the nexthop identifier, if the | |||
transport path to the BGP peer changes, that change in path will be | transport path to the BGP peer changes, that change in path will be | |||
seamless to the external entity and all routes that point to that BGP | seamless to the external entity and all routes that point to that BGP | |||
peer will automatically start going over the new transport path. | peer will automatically start going over the new transport path. | |||
Nexthop indirection using identifier could be applied to not just | Nexthop indirection using identifier could be applied to not just | |||
unicast nexthops, but even to nexthops that contain chains and nested | unicast nexthops, but even to nexthops that contain chains and nested | |||
nexthops (Section 2.4.1). | nexthops (Section 2.4.1). | |||
skipping to change at page 12, line 37 | skipping to change at page 12, line 26 | |||
header | header | |||
o Lists of lists - recursive application of the above | o Lists of lists - recursive application of the above | |||
o Indirect nexthops - pointing to a nexthop identifier | o Indirect nexthops - pointing to a nexthop identifier | |||
o Special nexthops - for performing specific well-defined functions | o Special nexthops - for performing specific well-defined functions | |||
It is expected that all network devices will have a limit on how many | It is expected that all network devices will have a limit on how many | |||
levels of lookup can be performed and not all hardware will be able | levels of lookup can be performed and not all hardware will be able | |||
to support all kinds of nexthops. RIB capability negotiation becomes | to support all kinds of nexthops. RIB capability negotiation becomes | |||
very important for this reason and a RIB data-model MUST specify a | very important for this reason and a RIB data-model MUST specify a | |||
way for an external entity to learn about the network device's | way for an external entity to learn about the network device's | |||
capabilities. Examples of when and how to use various kinds of | capabilities. Examples of when and how to use various kinds of | |||
nexthops are shown in Section 7.2. | nexthops are shown in Section 8.2. | |||
Tunnel nexthops allow an external entity to program static tunnel | Tunnel nexthops allow an external entity to program static tunnel | |||
headers. There can be cases where the remote tunnel end-point does | headers. There can be cases where the remote tunnel end-point does | |||
not support dynamic signaling (e.g. no LDP support on a host) and in | not support dynamic signaling (e.g. no LDP support on a host) and in | |||
those cases the external entity might want to program the tunnel | those cases the external entity might want to program the tunnel | |||
header on both ends of the tunnel. The tunnel nexthop is kept | header on both ends of the tunnel. The tunnel nexthop is kept | |||
generic with specifications provided for some commonly used tunnels. | generic with specifications provided for some commonly used tunnels. | |||
It is expected that the data-model will model these tunnel types with | It is expected that the data-model will model these tunnel types with | |||
complete accuracy. | complete accuracy. | |||
skipping to change at page 14, line 12 | skipping to change at page 13, line 47 | |||
(or unavailable), then traffic MUST be load balanced over elements | (or unavailable), then traffic MUST be load balanced over elements | |||
with protection preference of 2. | with protection preference of 2. | |||
2.4.3. Nexthop content | 2.4.3. Nexthop content | |||
At the lowest level, a nexthop can point to a: | At the lowest level, a nexthop can point to a: | |||
o identifier: This is an identifier returned by the network device | o identifier: This is an identifier returned by the network device | |||
representing another nexthop or another nexthop chain. | representing another nexthop or another nexthop chain. | |||
o EGRESS_INTERFACE: This represents a physical, logical or virtual | o EGRESS_INTERFACE: This represents a physical, logical or virtual | |||
interface on the network device. | interface on the network device. | |||
o address: This can be an IP address or MAC address or ISO address. | o address: This can be an IP address or MAC address. | |||
* An optional RIB name can also be specified to indicate the RIB | * An optional RIB name can also be specified to indicate the RIB | |||
in which the address is to be looked up further. One can use | in which the address is to be looked up further. One can use | |||
the RIB name field to direct the packet from one domain into | the RIB name field to direct the packet from one domain into | |||
another domain. For example, a MPLS packet coming in on an | another domain. For example, a MPLS packet coming in on an | |||
interface would be looked up in a MPLS RIB and the nexthop for | interface would be looked up in a MPLS RIB and the nexthop for | |||
that could indicate that we strip the MPLS label and do a | that could indicate that we strip the MPLS label and do a | |||
subsequent IPv4 lookup in an IPv4 RIB. By default the RIB will | subsequent IPv4 lookup in an IPv4 RIB. By default the RIB will | |||
be the same in which the route lookup was performed. | be the same in which the route lookup was performed. | |||
* An optional egress interface can be specified to indicate which | * An optional egress interface can be specified to indicate which | |||
interface to send the packet out on. The egress interface is | interface to send the packet out on. The egress interface is | |||
skipping to change at page 14, line 38 | skipping to change at page 14, line 25 | |||
send the packet out on. The egress interface is useful when the | send the packet out on. The egress interface is useful when the | |||
network device contains Ethernet interfaces and one needs to | network device contains Ethernet interfaces and one needs to | |||
perform an ARP lookup for the IP packet. | perform an ARP lookup for the IP packet. | |||
o logical tunnel: This can be a MPLS LSP or a GRE tunnel (or others | o logical tunnel: This can be a MPLS LSP or a GRE tunnel (or others | |||
as defined in this document), that is represented by a unique | as defined in this document), that is represented by a unique | |||
identifier (E.g. name). | identifier (E.g. name). | |||
o RIB_NAME: A nexthop pointing to a RIB indicates that the route | o RIB_NAME: A nexthop pointing to a RIB indicates that the route | |||
lookup needs to continue in the specified RIB. This is a way to | lookup needs to continue in the specified RIB. This is a way to | |||
perform chained lookups. | perform chained lookups. | |||
2.4.4. Nexthop attributes | 2.4.4. Special nexthops | |||
Certain information is encoded implicitly in the nexthop and does not | ||||
need to be specified by the controller. For example, when a IP | ||||
packet is forwarded out, the IP TTL is decremented by default. Same | ||||
applies for an MPLS packet. Similarly, when an IP packet is sent | ||||
over an ethernet interface, any ARP processing is handled implicitly | ||||
by the network device and does not need to be programmed by an | ||||
external device. | ||||
A nexthop can have some attributes associated with it. The purpose | ||||
of the attributes is to either override implicit behavior (like that | ||||
related to TTL processing) or to guide the network device to perform | ||||
something specific. Vendor specific attributes can also be | ||||
specified. The details of vendor specific attributes is outside the | ||||
scope of this document. | ||||
2.4.4.1. Nexthop flags | ||||
Nexthop flags in a nexthop is an optional attribute that is used to | ||||
denote specific connotation to hardware. Two common types of | ||||
operations are specified using nexthop flags. | ||||
o NO_DECREMENT_TTL: This indicates that the IPv4 time-to-live field | ||||
in an IPv4 packet MUST NOT be decremented before the packet is | ||||
forwarded. This may be applied one when an IPv4 packet is | ||||
encapsulated in a tunnel (E.g. MPLS) and one wants to hide the | ||||
fact that the packet is going through a tunnel. | ||||
o NO_PROPAGATE_TTL: This indicates that the IPv4 time-to-live field | ||||
in an IPv4 packet MUST NOT be propagated into an equivalent field, | ||||
when the IPv4 packet is tunneled. For example, if the IPv4 packet | ||||
is tunneled over MPLS, then the network device should use the | ||||
default time-to-live value for the outer MPLS header. This field | ||||
can also be used to indicate that when a tunnel terminates, one | ||||
does not propagate the outer header's time-to-live value into the | ||||
inner header. So, on MPLS tunnel termination, one does not | ||||
propagate the MPLS TTL value into the IPv4 header. | ||||
The TTL nexthop flags can be used to simulate a Pipe model for | ||||
tunnels. See [RFC3443] for a detailed understanding of Pipe model | ||||
and Uniform model. | ||||
2.4.5. Nexthop vendor attributes | ||||
This field has been defined for vendor specific extensions. The | ||||
contents of this field are beyond the scope of this document. | ||||
2.4.6. Special nexthops | ||||
This document specifies certain special nexthops. The purpose of | This document specifies certain special nexthops. The purpose of | |||
each of them is explained below: | each of them is explained below: | |||
o DISCARD: This indicates that the network device should drop the | o DISCARD: This indicates that the network device should drop the | |||
packet and increment a drop counter. | packet and increment a drop counter. | |||
o DISCARD_WITH_ERROR: This indicates that the network device should | o DISCARD_WITH_ERROR: This indicates that the network device should | |||
drop the packet, increment a drop counter and send back an | drop the packet, increment a drop counter and send back an | |||
appropriate error message (like ICMP error). | appropriate error message (like ICMP error). | |||
o RECEIVE: This indicates that that the traffic is destined for the | o RECEIVE: This indicates that that the traffic is destined for the | |||
network device. For example, protocol packets or OAM packets. | network device. For example, protocol packets or OAM packets. | |||
skipping to change at page 17, line 16 | skipping to change at page 16, line 10 | |||
notifications. A brief list of suggested notifications is as below: | notifications. A brief list of suggested notifications is as below: | |||
o Route change notification, with return code as specified in | o Route change notification, with return code as specified in | |||
Section 4 | Section 4 | |||
o Nexthop resolution status (resolved/unresolved) notification | o Nexthop resolution status (resolved/unresolved) notification | |||
6. RIB grammar | 6. RIB grammar | |||
This section specifies the RIB information model in Routing Backus- | This section specifies the RIB information model in Routing Backus- | |||
Naur Form [RFC5511]. | Naur Form [RFC5511]. | |||
<routing-instance> ::= <INSTANCE_NAME> <INSTANCE_DISTINGUISHER> | <routing-instance> ::= <INSTANCE_NAME> | |||
[<interface-list>] <rib-list> | [<interface-list>] <rib-list> | |||
[<ROUTER_ID>] [<as-data>] | [<ROUTER_ID>] | |||
<as-data> ::= <AS_NUMBER> [<CONFEDERATION_AS>] | ||||
<interface-list> ::= (<INTERFACE_IDENTIFIER> ...) | <interface-list> ::= (<INTERFACE_IDENTIFIER> ...) | |||
<rib-list> ::= (<rib> ...) | <rib-list> ::= (<rib> ...) | |||
<rib> ::= <RIB_NAME> <rib-family> | <rib> ::= <RIB_NAME> <rib-family> | |||
[<route> ... ] [<MULTI_TOPOLOGY_ID>] | [<route> ... ] [<MULTI_TOPOLOGY_ID>] | |||
[ENABLE_IP_RPF_CHECK] | [ENABLE_IP_RPF_CHECK] | |||
<rib-family> ::= <IPV4_RIB_FAMILY> | <IPV6_RIB_FAMILY> | | <rib-family> ::= <IPV4_RIB_FAMILY> | <IPV6_RIB_FAMILY> | | |||
<MPLS_RIB_FAMILY> | <IEEE_MAC_RIB_FAMILY> | <MPLS_RIB_FAMILY> | <IEEE_MAC_RIB_FAMILY> | |||
<route> ::= <match> <nexthop-list> | <route> ::= <match> <nexthop-list> | |||
[<route-attributes>] | [<route-attributes>] | |||
[<route-vendor-attributes>] | [<route-vendor-attributes>] | |||
<match> ::= <ipv4-route> | <ipv6-route> | <mpls-route> | | <match> ::= <ipv4-route> | <ipv6-route> | <mpls-route> | | |||
<mac-route> | <interface-route> | <mac-route> | <interface-route> | |||
<ipv4-route> ::= <ipv4-prefix> [<multicast-source-ipv4-address>] | <ipv4-route> ::= <destination-ipv4-address> | <source-ipv4-address> | | |||
(<destination-ipv4-address> <source-ipv4-address>) | ||||
<destination-ipv4-address> ::= <ipv4-prefix> | ||||
<source-ipv4-address> ::= <ipv4-prefix> | ||||
<ipv4-prefix> ::= <IPV4_ADDRESS> <IPV4_ADDRESS_LENGTH> | <ipv4-prefix> ::= <IPV4_ADDRESS> <IPV4_ADDRESS_LENGTH> | |||
<ipv6-route> ::= <ipv6-prefix> [<multicast-source-ipv6-address>] | <ipv6-route> ::= <destination-ipv6-address> | <source-ipv6-address> | | |||
(<destination-ipv6-address> <source-ipv6-address>) | ||||
<destination-ipv6-address> ::= <ipv6-prefix> | ||||
<source-ipv6-address> ::= <ipv6-prefix> | ||||
<ipv6-prefix> ::= <IPV6_ADDRESS> <IPV6_PREFIX_LENGTH> | <ipv6-prefix> ::= <IPV6_ADDRESS> <IPV6_PREFIX_LENGTH> | |||
<mpls-route> ::= <MPLS> <MPLS_LABEL> | <mpls-route> ::= <MPLS> <MPLS_LABEL> | |||
<mac-route> ::= <IEEE_MAC> ( <MAC_ADDRESS> ) | <mac-route> ::= <IEEE_MAC> ( <MAC_ADDRESS> ) | |||
<interface-route> ::= <INTERFACE> <INTERFACE_IDENTIFIER> | <interface-route> ::= <INTERFACE> <INTERFACE_IDENTIFIER> | |||
<multicast-source-ipv4-address> ::= <IPV4_ADDRESS> | <multicast-source-ipv4-address> ::= <IPV4_ADDRESS> | |||
<IPV4_PREFIX_LENGTH> | <IPV4_PREFIX_LENGTH> | |||
<multicast-source-ipv6-address> ::= <IPV6_ADDRESS> | <multicast-source-ipv6-address> ::= <IPV6_ADDRESS> | |||
<IPV6_PREFIX_LENGTH> | <IPV6_PREFIX_LENGTH> | |||
<route-attributes> ::= [<ROUTE_PREFERENCE>] [<ROUTE_METRIC>] | <route-attributes> ::= [<ROUTE_PREFERENCE>] [<LOCAL_ONLY>] | |||
[<LOCAL_ONLY>] | ||||
[<address-family-route-attributes>] | [<address-family-route-attributes>] | |||
<address-family-route-attributes> ::= <ip-route-attributes> | | <address-family-route-attributes> ::= <ip-route-attributes> | | |||
<mpls-route-attributes> | | <mpls-route-attributes> | | |||
<ethernet-route-attributes> | <ethernet-route-attributes> | |||
<ip-route-attributes> ::= [<as-path>] [<rpf-check-interface>] | <ip-route-attributes> ::= [<rpf-check-interface>] | |||
<as-path> ::= (<as-path-segment-type> <as-list>) [<as-path> ...] | ||||
<as-path-segment-type> ::= <AS_SET> | <AS_SEQUENCE> | | ||||
<AS_CONFED_SEQUENCE> | <AS_CONFED_SET> | ||||
<as-list> ::= (<AS_NUMBER> ...) [<as-path>] | ||||
<rpf-check-interface> ::= <interface-list> | <rpf-check-interface> ::= <interface-list> | |||
<mpls-route-attributes> ::= [<rpf-check-interface>] | <mpls-route-attributes> ::= [<rpf-check-interface>] | |||
<ethernet-route-attributes> ::= <> | <ethernet-route-attributes> ::= <> | |||
<route-vendor-attributes> ::= <> | <route-vendor-attributes> ::= <> | |||
<nexthop-list> ::= <special-nexthop> | | <nexthop-list> ::= <special-nexthop> | | |||
((<nexthop-list-member>) | | ((<nexthop-list-member>) | | |||
([<nexthop-list-member> ... ] <nexthop-list> )) | ([<nexthop-list-member> ... ] <nexthop-list> )) | |||
skipping to change at page 18, line 45 | skipping to change at page 17, line 35 | |||
[<LOAD_BALANCE_WEIGHT>] | [<LOAD_BALANCE_WEIGHT>] | |||
<nexthop-chain> ::= (<nexthop> ...) | <nexthop-chain> ::= (<nexthop> ...) | |||
<nexthop-chain-identifier> ::= <NEXTHOP_NAME> | <NEXTHOP_ID> | <nexthop-chain-identifier> ::= <NEXTHOP_NAME> | <NEXTHOP_ID> | |||
<nexthop> ::= (<nexthop-identifier> | <EGRESS_INTERFACE> | | <nexthop> ::= (<nexthop-identifier> | <EGRESS_INTERFACE> | | |||
(<nexthop-address> | (<nexthop-address> | |||
([<RIB_NAME>] | [<EGRESS_INTERFACE>])) | | ([<RIB_NAME>] | [<EGRESS_INTERFACE>])) | | |||
(<tunnel-encap> [<EGRESS_INTERFACE>]) | | (<tunnel-encap> [<EGRESS_INTERFACE>]) | | |||
<logical-tunnel> | | <logical-tunnel> | | |||
<RIB_NAME>) | <RIB_NAME>) | |||
[<nexthop-attributes>] | ||||
[<nexthop-vendor-attributes>] | ||||
<nexthop-identifier> ::= <NEXTHOP_NAME> | <NEXTHOP_ID> | <nexthop-identifier> ::= <NEXTHOP_NAME> | <NEXTHOP_ID> | |||
<nexthop-address> ::= (<IPv4> <ipv4-address>) | | <nexthop-address> ::= (<IPv4> <ipv4-address>) | | |||
(<IPV6> <ipv6-address>) | | (<IPV6> <ipv6-address>) | | |||
(<IEEE_MAC> <IEEE_MAC_ADDRESS>) | | (<IEEE_MAC> <IEEE_MAC_ADDRESS>) | |||
(<ISO> <ISO_ADDRESS>) | ||||
<special-nexthop> ::= <DISCARD> | <DISCARD_WITH_ERROR> | | <special-nexthop> ::= <DISCARD> | <DISCARD_WITH_ERROR> | | |||
(<RECEIVE> [<COS_VALUE>] [<rate-limiter>]) | (<RECEIVE> [<COS_VALUE>] [<rate-limiter>]) | |||
<rate-limiter> ::= <> | <rate-limiter> ::= <> | |||
<logical-tunnel> ::= <tunnel-type> <TUNNEL_NAME> | <logical-tunnel> ::= <tunnel-type> <TUNNEL_NAME> | |||
<tunnel-type> ::= <IP> | <MPLS> | <GRE> | <VxLAN> | <NVGRE> | <tunnel-type> ::= <IP> | <MPLS> | <GRE> | <VxLAN> | <NVGRE> | |||
<tunnel-encap> ::= (<IPV4> <ipv4-header>) | | <tunnel-encap> ::= (<IPV4> <ipv4-header>) | | |||
(<IPV6> <ipv6-header>) | | (<IPV6> <ipv6-header>) | | |||
(<MPLS> <mpls-header>) | | (<MPLS> <mpls-header>) | | |||
skipping to change at page 19, line 38 | skipping to change at page 18, line 24 | |||
[<TOS_VALUE>] [<TTL_VALUE>]) | | [<TOS_VALUE>] [<TTL_VALUE>]) | | |||
(<MPLS_POP> [<TTL_ACTION>]) | (<MPLS_POP> [<TTL_ACTION>]) | |||
<gre-header> ::= <GRE_IP_DESTINATION> <GRE_PROTOCOL_TYPE> [<GRE_KEY>] | <gre-header> ::= <GRE_IP_DESTINATION> <GRE_PROTOCOL_TYPE> [<GRE_KEY>] | |||
<vxlan-header> ::= (<ipv4-header> | <ipv6-header>) | <vxlan-header> ::= (<ipv4-header> | <ipv6-header>) | |||
[<VXLAN_IDENTIFIER>] | [<VXLAN_IDENTIFIER>] | |||
<nvgre-header> ::= (<ipv4-header> | <ipv6-header>) | <nvgre-header> ::= (<ipv4-header> | <ipv6-header>) | |||
<VIRTUAL_SUBNET_ID> | <VIRTUAL_SUBNET_ID> | |||
[<FLOW_ID>] | [<FLOW_ID>] | |||
<nexthop-attributes> ::= [<NEXTHOP_ADDRESS_FAMILY>] | Figure 5: RIB rBNF grammar | |||
[<nexthop-flags>] | ||||
<NEXTHOP_ADDRESS_FAMILY> ::= <IPV4> | <IPV6> | <ISO> | <IEEE MAC> | ||||
<nexthop-flags> ::= [<NO_DECREMENT_TTL>] [<NO_PROPAGATE_TTL>] | ||||
<nexthop-vendor-attributes> ::= <> | ||||
7. Using the RIB grammar | 7. Inter-domain extensions to the RIB | |||
This section describes inter-domain extensions to the Routing | ||||
Information Base to allow an external entity to learn about and | ||||
program inter-domain information associated with the RIB and it's | ||||
routes. In the absence of this extension, the network device MUST | ||||
NOT return any routes that have inter-domain information associated | ||||
(such as autonomous-system path information). | ||||
7.1. Extension to Routing Instance | ||||
A routing instance is augmented with an optional parameter called as- | ||||
data. | ||||
as-data is an identifier of the administrative domain to which the | ||||
routing instance belongs. The as-data fields is used when the routes | ||||
in this instance are to be tagged with certain autonomous system (AS) | ||||
characteristics. The RIB manager can use AS length as one of the | ||||
parameters for making route selection. as-data consists of a AS | ||||
number and an optional Confederation AS number ([RFC5065]). | ||||
7.2. Extension to Route | ||||
Routes are augmented with an optional parameter called as-path. | ||||
A route can have an as-path associated with it to indicate which set | ||||
of autonomous systems has to be traversed to reach the final | ||||
destination. The as-path attribute can be used by the RIB manager in | ||||
multiple ways. The RIB manager can choose paths with lower as-path | ||||
length. Or the RIB manager can choose to not install paths going via | ||||
a particular AS. How exactly the RIB manager uses the as-path is | ||||
outside the scope of this document. For details of how the as-path | ||||
is formed, see Section 5.1.2 of [RFC4271] and Section 3 of [RFC5065]. | ||||
7.3. Inter-domain extensions to RIB grammar | ||||
<routing-instance> ::= <INSTANCE_NAME> | ||||
[<interface-list>] <rib-list> | ||||
[<ROUTER_ID>] [<as-data>] | ||||
<as-data> ::= <AS_NUMBER> [<CONFEDERATION_AS>] | ||||
<ip-route-attributes> ::= [<rpf-check-interface>] [<as-path>] | ||||
<as-path> ::= (<as-path-segment-type> <as-list>) [<as-path> ...] | ||||
<as-path-segment-type> ::= <AS_SET> | <AS_SEQUENCE> | | ||||
<AS_CONFED_SEQUENCE> | <AS_CONFED_SET> | ||||
<as-list> ::= (<AS_NUMBER> ...) [<as-path>] | ||||
Figure 6: RIB rBNF grammar - Inter-domain extensions | ||||
8. Using the RIB grammar | ||||
The RIB grammar is very generic and covers a variety of features. | The RIB grammar is very generic and covers a variety of features. | |||
This section provides examples on using objects in the RIB grammar | This section provides examples on using objects in the RIB grammar | |||
and examples to program certain use cases. | and examples to program certain use cases. | |||
7.1. Using route preference and metric | 8.1. Using route preference | |||
Using route preference one can pre-install protection paths in the | Using route preference one can pre-install protection paths in the | |||
network. For example, if OSPF has a route preference of 10, then one | network. For example, if OSPF has a route preference of 10, then one | |||
can install a route with route preference of 20 to the same | can install a route with route preference of 20 to the same | |||
destination. The OSPF route will get precedence and will get | destination. The OSPF route will get precedence and will get | |||
installed in the FIB. When the OSPF route goes away (for any | installed in the FIB. When the OSPF route goes away (for any | |||
reason), the protection path will get installed in the FIB. If the | reason), the protection path will get installed in the FIB. If the | |||
hardware supports it, then the RIB manager can choose to pre-install | hardware supports it, then the RIB manager can choose to pre-install | |||
both routes, with the OSPF nexthop getting preference. | both routes, with the OSPF nexthop getting preference. | |||
Route preference can also be used to prevent denial of service | Route preference can also be used to prevent denial of service | |||
attacks by installing routes with the best preference, which either | attacks by installing routes with the best preference, which either | |||
drops the offending traffic or routes it to some monitoring/analysis | drops the offending traffic or routes it to some monitoring/analysis | |||
station. Since the routes are installed with the best preference, | station. Since the routes are installed with the best preference, | |||
they will supersede any route installed by any other protocol. | they will supersede any route installed by any other protocol. | |||
Route metric is used to disambiguate between 2 or more routes to the | 8.2. Using different nexthops types | |||
same destination with the same preference and in the same RIB. One | ||||
usage of this is to install 2 routes, each with a different nexthop. | ||||
The preferred nexthop is given a better metric than the other one. | ||||
This results in traffic being forwarded to the preferred nexthop. If | ||||
the preferred nexthop fails, then the RIB manager will automatically | ||||
install a route to the other nexthop. | ||||
7.2. Using different nexthops types | ||||
The RIB grammar allows one to create a variety of nexthops. This | The RIB grammar allows one to create a variety of nexthops. This | |||
section describes uses for certain types of nexthops. | section describes uses for certain types of nexthops. | |||
7.2.1. Tunnel nexthops | 8.2.1. Tunnel nexthops | |||
A tunnel nexthop points to a tunnel of some kind. Traffic that goes | A tunnel nexthop points to a tunnel of some kind. Traffic that goes | |||
over the tunnel gets encapsulated with the tunnel encap. Tunnel | over the tunnel gets encapsulated with the tunnel encap. Tunnel | |||
nexthops are useful for abstracting out details of the network, by | nexthops are useful for abstracting out details of the network, by | |||
having the traffic seamlessly route between network edges. | having the traffic seamlessly route between network edges. | |||
7.2.2. Replication lists | 8.2.2. Replication lists | |||
One can create a replication list for replication traffic to multiple | One can create a replication list for replication traffic to multiple | |||
destinations. The destinations, in turn, could be complex nexthops | destinations. The destinations, in turn, could be complex nexthops | |||
in themselves - at a level supported by the network device. Point to | in themselves - at a level supported by the network device. Point to | |||
multipoint and broadcast are examples that involve replication. | multipoint and broadcast are examples that involve replication. | |||
A replication list (at the simplest level) can be represented as: | A replication list (at the simplest level) can be represented as: | |||
<nexthop-list> ::= <nexthop> [ <nexthop> ... ] | <nexthop-list> ::= <nexthop> [ <nexthop> ... ] | |||
The above can be derived from the grammar as follows: | The above can be derived from the grammar as follows: | |||
<nexthop-list> ::= <nexthop-list-member> [<nexthop-list-member> ...] | <nexthop-list> ::= <nexthop-list-member> [<nexthop-list-member> ...] | |||
<nexthop-list> ::= <nexthop-chain> [<nexthop-chain> ...] | <nexthop-list> ::= <nexthop-chain> [<nexthop-chain> ...] | |||
<nexthop-list> ::= <nexthop> [ <nexthop> ... ] | <nexthop-list> ::= <nexthop> [ <nexthop> ... ] | |||
7.2.3. Weighted lists | 8.2.3. Weighted lists | |||
A weighted list is used to load-balance traffic among a set of | A weighted list is used to load-balance traffic among a set of | |||
nexthops. From a modeling perspective, a weighted list is very | nexthops. From a modeling perspective, a weighted list is very | |||
similar to a replication list, with the difference that each member | similar to a replication list, with the difference that each member | |||
nexthop MUST have a LOAD_BALANCE_WEIGHT associated with it. | nexthop MUST have a LOAD_BALANCE_WEIGHT associated with it. | |||
A weighted list (at the simplest level) can be represented as: | A weighted list (at the simplest level) can be represented as: | |||
<nexthop-list> ::= (<nexthop> <LOAD_BALANCE_WEIGHT>) | <nexthop-list> ::= (<nexthop> <LOAD_BALANCE_WEIGHT>) | |||
[(<nexthop> <LOAD_BALANCE_WEIGHT>)... ] | [(<nexthop> <LOAD_BALANCE_WEIGHT>)... ] | |||
The above can be derived from the grammar as follows: | The above can be derived from the grammar as follows: | |||
<nexthop-list> ::= <nexthop-list-member> [<nexthop-list-member> ...] | <nexthop-list> ::= <nexthop-list-member> [<nexthop-list-member> ...] | |||
<nexthop-list> ::= (<nexthop-chain> <nexthop-list-member-attributes>) | <nexthop-list> ::= (<nexthop-chain> <nexthop-list-member-attributes>) | |||
[(<nexthop-chain> | [(<nexthop-chain> | |||
<nexthop-list-member-attributes>) ...] | <nexthop-list-member-attributes>) ...] | |||
<nexthop-list> ::= (<nexthop-chain> <LOAD_BALANCE_WEIGHT>) | <nexthop-list> ::= (<nexthop-chain> <LOAD_BALANCE_WEIGHT>) | |||
[(<nexthop-chain> <LOAD_BALANCE_WEIGHT>) ... ] | [(<nexthop-chain> <LOAD_BALANCE_WEIGHT>) ... ] | |||
<network-list> ::= (<nexthop> <LOAD_BALANCE_WEIGHT>) | <nexthop-list> ::= (<nexthop> <LOAD_BALANCE_WEIGHT>) | |||
[(<nexthop> <LOAD_BALANCE_WEIGHT>)... ] | [(<nexthop> <LOAD_BALANCE_WEIGHT>)... ] | |||
7.2.4. Protection lists | 8.2.4. Protection lists | |||
Protection lists are similar to weighted lists. A protection list | Protection lists are similar to weighted lists. A protection list | |||
specifies a set of primary nexthops and a set of backup nexthops. | specifies a set of primary nexthops and a set of backup nexthops. | |||
The <PROTECTION_PREFERENCE> attribute indicates which nexthop is | The <PROTECTION_PREFERENCE> attribute indicates which nexthop is | |||
primary and which is backup. | primary and which is backup. | |||
A protection list can be represented as: | A protection list can be represented as: | |||
<nexthop-list> ::= (<nexthop> <PROTECTION_PREFERENCE>) | <nexthop-list> ::= (<nexthop> <PROTECTION_PREFERENCE>) | |||
[(<nexthop> <PROTECTION_PREFERENCE>)... ] | [(<nexthop> <PROTECTION_PREFERENCE>)... ] | |||
A protection list can also be a weighted list. In other words, | A protection list can also be a weighted list. In other words, | |||
traffic can be load-balanced among the primary nexthops of a | traffic can be load-balanced among the primary nexthops of a | |||
protection list. In such a case, the list will look like: | protection list. In such a case, the list will look like: | |||
<nexthop-list> ::= (<nexthop> <PROTECTION_PREFERENCE> | <nexthop-list> ::= (<nexthop> <PROTECTION_PREFERENCE> | |||
<LOAD_BALANCE_WEIGHT>) | <LOAD_BALANCE_WEIGHT>) | |||
[(<nexthop> <PROTECTION_PREFERENCE> | [(<nexthop> <PROTECTION_PREFERENCE> | |||
<LOAD_BALANCE_WEIGHT>)... ] | <LOAD_BALANCE_WEIGHT>)... ] | |||
7.2.5. Nexthop chains | 8.2.5. Nexthop chains | |||
A nexthop chain is a nexthop that puts one or more headers on an | A nexthop chain is a nexthop that puts one or more headers on an | |||
outgoing packet. One example is a Pseudowire - which is MPLS over | outgoing packet. One example is a Pseudowire - which is MPLS over | |||
some transport (MPLS or GRE for instance). Another example is VxLAN | some transport (MPLS or GRE for instance). Another example is VxLAN | |||
over IP. A nexthop chain allows an external entity to break up the | over IP. A nexthop chain allows an external entity to break up the | |||
programming of the nexthop into independent pieces - one per | programming of the nexthop into independent pieces - one per | |||
encapsulation. | encapsulation. | |||
A simple example of MPLS over GRE can be represented as: | A simple example of MPLS over GRE can be represented as: | |||
skipping to change at page 22, line 33 | skipping to change at page 22, line 16 | |||
The above can be derived from the grammar as follows: | The above can be derived from the grammar as follows: | |||
<nexthop-list> ::= <nexthop-list-member> [<nexthop-list-member> ...] | <nexthop-list> ::= <nexthop-list-member> [<nexthop-list-member> ...] | |||
<nexthop-list> ::= <nexthop-chain> | <nexthop-list> ::= <nexthop-chain> | |||
<nexthop-list> ::= <nexthop> [ <nexthop> ... ] | <nexthop-list> ::= <nexthop> [ <nexthop> ... ] | |||
<nexthop-list> ::= <tunnel-encap> (<nexthop> [ <nexthop> ...]) | <nexthop-list> ::= <tunnel-encap> (<nexthop> [ <nexthop> ...]) | |||
<nexthop-list> ::= <tunnel-encap> (<tunnel-encap>) | <nexthop-list> ::= <tunnel-encap> (<tunnel-encap>) | |||
<nexthop-list> ::= (<MPLS> <mpls-header>) (<GRE> <gre-header>) | <nexthop-list> ::= (<MPLS> <mpls-header>) (<GRE> <gre-header>) | |||
7.2.6. Lists of lists | 8.2.6. Lists of lists | |||
Lists of lists is a complex construct. One example of usage of such | Lists of lists is a complex construct. One example of usage of such | |||
a construct is to replicate traffic to multiple destinations, with | a construct is to replicate traffic to multiple destinations, with | |||
high availability. In other words, for each destination you have a | high availability. In other words, for each destination you have a | |||
primary and backup nexthop (replication list) to ensure there is no | primary and backup nexthop (replication list) to ensure there is no | |||
traffic drop in case of a failure. So the outer list is a protection | traffic drop in case of a failure. So the outer list is a protection | |||
list and the inner lists are replication lists of primary/backup | list and the inner lists are replication lists of primary/backup | |||
nexthops. | nexthops. | |||
7.3. Performing multicast | 8.3. Performing multicast | |||
IP multicast involves matching a packet on (S, G) or (*, G), where | IP multicast involves matching a packet on (S, G) or (*, G), where | |||
both S (source) and G (group) are IP prefixes. Following the match, | both S (source) and G (group) are IP prefixes. Following the match, | |||
the packet is replicated to one or more recipients. How the | the packet is replicated to one or more recipients. How the | |||
recipients subscribe to the multicast group is outside the scope of | recipients subscribe to the multicast group is outside the scope of | |||
this document. | this document. | |||
In PIM-based multicast, the packets are IP forwarded on an IP | In PIM-based multicast, the packets are IP forwarded on an IP | |||
multicast tree. The downstream nodes on each point in the multicast | multicast tree. The downstream nodes on each point in the multicast | |||
tree is one or more IP addresses. These can be represented as a | tree is one or more IP addresses. These can be represented as a | |||
replication list ( Section 7.2.2 ). | replication list ( Section 8.2.2 ). | |||
In MPLS-based multicast, the packets are forwarded on a point to | In MPLS-based multicast, the packets are forwarded on a point to | |||
multipoint (P2MP) label-switched path (LSP). The nexthop for a P2MP | multipoint (P2MP) label-switched path (LSP). The nexthop for a P2MP | |||
LSP can be represented in the nexthop grammar as a <logical-tunnel> | LSP can be represented in the nexthop grammar as a <logical-tunnel> | |||
(P2MP LSP identifier) or a replication list ( Section 7.2.2) of | (P2MP LSP identifier) or a replication list ( Section 8.2.2) of | |||
<tunnel-encap>, with each tunnel encap representing a single mpls | <tunnel-encap>, with each tunnel encap representing a single mpls | |||
downstream nexthop. | downstream nexthop. | |||
7.4. Solving optimized exit control | 8.4. Solving optimized exit control | |||
In case of optimized exit control, a controller wants to control the | In case of optimized exit control, a controller wants to control the | |||
edge device (and optionally control the outgoing interface on that | edge device (and optionally control the outgoing interface on that | |||
edge device) that is used by a server to send traffic out. This can | edge device) that is used by a server to send traffic out. This can | |||
be easily achieved by having the controller program the edge router | be easily achieved by having the controller program the edge router | |||
(Eg. 192.0.2.10) and the server along the following lines: | (Eg. 192.0.2.10) and the server along the following lines: | |||
Server: | Server: | |||
<route> ::= <rib-name> <match> (<edge-router> | <route> ::= <rib-name> <match> (<edge-router> | |||
<edge-router-interface>) | <edge-router-interface>) | |||
skipping to change at page 23, line 43 | skipping to change at page 23, line 23 | |||
(<MPLS_PUSH> <100>) | (<MPLS_PUSH> <100>) | |||
(<GRE> <192.0.2.10> <GRE_PROTOCOL_MPLS>) | (<GRE> <192.0.2.10> <GRE_PROTOCOL_MPLS>) | |||
Edge Router: | Edge Router: | |||
<route> ::= <mpls-rib> <mpls-route> <nexthop> | <route> ::= <mpls-rib> <mpls-route> <nexthop> | |||
<route> ::= <mpls-rib> (<MPLS> <100>) <interface-10> | <route> ::= <mpls-rib> (<MPLS> <100>) <interface-10> | |||
In the above case, the label 100 identifies the egress interface | In the above case, the label 100 identifies the egress interface | |||
on the edge router. | on the edge router. | |||
8. RIB operations at scale | 9. RIB operations at scale | |||
This section discusses the scale requirements for a RIB data-model. | This section discusses the scale requirements for a RIB data-model. | |||
The RIB data-model should be able to handle large scale of | The RIB data-model should be able to handle large scale of | |||
operations, to enable deployment of RIB applications in large | operations, to enable deployment of RIB applications in large | |||
networks. | networks. | |||
8.1. RIB reads | 9.1. RIB reads | |||
Bulking (grouping of multiple objects in a single message) MUST be | Bulking (grouping of multiple objects in a single message) MUST be | |||
supported when a network device sends RIB data to an external entity. | supported when a network device sends RIB data to an external entity. | |||
Similarly the data model MUST enable a RIB client to request data in | Similarly the data model MUST enable a RIB client to request data in | |||
bulk from a network device. | bulk from a network device. | |||
8.2. RIB writes | 9.2. RIB writes | |||
Bulking (grouping of multiple write operations in a single message) | Bulking (grouping of multiple write operations in a single message) | |||
MUST be supported when an external entity wants to write to the RIB. | MUST be supported when an external entity wants to write to the RIB. | |||
The response from the network device MUST include a return-code for | The response from the network device MUST include a return-code for | |||
each write operation in the bulk message. | each write operation in the bulk message. | |||
8.3. RIB events and notifications | 9.3. RIB events and notifications | |||
There can be cases where a single network event results in multiple | There can be cases where a single network event results in multiple | |||
events and/or notifications from the network device to an external | events and/or notifications from the network device to an external | |||
entity. On the other hand, due to timing of multiple things | entity. On the other hand, due to timing of multiple things | |||
happening at the same time, a network device might have to send | happening at the same time, a network device might have to send | |||
multiple events and/or notifications to an external entity. The | multiple events and/or notifications to an external entity. The | |||
network device originated event/notification message MUST support | network device originated event/notification message MUST support | |||
bulking of multiple events and notifications in a single message. | bulking of multiple events and notifications in a single message. | |||
9. Security Considerations | 10. Security Considerations | |||
All interactions between a RIB manager and an external entity MUST be | All interactions between a RIB manager and an external entity MUST be | |||
authenticated and authorized. The RIB manager MUST protect itself | authenticated and authorized. The RIB manager MUST protect itself | |||
against a denial of service attack by a rogue external entity, by | against a denial of service attack by a rogue external entity, by | |||
throttling request processing. A RIB manager MUST enforce limits on | throttling request processing. A RIB manager MUST enforce limits on | |||
how much data can be programmed by an external entity and return | how much data can be programmed by an external entity and return | |||
error when such a limit is reached. | error when such a limit is reached. | |||
The RIB manager MUST expose a data-model that it implements. An | The RIB manager MUST expose a data-model that it implements. An | |||
external agent MUST send requests to the RIB manager that comply with | external agent MUST send requests to the RIB manager that comply with | |||
the supported data-model. The data-model MUST specify the behavior | the supported data-model. The data-model MUST specify the behavior | |||
of the RIB manager on handling of unsupported data requests. | of the RIB manager on handling of unsupported data requests. | |||
10. IANA Considerations | 11. IANA Considerations | |||
This document does not generate any considerations for IANA. | This document does not generate any considerations for IANA. | |||
11. Acknowledgements | 12. Acknowledgements | |||
The authors would like to thank the working group co-chairs and | The authors would like to thank the working group co-chairs and | |||
reviewers on their comments and suggestions on this draft. The | reviewers on their comments and suggestions on this draft. The | |||
following people contributed to the design of the RIB model as part | following people contributed to the design of the RIB model as part | |||
of the I2RS Interim meeting in April 2013 - Wes George, Chris | of the I2RS Interim meeting in April 2013 - Wes George, Chris | |||
Liljenstolpe, Jeff Tantsura, Sriganesh Kini, Susan Hares, Fabian | Liljenstolpe, Jeff Tantsura, Sriganesh Kini, Susan Hares, Fabian | |||
Schneider and Nitin Bahadur. | Schneider and Nitin Bahadur. | |||
12. References | 13. References | |||
12.1. Normative References | 13.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
12.2. Informative References | 13.2. Informative References | |||
[I-D.atlas-i2rs-problem-statement] | [I-D.atlas-i2rs-problem-statement] | |||
Atlas, A., Nadeau, T., and D. Ward, "Interface to the | Atlas, A., Nadeau, T., and D. Ward, "Interface to the | |||
Routing System Problem Statement", | Routing System Problem Statement", | |||
draft-atlas-i2rs-problem-statement-02 (work in progress), | draft-atlas-i2rs-problem-statement-02 (work in progress), | |||
August 2013. | August 2013. | |||
[I-D.hares-i2rs-use-case-vn-vc] | [I-D.hares-i2rs-use-case-vn-vc] | |||
Hares, S., "Use Cases for Virtual Connections on Demand | Hares, S., "Use Cases for Virtual Connections on Demand | |||
(VCoD) and Virtual Network on Demand using Interface to | (VCoD) and Virtual Network on Demand using Interface to | |||
Routing System", draft-hares-i2rs-use-case-vn-vc-00 (work | Routing System", draft-hares-i2rs-use-case-vn-vc-00 (work | |||
in progress), February 2013. | in progress), February 2013. | |||
[I-D.white-i2rs-use-case] | [I-D.white-i2rs-use-case] | |||
White, R., Hares, S., and A. Retana, "Protocol Independent | White, R., Hares, S., and A. Retana, "Protocol Independent | |||
Use Cases for an Interface to the Routing System", | Use Cases for an Interface to the Routing System", | |||
draft-white-i2rs-use-case-01 (work in progress), | draft-white-i2rs-use-case-01 (work in progress), | |||
August 2013. | August 2013. | |||
[RFC3443] Agarwal, P. and B. Akyol, "Time To Live (TTL) Processing | ||||
in Multi-Protocol Label Switching (MPLS) Networks", | ||||
RFC 3443, January 2003. | ||||
[RFC4271] Rekhter, Y., Li, T., and S. Hares, "A Border Gateway | [RFC4271] Rekhter, Y., Li, T., and S. Hares, "A Border Gateway | |||
Protocol 4 (BGP-4)", RFC 4271, January 2006. | Protocol 4 (BGP-4)", RFC 4271, January 2006. | |||
[RFC4915] Psenak, P., Mirtorabi, S., Roy, A., Nguyen, L., and P. | [RFC4915] Psenak, P., Mirtorabi, S., Roy, A., Nguyen, L., and P. | |||
Pillay-Esnault, "Multi-Topology (MT) Routing in OSPF", | Pillay-Esnault, "Multi-Topology (MT) Routing in OSPF", | |||
RFC 4915, June 2007. | RFC 4915, June 2007. | |||
[RFC5065] Traina, P., McPherson, D., and J. Scudder, "Autonomous | [RFC5065] Traina, P., McPherson, D., and J. Scudder, "Autonomous | |||
System Confederations for BGP", RFC 5065, August 2007. | System Confederations for BGP", RFC 5065, August 2007. | |||
skipping to change at page 26, line 16 | skipping to change at page 25, line 38 | |||
Topology (MT) Routing in Intermediate System to | Topology (MT) Routing in Intermediate System to | |||
Intermediate Systems (IS-ISs)", RFC 5120, February 2008. | Intermediate Systems (IS-ISs)", RFC 5120, February 2008. | |||
[RFC5511] Farrel, A., "Routing Backus-Naur Form (RBNF): A Syntax | [RFC5511] Farrel, A., "Routing Backus-Naur Form (RBNF): A Syntax | |||
Used to Form Encoding Rules in Various Routing Protocol | Used to Form Encoding Rules in Various Routing Protocol | |||
Specifications", RFC 5511, April 2009. | Specifications", RFC 5511, April 2009. | |||
Authors' Addresses | Authors' Addresses | |||
Nitin Bahadur (editor) | Nitin Bahadur (editor) | |||
Juniper Networks, Inc. | ||||
1194 N. Mathilda Avenue | ||||
Sunnyvale, CA 94089 | ||||
US | ||||
Phone: +1 408 745 2000 | Email: nitin_bahadur@yahoo.com | |||
Email: nitinb@juniper.net | ||||
URI: www.juniper.net | ||||
Ron Folkes (editor) | Ron Folkes (editor) | |||
Juniper Networks, Inc. | Juniper Networks, Inc. | |||
1194 N. Mathilda Avenue | 1194 N. Mathilda Avenue | |||
Sunnyvale, CA 94089 | Sunnyvale, CA 94089 | |||
US | US | |||
Phone: +1 408 745 2000 | Phone: +1 408 745 2000 | |||
Email: ronf@juniper.net | Email: ronf@juniper.net | |||
URI: www.juniper.net | URI: www.juniper.net | |||
End of changes. 61 change blocks. | ||||
198 lines changed or deleted | 150 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |