<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: XRv9K NETCONF 1.1 in Tools</title>
    <link>https://community.cisco.com/t5/tools/xrv9k-netconf-1-1/m-p/3996430#M1974</link>
    <description>&lt;P&gt;Actually if I try to send RPC with&amp;nbsp;&lt;STRONG&gt;]]&amp;gt;]]&amp;gt;&lt;/STRONG&gt; at the end XRv9k will close the session because of wrong framing.&lt;BR /&gt;&lt;BR /&gt;The right way to do it in 1.1 is the following:&lt;/P&gt;&lt;PRE&gt;#85
&amp;lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&amp;gt;
&amp;lt;commit/&amp;gt;
&amp;lt;/rpc&amp;gt;
##&lt;/PRE&gt;&lt;P&gt;But any way it doesn't work I guess because XRv9K doesn't support openconfig-bgp model for the config =(&lt;/P&gt;</description>
    <pubDate>Tue, 10 Dec 2019 12:58:28 GMT</pubDate>
    <dc:creator>horseinthesky</dc:creator>
    <dc:date>2019-12-10T12:58:28Z</dc:date>
    <item>
      <title>XRv9K NETCONF 1.1</title>
      <link>https://community.cisco.com/t5/tools/xrv9k-netconf-1-1/m-p/3994839#M1970</link>
      <description>&lt;P&gt;Hello.&lt;BR /&gt;I'm experimenting with ydk-examples from&amp;nbsp;&lt;A href="https://github.com/CiscoDevNet/ydk-py-samples" target="_blank"&gt;https://github.com/CiscoDevNet/ydk-py-samples&lt;/A&gt;&amp;nbsp;and got stuck in something.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I'm trying to deploy this config on XRv9K&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;import logging

from ydk.services import CodecService, CRUDService
from ydk.providers import CodecServiceProvider, NetconfServiceProvider
from ydk.models.openconfig import openconfig_bgp as oc_bgp
from ydk.models.openconfig import openconfig_bgp_types as oc_bgp_types
from ydk.filters import YFilter

logger = logging.getLogger('ydk')
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                               "%(levelname)s - %(message)s"))
handler.setFormatter(formatter)
logger.addHandler(handler)

DEVICES = {
    'junos': {
        'ip': '10.10.30.4',
        'pass': 'Juniper'
    },
    'xr': {
        'ip': '10.10.30.5',
        'pass': 'admin'
    },
    'xe': {
        'ip': '10.10.30.6',
        'pass': 'admin'
    }
}


def config_bgp(bgp):
    """Add config data to bgp object."""
    # global configuration
    bgp.global_.config.as_ = 65001
    afi_safi = bgp.global_.afi_safis.AfiSafi()
    afi_safi.afi_safi_name = oc_bgp_types.IPV6UNICAST()
    afi_safi.config.afi_safi_name = oc_bgp_types.IPV6UNICAST()
    afi_safi.config.enabled = True
    bgp.global_.afi_safis.afi_safi.append(afi_safi)

    # configure IBGP peer group
    peer_group = bgp.peer_groups.PeerGroup()
    peer_group.peer_group_name = "EBGP"
    peer_group.config.peer_group_name = "EBGP"
    peer_group.config.peer_as = 65002
    peer_group.transport.config.local_address = "Loopback0"
    afi_safi = peer_group.afi_safis.AfiSafi()
    afi_safi.afi_safi_name = oc_bgp_types.IPV6UNICAST()
    afi_safi.config.afi_safi_name = oc_bgp_types.IPV6UNICAST()
    afi_safi.config.enabled = True
    # afi_safi.apply_policy.config.import_policy.append("POLICY3")
    # afi_safi.apply_policy.config.export_policy.append("POLICY1")
    peer_group.afi_safis.afi_safi.append(afi_safi)
    bgp.peer_groups.peer_group.append(peer_group)

    # configure IBGP neighbor
    neighbor = bgp.neighbors.Neighbor()
    neighbor.neighbor_address = '2001:db8:e:1::1'
    neighbor.config.neighbor_address = '2001:db8:e:1::1'
    neighbor.config.peer_group = "EBGP"
    bgp.neighbors.neighbor.append(neighbor)


