// vi: set smarttab et sw=4 tabstop=4: module odl-bgp-rib-impl-cfg { yang-version 1; namespace "urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl"; prefix "bgprib-impl"; import bgp-multiprotocol { prefix bgp-mp; revision-date 2013-09-19; } import bgp-rib { prefix rib; revision-date 2013-09-25; } import bgp-types { prefix bgp-t; revision-date 2013-09-19; } import odl-bgp-rib-cfg { prefix bgprib; revision-date 2013-07-01; } import odl-bgp-parser-spi-cfg { prefix bgpspi; revision-date 2013-11-15; } import odl-bgp-rib-spi-cfg { prefix ribspi; revision-date 2013-11-15; } import ietf-inet-types { prefix inet; revision-date 2010-09-24; } import opendaylight-md-sal-binding {prefix mdsb; revision-date 2013-10-28; } import opendaylight-md-sal-dom {prefix sal; revision-date 2013-10-28; } import netty { prefix netty; revision-date 2013-11-19; } import config { prefix config; revision-date 2013-04-05; } import protocol-framework { prefix pf; revision-date 2014-03-13; } import odl-tcpmd5-cfg { prefix tcpmd5; revision-date 2014-04-27; } import odl-tcpmd5-netty-cfg { prefix tcpmd5n; revision-date 2014-04-27; } import rpc-context { prefix rpcx; revision-date 2013-06-17; } organization "Cisco Systems, Inc."; contact "Robert Varga "; description "This module contains the base YANG definitions for BGP listener implementation. Copyright (c)2013 Cisco Systems, Inc. All rights reserved.; This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html"; revision "2013-04-09" { description "Initial revision"; } identity base-bgp-parser { base config:module-type; config:java-name-prefix BaseBGPParser; config:provided-service bgpspi:extension; } augment "/config:modules/config:module/config:configuration" { case base-bgp-parser { when "/config:modules/config:module/config:type = 'base-bgp-parser'"; } } identity bgp-dispatcher { description "Service representing a BGP Dispatcher."; base "config:service-type"; config:java-class "org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher"; } identity bgp-dispatcher-impl { base config:module-type; config:provided-service bgp-dispatcher; config:java-name-prefix BGPDispatcherImpl; } augment "/config:modules/config:module/config:configuration" { case bgp-dispatcher-impl { when "/config:modules/config:module/config:type = 'bgp-dispatcher-impl'"; container bgp-extensions { uses config:service-ref { refine type { mandatory true; config:required-identity bgpspi:consumer-extensions; } } } container boss-group { uses config:service-ref { refine type { mandatory true; config:required-identity netty:netty-threadgroup; } } } container worker-group { uses config:service-ref { refine type { mandatory true; config:required-identity netty:netty-threadgroup; } } } container md5-channel-factory { uses config:service-ref { refine type { mandatory false; config:required-identity tcpmd5n:md5-channel-factory; } } } container md5-server-channel-factory { uses config:service-ref { refine type { mandatory false; config:required-identity tcpmd5n:md5-server-channel-factory; } } } } } identity base-bgp-rib { base config:module-type; config:provided-service ribspi:extension; config:java-name-prefix BaseBGPRIB; } augment "/config:modules/config:module/config:configuration" { case base-bgp-rib { when "/config:modules/config:module/config:type = 'base-bgp-rib'"; } } identity rib-instance { description "Service representing a RIB instance"; base "config:service-type"; config:java-class "org.opendaylight.protocol.bgp.rib.impl.spi.RIB"; } identity bgp-peer-registry { description "Registry of BGP peers. Every new BGP in/out connection looks for peers to handle bgp messages in this registry"; base "config:service-type"; config:java-class "org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry"; } identity strict-bgp-peer-registry { description "Registry of BGP peers that allows only one connection per 2 peers. Uses IP address for Peer identification and BGP Ids to resolve duplicate connections"; config:provided-service bgp-peer-registry; base config:module-type; config:java-name-prefix StrictBgpPeerRegistry; } augment "/config:modules/config:module/config:configuration" { case strict-bgp-peer-registry { when "/config:modules/config:module/config:type = 'strict-bgp-peer-registry'"; } } identity bgp-peer { description "BGP peer instance."; base config:module-type; config:java-name-prefix BGPPeer; } identity bgp-peer-acceptor { description "BGP peer acceptor that handles incomming bgp connections. Uses BGP peer registry to accept or decline incomming connections"; base config:module-type; config:java-name-prefix BGPPeerAcceptor; } augment "/config:modules/config:module/config:configuration" { case bgp-peer-acceptor { when "/config:modules/config:module/config:type = 'bgp-peer-acceptor'"; leaf binding-address { description "IP address to bind to"; type inet:ip-address; default "0.0.0.0"; } leaf binding-port { description "Port to bind to"; type inet:port-number; default "179"; } container accepting-bgp-dispatcher { uses config:service-ref { refine type { mandatory true; config:required-identity bgp-dispatcher; } } } container accepting-peer-registry { uses config:service-ref { refine type { mandatory true; config:required-identity bgp-peer-registry; } } } } } identity bgp-application-peer { description "Application peer handler which handles translation from custom RIB into local RIB"; base config:module-type; config:java-name-prefix BGPApplicationPeer; } augment "/config:modules/config:module/config:configuration" { case bgp-application-peer { when "/config:modules/config:module/config:type = 'bgp-application-peer'"; container data-broker { uses config:service-ref { refine type { mandatory true; config:required-identity mdsb:binding-async-data-broker; } } } container target-rib { uses config:service-ref { refine type { mandatory true; config:required-identity rib-instance; } } } leaf application-rib-id { type rib:application-rib-id; mandatory true; } leaf bgp-peer-id { type inet:ipv4-address; mandatory true; } } } identity bgp-table-type { description "Service representing a AFI/SAFI pair"; base "config:service-type"; config:java-class "org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType"; } identity bgp-table-type-impl { description "Simple provider for bgp-table-type."; config:provided-service bgp-table-type; base config:module-type; config:java-name-prefix BGPTableTypeImpl; } augment "/config:modules/config:module/config:configuration" { case bgp-table-type-impl { when "/config:modules/config:module/config:type = 'bgp-table-type-impl'"; leaf afi { type identityref { base bgp-t:address-family; } mandatory true; } leaf safi { type identityref { base bgp-t:subsequent-address-family; } mandatory true; } } } augment "/config:modules/config:module/config:configuration" { case bgp-peer { when "/config:modules/config:module/config:type = 'bgp-peer'"; leaf host { description "Remote host IP address"; type inet:ip-address; mandatory true; } leaf port { description "Remote host port"; type inet:port-number; default 179; } leaf holdtimer { type int16; default 180; } leaf initiate-connection { description "If true, connection will be initiated right away from current device. If not, the peer will only be registered to peer registry and available for incomming bgp connections."; type boolean; default true; } list advertized-table { key "type name"; uses config:service-ref { refine type { mandatory true; config:required-identity bgp-table-type; } } } leaf remote-as { description "Expected remote AS number. If not present, it is assumed to be the same as our local AS number."; type uint32; } leaf password { type tcpmd5:rfc2385-key; description "RFC2385 shared secret"; } container rib { uses config:service-ref { refine type { mandatory true; config:required-identity rib-instance; } } } container peer-registry { description "BGP peer registry where current instance of BGP peer will be registered."; uses config:service-ref { refine type { // FIXME backwards compatibility. If not configured, GLOBAL instance is used mandatory false; config:required-identity bgp-peer-registry; } } } } } grouping message-state { leaf count { description "Total number of BGP messages."; type uint32; default 0; } leaf timestamp { description "The BGP message timestamp (seconds)."; type uint32; default 0; } } grouping message-stats { container received { description "The received BGP messages statistics."; uses message-state; } container sent { description "The sent BGP messages statistics."; uses message-state; } } grouping error { leaf code { description "The BGP error code."; type uint8; default 0; } leaf sub-code { description "The BGP error sub-code."; type uint8; default 0; } } grouping preferences { leaf bgp-id { description "The BGP Identifier."; type string; default ""; } leaf address { description "The IP address of BGP connection."; type string; default ""; } leaf port { description "The port for connection between the BGP peers."; type uint16; default 0; } leaf as { description "Autonomous system number."; type uint32; default 0; } leaf holdtime { description "Time interval (in seconds) for HoldTimer proposed by the peer."; type uint16; default 0; } leaf four-octet-as-capability { description "The BGP peer 4 byte AS numbers support capability."; type boolean; default "false"; } leaf gr-capability { description "BGP graceful restart support capability."; type boolean; default "false"; } list advertized-table-types { description "The BGP Table-type capabilities advertized by the BGP peer."; leaf afi { description "Address Family Identifier."; type string; default ""; } leaf safi { description "Subsequent Address Family Identifier."; type string; default ""; } } } identity peer-rpc; augment "/config:modules/config:module/config:state" { case bgp-peer { when "/config:modules/config:module/config:type = 'bgp-peer'"; rpcx:rpc-context-instance "peer-rpc"; container bgp-peer-state { list route-table { leaf table-type { description "The table name - composed of AFI and SAFI."; type string; } leaf routes-count { description "The total number of routes in table."; type uint32; default 0; } } leaf session-established-count { description "The total number of time the BGP session was transitioned to Up state."; type uint32; default 0; } } container bgp-session-state { leaf session-state { description "The BGP peer connection state."; type string; } leaf session-duration { description "The session duration (time formated d:HH:mm:ss)."; type string; } leaf holdtime-current { description "Time interval (in seconds) for HoldTimer established with the peer."; type uint16; default 0; } leaf keepalive-current { description "Time interval (in seconds) for KeepAlive established with the peer."; type uint16; default 0; } container speaker-preferences { description "The BGP speaker preferences, to which this BGP peer is connected."; uses preferences; } container peer-preferences { description "The BGP peer preferences."; uses preferences; } container messages-stats { description "The BGP messages statistics."; container total-msgs { description "The statistics for all received/sent BGP messages."; uses message-stats; } container keep-alive-msgs { description "The statistics for received/sent BGP Keep-Alive messages."; uses message-stats; } container update-msgs { description "The statistics for received/sent BGP Update messages."; uses message-stats; } container error-msgs { container error-received { description "The received BGP Error (notification) messages statistics."; uses message-state; uses error; } container error-sent { description "The sent BGP Error (notification) messages statistics."; uses message-state; uses error; } } } } } } rpc reset-session { description "Restart the session between BGP peers"; input { uses rpcx:rpc-context-ref { refine context-instance { rpcx:rpc-context-instance peer-rpc; } } } } rpc reset-stats { description "Reset the BGP peer statistics."; input { uses rpcx:rpc-context-ref { refine context-instance { rpcx:rpc-context-instance peer-rpc; } } } } identity rib-impl { base config:module-type; config:provided-service bgprib:rib; config:provided-service rib-instance; config:java-name-prefix RIBImpl; } augment "/config:modules/config:module/config:configuration" { case rib-impl { when "/config:modules/config:module/config:type = 'rib-impl'"; container extensions { uses config:service-ref { refine type { mandatory true; config:required-identity ribspi:consumer-extensions; } } } container bgp-dispatcher { uses config:service-ref { refine type { mandatory true; config:required-identity bgp-dispatcher; } } } container session-reconnect-strategy { uses config:service-ref { refine type { mandatory true; config:required-identity pf:reconnect-strategy-factory; } } } container tcp-reconnect-strategy { uses config:service-ref { refine type { mandatory true; config:required-identity pf:reconnect-strategy-factory; } } } container data-provider { uses config:service-ref { refine type { mandatory true; config:required-identity mdsb:binding-async-data-broker; } } } container dom-data-provider { uses config:service-ref { refine type { mandatory true; config:required-identity sal:dom-async-data-broker; } } } leaf local-as { description "Our local AS number. Needed by best selection path attribute."; type uint32; mandatory true; } leaf bgp-rib-id { description "Our local BGP identifier. Needed by best selection path attribute."; mandatory true; type inet:ipv4-address; } list local-table { uses config:service-ref { refine type { mandatory true; config:required-identity bgp-table-type; } } } leaf rib-id { description "Identifier of this RIB in local data store."; type rib:rib-id; mandatory true; } } } }