cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
1482
Views
15
Helpful
20
Replies

How to use ydk-cpp examples?

Mike Fisher
Level 1
Level 1

There are ydk-cpp examples posted at https://github.com/ygorelik/ydk-gen/tree/master/sdk/cpp/samples for Yang Development Kit (ydk) version 0.8.6.4.  The readme file is very vague.  It provides a command line syntax of how to run the application bgp_xr_write.  However, that application doesn't even seem to be an executable target in the CMakeLists.txt file.  Also, it looks like the example applications all require a device ip address to communicate with.  However, there is no example device provided or an explanation of where an example device can be found to use for testing the sample apps.  Can I use a simulated device (i.e. a software program) for trying out/testing these sample apps?  If so, where can I find a simulated device?

20 Replies 20

I did build the openconfig bundle per the instructions, see below.  I think that the problem is the REPO setting is incorrect.  Do I need to download a set of Yang models for the REPO setting?  If so, where would I get them from?  Sorry, I am new to Yang and the YDK.

 

 

root@07cd6a882237:~/ydk-gen# export REPO="~/yang-models/yang/vendor/cisco/xr/751"
root@07cd6a882237:~/ydk-gen# python generate.py -is --cpp --adhoc-bundle-name openconfig --adhoc-bundle \
> $REPO/openconfig-bgp.yang \
> $REPO/openconfig-bgp-types.yang \
> $REPO/openconfig-extensions.yang \
> $REPO/openconfig-bgp-common.yang \
> $REPO/openconfig-bgp-common-multiprotocol.yang \
> $REPO/openconfig-bgp-common-structure.yang \
> $REPO/openconfig-bgp-peer-group.yang \
> $REPO/openconfig-bgp-neighbor.yang \
> $REPO/openconfig-bgp-global.yang \
> $REPO/openconfig-types.yang \
> $REPO/openconfig-inet-types.yang \
> $REPO/openconfig-routing-policy.yang \
> $REPO/openconfig-yang-types.yang \
> $REPO/openconfig-interfaces.yang \
> $REPO/openconfig-policy-types.yang
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-bgp.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-bgp-types.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-extensions.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-bgp-common.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-bgp-common-multiprotocol.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-bgp-common-structure.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-bgp-peer-group.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-bgp-neighbor.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-bgp-global.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-types.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-inet-types.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-routing-policy.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-yang-types.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-interfaces.yang is not present in the directory /root/ydk-gen; skipping
File ~/yang-models/yang/vendor/cisco/xr/751/openconfig-policy-types.yang is not present in the directory /root/ydk-gen; skipping
Resolving file tmp2k8x1h8v.bundle --> /root/ydk-gen/gen-api/.cache/bundles
Resolving file ietf_0_1_5.json --> /root/ydk-gen/gen-api/.cache/bundles
Resolving file iana-crypt-hash.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file iana-if-type.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-diffserv-action.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-diffserv-classifier.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-diffserv-policy.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-diffserv-target.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-event-notifications.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-inet-types.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-interfaces-ext.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-interfaces.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-ipv4-unicast-routing.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-ipv6-unicast-routing.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-ip.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-key-chain.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-netconf-acm.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-netconf-monitoring.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-netconf-notifications.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-netconf-with-defaults.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-netconf.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-ospf.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-restconf-monitoring.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-routing.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-syslog-types.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-yang-library.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-yang-push.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-yang-smiv2.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file ietf-yang-types.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Resolving file policy-types.yang --> /root/ydk-gen/gen-api/.cache/models/ietf@0.1.5
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/iana-crypt-hash.yang. Module name: iana-crypt-hash. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/iana-if-type.yang. Module name: iana-if-type. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-diffserv-action.yang. Module name: ietf-diffserv-action. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-diffserv-classifier.yang. Module name: ietf-diffserv-classifier. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-diffserv-policy.yang. Module name: ietf-diffserv-policy. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-diffserv-target.yang. Module name: ietf-diffserv-target. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-event-notifications.yang. Module name: ietf-event-notifications. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-inet-types.yang. Module name: ietf-inet-types. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-interfaces-ext.yang. Module name: ietf-interfaces-ext. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-interfaces.yang. Module name: ietf-interfaces. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-ipv4-unicast-routing.yang. Module name: ietf-ipv4-unicast-routing. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-ipv6-unicast-routing.yang. Module name: ietf-ipv6-unicast-routing. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-ip.yang. Module name: ietf-ip. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-key-chain.yang. Module name: ietf-key-chain. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-netconf-acm.yang. Module name: ietf-netconf-acm. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-netconf-monitoring.yang. Module name: ietf-netconf-monitoring. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-netconf-notifications.yang. Module name: ietf-netconf-notifications. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-netconf-with-defaults.yang. Module name: ietf-netconf-with-defaults. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-netconf.yang. Module name: ietf-netconf. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-ospf.yang. Module name: ietf-ospf. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-restconf-monitoring.yang. Module name: ietf-restconf-monitoring. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-routing.yang. Module name: ietf-routing. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-syslog-types.yang. Module name: ietf-syslog-types. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-yang-library.yang. Module name: ietf-yang-library. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-yang-push.yang. Module name: ietf-yang-push. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-yang-smiv2.yang. Module name: ietf-yang-smiv2. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/ietf-yang-types.yang. Module name: ietf-yang-types. Revision: None
Parsing file /root/ydk-gen/gen-api/.cache/models/openconfig@0.1.0/ietf@0.1.5/policy-types.yang. Module name: policy-types. Revision: None
Copying /root/ydk-gen/sdk/cpp/packages to /root/ydk-gen/gen-api/cpp/openconfig-bundle

