// 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-rib-impl { prefix bgp-rib-impl; revision-date 2016-06-06; } 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 2013-07-15; } import ietf-yang-types { prefix yang; revision-date 2013-07-15; } 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 rpc-context { prefix rpcx; revision-date 2013-06-17; } import odl-bgp-openconfig-spi-cfg { prefix bgp-oc-spi; revision-date 2015-09-25; } import odl-bgp-path-selection-mode { prefix bps; revision-date 2016-03-01;} import bgp-peer { prefix peer; revision-date 2016-06-06; } import bgp-stats-peer { prefix peer-stats; revision-date 2016-06-06; } import bgp-stats-rib-impl { prefix rib-impl-stats; revision-date 2016-06-06; } 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 "2016-03-30" { description "Updated to simplify reconnection strategy."; } revision "2013-04-09" { description "Initial revision"; } 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; } } } } } 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 incoming bgp connections. Uses BGP peer registry to accept or decline incoming 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 sal:dom-async-data-broker; } } } container target-rib { uses config:service-ref { refine type { mandatory true; config:required-identity rib-instance; } } } container bgp-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; } } } leaf application-rib-id { type rib:application-rib-id; mandatory true; } leaf bgp-peer-id { type bgp-t:bgp-id; 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 add-path { base "config:service-type"; config:java-class "org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.mp.capabilities.add.path.capability.AddressFamilies"; } identity add-path-impl { config:provided-service add-path; base config:module-type; config:java-name-prefix AddPathImpl; } 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'"; uses bgp-mp:bgp-table-type; } } augment "/config:modules/config:module/config:configuration" { case add-path-impl { when "/config:modules/config:module/config:type = 'add-path-impl'"; container address-family { uses config:service-ref { refine type { mandatory true; config:required-identity bgp-table-type; } } } leaf send-receive { type bgp-mp:send-receive; mandatory true; } } } augment "/config:modules/config:module/config:configuration" { case bgp-peer { when "/config:modules/config:module/config:type = 'bgp-peer'"; uses peer:bgp-peer-config; list advertized-table { key "type name"; uses config:service-ref { refine type { mandatory true; config:required-identity bgp-table-type; } } } list add-path { key "type name"; uses config:service-ref { refine type { config:required-identity add-path; } } } container rpc-registry { uses config:service-ref { refine type { mandatory false; config:required-identity mdsb:binding-rpc-registry; } } } 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; } } } } } 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"; uses peer-stats:bgp-peer-stats; } case rib-impl { when "/config:modules/config:module/config:type = 'rib-impl'"; uses rib-impl-stats:bgp-render-stats; } } 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 bgp-path-selection-mode { description "Service representing an address family + path selection mode."; base "config:service-type"; config:java-class "org.opendaylight.protocol.bgp.rib.impl.spi.BGPBestPathSelection"; } identity bgp-psm-impl { base config:module-type; config:provided-service bgp-path-selection-mode; config:java-name-prefix BGPPSMImpl; } augment "/config:modules/config:module/config:configuration" { case bgp-psm-impl { when "/config:modules/config:module/config:type = 'bgp-psm-impl'"; container path-address-family { uses config:service-ref { refine type { mandatory true; config:required-identity bgp-table-type; } } } container path-selection-mode { uses config:service-ref { refine type { mandatory true; config:required-identity bps:path-selection-mode-factory; } } } } } 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'"; uses bgp-rib-impl:bgp-rib-impl-identifiers; 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 data-provider { uses config:service-ref { refine type { mandatory true; config:required-identity mdsb:binding-async-data-broker; } } } container codec-tree-factory { uses config:service-ref { refine type { mandatory true; config:required-identity mdsb:binding-codec-tree-factory; } } } container dom-data-provider { uses config:service-ref { refine type { mandatory true; config:required-identity sal:dom-async-data-broker; } } } container openconfig-provider { uses config:service-ref { refine type { mandatory false; config:required-identity bgp-oc-spi:bgp-openconfig-provider; } } } list local-table { uses config:service-ref { refine type { mandatory true; config:required-identity bgp-table-type; } } } list rib-path-selection-mode { uses config:service-ref { refine type { config:required-identity bgp-path-selection-mode; } } } } } }