if __name__ == '__main__':
    # provider = CodecServiceProvider(type='xml')
    # codec = CodecService()

    bgp = oc_bgp.Bgp()
    bgp.yfilter = YFilter.replace
    config_bgp(bgp)

    # print(codec.encode(provider, native))

    device = DEVICES['xe']

    provider = NetconfServiceProvider(
        address=device['ip'],
        port=830,
        username='admin',
        password=device['pass'],
        protocol='ssh'
    )
    crud = CRUDService()
    crud.create(provider, bgp)&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;I get this:&lt;/P&gt;&lt;PRE&gt;2019-12-06 17:40:48,225 - ydk - INFO - Path where models are to be downloaded: /home/horseinthesky/.ydk/10.10.30.5
2019-12-06 17:40:48,234 - ydk - INFO - Connected to 10.10.30.5 on port 830 using ssh with timeout of -1
2019-12-06 17:40:48,234 - ydk - INFO - Executing CRUD create operation on [openconfig-bgp:bgp]
2019-12-06 17:40:48,234 - ydk - INFO - Executing 'edit-config' RPC on [openconfig-bgp:bgp]
2019-12-06 17:40:48,285 - ydk - INFO - ============= Sending RPC to device =============
&amp;lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&amp;gt;&amp;lt;edit-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&amp;gt;
  &amp;lt;target&amp;gt;
    &amp;lt;candidate/&amp;gt;
  &amp;lt;/target&amp;gt;
  &amp;lt;config&amp;gt;&amp;lt;bgp xmlns="http://openconfig.net/yang/bgp" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="replace"&amp;gt;
  &amp;lt;global&amp;gt;
    &amp;lt;config&amp;gt;
      &amp;lt;as&amp;gt;65001&amp;lt;/as&amp;gt;
    &amp;lt;/config&amp;gt;
    &amp;lt;afi-safis&amp;gt;
      &amp;lt;afi-safi&amp;gt;
        &amp;lt;afi-safi-name xmlns:oc-bgp-types="http://openconfig.net/yang/bgp-types"&amp;gt;oc-bgp-types:IPV6_UNICAST&amp;lt;/afi-safi-name&amp;gt;
        &amp;lt;config&amp;gt;
          &amp;lt;afi-safi-name xmlns:oc-bgp-types="http://openconfig.net/yang/bgp-types"&amp;gt;oc-bgp-types:IPV6_UNICAST&amp;lt;/afi-safi-name&amp;gt;
          &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;
        &amp;lt;/config&amp;gt;
      &amp;lt;/afi-safi&amp;gt;
    &amp;lt;/afi-safis&amp;gt;
  &amp;lt;/global&amp;gt;
  &amp;lt;neighbors&amp;gt;
    &amp;lt;neighbor&amp;gt;
      &amp;lt;neighbor-address&amp;gt;2001:db8:e:1::1&amp;lt;/neighbor-address&amp;gt;
      &amp;lt;config&amp;gt;
        &amp;lt;peer-group&amp;gt;EBGP&amp;lt;/peer-group&amp;gt;
        &amp;lt;neighbor-address&amp;gt;2001:db8:e:1::1&amp;lt;/neighbor-address&amp;gt;
      &amp;lt;/config&amp;gt;
    &amp;lt;/neighbor&amp;gt;
  &amp;lt;/neighbors&amp;gt;
  &amp;lt;peer-groups&amp;gt;
    &amp;lt;peer-group&amp;gt;
      &amp;lt;peer-group-name&amp;gt;EBGP&amp;lt;/peer-group-name&amp;gt;
      &amp;lt;config&amp;gt;
        &amp;lt;peer-group-name&amp;gt;EBGP&amp;lt;/peer-group-name&amp;gt;
        &amp;lt;peer-as&amp;gt;65002&amp;lt;/peer-as&amp;gt;
      &amp;lt;/config&amp;gt;
      &amp;lt;transport&amp;gt;
        &amp;lt;config&amp;gt;
          &amp;lt;local-address&amp;gt;Loopback0&amp;lt;/local-address&amp;gt;
        &amp;lt;/config&amp;gt;
      &amp;lt;/transport&amp;gt;
      &amp;lt;afi-safis&amp;gt;
        &amp;lt;afi-safi&amp;gt;
          &amp;lt;afi-safi-name xmlns:oc-bgp-types="http://openconfig.net/yang/bgp-types"&amp;gt;oc-bgp-types:IPV6_UNICAST&amp;lt;/afi-safi-name&amp;gt;
          &amp;lt;config&amp;gt;
            &amp;lt;afi-safi-name xmlns:oc-bgp-types="http://openconfig.net/yang/bgp-types"&amp;gt;oc-bgp-types:IPV6_UNICAST&amp;lt;/afi-safi-name&amp;gt;
            &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;
          &amp;lt;/config&amp;gt;
        &amp;lt;/afi-safi&amp;gt;
      &amp;lt;/afi-safis&amp;gt;
    &amp;lt;/peer-group&amp;gt;
  &amp;lt;/peer-groups&amp;gt;