Created models archive: /root/ydk-gen/gen-api/cpp/openconfig-bundle/openconfig@0.1.0.tar.gz
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake System: Ubuntu
-- Found Doxygen: /usr/bin/doxygen (found version "1.8.13") found components:  doxygen missing components:  dot
-- Configuring done
-- Generating done
-- Build files have been written to: /root/ydk-gen/gen-api/cpp/openconfig-bundle/build

Successfully generated cpp code for openconfig-bundle


Compiling cpp package ...

Scanning dependencies of target ydk_openconfig
[ 33%] Building CXX object CMakeFiles/ydk_openconfig.dir/ydk/models/openconfig/generated_entity_lookup.cpp.o
[ 66%] Linking CXX static library libydk_openconfig.a
[ 66%] Built target ydk_openconfig
Scanning dependencies of target libydk_yang_untar
[100%] Unpacking openconfig@0.1.0.tar.gz
[100%] Built target libydk_yang_untar

Installing cpp package ...

[ 66%] Built target ydk_openconfig
[100%] Unpacking openconfig@0.1.0.tar.gz
[100%] Built target libydk_yang_untar
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/local/lib/libydk_openconfig.a
-- Installing: /usr/local/include/ydk_openconfig/bundle_info.hpp
-- Installing: /usr/local/share/openconfig@0.1.0/iana-crypt-hash.yang
-- Installing: /usr/local/share/openconfig@0.1.0/iana-if-type.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-diffserv-action.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-diffserv-classifier.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-diffserv-policy.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-diffserv-target.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-event-notifications.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-inet-types.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-interfaces-ext.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-interfaces.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-ipv4-unicast-routing.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-ipv6-unicast-routing.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-ip.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-key-chain.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-netconf-acm.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-netconf-monitoring.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-netconf-notifications.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-netconf-with-defaults.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-netconf.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-ospf.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-restconf-monitoring.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-routing.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-syslog-types.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-yang-library.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-yang-push.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-yang-smiv2.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ietf-yang-types.yang
-- Installing: /usr/local/share/openconfig@0.1.0/policy-types.yang
-- Installing: /usr/local/share/openconfig@0.1.0/ydk@2016-02-26.yang

Code generation and installation completed successfully!

Total time taken:  3 seconds

root@07cd6a882237:~/ydk-gen# 

 

 

Let's make it simple, run this command from ydk-gen directory, which will install full openconfig model bundle:

python generate.py --bu profiles/bundles/openconfig_0_1_9.json --cpp -is

For the repo you can get all the models from the GitHub https://github.com/YangModels/yang.

@ygorelik  Thank you for the suggestion.  That command worked and I got past the error that I posted.  However, I now get a similar error as follows:

root@07cd6a882237:~/ydk-gen/sdk/cpp/samples/build# cmake ..
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /root/ydk-gen/sdk/cpp/samples/build
root@07cd6a882237:~/ydk-gen/sdk/cpp/samples/build# 
root@07cd6a882237:~/ydk-gen/sdk/cpp/samples/build# 
root@07cd6a882237:~/ydk-gen/sdk/cpp/samples/build# 
root@07cd6a882237:~/ydk-gen/sdk/cpp/samples/build# make
Scanning dependencies of target bgp_routing_policy_create
[  4%] Building CXX object CMakeFiles/bgp_routing_policy_create.dir/bgp_routing_policy_create.cpp.o
[  8%] Building CXX object CMakeFiles/bgp_routing_policy_create.dir/args_parser.cpp.o
[ 12%] Linking CXX executable bgp_routing_policy_create
[ 12%] Built target bgp_routing_policy_create
Scanning dependencies of target bgp_xr_read
[ 16%] Building CXX object CMakeFiles/bgp_xr_read.dir/bgp_xr_read.cpp.o
/root/ydk-gen/sdk/cpp/samples/bgp_xr_read.cpp:22:10: fatal error: ydk_cisco_ios_xr/Cisco_IOS_XR_ipv4_bgp_cfg.hpp: No such file or directory
 #include <ydk_cisco_ios_xr/Cisco_IOS_XR_ipv4_bgp_cfg.hpp>
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
CMakeFiles/bgp_xr_read.dir/build.make:62: recipe for target 'CMakeFiles/bgp_xr_read.dir/bgp_xr_read.cpp.o' failed
make[2]: *** [CMakeFiles/bgp_xr_read.dir/bgp_xr_read.cpp.o] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/bgp_xr_read.dir/all' failed
make[1]: *** [CMakeFiles/bgp_xr_read.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
root@07cd6a882237:~/ydk-gen/sdk/cpp/samples/build# dirs

I suspect that this error means that I need to rebuild the Cisco_ios_xr bundle as well with a command similar to the one that you provided.  I'm not sure which .json file to use so I am trying the following command:

python generate.py --bu profiles/bundles/cisco-ios-xr-702.json --cpp -is

This command is taking a long time to complete.  Do you think that the .json configuration file that I chose will work?

Mike,

The full model set will take few hours to compile. Instead you need to build "adhoc" bundle for cisco_ios_xr, which takes few seconds. Please clone YANG model repository as suggested earlier then follow the documentation. 

Note. When setting REPO variable, please use full path to avoid yet another error.

@ygorelik  Thank you so much for your help.  After a few iterations of trial and error, I was able to get the sample apps to build and run per your new README file with a few modifications.  For instance, I did the following different:

  1. Used the provided Docker file to create an image.
  2. Downloaded the Yang Models from https://github.com/YangModels/yang.
  3. Created a container from the image and mounted a host folder containing the Yang Models.
  4. Used your suggestion for building the Openconfig bundle:  "python generate.py --bu profiles/bundles/openconfig_0_1_9.json --cpp -is"
  5. Used the Yang Models folder as the repo for building cisco_ios_xr bundler per your instructions.

Finally, I have a couple of suggestions regarding the YDK C++ sdk.  Where would be an appropriate place to log those?  Similarly, I would like to log my issues with getting the YDK to build on CentOS 8 stream.  Where should I log the build issue?

Mike,

If you have a real YDK issue that looks like a software defect, please open an issue on ydk-gen repository. If you are not sure that this is a defect, then it is better to open discussion on Cisco Community pages.