| /** |
| * @file test_lyb.c |
| * @author Michal Vasko <mvasko@cesnet.cz> |
| * @brief Cmocka tests for LYB binary data format. |
| * |
| * Copyright (c) 2020 CESNET, z.s.p.o. |
| * |
| * This source code is licensed under BSD 3-Clause License (the "License"). |
| * You may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * https://opensource.org/licenses/BSD-3-Clause |
| */ |
| #define _UTEST_MAIN_ |
| #include "utests.h" |
| |
| #include "hash_table.h" |
| #include "libyang.h" |
| |
| #define CHECK_PARSE_LYD(INPUT, OUT_NODE) \ |
| CHECK_PARSE_LYD_PARAM(INPUT, LYD_XML, LYD_PARSE_ONLY | LYD_PARSE_STRICT, 0, LY_SUCCESS, OUT_NODE) |
| |
| #define CHECK_LYD_STRING(MODEL, TEXT) \ |
| CHECK_LYD_STRING_PARAM(MODEL, TEXT, LYD_XML, LYD_PRINT_WITHSIBLINGS | LYD_PRINT_SHRINK) |
| |
| #define CHECK_PRINT_THEN_PARSE(DATA_XML) \ |
| { \ |
| struct lyd_node *tree_1; \ |
| struct lyd_node *tree_2; \ |
| char *xml_out; \ |
| CHECK_PARSE_LYD(DATA_XML, tree_1); \ |
| assert_int_equal(lyd_print_mem(&xml_out, tree_1, LYD_LYB, LYD_PRINT_WITHSIBLINGS), 0); \ |
| assert_int_equal(LY_SUCCESS, lyd_parse_data_mem(UTEST_LYCTX, xml_out, LYD_LYB, LYD_PARSE_ONLY | LYD_PARSE_STRICT, 0, &tree_2)); \ |
| assert_non_null(tree_2); \ |
| CHECK_LYD(tree_1, tree_2); \ |
| free(xml_out); \ |
| lyd_free_all(tree_1); \ |
| lyd_free_all(tree_2); \ |
| } |
| |
| static int |
| setup(void **state) |
| { |
| UTEST_SETUP; |
| assert_int_equal(LY_SUCCESS, ly_ctx_set_searchdir(UTEST_LYCTX, TESTS_DIR_MODULES_YANG)); |
| |
| return 0; |
| } |
| |
| static void |
| tests_leaflist(void **state) |
| { |
| const char *mod; |
| const char *data_xml; |
| |
| mod = |
| "module mod { namespace \"urn:test-leaflist\"; prefix m;" |
| " container cont {" |
| " presence \"\";" |
| " leaf-list ll {" |
| " type uint8;" |
| " }" |
| " }" |
| "}"; |
| UTEST_ADD_MODULE(mod, LYS_IN_YANG, NULL, NULL); |
| |
| data_xml = |
| "<cont xmlns=\"urn:test-leaflist\">\n" |
| "</cont>\n"; |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| |
| data_xml = |
| "<cont xmlns=\"urn:test-leaflist\">\n" |
| " <ll>1</ll>\n" |
| "</cont>\n"; |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| |
| data_xml = |
| "<cont xmlns=\"urn:test-leaflist\">\n" |
| " <ll>1</ll>\n" |
| " <ll>2</ll>\n" |
| "</cont>\n"; |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| } |
| |
| static void |
| tests_list(void **state) |
| { |
| const char *mod; |
| const char *data_xml; |
| |
| mod = |
| "module mod { namespace \"urn:test-list\"; prefix m;" |
| " container cont {" |
| " presence \"\";" |
| " list lst {" |
| " key \"lf\";" |
| " leaf lf {" |
| " type uint8;" |
| " }" |
| " }" |
| " }" |
| "}"; |
| UTEST_ADD_MODULE(mod, LYS_IN_YANG, NULL, NULL); |
| |
| data_xml = |
| "<cont xmlns=\"urn:test-list\">\n" |
| " <lst>" |
| " <lf>1</lf>" |
| " </lst>" |
| "</cont>\n"; |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| |
| data_xml = |
| "<cont xmlns=\"urn:test-list\">\n" |
| " <lst>" |
| " <lf>1</lf>" |
| " <lf>2</lf>" |
| " </lst>" |
| "</cont>\n"; |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| } |
| |
| static void |
| tests_any(void **state) |
| { |
| const char *mod; |
| const char *data_xml; |
| |
| mod = |
| "module mod { namespace \"urn:test-any\"; prefix m;" |
| " container cont {" |
| " presence \"\";" |
| " anyxml anxml;\n" |
| " }" |
| "}"; |
| UTEST_ADD_MODULE(mod, LYS_IN_YANG, NULL, NULL); |
| |
| data_xml = |
| "<cont xmlns=\"urn:test-any\">\n" |
| "</cont>\n"; |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| |
| data_xml = |
| "<cont xmlns=\"urn:test-any\">\n" |
| " <anxml><node>value</node></anxml>\n" |
| "</cont>\n"; |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| |
| data_xml = |
| "<cont xmlns=\"urn:test-any\">\n" |
| " <anxml><node1>value</node1></anxml>\n" |
| " <anxml><node2>value</node2></anxml>\n" |
| "</cont>\n"; |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| } |
| |
| static void |
| test_ietf_interfaces(void **state) |
| { |
| const char *data_xml = |
| "<interfaces xmlns=\"urn:ietf:params:xml:ns:yang:ietf-interfaces\">\n" |
| " <interface>\n" |
| " <name>eth0</name>\n" |
| " <description>Ethernet 0</description>\n" |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:ethernetCsmacd</type>\n" |
| " <enabled>true</enabled>\n" |
| " <ipv4 xmlns=\"urn:ietf:params:xml:ns:yang:ietf-ip\">\n" |
| " <enabled>true</enabled>\n" |
| " <mtu>1500</mtu>\n" |
| " <address>\n" |
| " <ip>192.168.2.100</ip>\n" |
| " <prefix-length>24</prefix-length>\n" |
| " </address>\n" |
| " </ipv4>\n" |
| " </interface>\n" |
| " <interface>\n" |
| " <name>eth1</name>\n" |
| " <description>Ethernet 1</description>\n" |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:ethernetCsmacd</type>\n" |
| " <enabled>true</enabled>\n" |
| " <ipv4 xmlns=\"urn:ietf:params:xml:ns:yang:ietf-ip\">\n" |
| " <enabled>true</enabled>\n" |
| " <mtu>1500</mtu>\n" |
| " <address>\n" |
| " <ip>10.10.1.5</ip>\n" |
| " <prefix-length>16</prefix-length>\n" |
| " </address>\n" |
| " </ipv4>\n" |
| " </interface>\n" |
| " <interface>\n" |
| " <name>gigaeth0</name>\n" |
| " <description>GigabitEthernet 0</description>\n" |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:ethernetCsmacd</type>\n" |
| " <enabled>false</enabled>\n" |
| " </interface>\n" |
| "</interfaces>\n"; |
| |
| assert_non_null(ly_ctx_load_module(UTEST_LYCTX, "ietf-ip", NULL, NULL)); |
| assert_non_null(ly_ctx_load_module(UTEST_LYCTX, "iana-if-type", NULL, NULL)); |
| |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| } |
| |
| static void |
| test_origin(void **state) |
| { |
| const char *origin_yang = |
| "module test-origin {" |
| " namespace \"urn:test-origin\";" |
| " prefix to;" |
| " import ietf-origin {" |
| " prefix or;" |
| " }" |
| "" |
| " container cont {" |
| " leaf leaf1 {" |
| " type string;" |
| " }" |
| " leaf leaf2 {" |
| " type string;" |
| " }" |
| " leaf leaf3 {" |
| " type uint8;" |
| " }" |
| " }" |
| "}"; |
| const char *data_xml = |
| "<cont xmlns=\"urn:test-origin\">\n" |
| " <leaf1 xmlns:or=\"urn:ietf:params:xml:ns:yang:ietf-origin\" or:origin=\"or:default\">value1</leaf1>\n" |
| " <leaf2>value2</leaf2>\n" |
| " <leaf3 xmlns:or=\"urn:ietf:params:xml:ns:yang:ietf-origin\" or:origin=\"or:system\">125</leaf3>\n" |
| "</cont>\n"; |
| |
| UTEST_ADD_MODULE(origin_yang, LYS_IN_YANG, NULL, NULL); |
| assert_int_equal(LY_SUCCESS, lys_set_implemented(ly_ctx_get_module_latest(UTEST_LYCTX, "ietf-origin"), NULL)); |
| |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| } |
| |
| static void |
| test_statements(void **state) |
| { |
| const char *links_yang = |
| "module links {\n" |
| " yang-version 1.1;\n" |
| " namespace \"urn:module2\";\n" |
| " prefix mod2;\n" |
| "\n" |
| " identity just-another-identity;\n" |
| "\n" |
| " leaf one-leaf {\n" |
| " type string;\n" |
| " }\n" |
| "\n" |
| " list list-for-augment {\n" |
| " key keyleaf;\n" |
| "\n" |
| " leaf keyleaf {\n" |
| " type string;\n" |
| " }\n" |
| "\n" |
| " leaf just-leaf {\n" |
| " type int32;\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " leaf rleaf {\n" |
| " type string;\n" |
| " }\n" |
| "\n" |
| " leaf-list llist {\n" |
| " type string;\n" |
| " min-elements 0;\n" |
| " max-elements 100;\n" |
| " ordered-by user;\n" |
| " }\n" |
| "\n" |
| " grouping rgroup {\n" |
| " leaf rg1 {\n" |
| " type string;\n" |
| " }\n" |
| "\n" |
| " leaf rg2 {\n" |
| " type string;\n" |
| " }\n" |
| " }\n" |
| "}\n"; |
| |
| const char *statements_yang = |
| "module statements {\n" |
| " namespace \"urn:module\";\n" |
| " prefix mod;\n" |
| " yang-version 1.1;\n" |
| "\n" |
| " import links {\n" |
| " prefix mod2;\n" |
| " }\n" |
| "\n" |
| " identity random-identity {\n" |
| " base \"mod2:just-another-identity\";\n" |
| " base \"another-identity\";\n" |
| " }\n" |
| "\n" |
| " identity another-identity {\n" |
| " base \"mod2:just-another-identity\";\n" |
| " }\n" |
| "\n" |
| " typedef percent {\n" |
| " type uint8 {\n" |
| " range \"0 .. 100\";\n" |
| " }\n" |
| " units percent;\n" |
| " }\n" |
| "\n" |
| " container ice-cream-shop {\n" |
| " container employees {\n" |
| " list employee {\n" |
| " config true;\n" |
| " key id;\n" |
| " unique name;\n" |
| " min-elements 0;\n" |
| " max-elements 100;\n" |
| "\n" |
| " leaf id {\n" |
| " type uint64;\n" |
| " mandatory true;\n" |
| " }\n" |
| "\n" |
| " leaf name {\n" |
| " type string;\n" |
| " }\n" |
| "\n" |
| " leaf age {\n" |
| " type uint32;\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " container random {\n" |
| " choice switch {\n" |
| " case a {\n" |
| " leaf aleaf {\n" |
| " type string;\n" |
| " default aaa;\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " case c {\n" |
| " leaf cleaf {\n" |
| " type string;\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " anyxml xml-data;\n" |
| " anydata any-data;\n" |
| " leaf-list leaflist {\n" |
| " type string;\n" |
| " min-elements 0;\n" |
| " max-elements 20;\n" |
| " ordered-by system;\n" |
| " }\n" |
| "\n" |
| " grouping group {\n" |
| " leaf g1 {\n" |
| " mandatory false;\n" |
| " type percent;\n" |
| " }\n" |
| "\n" |
| " leaf g2 {\n" |
| " type string;\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " uses group;\n" |
| " uses mod2:rgroup;\n" |
| "\n" |
| " leaf lref {\n" |
| " type leafref {\n" |
| " path \"/mod2:one-leaf\";\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " leaf iref {\n" |
| " type identityref {\n" |
| " base \"mod2:just-another-identity\";\n" |
| " }\n" |
| " }\n" |
| " }\n" |
| "\n" |
| " notification notif;\n" |
| "\n" |
| " augment \"/random\" {\n" |
| " leaf aug-leaf {\n" |
| " type string;\n" |
| " }\n" |
| " }\n" |
| "}\n"; |
| |
| const char *data_xml = |
| "<ice-cream-shop xmlns=\"urn:module\">\n" |
| " <employees>\n" |
| " <employee>\n" |
| " <id>0</id>\n" |
| " <name>John Doe</name>\n" |
| " <age>28</age>\n" |
| " </employee>\n" |
| " <employee>\n" |
| " <id>1</id>\n" |
| " <name>Dohn Joe</name>\n" |
| " <age>20</age>\n" |
| " </employee>\n" |
| " </employees>\n" |
| "</ice-cream-shop>\n" |
| "<one-leaf xmlns=\"urn:module2\">reference leaf</one-leaf>\n" |
| "<random xmlns=\"urn:module\">\n" |
| " <aleaf>string</aleaf>\n" |
| " <xml-data><anyxml>data</anyxml></xml-data>\n" |
| " <any-data><notif/></any-data>\n" |
| " <leaflist>l0</leaflist>\n" |
| " <leaflist>l1</leaflist>\n" |
| " <leaflist>l2</leaflist>\n" |
| " <g1>40</g1>\n" |
| " <g2>string</g2>\n" |
| " <aug-leaf>string</aug-leaf>\n" |
| " <rg1>string</rg1>\n" |
| " <rg2>string</rg2>\n" |
| " <lref>reference leaf</lref>\n" |
| " <iref>random-identity</iref>\n" |
| "</random>\n"; |
| |
| UTEST_ADD_MODULE(links_yang, LYS_IN_YANG, NULL, NULL); |
| UTEST_ADD_MODULE(statements_yang, LYS_IN_YANG, NULL, NULL); |
| |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| } |
| |
| static void |
| test_opaq(void **state) |
| { |
| const char *nc_feats[] = {"writable-running", NULL}; |
| const char *data_xml = |
| "<edit-config xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n" |
| " <target>\n" |
| " <running/>\n" |
| " </target>\n" |
| " <config>\n" |
| " <top xmlns=\"urn:ed\">\n" |
| " <first>TestFirst</first>\n" |
| " </top>\n" |
| " </config>\n" |
| "</edit-config>\n"; |
| struct ly_in *in; |
| struct lyd_node *tree_1; |
| struct lyd_node *tree_2; |
| char *xml_out; /* tree_2 */ |
| LY_ERR rc; |
| |
| assert_non_null(ly_ctx_load_module(UTEST_LYCTX, "ietf-netconf", NULL, nc_feats)); |
| |
| ly_in_new_memory(data_xml, &in); |
| rc = lyd_parse_op(UTEST_LYCTX, NULL, in, LYD_XML, LYD_TYPE_RPC_YANG, &tree_1, NULL); |
| ly_in_free(in, 0); |
| assert_int_equal(rc, LY_SUCCESS); |
| |
| assert_int_equal(lyd_print_mem(&xml_out, tree_1, LYD_LYB, LYD_PRINT_WITHSIBLINGS), 0); |
| |
| ly_in_new_memory(xml_out, &in); |
| rc = lyd_parse_op(UTEST_LYCTX, NULL, in, LYD_LYB, LYD_TYPE_RPC_YANG, &tree_2, NULL); |
| ly_in_free(in, 0); |
| assert_int_equal(rc, LY_SUCCESS); |
| |
| /* compare models */ |
| CHECK_LYD(tree_1, tree_2); |
| |
| /* clean */ |
| free(xml_out); |
| lyd_free_all(tree_1); |
| lyd_free_all(tree_2); |
| } |
| |
| static void |
| test_collisions(void **state) |
| { |
| char *counters_yang, *data_xml; |
| |
| counters_yang = malloc(32768); |
| strcpy(counters_yang, |
| "module counters {\n" |
| " namespace \"urn:counters\";\n" |
| " prefix c;\n" |
| "\n" |
| " container stats {\n"); |
| strcat(counters_yang, |
| " leaf counter1 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter2 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter3 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter4 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter5 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter6 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter7 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter8 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter9 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter10 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter11 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter12 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter13 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter14 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter15 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter16 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter17 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter18 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter19 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter20 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter21 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter22 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter23 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter24 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter25 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter26 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter27 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter28 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter29 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter30 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter31 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter32 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter33 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter34 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter35 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter36 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter37 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter38 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter39 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter40 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter41 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter42 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter43 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter44 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter45 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter46 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter47 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter48 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter49 {\n" |
| " type uint64;\n" |
| " }\n"); |
| strcat(counters_yang, |
| " leaf counter50 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter51 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter52 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter53 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter54 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter55 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter56 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter57 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter58 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter59 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter60 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter61 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter62 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter63 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter64 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter65 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter66 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter67 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter68 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter69 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter70 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter71 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter72 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter73 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter74 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter75 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter76 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter77 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter78 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter79 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter80 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter81 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter82 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter83 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter84 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter85 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter86 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter87 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter88 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter89 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter90 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter91 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter92 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter93 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter94 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter95 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter96 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter97 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter98 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter99 {\n" |
| " type uint64;\n" |
| " }\n"); |
| strcat(counters_yang, |
| " leaf counter100 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter101 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter102 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter103 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter104 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter105 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter106 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter107 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter108 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter109 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter110 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter111 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter112 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter113 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter114 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter115 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter116 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter117 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter118 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter119 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter120 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter121 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter122 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter123 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter124 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter125 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter126 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter127 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter128 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter129 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter130 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter131 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter132 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter133 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter134 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter135 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter136 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter137 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter138 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter139 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter140 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter141 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter142 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter143 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter144 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter145 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter146 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter147 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter148 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter149 {\n" |
| " type uint64;\n" |
| " }\n"); |
| strcat(counters_yang, |
| " leaf counter150 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter151 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter152 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter153 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter154 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter155 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter156 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter157 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter158 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter159 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter160 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter161 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter162 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter163 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter164 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter165 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter166 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter167 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter168 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter169 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter170 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter171 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter172 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter173 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter174 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter175 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter176 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter177 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter178 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter179 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter180 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter181 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter182 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter183 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter184 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter185 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter186 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter187 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter188 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter189 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter190 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter191 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter192 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter193 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter194 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter195 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter196 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter197 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter198 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter199 {\n" |
| " type uint64;\n" |
| " }\n"); |
| strcat(counters_yang, |
| " leaf counter200 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter201 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter202 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter203 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter204 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter205 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter206 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter207 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter208 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter209 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter210 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter211 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter212 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter213 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter214 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter215 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter216 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter217 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter218 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter219 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter220 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter221 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter222 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter223 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter224 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter225 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter226 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter227 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter228 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter229 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter230 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter231 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter232 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter233 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter234 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter235 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter236 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter237 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter238 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter239 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter240 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter241 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter242 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter243 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter244 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter245 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter246 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter247 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter248 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter249 {\n" |
| " type uint64;\n" |
| " }\n"); |
| strcat(counters_yang, |
| " leaf counter250 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter251 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter252 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter253 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter254 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter255 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter256 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter257 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter258 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter259 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter260 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter261 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter262 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter263 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter264 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter265 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter266 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter267 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter268 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter269 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter270 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter271 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter272 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter273 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter274 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter275 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter276 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter277 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter278 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter279 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter280 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter281 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter282 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter283 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter284 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter285 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter286 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter287 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter288 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter289 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter290 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter291 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter292 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter293 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter294 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter295 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter296 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter297 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter298 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter299 {\n" |
| " type uint64;\n" |
| " }\n"); |
| strcat(counters_yang, |
| " leaf counter300 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter301 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter302 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter303 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter304 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter305 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter306 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter307 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter308 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter309 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter310 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter311 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter312 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter313 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter314 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter315 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter316 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter317 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter318 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter319 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter320 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter321 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter322 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter323 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter324 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter325 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter326 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter327 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter328 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter329 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter330 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter331 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter332 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter333 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter334 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter335 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter336 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter337 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter338 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter339 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter340 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter341 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter342 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter343 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter344 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter345 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter346 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter347 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter348 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter349 {\n" |
| " type uint64;\n" |
| " }\n"); |
| strcat(counters_yang, |
| " leaf counter350 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter351 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter352 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter353 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter354 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter355 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter356 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter357 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter358 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter359 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter360 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter361 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter362 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter363 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter364 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter365 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter366 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter367 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter368 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter369 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter370 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter371 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter372 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter373 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter374 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter375 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter376 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter377 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter378 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter379 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter380 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter381 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter382 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter383 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter384 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter385 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter386 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter387 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter388 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter389 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter390 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter391 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter392 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter393 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter394 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter395 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter396 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter397 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter398 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter399 {\n" |
| " type uint64;\n" |
| " }\n"); |
| strcat(counters_yang, |
| " leaf counter400 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter401 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter402 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter403 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter404 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter405 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter406 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter407 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter408 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter409 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter410 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter411 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter412 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter413 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter414 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter415 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter416 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter417 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter418 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter419 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter420 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter421 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter422 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter423 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter424 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter425 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter426 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter427 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter428 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter429 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter430 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter431 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter432 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter433 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter434 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter435 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter436 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter437 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter438 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter439 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter440 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter441 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter442 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter443 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter444 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter445 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter446 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter447 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter448 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter449 {\n" |
| " type uint64;\n" |
| " }\n"); |
| strcat(counters_yang, |
| " leaf counter450 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter451 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter452 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter453 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter454 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter455 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter456 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter457 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter458 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter459 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter460 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter461 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter462 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter463 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter464 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter465 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter466 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter467 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter468 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter469 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter470 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter471 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter472 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter473 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter474 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter475 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter476 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter477 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter478 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter479 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter480 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter481 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter482 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter483 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter484 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter485 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter486 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter487 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter488 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter489 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter490 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter491 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter492 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter493 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter494 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter495 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter496 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter497 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter498 {\n" |
| " type uint64;\n" |
| " }\n" |
| " leaf counter499 {\n" |
| " type uint64;\n" |
| " }\n" |
| " }\n" |
| "}\n"); |
| |
| data_xml = malloc(16384); |
| strcpy(data_xml, |
| "<stats xmlns=\"urn:counters\">\n"); |
| strcat(data_xml, |
| " <counter1>1</counter1>\n" |
| " <counter2>2</counter2>\n" |
| " <counter3>3</counter3>\n" |
| " <counter4>4</counter4>\n" |
| " <counter5>5</counter5>\n" |
| " <counter6>6</counter6>\n" |
| " <counter7>7</counter7>\n" |
| " <counter8>8</counter8>\n" |
| " <counter9>9</counter9>\n" |
| " <counter10>10</counter10>\n" |
| " <counter11>11</counter11>\n" |
| " <counter12>12</counter12>\n" |
| " <counter13>13</counter13>\n" |
| " <counter14>14</counter14>\n" |
| " <counter15>15</counter15>\n" |
| " <counter16>16</counter16>\n" |
| " <counter17>17</counter17>\n" |
| " <counter18>18</counter18>\n" |
| " <counter19>19</counter19>\n" |
| " <counter20>20</counter20>\n" |
| " <counter21>21</counter21>\n" |
| " <counter22>22</counter22>\n" |
| " <counter23>23</counter23>\n" |
| " <counter24>24</counter24>\n" |
| " <counter25>25</counter25>\n" |
| " <counter26>26</counter26>\n" |
| " <counter27>27</counter27>\n" |
| " <counter28>28</counter28>\n" |
| " <counter29>29</counter29>\n" |
| " <counter30>30</counter30>\n" |
| " <counter31>31</counter31>\n" |
| " <counter32>32</counter32>\n" |
| " <counter33>33</counter33>\n" |
| " <counter34>34</counter34>\n" |
| " <counter35>35</counter35>\n" |
| " <counter36>36</counter36>\n" |
| " <counter37>37</counter37>\n" |
| " <counter38>38</counter38>\n" |
| " <counter39>39</counter39>\n" |
| " <counter40>40</counter40>\n" |
| " <counter41>41</counter41>\n" |
| " <counter42>42</counter42>\n" |
| " <counter43>43</counter43>\n" |
| " <counter44>44</counter44>\n" |
| " <counter45>45</counter45>\n" |
| " <counter46>46</counter46>\n" |
| " <counter47>47</counter47>\n" |
| " <counter48>48</counter48>\n" |
| " <counter49>49</counter49>\n" |
| " <counter50>50</counter50>\n" |
| " <counter51>51</counter51>\n" |
| " <counter52>52</counter52>\n" |
| " <counter53>53</counter53>\n" |
| " <counter54>54</counter54>\n" |
| " <counter55>55</counter55>\n" |
| " <counter56>56</counter56>\n" |
| " <counter57>57</counter57>\n" |
| " <counter58>58</counter58>\n" |
| " <counter59>59</counter59>\n" |
| " <counter60>60</counter60>\n" |
| " <counter61>61</counter61>\n" |
| " <counter62>62</counter62>\n" |
| " <counter63>63</counter63>\n" |
| " <counter64>64</counter64>\n" |
| " <counter65>65</counter65>\n" |
| " <counter66>66</counter66>\n" |
| " <counter67>67</counter67>\n" |
| " <counter68>68</counter68>\n" |
| " <counter69>69</counter69>\n" |
| " <counter70>70</counter70>\n" |
| " <counter71>71</counter71>\n" |
| " <counter72>72</counter72>\n" |
| " <counter73>73</counter73>\n" |
| " <counter74>74</counter74>\n" |
| " <counter75>75</counter75>\n" |
| " <counter76>76</counter76>\n" |
| " <counter77>77</counter77>\n" |
| " <counter78>78</counter78>\n" |
| " <counter79>79</counter79>\n" |
| " <counter80>80</counter80>\n" |
| " <counter81>81</counter81>\n" |
| " <counter82>82</counter82>\n" |
| " <counter83>83</counter83>\n" |
| " <counter84>84</counter84>\n" |
| " <counter85>85</counter85>\n" |
| " <counter86>86</counter86>\n" |
| " <counter87>87</counter87>\n" |
| " <counter88>88</counter88>\n" |
| " <counter89>89</counter89>\n" |
| " <counter90>90</counter90>\n" |
| " <counter91>91</counter91>\n" |
| " <counter92>92</counter92>\n" |
| " <counter93>93</counter93>\n" |
| " <counter94>94</counter94>\n" |
| " <counter95>95</counter95>\n" |
| " <counter96>96</counter96>\n" |
| " <counter97>97</counter97>\n" |
| " <counter98>98</counter98>\n" |
| " <counter99>99</counter99>\n"); |
| strcat(data_xml, |
| " <counter100>100</counter100>\n" |
| " <counter101>101</counter101>\n" |
| " <counter102>102</counter102>\n" |
| " <counter103>103</counter103>\n" |
| " <counter104>104</counter104>\n" |
| " <counter105>105</counter105>\n" |
| " <counter106>106</counter106>\n" |
| " <counter107>107</counter107>\n" |
| " <counter108>108</counter108>\n" |
| " <counter109>109</counter109>\n" |
| " <counter110>110</counter110>\n" |
| " <counter111>111</counter111>\n" |
| " <counter112>112</counter112>\n" |
| " <counter113>113</counter113>\n" |
| " <counter114>114</counter114>\n" |
| " <counter115>115</counter115>\n" |
| " <counter116>116</counter116>\n" |
| " <counter117>117</counter117>\n" |
| " <counter118>118</counter118>\n" |
| " <counter119>119</counter119>\n" |
| " <counter120>120</counter120>\n" |
| " <counter121>121</counter121>\n" |
| " <counter122>122</counter122>\n" |
| " <counter123>123</counter123>\n" |
| " <counter124>124</counter124>\n" |
| " <counter125>125</counter125>\n" |
| " <counter126>126</counter126>\n" |
| " <counter127>127</counter127>\n" |
| " <counter128>128</counter128>\n" |
| " <counter129>129</counter129>\n" |
| " <counter130>130</counter130>\n" |
| " <counter131>131</counter131>\n" |
| " <counter132>132</counter132>\n" |
| " <counter133>133</counter133>\n" |
| " <counter134>134</counter134>\n" |
| " <counter135>135</counter135>\n" |
| " <counter136>136</counter136>\n" |
| " <counter137>137</counter137>\n" |
| " <counter138>138</counter138>\n" |
| " <counter139>139</counter139>\n" |
| " <counter140>140</counter140>\n" |
| " <counter141>141</counter141>\n" |
| " <counter142>142</counter142>\n" |
| " <counter143>143</counter143>\n" |
| " <counter144>144</counter144>\n" |
| " <counter145>145</counter145>\n" |
| " <counter146>146</counter146>\n" |
| " <counter147>147</counter147>\n" |
| " <counter148>148</counter148>\n" |
| " <counter149>149</counter149>\n" |
| " <counter150>150</counter150>\n" |
| " <counter151>151</counter151>\n" |
| " <counter152>152</counter152>\n" |
| " <counter153>153</counter153>\n" |
| " <counter154>154</counter154>\n" |
| " <counter155>155</counter155>\n" |
| " <counter156>156</counter156>\n" |
| " <counter157>157</counter157>\n" |
| " <counter158>158</counter158>\n" |
| " <counter159>159</counter159>\n" |
| " <counter160>160</counter160>\n" |
| " <counter161>161</counter161>\n" |
| " <counter162>162</counter162>\n" |
| " <counter163>163</counter163>\n" |
| " <counter164>164</counter164>\n" |
| " <counter165>165</counter165>\n" |
| " <counter166>166</counter166>\n" |
| " <counter167>167</counter167>\n" |
| " <counter168>168</counter168>\n" |
| " <counter169>169</counter169>\n" |
| " <counter170>170</counter170>\n" |
| " <counter171>171</counter171>\n" |
| " <counter172>172</counter172>\n" |
| " <counter173>173</counter173>\n" |
| " <counter174>174</counter174>\n" |
| " <counter175>175</counter175>\n" |
| " <counter176>176</counter176>\n" |
| " <counter177>177</counter177>\n" |
| " <counter178>178</counter178>\n" |
| " <counter179>179</counter179>\n" |
| " <counter180>180</counter180>\n" |
| " <counter181>181</counter181>\n" |
| " <counter182>182</counter182>\n" |
| " <counter183>183</counter183>\n" |
| " <counter184>184</counter184>\n" |
| " <counter185>185</counter185>\n" |
| " <counter186>186</counter186>\n" |
| " <counter187>187</counter187>\n" |
| " <counter188>188</counter188>\n" |
| " <counter189>189</counter189>\n" |
| " <counter190>190</counter190>\n" |
| " <counter191>191</counter191>\n" |
| " <counter192>192</counter192>\n" |
| " <counter193>193</counter193>\n" |
| " <counter194>194</counter194>\n" |
| " <counter195>195</counter195>\n" |
| " <counter196>196</counter196>\n" |
| " <counter197>197</counter197>\n" |
| " <counter198>198</counter198>\n" |
| " <counter199>199</counter199>\n"); |
| strcat(data_xml, |
| " <counter200>200</counter200>\n" |
| " <counter201>201</counter201>\n" |
| " <counter202>202</counter202>\n" |
| " <counter203>203</counter203>\n" |
| " <counter204>204</counter204>\n" |
| " <counter205>205</counter205>\n" |
| " <counter206>206</counter206>\n" |
| " <counter207>207</counter207>\n" |
| " <counter208>208</counter208>\n" |
| " <counter209>209</counter209>\n" |
| " <counter210>210</counter210>\n" |
| " <counter211>211</counter211>\n" |
| " <counter212>212</counter212>\n" |
| " <counter213>213</counter213>\n" |
| " <counter214>214</counter214>\n" |
| " <counter215>215</counter215>\n" |
| " <counter216>216</counter216>\n" |
| " <counter217>217</counter217>\n" |
| " <counter218>218</counter218>\n" |
| " <counter219>219</counter219>\n" |
| " <counter220>220</counter220>\n" |
| " <counter221>221</counter221>\n" |
| " <counter222>222</counter222>\n" |
| " <counter223>223</counter223>\n" |
| " <counter224>224</counter224>\n" |
| " <counter225>225</counter225>\n" |
| " <counter226>226</counter226>\n" |
| " <counter227>227</counter227>\n" |
| " <counter228>228</counter228>\n" |
| " <counter229>229</counter229>\n" |
| " <counter230>230</counter230>\n" |
| " <counter231>231</counter231>\n" |
| " <counter232>232</counter232>\n" |
| " <counter233>233</counter233>\n" |
| " <counter234>234</counter234>\n" |
| " <counter235>235</counter235>\n" |
| " <counter236>236</counter236>\n" |
| " <counter237>237</counter237>\n" |
| " <counter238>238</counter238>\n" |
| " <counter239>239</counter239>\n" |
| " <counter240>240</counter240>\n" |
| " <counter241>241</counter241>\n" |
| " <counter242>242</counter242>\n" |
| " <counter243>243</counter243>\n" |
| " <counter244>244</counter244>\n" |
| " <counter245>245</counter245>\n" |
| " <counter246>246</counter246>\n" |
| " <counter247>247</counter247>\n" |
| " <counter248>248</counter248>\n" |
| " <counter249>249</counter249>\n" |
| " <counter250>250</counter250>\n" |
| " <counter251>251</counter251>\n" |
| " <counter252>252</counter252>\n" |
| " <counter253>253</counter253>\n" |
| " <counter254>254</counter254>\n" |
| " <counter255>255</counter255>\n" |
| " <counter256>256</counter256>\n" |
| " <counter257>257</counter257>\n" |
| " <counter258>258</counter258>\n" |
| " <counter259>259</counter259>\n" |
| " <counter260>260</counter260>\n" |
| " <counter261>261</counter261>\n" |
| " <counter262>262</counter262>\n" |
| " <counter263>263</counter263>\n" |
| " <counter264>264</counter264>\n" |
| " <counter265>265</counter265>\n" |
| " <counter266>266</counter266>\n" |
| " <counter267>267</counter267>\n" |
| " <counter268>268</counter268>\n" |
| " <counter269>269</counter269>\n" |
| " <counter270>270</counter270>\n" |
| " <counter271>271</counter271>\n" |
| " <counter272>272</counter272>\n" |
| " <counter273>273</counter273>\n" |
| " <counter274>274</counter274>\n" |
| " <counter275>275</counter275>\n" |
| " <counter276>276</counter276>\n" |
| " <counter277>277</counter277>\n" |
| " <counter278>278</counter278>\n" |
| " <counter279>279</counter279>\n" |
| " <counter280>280</counter280>\n" |
| " <counter281>281</counter281>\n" |
| " <counter282>282</counter282>\n" |
| " <counter283>283</counter283>\n" |
| " <counter284>284</counter284>\n" |
| " <counter285>285</counter285>\n" |
| " <counter286>286</counter286>\n" |
| " <counter287>287</counter287>\n" |
| " <counter288>288</counter288>\n" |
| " <counter289>289</counter289>\n" |
| " <counter290>290</counter290>\n" |
| " <counter291>291</counter291>\n" |
| " <counter292>292</counter292>\n" |
| " <counter293>293</counter293>\n" |
| " <counter294>294</counter294>\n" |
| " <counter295>295</counter295>\n" |
| " <counter296>296</counter296>\n" |
| " <counter297>297</counter297>\n" |
| " <counter298>298</counter298>\n" |
| " <counter299>299</counter299>\n"); |
| strcat(data_xml, |
| " <counter300>300</counter300>\n" |
| " <counter301>301</counter301>\n" |
| " <counter302>302</counter302>\n" |
| " <counter303>303</counter303>\n" |
| " <counter304>304</counter304>\n" |
| " <counter305>305</counter305>\n" |
| " <counter306>306</counter306>\n" |
| " <counter307>307</counter307>\n" |
| " <counter308>308</counter308>\n" |
| " <counter309>309</counter309>\n" |
| " <counter310>310</counter310>\n" |
| " <counter311>311</counter311>\n" |
| " <counter312>312</counter312>\n" |
| " <counter313>313</counter313>\n" |
| " <counter314>314</counter314>\n" |
| " <counter315>315</counter315>\n" |
| " <counter316>316</counter316>\n" |
| " <counter317>317</counter317>\n" |
| " <counter318>318</counter318>\n" |
| " <counter319>319</counter319>\n" |
| " <counter320>320</counter320>\n" |
| " <counter321>321</counter321>\n" |
| " <counter322>322</counter322>\n" |
| " <counter323>323</counter323>\n" |
| " <counter324>324</counter324>\n" |
| " <counter325>325</counter325>\n" |
| " <counter326>326</counter326>\n" |
| " <counter327>327</counter327>\n" |
| " <counter328>328</counter328>\n" |
| " <counter329>329</counter329>\n" |
| " <counter330>330</counter330>\n" |
| " <counter331>331</counter331>\n" |
| " <counter332>332</counter332>\n" |
| " <counter333>333</counter333>\n" |
| " <counter334>334</counter334>\n" |
| " <counter335>335</counter335>\n" |
| " <counter336>336</counter336>\n" |
| " <counter337>337</counter337>\n" |
| " <counter338>338</counter338>\n" |
| " <counter339>339</counter339>\n" |
| " <counter340>340</counter340>\n" |
| " <counter341>341</counter341>\n" |
| " <counter342>342</counter342>\n" |
| " <counter343>343</counter343>\n" |
| " <counter344>344</counter344>\n" |
| " <counter345>345</counter345>\n" |
| " <counter346>346</counter346>\n" |
| " <counter347>347</counter347>\n" |
| " <counter348>348</counter348>\n" |
| " <counter349>349</counter349>\n" |
| " <counter350>350</counter350>\n" |
| " <counter351>351</counter351>\n" |
| " <counter352>352</counter352>\n" |
| " <counter353>353</counter353>\n" |
| " <counter354>354</counter354>\n" |
| " <counter355>355</counter355>\n" |
| " <counter356>356</counter356>\n" |
| " <counter357>357</counter357>\n" |
| " <counter358>358</counter358>\n" |
| " <counter359>359</counter359>\n" |
| " <counter360>360</counter360>\n" |
| " <counter361>361</counter361>\n" |
| " <counter362>362</counter362>\n" |
| " <counter363>363</counter363>\n" |
| " <counter364>364</counter364>\n" |
| " <counter365>365</counter365>\n" |
| " <counter366>366</counter366>\n" |
| " <counter367>367</counter367>\n" |
| " <counter368>368</counter368>\n" |
| " <counter369>369</counter369>\n" |
| " <counter370>370</counter370>\n" |
| " <counter371>371</counter371>\n" |
| " <counter372>372</counter372>\n" |
| " <counter373>373</counter373>\n" |
| " <counter374>374</counter374>\n" |
| " <counter375>375</counter375>\n" |
| " <counter376>376</counter376>\n" |
| " <counter377>377</counter377>\n" |
| " <counter378>378</counter378>\n" |
| " <counter379>379</counter379>\n" |
| " <counter380>380</counter380>\n" |
| " <counter381>381</counter381>\n" |
| " <counter382>382</counter382>\n" |
| " <counter383>383</counter383>\n" |
| " <counter384>384</counter384>\n" |
| " <counter385>385</counter385>\n" |
| " <counter386>386</counter386>\n" |
| " <counter387>387</counter387>\n" |
| " <counter388>388</counter388>\n" |
| " <counter389>389</counter389>\n" |
| " <counter390>390</counter390>\n" |
| " <counter391>391</counter391>\n" |
| " <counter392>392</counter392>\n" |
| " <counter393>393</counter393>\n" |
| " <counter394>394</counter394>\n" |
| " <counter395>395</counter395>\n" |
| " <counter396>396</counter396>\n" |
| " <counter397>397</counter397>\n" |
| " <counter398>398</counter398>\n" |
| " <counter399>399</counter399>\n"); |
| strcat(data_xml, |
| " <counter400>400</counter400>\n" |
| " <counter401>401</counter401>\n" |
| " <counter402>402</counter402>\n" |
| " <counter403>403</counter403>\n" |
| " <counter404>404</counter404>\n" |
| " <counter405>405</counter405>\n" |
| " <counter406>406</counter406>\n" |
| " <counter407>407</counter407>\n" |
| " <counter408>408</counter408>\n" |
| " <counter409>409</counter409>\n" |
| " <counter410>410</counter410>\n" |
| " <counter411>411</counter411>\n" |
| " <counter412>412</counter412>\n" |
| " <counter413>413</counter413>\n" |
| " <counter414>414</counter414>\n" |
| " <counter415>415</counter415>\n" |
| " <counter416>416</counter416>\n" |
| " <counter417>417</counter417>\n" |
| " <counter418>418</counter418>\n" |
| " <counter419>419</counter419>\n" |
| " <counter420>420</counter420>\n" |
| " <counter421>421</counter421>\n" |
| " <counter422>422</counter422>\n" |
| " <counter423>423</counter423>\n" |
| " <counter424>424</counter424>\n" |
| " <counter425>425</counter425>\n" |
| " <counter426>426</counter426>\n" |
| " <counter427>427</counter427>\n" |
| " <counter428>428</counter428>\n" |
| " <counter429>429</counter429>\n" |
| " <counter430>430</counter430>\n" |
| " <counter431>431</counter431>\n" |
| " <counter432>432</counter432>\n" |
| " <counter433>433</counter433>\n" |
| " <counter434>434</counter434>\n" |
| " <counter435>435</counter435>\n" |
| " <counter436>436</counter436>\n" |
| " <counter437>437</counter437>\n" |
| " <counter438>438</counter438>\n" |
| " <counter439>439</counter439>\n" |
| " <counter440>440</counter440>\n" |
| " <counter441>441</counter441>\n" |
| " <counter442>442</counter442>\n" |
| " <counter443>443</counter443>\n" |
| " <counter444>444</counter444>\n" |
| " <counter445>445</counter445>\n" |
| " <counter446>446</counter446>\n" |
| " <counter447>447</counter447>\n" |
| " <counter448>448</counter448>\n" |
| " <counter449>449</counter449>\n" |
| " <counter450>450</counter450>\n" |
| " <counter451>451</counter451>\n" |
| " <counter452>452</counter452>\n" |
| " <counter453>453</counter453>\n" |
| " <counter454>454</counter454>\n" |
| " <counter455>455</counter455>\n" |
| " <counter456>456</counter456>\n" |
| " <counter457>457</counter457>\n" |
| " <counter458>458</counter458>\n" |
| " <counter459>459</counter459>\n" |
| " <counter460>460</counter460>\n" |
| " <counter461>461</counter461>\n" |
| " <counter462>462</counter462>\n" |
| " <counter463>463</counter463>\n" |
| " <counter464>464</counter464>\n" |
| " <counter465>465</counter465>\n" |
| " <counter466>466</counter466>\n" |
| " <counter467>467</counter467>\n" |
| " <counter468>468</counter468>\n" |
| " <counter469>469</counter469>\n" |
| " <counter470>470</counter470>\n" |
| " <counter471>471</counter471>\n" |
| " <counter472>472</counter472>\n" |
| " <counter473>473</counter473>\n" |
| " <counter474>474</counter474>\n" |
| " <counter475>475</counter475>\n" |
| " <counter476>476</counter476>\n" |
| " <counter477>477</counter477>\n" |
| " <counter478>478</counter478>\n" |
| " <counter479>479</counter479>\n" |
| " <counter480>480</counter480>\n" |
| " <counter481>481</counter481>\n" |
| " <counter482>482</counter482>\n" |
| " <counter483>483</counter483>\n" |
| " <counter484>484</counter484>\n" |
| " <counter485>485</counter485>\n" |
| " <counter486>486</counter486>\n" |
| " <counter487>487</counter487>\n" |
| " <counter488>488</counter488>\n" |
| " <counter489>489</counter489>\n" |
| " <counter490>490</counter490>\n" |
| " <counter491>491</counter491>\n" |
| " <counter492>492</counter492>\n" |
| " <counter493>493</counter493>\n" |
| " <counter494>494</counter494>\n" |
| " <counter495>495</counter495>\n" |
| " <counter496>496</counter496>\n" |
| " <counter497>497</counter497>\n" |
| " <counter498>498</counter498>\n" |
| " <counter499>499</counter499>\n" |
| "</stats>\n"); |
| |
| UTEST_ADD_MODULE(counters_yang, LYS_IN_YANG, NULL, NULL); |
| |
| CHECK_PRINT_THEN_PARSE(data_xml); |
| |
| free(counters_yang); |
| free(data_xml); |
| } |
| |
| #if 0 |
| |
| static void |
| test_types(void **state) |
| { |
| struct state *st = (*state); |
| int ret; |
| |
| ly_ctx_set_searchdir(st->ctx, TESTS_DIR "/data/files"); |
| assert_non_null(ly_ctx_load_module(st->ctx, "types", NULL)); |
| |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/types.xml", LYD_XML, LYD_OPT_CONFIG); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| } |
| |
| static void |
| test_annotations(void **state) |
| { |
| struct state *st = (*state); |
| int ret; |
| |
| ly_ctx_set_searchdir(st->ctx, TESTS_DIR "/data/files"); |
| assert_non_null(ly_ctx_load_module(st->ctx, "annotations", NULL)); |
| |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/annotations.xml", LYD_XML, LYD_OPT_CONFIG); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| } |
| |
| static void |
| test_similar_annot_names(void **state) |
| { |
| struct state *st = (*state); |
| int ret; |
| |
| ly_ctx_set_searchdir(st->ctx, TESTS_DIR "/data/files"); |
| assert_non_null(ly_ctx_load_module(st->ctx, "annotations", NULL)); |
| |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/similar-annot-names.xml", LYD_XML, LYD_OPT_CONFIG); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| } |
| |
| static void |
| test_many_child_annot(void **state) |
| { |
| struct state *st = (*state); |
| int ret; |
| |
| ly_ctx_set_searchdir(st->ctx, TESTS_DIR "/data/files"); |
| assert_non_null(ly_ctx_load_module(st->ctx, "annotations", NULL)); |
| |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/many-childs-annot.xml", LYD_XML, LYD_OPT_CONFIG); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| } |
| |
| static void |
| test_union(void **state) |
| { |
| struct state *st = (*state); |
| int ret; |
| |
| ly_ctx_set_searchdir(st->ctx, TESTS_DIR "/data/files"); |
| assert_non_null(ly_ctx_load_module(st->ctx, "union", NULL)); |
| |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/union.xml", LYD_XML, LYD_OPT_CONFIG); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| } |
| |
| static void |
| test_union2(void **state) |
| { |
| struct state *st = (*state); |
| int ret; |
| |
| ly_ctx_set_searchdir(st->ctx, TESTS_DIR "/data/files"); |
| assert_non_null(ly_ctx_load_module(st->ctx, "statements", NULL)); |
| |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/union2.xml", LYD_XML, LYD_OPT_CONFIG); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| } |
| |
| static void |
| test_collisions(void **state) |
| { |
| struct state *st = (*state); |
| int ret; |
| |
| ly_ctx_set_searchdir(st->ctx, TESTS_DIR "/data/files"); |
| assert_non_null(ly_ctx_load_module(st->ctx, "annotations", NULL)); |
| |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/collisions.xml", LYD_XML, LYD_OPT_CONFIG); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| } |
| |
| static void |
| test_anydata(void **state) |
| { |
| struct state *st = (*state); |
| const struct lys_module *mod; |
| int ret; |
| const char *test_anydata = |
| "module test-anydata {" |
| " namespace \"urn:test-anydata\";" |
| " prefix ya;" |
| "" |
| " container cont {" |
| " anydata ntf;" |
| " }" |
| "}"; |
| |
| assert_non_null(ly_ctx_load_module(st->ctx, "ietf-netconf-notifications", NULL)); |
| |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/ietf-netconf-notifications.json", LYD_JSON, LYD_OPT_NOTIF | LYD_OPT_TRUSTED, NULL); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| / *get notification in LYB format to set as anydata content * / |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| lyd_free_withsiblings(st->dt1); |
| st->dt1 = NULL; |
| |
| / *now comes the real test, test anydata * / |
| mod = lys_parse_mem(st->ctx, test_anydata, LYS_YANG); |
| assert_non_null(mod); |
| |
| st->dt1 = lyd_new(NULL, mod, "cont"); |
| assert_non_null(st->dt1); |
| |
| assert_non_null(lyd_new_anydata(st->dt1, NULL, "ntf", st->mem, LYD_ANYDATA_LYBD)); |
| st->mem = NULL; |
| |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| ret = lyd_validate(&st->dt1, LYD_OPT_CONFIG, NULL); |
| assert_int_equal(ret, 0); |
| |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| |
| /* and also test the embedded notification itself */ |
| free(st->mem); |
| ret = lyd_lyb_data_length(((struct lyd_node_anydata *)st->dt1->child)->value.mem); |
| st->mem = malloc(ret); |
| memcpy(st->mem, ((struct lyd_node_anydata *)st->dt1->child)->value.mem, ret); |
| |
| lyd_free_withsiblings(st->dt2); |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_NOTIF | LYD_OPT_STRICT | LYD_OPT_NOEXTDEPS, NULL); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| /* parse the JSON again for this comparison */ |
| lyd_free_withsiblings(st->dt1); |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/ietf-netconf-notifications.json", LYD_JSON, LYD_OPT_NOTIF | LYD_OPT_TRUSTED, NULL); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| } |
| |
| static void |
| test_submodule_feature(void **state) |
| { |
| struct state *st = (*state); |
| const struct lys_module *mod; |
| int ret; |
| |
| ly_ctx_set_searchdir(st->ctx, TESTS_DIR "/data/files"); |
| mod = ly_ctx_load_module(st->ctx, "feature-submodule-main", NULL); |
| assert_non_null(mod); |
| assert_int_equal(lys_features_enable(mod, "test-submodule-feature"), 0); |
| |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/test-submodule-feature.json", LYD_JSON, LYD_OPT_CONFIG); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| } |
| |
| static void |
| test_coliding_augments(void **state) |
| { |
| struct state *st = (*state); |
| int ret; |
| |
| ly_ctx_set_searchdir(st->ctx, TESTS_DIR "/data/files"); |
| assert_non_null(ly_ctx_load_module(st->ctx, "augment-target", NULL)); |
| assert_non_null(ly_ctx_load_module(st->ctx, "augment0", NULL)); |
| assert_non_null(ly_ctx_load_module(st->ctx, "augment1", NULL)); |
| |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/augment.xml", LYD_XML, LYD_OPT_CONFIG); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| } |
| |
| static void |
| test_leafrefs(void **state) |
| { |
| struct state *st = (*state); |
| int ret; |
| |
| ly_ctx_set_searchdir(st->ctx, TESTS_DIR "/data/files"); |
| assert_non_null(ly_ctx_load_module(st->ctx, "leafrefs2", NULL)); |
| |
| st->dt1 = lyd_parse_path(st->ctx, TESTS_DIR "/data/files/leafrefs2.json", LYD_JSON, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt1, NULL); |
| |
| ret = lyd_print_mem(&st->mem, st->dt1, LYD_LYB, LYP_WITHSIBLINGS); |
| assert_int_equal(ret, 0); |
| |
| st->dt2 = lyd_parse_mem(st->ctx, st->mem, LYD_LYB, LYD_OPT_CONFIG | LYD_OPT_STRICT); |
| assert_ptr_not_equal(st->dt2, NULL); |
| |
| check_data_tree(st->dt1, st->dt2); |
| } |
| |
| #endif |
| |
| int |
| main(void) |
| { |
| const struct CMUnitTest tests[] = { |
| UTEST(tests_leaflist), |
| UTEST(tests_list), |
| UTEST(tests_any), |
| UTEST(test_ietf_interfaces, setup), |
| UTEST(test_origin, setup), |
| UTEST(test_statements, setup), |
| UTEST(test_opaq, setup), |
| UTEST(test_collisions, setup), |
| #if 0 |
| cmocka_unit_test_setup_teardown(test_types, setup_f, teardown_f), |
| cmocka_unit_test_setup_teardown(test_annotations, setup_f, teardown_f), |
| cmocka_unit_test_setup_teardown(test_similar_annot_names, setup_f, teardown_f), |
| cmocka_unit_test_setup_teardown(test_many_child_annot, setup_f, teardown_f), |
| cmocka_unit_test_setup_teardown(test_union, setup_f, teardown_f), |
| cmocka_unit_test_setup_teardown(test_union2, setup_f, teardown_f), |
| cmocka_unit_test_setup_teardown(test_collisions, setup_f, teardown_f), |
| cmocka_unit_test_setup_teardown(test_anydata, setup_f, teardown_f), |
| cmocka_unit_test_setup_teardown(test_submodule_feature, setup_f, teardown_f), |
| cmocka_unit_test_setup_teardown(test_coliding_augments, setup_f, teardown_f), |
| cmocka_unit_test_setup_teardown(test_leafrefs, setup_f, teardown_f), |
| #endif |
| }; |
| |
| return cmocka_run_group_tests(tests, NULL, NULL); |
| } |