&amp;lt;/bgp&amp;gt;
&amp;lt;/config&amp;gt;
&amp;lt;/edit-config&amp;gt;
&amp;lt;/rpc&amp;gt;
2019-12-06 17:40:48,468 - ydk - INFO - ============= Received RPC from device =============
&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"&amp;gt;
  &amp;lt;rpc-error&amp;gt;
    &amp;lt;error-type&amp;gt;protocol&amp;lt;/error-type&amp;gt;
    &amp;lt;error-tag&amp;gt;unknown-namespace&amp;lt;/error-tag&amp;gt;
    &amp;lt;error-severity&amp;gt;error&amp;lt;/error-severity&amp;gt;
    &amp;lt;error-info&amp;gt;
      &amp;lt;bad-element&amp;gt;bgp&amp;lt;/bad-element&amp;gt;
      &amp;lt;bad-namespace&amp;gt;http://openconfig.net/yang/bgp&amp;lt;/bad-namespace&amp;gt;
    &amp;lt;/error-info&amp;gt;
  &amp;lt;/rpc-error&amp;gt;
&amp;lt;/rpc-reply&amp;gt;

2019-12-06 17:40:48,469 - ydk - ERROR - RPC error occurred:
&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"&amp;gt;
  &amp;lt;rpc-error&amp;gt;
    &amp;lt;error-type&amp;gt;protocol&amp;lt;/error-type&amp;gt;
    &amp;lt;error-tag&amp;gt;unknown-namespace&amp;lt;/error-tag&amp;gt;
    &amp;lt;error-severity&amp;gt;error&amp;lt;/error-severity&amp;gt;
    &amp;lt;error-info&amp;gt;
      &amp;lt;bad-element&amp;gt;bgp&amp;lt;/bad-element&amp;gt;
      &amp;lt;bad-namespace&amp;gt;http://openconfig.net/yang/bgp&amp;lt;/bad-namespace&amp;gt;
    &amp;lt;/error-info&amp;gt;
  &amp;lt;/rpc-error&amp;gt;
&amp;lt;/rpc-reply&amp;gt;

