12-21-2022 02:44 PM - last edited on 05-08-2023 11:03 AM by Paul Zimmerman
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?
Solved! Go to Solution.
01-05-2023 09:30 AM - edited 01-05-2023 09:32 AM
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#
01-05-2023 01:43 PM
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.
01-06-2023 10:27 AM
@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?
01-06-2023 04:52 PM
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.
01-10-2023 02:50 PM
@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:
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?
01-11-2023 10:45 AM
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.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide