I2RS Working Group | S. Hares |
Internet-Draft | L. Wang |
Intended status: Standards Track | S. Zhuang |
Expires: January 2, 2015 | Huawei |
July 1, 2014 |
An I2RS BGP Information Model
draft-hares-i2rs-bgp-im-00.txt
This document introduces an information model for i2RS BGP protocol and network policy that aligns with the I2RS BGP use cases. This draft utilizes the general Policy based routing structured found in the RIB Information Model (IM) and Policy Base Policy.
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 http://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 January 2, 2015.
Copyright (c) 2014 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 (http://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 Interface to the Routing System (I2RS) provides read and write access to the information and state within the routing process within routing elements via protocol message exchange between an I2RS Client and an I2RS Agent associated with the a routing system. The [I-D.ietf-i2rs-architecture] describes the basic interactions of this exchange. One of the important functions of this messages exchange is for the I2RS client to interact with one or more I2RS agents to collect information from network routing systems.
One of the key information pieces that I2RS clients may collect from I2RS agents is the BGP information regarding BGP peers, BGP routes, and network topologies created within BGP. This document introduces a basic information model for BGP policies. This policy model can be linked with other information models such as the I2RS RIB informational model [I-D.ietf-i2rs-rib-info-model], and uses the generic policy found in the Policy Routing modules in [I-D.hares-i2rs-info-model-policy]. This basic BGP Information Model is an extendable policy model is a product of the industry approach to I2RS.
BGP data includes information related to the BGP protocol instances, BGP Peer information, BGP Route information, and BGP policy. This section describes the information associated with the I2RS agent accessible via BGP.
BGP protocol support within a router(or virtual routing device) may have multiple instances of the BGP protocol. This section describes the information regarding the BGP protocol available to the I2RS Agent. At end of this section there is a RBNF form summarizing this topology.
The section below describes these elements.
This section describes each element of the I2RS Protocol Block.
<bgp-protocol> ::= < ROUTER-ID > <AS_Number> <protocol-status> <shutdown_protocol> <BGP_ROLE> <bgp-instance-list> <BGP_ROLE> ::= [<ASBR >] [ <PE>] [ <IBGP>] [<RR>] <protocol_status> ::= <SHUTDOWN> | <NO_SHUTDOWN> <shutdown_protocol> ::= <TRUE> | <FALSE> <bgp-instance-list> ::= (<BGP_INSTANCE> ...)
This section describes the list of BGP instances (BGP_INSTANCE_LIST). Each BGP_INSTANCE has the following structure
The definitions of the fields in BGP Instance are:
<bgp-instance-list> ::= (< bgp-instance > ...) <BGP_INSTANCE> ::= <BGP_INSTANCE_NAME> <BGP_INSTANCE_CREATE> <bgp-instance-type> <BGP_VENDOR_TYPE> <AFI> <SAFI> <bgp-local-rib> <bgp-peer-list> <BGP_INSTANCE_CREATE> ::= <Not-I2RS> | <I2RSCLIENT_CREATE_BGP_INSTANCE> | <I2RSAGENT_FAILS_BGP_INSTANCE_CREATE> | <I2RSAGENT_CREATED_BGP_INSTANCE> | <I2RSAGENT_BGP_INSTANCE_CREATE)> | <I2RSAGENT_REJECTS_BGP_INSTANCE_CREATE> | <I2RSAGENT_ATTEMPTS_BGP_INSTANCE_CREATE> | <I2RSAGENT_FAILS_BGP_INSTANCE_CREATE> | <I2RSAGENT_CREATED_BGP_INSTANCE> < BGP_INSTANCE_TYPE > ::= < BGP_IPV4_UNI > | < BGP_IPV4_MULTI > | < BGP_IPV4_L3VPN > | < BGP_IPV4_MVPN > | < BGP_VPLS > | < BGP_MDT > | < BGP_EVPN > | < BGP_LS > | < BGP_IPV4_MPLS_VPN > | < BGP_IPV4_MPLS_MVPN > | < BGP_ROUTE_TARGET > | < BGP_IPV4_FLOW > | < BGP_IPV4_VPN_FLOW > | < BGP_IPV4_VRF_LIST > | < BGP_IPV6_VRF_LIST > | < BGP_IPV6_UNI > | < BGP_IPV6_VPNV6 > <AFI> ::= <IPV4> | <IPV6> < SAFI> ::= <UNICAST> | <MULTICAST> | < L3VPN > | <MPLS> | <MVPN> | < RT_CONSTRAIN >| < IPV4_FLOW_SPEC > | < VPNV4_FLOW_SPEC >| < CLNS_VPN > | < NG_MVPN >| < MDT_SAFI >
The following are the elements in the BGP_Peer structure
The I2RS Agent's peer inbound and outbound policies are logically considered to be stored in policy-sets as described in [I-D.hares-i2rs-info-model-policy]. Policy sets are uniquely identified by a Policy-set name/identity which the variables Peer_policy_in and Peer_policy_out refer to. The full policy set can be read from the variables Peer_policy_in_pset (inbound bgp peer policy), and Peer_policy_out_pset. A bit of explanation is in order to describe their use in the I2RS Client-I2RS Agent exchange.
Some I2RS clients will have long-term connections to I2RS Agents associated with a BGP routing function, and may choose to transfer the BGP Policy set or a set of the BGP Policy Components to the client's local memory. In this case, the I2RS Client could request the I2RS Agent to simply transfer the BGP Policy Sets name used by for the BGP Peers to minimize travel along with an indication of the last time the policy was updated.
The policy variables Peer_policy_in and Peer_policy_out allow both read and write of the Policy set IDs. The read of the Peer_policy_in and Peer_policy_out will provide simply the policy-set name. The write of the Peer_policy_in the I2RS agent will need to valid the the policy set name. After the policy set name is validated, the policy set link is placed in Peer_policy_in_pset and the BGP routing function updated with the policy set lists for the BGP Peer.
Similarly, if a write occurs to I2RS Agent's Peer_policy_out, the I2RS agent validates the policy-set name , replaces Peer_policy_out_pset with the link to the policy-set identified by the Policy-set name.
Reading either Peer_policy_in_pset will result in the I2RS Agent passing the policy linked to by the Peer_policy_in name (and linked to by Peer_policy_in_pset) to the I2RS Client in policy set form. Similarly, reading the Peer_policy_out_pset will retrieve the policy set pointed to by the Peer_policy_out name, and transfer the data in policy set form.
The definitions of the fields in BGP peer are:
< bgp-peer-list > ::= (< BGP_peer > ...) <BGP_peer> ::= <BGP_PEER_NAME> <Peer_Session_Address> <BGP_Peer_Type> <PEER_MAX_PREFIX> <BGP_Peer_create> <bgp_rib_in> <bgp_rib_out> <Peer_policy_in> <Peer_policy_out> <Peer_policy_in_pset> <Peer_policy_out_pset> [<peer_state_info>] <BGP_PEER_NAME> ::= (alpha-numeric characters) <Peer_Session_Address> ::= [<v4-session-address>] | [<v6-session-address>] | [<v4-port-session-address>] < v4-session-address> ::= <LOCAL_IPV4_ADDRESS> <REMOTE_IPV4_ADDRESS> <v6-session-address>::= <LOCAL_IPV6_ADDRESS> <REMOTE_IPV6_ADDRESS> <v4-port-session-addr>::= <LOCAL_IPV4_ADDRESS> <LOCAL_TRANSPORT_PORT> <REMOTE_IPV4_ADDRESS> <REMOTE_TRANSPORT_PORT> <BGP_Peer_Type> ::= [<ASBR>][<IBGP>] [<RR>][<RR-Client>] [<PE>][<CE>] [<BGP_VENDOR_types>] <BGP_VENDOR_type> ::= ... <BGP_MAX_PREFIX> ::= INTEGER; <BGP_Peer_create> ::= <Not_I2RS_Created_Peer> | <I2RSCLIENT_BGP_PEER_CREATE_REQUEST> | <I2RSAGENT_REJECTS_BGP_PEER_CREATE> | <I2RSAGENT_ATTEMPTS_BGP_INSTANCE_CREATE> | <I2RSAGENT_FAILS_BGP_INSTANCE_CREATE> | <I2RSAGENT_CREATED_BGP_PEER> /* details on the bgp_route_list are * contained in the bgp route section */ <bgp_rib_in > ::= <bgp-route-list> /* Adj-RIB-IN */ <bgp_rib_out > ::= <bgp-route-list> /* Adj-RIB-OUT */ /* details on the Policy_set_name and * Policy_set are imported from * draft-i2rs-hares-info-model-policy */ <bgp_policy_in> ::= <Policy_set_name>; <bgp_policy_out> ::= <Policy_set_name>; <bgp_policy_in_pset> ::= <Policy_set>; <bgp_policy_out_pset> ::= <Policy_set>; <Peer_state_info>::= <Peer_current_state > [<Peer_Last_state>] [<Peer_Received_Route_Cnt>] [<Peer_Send_Route_Cnt>] [<PEER_DOWN_REASON>] [<Peer_received_route_cnt>] [<Peer_sent_route_cnt>] [<Peer_prefix_high>] [<Peer_prefix_low>] [<Peer_perfix_ave>] [<Peer_prefix_time>] [<Peer_PREFIX_MAX>] [<publish_version>] <Peer_current_state> ::= < Established > | <IDLE> | < connect > | <active> | < open_send > | <open_confirm> <Peer_Last_state> ::= < Established > | <IDLE> | < connect > | <active> | < open_send > | <open_confirm> <PEER_DOWN_REASON> ::= <ERROR CODE> [< ERROR SUB CODE>] <ERROR_CODE> ::= <1: Message_Header_Error> | <2: OPEN_Message_Error> | <3: UPDATE_Message_Error> | <4: Hold_Timer_Expired> | <5: Finite_State_Machine_Error > | <6: Cease > | <7: Route_Refresh_Error > <ERROR_SUB_CODE>::= <HEAD_ERROR_SUB_CODE> | <OPEN_ERROR_SUB_CODE> | <UPDATE_ERROR_SUB_CODE> HEAD_ERROR_SUB_CODE> ::= <1 _ Connection_Not_Synchronized> | <2 _ Bad_Message_Length> | <3 _ Bad_Message_Type> <OPEN_ERROR_SUB_CODE> ::= <1 _ Unsupported Version Number> | <2 _ Bad_Peer_AS> | <3 _ Bad_BGP_Identifier> | <4 _ Unsupported_Optional_Parameter> | <5 _ Deprecated_see_Appendix_A> | <6 _ Unacceptable_Hold_Time> <UPDATE_ERROR_SUB_CODE> ::= <1_ Malformed Attribute List> | <2_Unrecognized Well_known Attribute> | <3 _ Missing_Well_known_Attribute> | <4 _ Attribute_Flags_Error> | <5 _ Attribute_Length_Error> | <6 _ Invalid_ORIGIN_Attribute> | <7 _ Deprecated_see_Appendix A> | <8 _ Invalid_NEXT_HOP_Attribute> | <9 _ Optional_Attribute_Error> | <10 _ Invalid_Network_Field> | <11 _ Malformed_AS_PATH> < Route_Refresh_ERROR_SUB_CODE> ::= <1_Invalid_Message_Length > <Peer_received_route_cnt> ::= COUNTER-64; <Peer_sent_route_cnt> ::= COUNTER-64: <Peer_prefix_high> ::= COUNTER-64; <Peer_prefix_low> ::= COUNTER-64; <Peer_perfix_ave> ::= COUNTER-64; <Peer_prefix_time> ::= COUNTER-64; <Peer_PREFIX_MAX> ::= COUNTER-64; <publish_version> ::= COUNTER-64;
RBNF for the BGP Peer portion of BGP IM
The routes associated with each BGP instance are the BGP local RIB, the AdjRIBIn, and the AdjRIBOut. The BGP local RIB is described below. The AdjRIBIn is the bgp_rib_in described in the BGP_Peer section. The policy that sets preferences on the routes received by the peer is identified by the Peer_policy_in (an policy set name), and fully readable by the Peer_policy_in_pset (policy set pointer) entry.
The AdjRIBOut is contained in bgp_rib_out (a route list) described in the BGP Peer Section. The Policy associated with the AdjRIBOut is identified by the Peer_policy_out (a policy set name) and fully readable by the Peer_policy_out_pset (policy set pointer).
The BGP Local RIB listed below may be created and stored as a prefix tree, but described below as a bgp_route-list for full transmission from the I2RS Client to the I2RS Agent. The bgp route list has a sequence of bgp_routes with the following elements:
The BGP Local RIB Entries are:
/* bgp local rib */ <bgp_local_rib> ::= <bgp-route-list> <bgp-route-list> ::= (<bgp_route> ...) <bgp_route> ::= <BGP_ROUTE_TYPE> <bgp-route-prefix> <bgp-attribute-list> <bgp_route_create> <bgp_rt_state_info> <BGP_ROUTE_TYPE> ::= <BGP_ROUTE_TYPE_RD> | | <BGP_ROUTE_TYPE_IPV4> | <BGP_ROUTE_TYPE_IPV6> | <BGP_LABELED_IPV4> | <BGP_LABELED_IPV6> | <BGP_ROUTE_TYPE_FLOW> | <BGP_ROUTE_TYPE_EVPN> | <BGP_ROUTE_TYPE_MVPN> | <BGP_ROUTE_TYPE_VPLS> | <BGP_ROUTE_TYPE_BGP_LS> | <BGP_ROUTE_TYPE_VPLS> | <BGP_ROUTE_TYPE_L2VPN_SIGNALING_NLRI> | <BGP_RT_CONSTRAINT> | <PW_ROUTE> <bgp-route-prefix> ::= <ipv4_route> | <ipv6_route> | <VPN_IPV4_route> | <VPN_IPV6_route> | <Labeled_IPv4> | <Labeled_IPv6> | <FLOW_route> | <EVPN_route> /* draft-ietf-l2vp-evpn */ | <MVPN_route> /* RFC6514 */ | <MCAST_VPLS_route> /* RFC7117 */ | <MDT_NLRI> /* RFC6037 */ | <BGP_LS_route> /* draft-ietf-idr-ls-distribution */ | <VPLS_BGP_NLRI> /* RFC4761 */ | <L2VPN_SIGNALING_NLRI> /* RFC6064 */ | <RT_CONSTRAIN> /* RFC4684 */ | <PW_ROUTE> /* RFC7267 */ <bgp-attribute-list> ::=[<bgp_Origin>] [<bgp_ASPath>] [<bgp_Nexthop >] [<bgp_MED>] [<bgp_LocalPref> ] [<bgp_ATOMIC_AGGREGATE >] [<bgp_AGGREGATOR>] [<bgp_CommAttr >] [<bgp_ ExtCommAttr >] [<bgp_ ClusterList >] [<bgp_ORIGINATOR_ID>] <ROUTE_DISTINGUISHER> ::= <16-bit ASN: 32-bit-Number > | <32-bit IPv4_address:16-bit-Number > | <32-bit ASN:16-bit Number > <ipv4_route> ::= <IPV4_PREFIX_LENGTH> <IPV4_PREFIX> <ipv6_route> ::= <IPV6_PREFIX_LENGTH> <IPV6_PREFIX> <Labeled_IPv4> ::= <LENGTH> <MPLS_LABEL> <IPV4_PREFIX> <Labeled_IPv6> ::= <LENGTH> <MPLS_LABEL> <IPV6_PREFIX> <VPN_IPV4> ::= <LENGTH> <MPLS_LABEL> <ROUTE_DISTINGUISHER> <IPV4_PREFIX> <VPN_IPV6> ::= <LENGTH> <MPLS_LABEL> <ROUTE_DISTINGUISHER> <IPV6_PREFIX> <FLOW_route > ::=<flow_route_index> <acl> <EVPN_route> ::= (<MVPN_ROUTE_TYPE> (<EVPN_MAC> | <EVPN_AD> | <EVPN_INCLUSIVE> | <EVPN_ES>) <EVPN_ROUTE_TYPE> ::= <Ethernet_Auto_Discovery_route> | <MAC_advertisement_route> | <Inclusive_Multicast_route> | <Ethernet_Segment_route> <MVPN_route> ::= <MVPN_ROUTE_TYPE> (<ipv4_prefix> | <ipv6_prefix> ) <MVPN_ROUTE _TYPE> :: <Intra_AS I_PMSI AD route> | <Inter_AS_I_PMSI_AD route > | <S_PMSI_AD route> | <Leaf_AD route> | <Source_Active AD route> | <Shared_Tree_Join route> | <Source_Tree_Join route> | <Ethernet_Auto_Discovery route> | <MAC_Advertisement route> | <Inclusive_Multicast route> | < Ethernet_Segment route> <MCAST_VPLS_route> :: = <MVPN_ROUTE_TYPE> <Selective_Tree_AD_route> | *lt;Leaf_AD_route> /* MDT NLRI - IPv4 address that Identifies the PE * that originated this route. * The RD identifies the VRF in that PE. * The group address MUST be a IPv4 multicast * group address and it is used to build P-tunnel. * All PEs attached to given MVPN must specify * the same group address even if the group is * an SSM group. MDT-SAFIs do not carry RTs, and the group * address is used to associated a received * MDT-SAFI with a VRF. */ <MDT_NLRI> ::= <ROUTE_DISTINGUISHER> <IPv4-address> <Group Address> <BGPLS_ROUTE> ::= <BGPLS_ROUTE_TYPE> (<NODE_NLRI> | <LINK_NLRI> | <IPv4_Topology_Prefix_NLRI> | <IPv6_Topology_Prefix_NLRI>) <BGPLS_ROUTE_TYPE> ::= <NODE_NLRI route> | <LINK_NLRI route> | <IPv4_Topology_Prefix route> | <IPv6_Topology_Prefix route> /* VPLS_BGP_NLRI explanation * PE participating in the VPLS must have at least one VE ID. * VE IDs are typi8cally assigned by the network administrator * with a scope local to VPLS. Therefore the VE ID should * only belong to one PE unless the CE is multi-homed. * * if the PE is the VE, then it typical has one VE ID. * if the PE is connected to several u-PEs, it has a distinct * VE ID for each u-PE. The PE may additionally have a VE ID for * itself, if asks acts as a VE for that VPLS. * A label block with demultiplexer labels is * used to reach the VE ID. * A VPLS BGP NLRI has a VE ID, a VE Block offset (VBO), a * block offset size (VBS), and a Label base (LB). * Labels for local VE are (LB+VBS-1) and for the remote * (VBO+VBS-1). */ <VPLS_BGP_NLRI> ::= <ROUTE_DISTINGUISHER> <VE_ID> <VE_BlockOffset> <VE_BlockSize> <Label_Base> <L2VPN_SIGNALING_NLRI> ::= <ROUTE_DISTINGUISHER> <PE_addr> <RT_CONSTRAIN> ::= <origin as> <route target> /* LENGTH of PW_route is prefix length of Route Distinguisher + * Global_ID + Prefix + AC ID in bits * default PW route = x length * other: length is between 96-160 bits */ <PW_route> ::= <LENGTH> <ROUTE_DISTINGUISHER> <Global ID> <Prefix> <AC ID> <BGP_ROUTE_CREATE> ::= <Not-I2RS_ROUTE> | <I2RSCLIENT_CREATE_BGP_ROUTE> | <I2RSAGENT_FAILS_BGP_ROUTE_CREATE> | <I2RSAGENT_CREATED_BGP_ROUTE> | <I2RSAGENT_BGP_ROUTE_CREATE)> | <I2RSAGENT_REJECTS_BGP_ROUTE_CREATE> | <I2RSAGENT_ATTEMPTS_BGP_ROUTE_CREATE> | <I2RSAGENT_FAILS_BGP_ROUTE_CREATE> | <I2RSAGENT_CREATED_BGP_ROUTE> <bgp_state_info> ::= <rib_current_state> [<rib_last_state>] [<Rib_Rejected_REASON>] [<Not_Preferred>] <rib_current_state> ::= (< Active > | < InActive > ) | (< primary > | < backup >) [ < suppress > ] <rib_last_state> ::= (< Active > | < InActive > ) (<primary > | < backup >) [ < suppress > ] <Rib_Rejected_REASON> ::= <peer_withdraw> | <Policy-Results> | < Nexthop_Unreachable> | < Malformed_PEER_DOWN> | < Malformed_DISCARD> | < Malformed_IGNORE> <NOT_Preferred_REASON> ::= <peer_address> | <router_id> | <Cluster_list_length> | <IGP_METRIC> | <peer_type> | <origin> | <WEIGHT or PREFERRED_VALUE> | <LOCAL_PREFERENCE> | <ROUTE_TYPE> | <AS_PATH_LENGTH> | <MED>
The following is the RBNF for the BGP_LOCAL_RIB:
The BGP policy uses policy sets to define the policy for bgp_policy_in, bgp_policy_out, bgp_policy_in_rpset, and bgp_policy_out_rpset. Policy sets are defined in [I-D.hares-i2rs-info-model-policy].
Policy sets contain informational model definitions for Policy groups, Policy Rules, PBR IM, local-config IM. The first section below contains the RBNF for the Policy sets, Policy Groups, and Policy Rules. The second section below contains the RBNF for the BGP Policy. The first section below contains the RBNF for these models that is utilized by the BGP Info-Model (IM).
The BGP IM policy has policy for:
/* Role Tree Matches */ <BGP-IM_READ_list> ::= [<BGP-IM-Tree-Match ...] <BGP-IM_WRITE_list> ::= [<BGP-IM-Tree-Match ...] <BGP-IM-Tree-Match> ::= <BGP-IM-Tree-Match-protocol-instance> <BGP-IM-Match-Protocol-instance> ::= (<BGP_protocol> ...) /* Policy Rule Extensions for BGP */ <Policy-Rule_Match_Nodes_BGP-IM> ::= (<Policy-Rule_Match_node_BGP-IM> ...) <Policy-Rule_Match_Values_BGP-IM> ::= (<Policy-Rule_Match_value_BGP-IM> ...) <Policy-Rule_Match_operators_BGP-IM> ::= (<Policy-Rule_operators_BGP-IM> ...) <Policy-Rule_match_node_BGP-IM> ::= [<Policy-Rule_Match_acl> ] [<as_path_filter>] [<community_filter>] [<MED>] [<extcommunity_filter >] [<interface >] [<ipv4-route-list>] [<ipv6_rotue_list>] [<peer-address-list>] [<mpls_label >] [<rd_filter >] [<tag >] <Policy-Rule_Action_Vars_BGP-IM> ::= [<adc_path_list>] [<adc_comm_list>] [comm_mod_args] <acl> ::= <Policy-Rule_match <peer-address-list> ::= (Peer_Session_Address ...); <ipv4-route-list> ::= (<ipv4_route> ..) <ipv6-route-list> ::= (<ipv6_route> ..) <BGP_adc_path_list>:: = [<add_as_path_list> | <delete_as_path_list> <modify_as_path_list>] <adc_comm_list>::= [<add_community_list > | /* community list/ [ <delete_community_list >| <modify_community_list > <modify_MED >] <comm_mod_args>::= [<modify_next_hop >] [<modify_local_preference >] [<modify_mpls_label >] [<modify_origin >] [<modify_ip_dscp >] [<modify_preference >] [<modify_bgp_prefference_value>] [<modify_bgp_preference_weight>]
<RIB-IM_READ_list> ::= [<RIB-IM-Tree-Match ...] <RIB-IM_WRITE_list> ::= [<RIB-IM-Tree-Match ...] <RIB-IM-Tree-Match> ::= <RIB-IM-Match-routing-instance> <RIB-IM-Match-interface-list> <RIM-IM-Match-rib_list> <RIB-IM-match-route-list;
/* A few definitions imported from the policy set */ <policy_set> ::= <Policy_Set_Name> (<Policy_Group> ...) <Policy_Group> ::= <Policy_Group_Identity> <Policy_Group_Role> <Policy_Group_priority> <Policy_Group_precedence> (<Policy-Rule>....); [<Supporting-Policy_Group>] [<Policy-Group-Extensions>] <Policy_Rule> ::= <Policy-Rule_identity> <Policy-Rule_priority> <Policy-Rule_precedence> <Policy-Rule_Roles> (<Policy-Rule_Condition> <Policy-Rule_Action> ...) <Policy-Rule_Security_model> <Policy-Rule_Result> [<Policy_Rule_rule_extensions>] <Policy_Result> ::= <Policy_set_name> <Policy_Group_Identifier> <Policy_Rule_ID> <Policy_Action_Identifier> <Policy-Rule_Result> <Policy-Rule_Action_result> <Policy-Rule_identity> ::= <Rule-Name> [<Rule-Secure-Identity>] <Policy-Rule_priority> ::= INTEGER (0..500); <Policy-Rule_precedence> :;= INTEGER (0..500); <Policy-Rule_Roles> ::= (<Policy_Rule_Role> ...); <Policy-Rule_Condition> ::=<Policy-Rule_node> (<Policy-Rule_value> ...) <Policy-Rule_mode> [<Policy_Rule_Match_Operator>] [<Policy_Rule_Condition_extension>] <Policy-Rule_Role> ::=<RESOURCES> | <Policy_Rule_Scope> <RESOURCES> ::= [<I2RS_AGENT_RESOURCE>]
This section examines the grammar.
This will include a UML version of the grammar.
<BGP_protocol> ::= < Router ID > <AS Number> <protocol_status> <shutdown_protocol> <BGP_ROLE> <bgp-instance-list> <BGP_ROLE> ::= [<ASBR >] [ <PE>] [ < IBGP >] [< RR >] <protocol_status> ::= <sHUTDOWN> | <NO_SHUTDOWN> <shutdown_protocol> ::= <TRUE> | <FALSE> <bgp-instance-list> ::= (< BGP_INSTANCE > ...) /* BGP Instance */ <bgp-instance-list> ::= (< BGP_INSTANCE > ...) <BGP_INSTANCE> ::= <BGP_INSTANCE_NAME> <BGP_INSTANCE_CREATE> <BGP_INSTANCE_TYPE> <BGP_VENDOR_TYPE> <AFI> <SAFI> <bgp_local_rib> <bgp-peer-list> <BGP_INSTANCE_CREATE> ::= <Not-I2RS> | <I2RSCLIENT_CREATE_BGP_INSTANCE> | <I2RSAGENT_FAILS_BGP_INSTANCE_CREATE> | <I2RSAGENT_CREATED_BGP_INSTANCE> | <I2RSAGENT_BGP_INSTANCE_CREATE)> | <I2RSAGENT_REJECTS_BGP_INSTANCE_CREATE> | <I2RSAGENT_ATTEMPTS_BGP_INSTANCE_CREATE> | <I2RSAGENT_FAILS_BGP_INSTANCE_CREATE> | <I2RSAGENT_CREATED_BGP_INSTANCE> < BGP_INSTANCE_TYPE > ::= < BGP_IPV4_UNI > | < BGP_IPV4_MULTI > | < BGP_IPV4_L3VPN > | < BGP_IPV4_MVPN > | < BGP_VPLS > | < BGP_MDT > | < BGP_EVPN > | < BGP_LS > | < BGP_IPV4_MPLS_VPN > | < BGP_IPV4_MPLS_MVPN > | < BGP_Route_Target > | < BGP_IPV4_FLOW > | < BGP_IPV4_VPN_FLOW > | < BGP_IPV4_VRF_LIST > | < BGP_IPV6_VRF_LIST > | < BGP_IPV6_UNI > | < BGP_IPV6_VPNV6 > <AFI> ::= <IPV4> | <IPV6> < SAFI> ::= <UNICAST> | <MULTICAST> | < L3VPN > | <MPLS> | <MVPN> | < RT_CONSTRAIN >| <IPV4_FLOW_SPEC > | < VPNV4_FLOW_SPEC >| <CLNS_VPN > | < NG_MVPN >| < MDT_SAFI > /* BGP Peer information */ <bgp-peer-list> ::= (< BGP_peer > ...) <BGP_peer> ::= <BGP_PEER_NAME> <Peer_Session_Address> <BGP_PEER_TYPE> <PEER_MAX_PREFIX> <BGP_Peer_create> <bgp_rib_in> <bgp_rib_out> <Peer_policy_in> <Peer_policy_out> <Peer_policy_in_pset> <Peer_policy_out_pset> [<peer_state_info>] <BGP_PEER_NAME> ::= (alpha-numeric characters) <Peer_Session_Address> ::= [<v4-session-address>] | [<v6-session-address>] | [<v4-port-session-address>] <v4-session-address> ::= <LOCAL_IPV4_ADDRESS> <REMOTE_IPV4_ADDRESS> <v6-session-address>::= <LOCAL_IPV6_ADDRESS> <REMOTE_IPV6_ADDRESS> <v4-port-session-addr>::= <LOCAL_IPV4_ADDRESS> <LOCAL_TRANSPORT_PORT> <REMOTE_IPV4_ADDRESS> <REMOTE_TRANSPORT_PORT> <BGP_Peer_Type> ::= [<ASBR>][<IBGP>] [<RR>][<RR-Client>] [<PE>][<CE>] [<BGP_VENDOR_TYPES>] <BGP_VENDOR_TYPE> ::= ... <BGP_MAX_PREFIX> ::= INTEGER; <BGP_Peer_create> ::= <Not_I2RS_Created_Peer> | <I2RSCLIENT_BGP_PEER_CREATE_REQUEST> | <I2RSAGENT_REJECTS_BGP_PEER_CREATE> | <I2RSAGENT_ATTEMPTS_BGP_INSTANCE_CREATE> | <I2RSAGENT_FAILS_BGP_INSTANCE_CREATE> | <I2RSAGENT_CREATED_BGP_PEER> /* details on the bgp_route_list are * contained in the bgp route section */ <bgp_rib_in > ::= <bgp-route-list> /* Adj-RIB-IN */ <bgp_rib_out > ::= <bgp-route-list> /* Adj-RIB-OUT */ /* details on the Policy_set_name and * Policy_set are imported from * draft-i2rs-hares-info-model-policy */ <bgp_policy_in> ::= <Policy_set_name>; <bgp_policy_out> ::= <Policy_set_name>; <bgp_policy_in_pset> ::= <Policy_set>; <bgp_policy_out_pset> ::= <Policy_set>; <Peer_state_info>::= <Peer_current_state > [<Peer_Last_state>] [<Peer_Received_Route_Cnt>] [<Peer_Send_Route_Cnt>] [<PEER_DOWN_REASON>] [<Peer_received_route_cnt>] [<Peer_sent_route_cnt>] [<Peer_prefix_high>] [<Peer_prefix_low>] [<Peer_perfix_ave>] [<Peer_prefix_time>] [<Peer_PREFIX_MAX>] [<publish_version>] <Peer_current_state> ::= < Established > | <IDLE> | < connect > | <active> | < open_send > | <open_confirm> <Peer_Last_state> ::= < Established > | <IDLE> | < connect > | <active> | < open_send > | <open_confirm> <PEER_DOWN_REASON> ::= <ERROR_CODE> [< ERROR_SUB_CODE>] <ERROR_CODE> ::= <1: Message Header Error> | <2: OPEN Message Error> | <3: UPDATE Message Error> | <4: Hold Timer Expired> | <5: Finite State Machine Error > | <6: Cease > | <7: Route Refresh> <ERROR_SUB_CODE>::= <HEAD_ERROR_SUB_CODE> | <OPEN_ERROR_SUB_CODE> | <UPDATE_ERROR_SUB_CODE> <HEAD_ERROR SUB CODE> ::= < 1 _ Connection Not Synchronized> | <2 _ Bad Message Length> | <3 _ Bad Message Type> <OPEN_ERROR_SUB_CODE> ::= <1 _ Unsupported Version Number> | <2 _ Bad Peer AS> | <3 _ Bad BGP Identifier> | <4 _ Unsupported Optional Parameter> | <5 _ [Deprecated _ see Appendix A] > | <6 _ Unacceptable Hold Time> <UPDATE_ERROR_SUB_CODE> ::= <1 _ Malformed Attribute List> | <2 _ Unrecognized Well_known Attribute> | <3 _ Missing Well_known Attribute> | <4 _ Attribute Flags Error> | <5 _ Attribute Length Error> | <6 _ Invalid ORIGIN Attribute> | <7 _ [Deprecated _ see Appendix A] > | <8 _ Invalid NEXT_HOP Attribute> | <9 _ Optional Attribute Error> | <10 _ Invalid Network Field> | <11 _ Malformed AS_PATH> < Route_Refresh_ERROR_SUB_CODE> ::= <1_Invalid_Message_Length > <Peer_received_route_cnt> ::= COUNTER-64; <Peer_sent_route_cnt> ::= COUNTER-64: <Peer_prefix_high> ::= COUNTER-64; <Peer_prefix_low> ::= COUNTER-64; <Peer_perfix_ave> ::= COUNTER-64; <Peer_prefix_time> ::= COUNTER-64; <Peer_PREFIX_MAX> ::= COUNTER-64; <publish_version> ::= COUNTER-64; /* bgp local rib */ <bgp_local_rib> ::= <bgp-route-list> <bgp-route-list> ::= (<bgp_route> ...) <bgp_route> ::= <BGP_ROUTE_TYPE> <bgp-route-prefix> <bgp-attribute-list> <bgp_route_create> <bgp_rt_state_info> <BGP_ROUTE_TYPE> ::= <BGP_ROUTE_TYPE_RD> | | <BGP_ROUTE_TYPE_IPV4> | <BGP_ROUTE_TYPE_IPV6> | <BGP_LABELED_IPV4> | <BGP_LABELED_IPV6> | <BGP_ROUTE_TYPE_FLOW> | <BGP_ROUTE_TYPE_EVPN> | <BGP_ROUTE_TYPE_MVPN> | <BGP_ROUTE_TYPE_VPLS> | <BGP_ROUTE_TYPE_BGP_LS> | <BGP_ROUTE_TYPE_VPLS> | <BGP_ROUTE_TYPE_L2VPN_SIGNALING_NLRI> | <BGP_RT_CONSTRAINT> | <PW_ROUTE> <bgp-route-prefix> ::= <ipv4_route> | <ipv6_route> | <VPN_IPV4_route> | <VPN_IPV6_route> | <Labeled_IPv4> | <Labeled_IPv6> | <FLOW_route> | <EVPN_route> /* draft-ietf-l2vp-evpn */ | <MVPN_route> /* RFC6514 */ | <MCAST_VPLS_route> /* RFC7117 */ | <MDT_NLRI> /* RFC6037 */ | <BGP_LS_route> /* draft-ietf-idr-ls-distribution */ | <VPLS_BGP_NLRI> /* RFC4761 */ | <L2VPN_SIGNALING_NLRI> /* RFC6064 */ | <RT_CONSTRAIN> /* RFC4684 */ | <PW_ROUTE> /* RFC7267 */ <bgp-attribute-list> ::=[<bgp_Origin>] [<bgp_ASPath>] [<bgp_Nexthop >] [<bgp_MED>] [<bgp_LocalPref> ] [<bgp_ATOMIC_AGGREGATE >] [<bgp_AGGREGATOR>] [<bgp_CommAttr >] [<bgp_ ExtCommAttr >] [<bgp_ ClusterList >] [<bgp_ORIGINATOR_ID>] <ROUTE_DISTINGUISHER> ::= <16-bit ASN: 32-bit-Number > | <32-bit IPv4_address:16-bit-Number > | <32-bit ASN:16-bit Number > <ipv4_route> ::= <IPV4_PREFIX_LENGTH> <IPV4_PREFIX> <ipv6_route> ::= <IPV6_PREFIX_LENGTH> <IPV6_PREFIX> <Labeled_IPv4> ::= <LENGTH> <MPLS_LABEL> <IPV4_PREFIX> <Labeled_IPv6> ::= <LENGTH> <MPLS_LABEL> <IPV6_PREFIX> <VPN_IPV4> ::= <LENGTH> <MPLS_LABEL> <ROUTE_DISTINGUISHER> <IPV4_PREFIX> <VPN_IPV6> ::= <LENGTH> <MPLS_LABEL> <ROUTE_DISTINGUISHER> <IPV6_PREFIX> <FLOW_route > ::=<flow_route_index> <acl> <EVPN_route> ::= (<MVPN_ROUTE_TYPE> (<EVPN_MAC> | <EVPN_AD> | <EVPN_INCLUSIVE> | <EVPN_ES>) <EVPN_ROUTE_TYPE> ::= <Ethernet_Auto_Discovery_route> | <MAC_Advertisement_route> | <Inclusive_Multicast_route> | <Ethernet_Segment_route> <MVPN_route> ::= <MVPN_ROUTE_TYPE> (<ipv4_prefix> | <ipv6_prefix> ) <MVPN_ROUTE_TYPE> ::= <Intra_AS_I_PMSI_AD_route> | <Inter_AS_I_PMSI_AD_route > | <S_PMSI_AD_route> | <Leaf_AD_route> | <Source_Active_AD_route> | <Shared_Tree_Join_route> | <Source_Tree_Join_route> <MCAST_VPLS_route> :: = <MVPN_ROUTE_TYPE> <Selective_Tree_AD_route> | <Leaf_AD_route> /* MDT NLRI - IPv4 address that Identifies the PE * that originated this route. * The RD identifies the VRF in that PE. * The group address MUST be a IPv4 multicast * group address and it is used to build P-tunnel. * All PEs attached to given MVPN must specify * the same group address even if the group is * an SSM group. MDT-SAFIs do not carry RTs, and the group * address is used to associated a received * MDT-SAFI with a VRF. */ <MDT_NLRI> ::= <ROUTE_DISTINGUISHER> <IPV4_ADDRESS> <GROUP_ADDRESS> <BGPLS_ROUTE> ::= <BGPLS_ROUTE_TYPE> (<NODE_NLRI> | <LINK_NLRI> | <IPv4_Topology_Prefix_NLRI> | <IPv6_Topology_Prefix_NLRI>) <BGPLS_ROUTE_TYPE> ::= <NODE_NLRI_route> | <LINK_NLRI route> | <IPv4_Topology_Prefix route> | <IPv6_Topology_Prefix route> /* VPLS_BGP_NLRI explanation * PE participating in the VPLS must have at least one VE ID. * VE IDs are typi8cally assigned by the network administrator * with a scope local to VPLS. Therefore the VE ID should * only belong to one PE unless the CE is multi-homed. * * if the PE is the VE, then it typical has one VE ID. * if the PE is connected to several u-PEs, it has a distinct * VE ID for each u-PE. The PE may additionally have a VE ID for * itself, if asks acts as a VE for that VPLS. * A label block with demultiplexer labels is * used to reach the VE ID. * A VPLS BGP NLRI has a VE ID, a VE Block offset (VBO), a * block offset size (VBS), and a Label base (LB). * Labels for local VE are (LB+VBS-1) and for the remote * (VBO+VBS-1). */ <VPLS_BGP_NLRI< ::= <ROUTE_DISTINGUISHER> <VE_ID> <VE_BLOCKOFFSET> <VE_BLOCKSIZE> <LABEL_BASE> <L2VPN_SIGNALING_NLRI> ::= <ROUTE_DISTINGUISHER> <PE_ADDRESS> <RT_CONSTRAIN> ::= <ORIGIN_AS> <ROUTE_TARGET> /* LENGTH of PW_route is prefix length of Route Distinguisher + * Global_ID + Prefix + AC ID in bits * default PW route = x length * other: length is between 96-160 bits */ <PW_route> ::= <LENGTH> <ROUTE_DISTINGUISHER> <GLOBAL_ID> <PREFIX> <AC_ID> <BGP_ROUTE_CREATE> ::= <Not-I2RS_ROUTE> | <I2RSCLIENT_CREATE_BGP_ROUTE> | <I2RSAGENT_FAILS_BGP_ROUTE_CREATE> | <I2RSAGENT_CREATED_BGP_ROUTE> | <I2RSAGENT_BGP_ROUTE_CREATE)> | <I2RSAGENT_REJECTS_BGP_ROUTE_CREATE> | <I2RSAGENT_ATTEMPTS_BGP_ROUTE_CREATE> | <I2RSAGENT_FAILS_BGP_ROUTE_CREATE> | <I2RSAGENT_CREATED_BGP_ROUTE> <bgp_state_info> ::= <rib_current_state> [<rib_last_state>] [<Rib_Rejected_REASON>] [<Not_Preferred>] <rib_current_state> ::= (<Active> | <InActive> ) | (<primary> | <backup>) [ <suppress> ] <rib_last_state> ::= (<Active> | <InActive> ) (<primary> | <backup>) [ <suppress> ] <Rib_Rejected_REASON> ::= <peer_withdraw> | <Policy-Results> | < Nexthop_Unreachable> | < Malformed_PEER_DOWN> | < Malformed_DISCARD> | < Malformed_IGNORE> <NOT_Preferred_REASON> ::= <peer_address> | <router_id> | <Cluster_list_length> | <IGP_METRIC> | <peer_type> | <origin> | <weight or preferred_value> | < Local_Preference | < route_type > | <AS_PATH_LENGTH> | < MED > /* BGP Policy */ <BGP-IM_READ_list> ::= [<BGP-IM-Tree-Match ...] <BGP-IM_WRITE_list> ::= [<BGP-IM-Tree-Match ...] <BGP-IM-Tree-Match> ::= <BGP-IM-Tree-Match-protocol-instance> <BGP-IM-Match-Protocol-instance> ::= (<BGP_protocol> ...) /* Policy Rule Extensions for BGP */ <Policy-Rule_Match_Nodes_BGP-IM> ::= (<Policy-Rule_Match_node_BGP-IM> ...) <Policy-Rule_Match_Values_BGP-IM> ::= (<Policy-Rule_Match_value_BGP-IM> ...) <Policy-Rule_Match_operators_BGP-IM> ::= (<Policy-Rule_operators_BGP-IM> ...) <Policy-Rule_match_node_BGP-IM> ::= [<Policy-Rule_Match_acl> ] [<as-path-filter>] [<community-filter>] [<MED>] [<extcommunity-filter>] [<interface>] [<ipv4-route-list>] [<ipv6-rotue-list>] [<peer-address-list>] [<MPLS_LABEL>] [<rd-filter>] [<TAG>] <Policy-Rule_Action_Vars_BGP-IM> ::= [<adc_path_list>] [<adc_comm_list>] [comm_mod_args] <acl> ::= <Policy-Rule_match /* BGP policy_lists */ <peer-address-list> ::= (Peer_Session_Address ...); <ipv4-route-list> ::= (<ipv4_route> ..) <ipv6-route-list> ::= (<ipv6_route> ..) <BGP_adc_path_list>:: = [<add_as_path_list> | <delete_as_path_list> <modify_as_path_list>] <adc_comm_list>::= [<add_community_list> | /* community list */ [<delete_community_list>| <modify_community_list> <modify_med>] <comm_mod_args>::= [<modify_next_hop >] [<modify_local_preference>] [<modify_mpls_label>] [<modify_origin>] [<modify_ip_dscp>] [<modify_preference>] [<modify_bgp_prefference_value>] [<modify_bgp_preference_weight>]
This draft includes no request to IANA.
TBD.