Traceback (most recent call last):
  File "openconfig_bgp.py", line 86, in &amp;lt;module&amp;gt;
    crud.create(provider, bgp)
  File "/usr/local/lib/python3.6/dist-packages/ydk/errors/error_handler.py", line 112, in helper
    return func(self, provider, entity, *args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/ydk/services/crud_service.py", line 49, in create
    return _crud_update(provider, entity, self._crud.create)
  File "/usr/local/lib/python3.6/dist-packages/ydk/services/crud_service.py", line 70, in _crud_update
    return crud_call(provider, entity)
  File "/usr/lib/python3.6/contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "/usr/local/lib/python3.6/dist-packages/ydk/errors/error_handler.py", line 82, in handle_runtime_error
    _raise(_exc)
  File "/usr/local/lib/python3.6/dist-packages/ydk/errors/error_handler.py", line 54, in _raise
    exec("raise exc from None")
  File "&amp;lt;string&amp;gt;", line 1, in &amp;lt;module&amp;gt;
ydk.errors.YServiceProviderError:  RPC error occurred; check log file for details
2019-12-06 17:40:48,536 - ydk - INFO - Disconnected from device&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If I set logging level to DEBUG I see that YDK is sending both base 1.0 and base 1.1 capabilities:&lt;/P&gt;&lt;PRE&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&amp;gt;
  &amp;lt;capabilities&amp;gt;
    &amp;lt;capability&amp;gt;urn:ietf:params:netconf:base:1.0&amp;lt;/capability&amp;gt;
    &amp;lt;capability&amp;gt;urn:ietf:params:netconf:base:1.1&amp;lt;/capability&amp;gt;
    &amp;lt;capability&amp;gt;urn:ietf:params:netconf:capability:writable-running:1.0&amp;lt;/capability&amp;gt;
    &amp;lt;capability&amp;gt;urn:ietf:params:netconf:capability:candidate:1.0&amp;lt;/capability&amp;gt;
    &amp;lt;capability&amp;gt;urn:ietf:params:netconf:capability:startup:1.0&amp;lt;/capability&amp;gt;
    &amp;lt;capability&amp;gt;urn:ietf:params:netconf:capability:rollback-on-error:1.0&amp;lt;/capability&amp;gt;
  &amp;lt;/capabilities&amp;gt;
&amp;lt;/hello&amp;gt;&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;XRv9K sending only base 1.1 capability:&lt;/P&gt;&lt;PRE&gt; &amp;lt;capabilities&amp;gt;
  &amp;lt;capability&amp;gt;urn:ietf:params:netconf:base:1.1&amp;lt;/capability&amp;gt;
  &amp;lt;capability&amp;gt;urn:ietf:params:netconf:capability:candidate:1.0&amp;lt;/capability&amp;gt;
  &amp;lt;capability&amp;gt;urn:ietf:params:netconf:capability:rollback-on-error:1.0&amp;lt;/capability&amp;gt;
  &amp;lt;capability&amp;gt;urn:ietf:params:netconf:capability:validate:1.1&amp;lt;/capability&amp;gt;
  &amp;lt;capability&amp;gt;urn:ietf:params:netconf:capability:confirmed-commit:1.1&amp;lt;/capability&amp;gt;
  &amp;lt;capability&amp;gt;urn:ietf:params:netconf:capability:notification:1.0&amp;lt;/capability&amp;gt;
  &amp;lt;capability&amp;gt;urn:ietf:params:netconf:capability:interleave:1.0&amp;lt;/capability&amp;gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So it is supposed that only 1.1 framing format is possible.&lt;BR /&gt;But in the output above I can see that YDK is sending edit-config RPC with base 1.0 namespace:&lt;/P&gt;&lt;PRE&gt;&amp;lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&amp;gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;How can I fix that?&lt;/P&gt;</description>
      <pubDate>Fri, 06 Dec 2019 14:50:41 GMT</pubDate>
      <guid>https://community.cisco.com/t5/tools/xrv9k-netconf-1-1/m-p/3994839#M1970</guid>
      <dc:creator>horseinthesky</dc:creator>
      <dc:date>2019-12-06T14:50:41Z</dc:date>
    </item>
    <item>
      <title>Re: XRv9K NETCONF 1.1</title>
      <link>https://community.cisco.com/t5/tools/xrv9k-netconf-1-1/m-p/3994962#M1971</link>
      <description>&lt;P&gt;The issue is not related to YANG-1.1 support. Look at the error message:&lt;/P&gt;&lt;PRE&gt;ydk.errors.YServiceProviderError:  RPC error occurred; check log file for details&lt;/PRE&gt;&lt;P&gt;And details in the log:&lt;/P&gt;&lt;PRE&gt;2019-12-06 17:40:48,468 - ydk - INFO - ============= Received RPC from device =============
&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"&amp;gt;
  &amp;lt;rpc-error&amp;gt;
    &amp;lt;error-type&amp;gt;protocol&amp;lt;/error-type&amp;gt;
    &amp;lt;error-tag&amp;gt;unknown-namespace&amp;lt;/error-tag&amp;gt;
    &amp;lt;error-severity&amp;gt;error&amp;lt;/error-severity&amp;gt;
    &amp;lt;error-info&amp;gt;
      &amp;lt;bad-element&amp;gt;bgp&amp;lt;/bad-element&amp;gt;
      &amp;lt;bad-namespace&amp;gt;http://openconfig.net/yang/bgp&amp;lt;/bad-namespace&amp;gt;
    &amp;lt;/error-info&amp;gt;
  &amp;lt;/rpc-error&amp;gt;
&amp;lt;/rpc-reply&amp;gt;&lt;/PRE&gt;&lt;P&gt;This means that Netconf does not know how to translate 'bgp' node to router configuration commands.&lt;/P&gt;&lt;P&gt;I think that BGP on Cisco routers can be configured only by using Cisco proprietary YANG models. The Cisco routers do not support openconfig models for device configuration; these models can be used only for reading configuration.&lt;/P&gt;</description>
      <pubDate>Fri, 06 Dec 2019 17:31:53 GMT</pubDate>
      <guid>https://community.cisco.com/t5/tools/xrv9k-netconf-1-1/m-p/3994962#M1971</guid>
      <dc:creator>yangorelik</dc:creator>
      <dc:date>2019-12-06T17:31:53Z</dc:date>
    </item>
    <item>
      <title>Re: XRv9K NETCONF 1.1</title>
      <link>https://community.cisco.com/t5/tools/xrv9k-netconf-1-1/m-p/3995075#M1972</link>
      <description>&lt;P&gt;I'll try to send the same RPC by hand tomorrow but for now, I am pretty confused about why YDK uses Netconf 1.0 framing to send RPC when the device said that it only capable of 1.0?!&lt;/P&gt;</description>
      <pubDate>Fri, 06 Dec 2019 20:31:53 GMT</pubDate>
      <guid>https://community.cisco.com/t5/tools/xrv9k-netconf-1-1/m-p/3995075#M1972</guid>
      <dc:creator>horseinthesky</dc:creator>
      <dc:date>2019-12-06T20:31:53Z</dc:date>
    </item>
    <item>
      <title>Re: XRv9K NETCONF 1.1</title>
      <link>https://community.cisco.com/t5/tools/xrv9k-netconf-1-1/m-p/3995146#M1973</link>
      <description>&lt;P&gt;As I understand the Netconf 1.0 and 1.1 uses the same framing; the version 1.1 just has some additional capabilities. More info about differences you can find &lt;A href="https://yumaworks.freshdesk.com/support/solutions/articles/1000227848-what-are-the-differences-between-netconf-1-0-and-1-1-" target="_self"&gt;here&lt;/A&gt;. Please do not confuse Netconf version and IETF YANG model namespaces. The last all have '*:base:1.0' namespaces defined in&amp;nbsp;&lt;A href="https://tools.ietf.org/html/rfc6241" target=""&gt;RFC 6241&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;The CRUD and Netconf Services implementation in YDK currently use only Netconf 1.0 capabilities.&amp;nbsp;However, the Netconf client, which is implemented in C and C++ code, does implement both 1.0 and 1.1 versions, meaning that the RPCs compliant with version 1.1 still can be successfully processed.&lt;/P&gt;&lt;P&gt;The YDK also includes Executor Service, which allows to build and execute RPCs based on &lt;EM&gt;&lt;STRONG&gt;ietf_netconf.yang&lt;/STRONG&gt;&lt;/EM&gt; model. That means, you can include into RPC &lt;STRONG&gt;any&lt;/STRONG&gt; constructs defined in the model. You can find multiple examples of how to use Executor Service in &lt;A href="https://github.com/CiscoDevNet/ydk-gen/blob/master/sdk/python/core/tests/test_sanity_executor_rpc.py" target="_self"&gt;unit tests&lt;/A&gt; included in&amp;nbsp;&lt;EM&gt;&lt;STRONG&gt;ydk-gen&lt;/STRONG&gt;&lt;/EM&gt; repository.&lt;/P&gt;</description>
      <pubDate>Fri, 06 Dec 2019 22:55:19 GMT</pubDate>
      <guid>https://community.cisco.com/t5/tools/xrv9k-netconf-1-1/m-p/3995146#M1973</guid>
      <dc:creator>yangorelik</dc:creator>
      <dc:date>2019-12-06T22:55:19Z</dc:date>
    </item>
    <item>
      <title>Re: XRv9K NETCONF 1.1</title>
      <link>https://community.cisco.com/t5/tools/xrv9k-netconf-1-1/m-p/3996430#M1974</link>
      <description>&lt;P&gt;Actually if I try to send RPC with&amp;nbsp;&lt;STRONG&gt;]]&amp;gt;]]&amp;gt;&lt;/STRONG&gt; at the end XRv9k will close the session because of wrong framing.&lt;BR /&gt;&lt;BR /&gt;The right way to do it in 1.1 is the following:&lt;/P&gt;&lt;PRE&gt;#85
&amp;lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&amp;gt;
&amp;lt;commit/&amp;gt;
&amp;lt;/rpc&amp;gt;
##&lt;/PRE&gt;&lt;P&gt;But any way it doesn't work I guess because XRv9K doesn't support openconfig-bgp model for the config =(&lt;/P&gt;</description>
      <pubDate>Tue, 10 Dec 2019 12:58:28 GMT</pubDate>
      <guid>https://community.cisco.com/t5/tools/xrv9k-netconf-1-1/m-p/3996430#M1974</guid>
      <dc:creator>horseinthesky</dc:creator>
      <dc:date>2019-12-10T12:58:28Z</dc:date>
    </item>
  </channel>
</rss>

