../_images/logo.png

YumaPro yangdump-pro Manual

../_images/yangdump-sdk_for_WEB.png

yangdump-pro Introduction

The yangdump-pro program is used to validate YANG files, and convert them to other formats. It is normally used by authors while developing new YANG data models. The compiler and validation engine portion of yangdump-pro (libyumapro_ncx.so) is used in all YumaPro programs.

Note

Any place the program name “yangdump-pro” is mentioned, it also applies to the name “yangdump-sdk”, except where explicitly mentioned.

yangdump-pro Features

The yangdump-pro compiler has the following features:

  • full support for all YANG language constructs.

  • full support for YANG submodules.

  • full support for YANG revisions and deviations across an arbitrary set of YANG files.

  • validates the entire YANG source file, even statements within unused objects.

  • builds a complete internal representation of the 'cooked' object tree, including deviations, to validate or output the exact data structures that result from a set of YANG files.

  • Over 100 separate validation checks, errors, and warnings, covering every type of programming mistake that can be made in a YANG file.

  • Some warnings are fully configurable, and any warning can be suppressed.

  • Can process any number specific modules and directory trees containing modules at once.

  • Any number of modules containing deviations can be specified, and any target nodes in all modules affected will be properly patched.

  • Ignores CVS and subversion directories, if encountered in directory searches.

  • Attempts to find all errors and warnings possible in the file, instead of stopping on the first error.

  • Verifies that all YANG statement syntax is correct, according to the specification.

  • Verifies that all YANG typedef statements are correct:

    • The entire typedef chain is checked, until a built-in data type is reached.

    • Checks valid combined refinements to named types and built-in types

    • Check for valid range statements.

    • Check for valid pattern statements.

    • Verify the path statement is correct for leafref type statements.

    • Verify the default statement is valid.

  • Compile time loop detection:

    • import statement loops.

    • include statement loops.

    • belongs-to statement references self.

    • typedef type statement references self.

    • derived type statement loops.

    • path statement loops for leafref objects.

    • base statement loops for identity statements.

    • feature name reference loops for if-feature statements.

    • uses statement loop in groupings.

  • Compile-time duplicate detection:

    • import statements

    • include statements

    • must statements

    • if-feature statements

    • unique statements

    • local typedef of grouping name collision

    • verifies that the correct number of instances appear for every YANG sub-statement.

    • duplicate sibling node names due to uses or augment statement expansion

    • checks multiple refine statements within a uses statement for duplicate refinements to the same target node.

    • checks multiple deviate statements within a deviation statement for duplicate alterations to the same target node.

    • checks deep within all choice statements to make sure that no accessible object names conflict with sibling nodes that will appear in the value nodes, within a NETCONF database.

  • Verifies that all default statements are correct for the declared type.

    • Only the static properties of the leafref and instance-identifier built-in data types can be validated at compile time.

  • Verifies that all XPath expressions in must and when statements, even those in groupings, contain only valid XPath and reference valid data nodes.

  • Verifies all when statements for a given cooked object, even those inherited from uses and augment statements.

  • Detects namespace statement conflicts across a set of modules.

  • Detects prefix statement conflicts across a set of modules.

  • Detects augment statement conflicts.

  • Checks if any key leafs are more conditional than their parent node. This can occur if any 'when' or 'if-feature' statements apply to the key leaf, but not to the parent.

  • Detects unused typedefs and groupings.

  • Checks line length and identifier length.

  • Checks revision statements present and in correct order.

  • Detects any top-level mandatory configuration objects:

    • leaf with mandatory statement set to true.

    • choice with mandatory statement set to true.

    • non-presence container with any mandatory descendants.

  • Checks all refine statements for proper usage, and checks that the resulting set of objects remains valid. Multiple refine statements for the same target will be combined and checked as if there was only one refine statement for each target node.

  • Checks all deviation statements for proper usage, and checks that the resulting set of objects remains valid. Multiple deviation statements for the same target will be combined and checked as if there was only one deviation statement for each target node.

  • Generates doxygen headers for all the functions in the SIL or SIL-SA source code

    • format must be set to one of the C file variants

    • doxygen-headers must be set to true (default)

The yangdump-pro translator has the following features:

  • Full support for YANG string specification syntax:

    • All double quoted string formatting rules.

    • Preservation of single-quoted string content.

    • All forms of string concatenation.

    • Unquoted string without any whitespace.

  • Generates YIN syntax from the YANG token sequence

    • YIN format is the standard XML version of a YANG module

  • Generates hyper-linked HTML for a set of YANG modules.

    • Rich set of configuration parameters to control HTML generation.

    • Uses configurable and customizable Cascading Style Sheets (CSS).

    • Can generate full WEB page or single <div> for embedding in a WEB page.

    • Can combine all sub-modules into a single conceptual module.

    • Objects tagged as ncx:hidden will be ignored in the HTML output.

  • Generates canonical YANG (all statements in the same order, etc.):

    • Combines refine and deviation statements for the same target.

    • Combines range statement components into canonical form.

    • Generates consistent (configurable) indentation for all statements.

    • Objects tagged as ncx:hidden will be ignored in the YANG output.

  • Generates SQL statements for populating the netconf-central database with quick lookup information about a set of YANG modules.

  • Generates C source code stubs for netconfd-pro server instrumentation libraries, for dynamic loading of a YANG module.

  • Generates informational reports on the contents of a YANG file:

    • Imported modules (dependencies).

    • Exported symbols (exports).

    • Object name tree (identifiers or tree-identifiers)

    • Module revision date (modversion)

    • YANG module metrics reports (stats and totals)

Starting yangdump-pro

The current working directory in use when yangdump-pro is invoked is important. It is most convenient to run yangdump-pro from a work directory, rather than the installation directory or within the module library.

The yangdump-pro program can be invoked several ways:

  • To get the current version and exit:

    > yangdump-pro --version
    
  • To get program help and exit:

    > yangdump-pro --help
    > yangdump-pro --help --brief
    > yangdump-pro --help --full
    

The default parameter for the yangdump-pro CLI is the --module parameter. If an unknown parameter is given and it could be a valid module parameter, then it will be treated as an instance of this parameter.

  • To validate a single YANG module named 'foo', the following command lines are equivalent:

    > yangdump-pro foo
    
    > yangdump-pro --module=foo
    
  • To validate the './test1' and './test2' directory subtrees as an entire set of modules, and save the output to 'mylogfile':

    > yangdump-pro --subtree=test1 --subtree=test2 --logfile=mylogfile
    
  • To get all the configuration parameters from a text file named '~/yangdump-pro-project1.conf':

    > yangdump-pro --config=~/yangdump-pro-project1.conf
    
  • To generate YANG HTML documentation files in the '~/work' directory (with the default naming scheme) for all the YANG modules in the './test1' directory subtree:

    > yangdump-pro --subtree=test1 --output=~/work --format=html --defnames=true
    

Stopping yangdump-pro

There is no interactive mode for yangdump-pro, so there is no need for a command to exit the program.

The Control C character sequence can be used to cancel the yangdump-pro processing in progress. However, this will leave any partially completed output files in place.

Configuration Parameter List

The following configuration parameters are used by yangdump-pro. Refer to the CLI Reference for more details.

yangdump-pro CLI Parameters

Parameter

Description

--config

Specifies the configuration file to use for parameters.

--defnames

Specifies if the default naming scheme is used for any output files.

--dependencies

Generate the module dependencies report.

--deviation

Species one or more YANG modules to load as deviations.

--doxygen-headers

Specifies if doxygen comment headers should be used when generating source code

--exports

Generate the module exports report.

--feature-code-default

Specifies if a feature should use static or dynamic code by default

--feature-disable

Leaf list of features to disable

--feature-dynamic

Specifies a feature that uses dynamic code

--feature-enable

Specifies a feature that should be enabled

--feature-enable-default

Specifies if a feature should be enabled or disabled by default

--feature-static

Specifies a feature that uses static code

--format

Specifies the type of translation format that should be used for the output.

--force-prefix

Specifies the prefix to use for short name generation

--help

Get context-sensitive help, then exit.

--help-mode

Adjust the help output (--brief, or --full).

--home

Override the $HOME environment variable

--html-div

For HTML translation, controls whether to generate a <div> element instead of a complete HTML document.

--html-toc

For HTML translation, controls the table of contents that is generated.

--identifiers

Generate the module object identifiers report.

--indent

Specifies the indent count to use when writing data.

--lang-errors

Generate the default error messages for language translation

--log

Specifies the log file to use instead of STDOUT.

--log-append

Controls whether a log file will be reused or overwritten.

--log-level

Specifies verbosity level of log message output

--modpath

Sets the module search path.

--module

Specifies one or more YANG modules to load upon startup.

--modversion

Generate the module version report.

--no-config

Ignore the default config file if it is present.

--objview

Specifies whether raw or cooked objects will be generated during HTML and YANG translation.

--output

Specifies where output files should be generated.

--quiet-mode

Do not generate module summary reports unless errors or warnings found

--short-names

Specifies if short name code generation will be used

--show-errors

Print all the error and warning messages, then exit.

--sil-bundle

Generate a SIL or SIL-SA bundle instead of a library for 1 module

--sil-edit1

Generate a first generation edit function callback instead of 2nd generation

--sil-edit2

Generate a 2nd generation edit function callback instead of first generation

--sil-get1

Generate a first generation get function callback instead of 2nd generation

--sil-get2

Generate a 2nd generation get function callback instead of first generation

--sil-include

Generate an 'include' directive in the SIL or SIL-SA C files

--sil-nmda

Generate NMDA related code within SIL or SIL-SA GET2 functions

--sil-sa

Generate SIL-SA (sub-agent) code instead of SIL (master agent) code

--simurls

Controls how URL parameters are generated during HTML file output.

--stats

Control YANG usage statistics reporting for each input module.

--subdirs

Controls whether sub-directories will be searched during file searches.

--subtree

Specifies one or more directory subtrees to search for YANG modules.

--totals

Controls statistics summary reporting for a set of input modules.

--tree-identifiers

Generate the module object identifier local-names report in tree format.

--unified

Controls whether to combine submodules into the main module in the translation output.

--urlstart

Specifies the start of URLs to use during HTML file generation.

--version

Prints the program version and then exit.

--versionnames

Controls whether the revision date is used in YANG module file names.

--warn-error

Treat all warnings as errors

--warn-idlen

Controls how identifier lengths are checked.

--warn-linelen

Controls how line lengths are checked.

--warn-off

Suppresses the specified warning number.

--warn-up

Elevates the specified warning number to an error

--with-ocpattern

Controls whether OpenConfig pattern syntax will be checked

--xsd-schemaloc

Generate schemaLocation attributes during XSD translation.

--yumapro-home

Specifies the $YUMAPRO_HOME project root to use when searching for files.

Validating YANG Files

The yangdump-pro program will always validate the modules specified in the configuration parameters, unless one of the quick exit modes is requested (--version or --help). If a valid --format parameter is present, then some sort of translation will also be attempted.

The modules or submodules to validate are specified with the --module and/or --subtree configuration parameters.

All sub-modules that are included, and all modules that are imported, are also validated. This is done in the order the import or include statements are encountered. Errors and warnings that occur in included submodules or imported modules may be repeated, if it is used more than once within the requested set of files to validate.

The netconfd-pro server will refuse to run if any of its core YANG modules contain any errors, as reported by the yangdump-pro parser.

The --deviation parameter is used to specify any YANG module files that contain YANG deviation statements, which may apply to any of the modules specified with the --module or --subtree parameters. Modules parsed as deviation files are not validated. Imported modules are not actually read, and therefore not validated either.

A module can appear in the deviation list and the module or subtree module list. The deviation statements will simply be processed separately from the other YANG statements found in the file.

If all the deviation statements for a module appear in the same module as the objects that are the target(s) of the deviations, then the --deviation parameter does not need to be used.

There is no way to specify the exact revision date associated with each file, at this time. The module search path needs to be configured such that the module search algorithms will find the appropriate versions.

This only applies if the revision-date statement is not present in the import statement, of course. Otherwise, only the specified revision-date will be used, or an error will be generated if the exact import file was not found.

yangdump-pro Validation Messages

A error is generated, and the error count for the module is incremented, if any violation of the YANG standard is detected.

A warning is generated, and the warning count for the module is incremented, if:

  • any suspected misuse of the YANG standard is detected.

  • any YANG statements which have no affect are detected.

  • any duplicate statements which may conflict with previous statements are detected.

  • any violation of a YANG usage guideline is detected.

  • any statements which may cause operational conflicts, due to duplicate values from another module is detected. The module prefix or an augment statement which adds a node with the same name are examples of this type of operational conflict.

An informational message is generated if any potentially interesting conditions or abnormality is detected.

A debugging message is generated if available, to track the internal behavior of the yangdump-pro parser.

The default --log-level configuration parameter value is 'info'. It is strongly suggested that the log-level not be set to 'off' or 'error'. Instead, set the log level to at least 'warning', and use the --warn-error, --warn-idlen, --warn-linelen, --warn-off, and --warn-up configuration parameters to suppress or modify specific warning messages.

Generally, a context-specific error message is generated, followed by a structured error message.

A context-sensitive error message will begin "Error: ....".

A structured error message will begin with a line in the following format:

<module>:<line-number>:<column-number>: error(<error-number>):<msg>

where:

    module is a module or submodule name

Validation Example

The following example shows the error messages that are generated for the 'testloops.yang' file, usually installed at /usr/share/yumapro/modules/test/fail/testloops.yang.

user1$ yangdump-pro testloops

Error: import 'testloops' for current module testloops.yang:6.5: error(327): import loop

Error: include 'testloops' for current submodule testloops.yang:10.5: error(328): include loop

Error: if-feature loop detected for 'A' in feature 'C' testloops.yang:66.5: error(325): definition loop detected

Error: typedef 'typeloop' cannot use type 'typeloop' testloops.yang:35.8: error(325): definition loop detected

Error: named type loops with type 'typeloop2' on line 43 testloops.yang:47.8: error(325): definition loop detected

Error: uses of 'grouploop' is contained within that grouping, defined on line 50 testloops.yang:51.8: error(325): definition loop detected

Error: grouping 'grouploop2' on line 54 loops in uses, defined in module testloops, line 63 testloops.yang:54.5: error(325): definition loop detected

Error: grouping 'grouploop3' on line 58 loops in uses, defined in module testloops, line 55 testloops.yang:58.5: error(325): definition loop detected

Error: grouping 'grouploop4' on line 62 loops in uses, defined in module testloops, line 59 testloops.yang:62.5: error(325): definition loop detected

Error: leafref path in leaf LR1 loops with leaf LR3 testloops.yang:16.5: error(359): leafref path loop

Error: leafref path in leaf LR2 loops with leaf LR1 testloops.yang:22.5: error(359): leafref path loop

Error: leafref path in leaf LR3 loops with leaf LR2 testloops.yang:28.5: error(359): leafref path loop

* /usr/share/yumapro/modules/test/fail/testloops.yang * 12 Errors, 0 Warnings user1$

Translating YANG to Other Formats

The yangdump-pro program can be used to translate YANG files to other formats, using the --format parameter. This section describes the available translation modes.

In all cases:

  • the :ref:--subtree` or --module parameter is required to specify the input files. Any number of these parameters can be entered, given in any order.

  • the --deviation parameter will affect how objects are generated, if --objview=cooked.

  • the --output parameter is usually specified to cause the files to be copied to a different directory. If this parameter is not present, then the current directory will be used for generation of output files. The default is either STDOUT, or to the current directory if --defnames is set to 'true'.

  • the --indent parameter can be used to specify the number of spaces to indent each new nest level. The default value is 3 spaces.

  • the --defnames parameter can be used to force the default naming scheme. For many translation modes, this parameter is the assumed default, and cannot be changed.

  • the --urlstart parameter can be used to specify the string to start all URLs, if URLs are generated in the output.

YIN Format

The standard YIN format can be generated with the --format=yin parameter value.

The YIN representation of a YANG module is an XML instance document consisting of a <module> or a <submodule> element.

The set of YANG prefixes used in the module will be used as the XML prefixes available in the document. These namespace attributes are added to the top-level element for the module prefix and any imported modules.

The following example shows the XML instance document that is generated for --module=test4 and --format=yin:.

> yangdump-pro --module=test4 --format=yin --output=test4.yin

The file "test4.yin" will be created with the following contents:

<?xml version="1.0" encoding="UTF-8"?>
<module 
  name="test4"
  xmlns="urn:ietf:params:xml:ns:yang:yin:1"
  xmlns:t4="http://netconfcentral.org/ns/test4">
  <namespace uri="http://netconfcentral.org/ns/test4" />
  <prefix value="t4" />
  <revision date="2009-09-09">
    <description>
      <text>Initial revision.</text>
    </description>
  </revision>
  <typedef name="aa-type">
    <description>
      <text>test type</text>
    </description>
    <type name="int32">
      <range value="1..10&#32;|&#32;20..30" />
    </type>
  </typedef>
  <container name="a">
    <leaf-list name="aa">
      <type name="aa-type" />
      <max-elements value="5" />
    </leaf-list>
  </container>
  <leaf name="b">
    <type name="leafref">
      <path value="../a/aa" />
    </type>
  </leaf>
  <list name="c">
    <key value="x" />
    <leaf name="x">
      <type name="uint16" />
    </leaf>
    <leaf name="y">
      <type name="instance-identifier" />
    </leaf>
  </list>
</module>

HTML Translation

xHTML 1.0 files can be generated by using the --format=html parameter value.

An HTML version of a YANG file will contain color-coded YANG tokens to make the file easier to read. There will also be links created whenever possible, for statements which reference typedefs, groupings, extensions, etc.

The following configuration parameters are available to control some of the details:

  • --html-div: If 'true', create a single <div> element that can be integrated into other WEB pages. The default is 'false', to create an entire WEB page (<html> element).

  • --html-toc: controls how (or if) a table of contents section is generated. The default is to create a drop-down menu type ToC, which requires that Javascript is enabled in the browser.

  • --objview: controls whether raw (with uses, augments, refine, and deviation statements) or cooked (final object tree without uses, etc). The default is the 'raw' (original) view.

  • --simurls: controls how URLs with parameter fragments are generated. The default is 'false', which is to use traditional encoded parameters.

  • --unified: controls whether submodules are combined into the main module, or if the 'include' statements are left in place. The default is 'false', to treat each file separately, and not expand any include statements.

  • --urlstart: specifies the string that starts every generated URL in all A and HREF attributes. There is no default for this parameter.

The following example shows the HTML that is generated for --module=test4, using default values for all HTML generation parameters:

> yangdump-pro --module=test4 --format=html --output=test4.html

The file "test4.html" will be created with the following contents:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>YANG Module test4 Version 2009-09-09</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta name="description" content="YANG data model documentation"/>
  <meta name="generator" content="yangdump 21.10-3 (http://www.netconfcentral.org/)"/>
  <link rel="stylesheet" href="http://netconfcentral.org/static/css/style.css" type="text/css"/>
</head>
<body>
  <h1 class="yang">test4@2009-09-09</h1>

  <ul id="nav">
    <li><a href="#">Typedefs</a>
      <ul>
        <li><a href="#aa-type.10">aa-type</a></li>
      </ul>
    </li>
    <li><a href="#">Objects</a>
      <ul>
        <li class="daddy"><a href="#a.15">a</a>
          <ul>
            <li><a href="#aa.16">aa</a></li>
          </ul>
        </li>
        <li><a href="#b.22">b</a></li>
        <li class="daddy"><a href="#c.26">c</a>
          <ul>
            <li><a href="#x.28">x</a></li>
            <li><a href="#y.29">y</a></li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>

<br />
<div class="yang">
<pre>

  <span class="yang_kw">module</span> <span class="yang_id">test4</span> {

    <span class="yang_kw">yang-version</span> <span class="yang_str">1</span>;

    <span class="yang_kw">namespace</span>
      <span class="yang_str">"http://netconfcentral.org/ns/test4"</span>;

    <span class="yang_kw">prefix</span> <span class="yang_str">t4</span>;

    <span class="yang_kw">revision</span> <span class="yang_str">"2009-09-09"</span> {
      <span class="yang_kw">description</span> <span class="yang_str">"Initial revision."</span>;
    }


    <a name="aa-type.10"></a><span class="yang_kw">typedef</span> <span class="yang_id">aa-type</span> {
      <span class="yang_kw">type</span> <span class="yang_id">int32</span> {
        <span class="yang_kw">range</span> <span class="yang_str">"1..10 | 20..30"</span>;
      }
      <span class="yang_kw">description</span> <span class="yang_str">"test type"</span>;
    }

    <a name="a.15"></a><span class="yang_kw">container</span> <span class="yang_id">a</span> {
      <a name="aa.16"></a><span class="yang_kw">leaf-list</span> <span class="yang_id">aa</span> {
        <span class="yang_kw">type</span> <span class="yang_id"><a href="#aa-type.10">aa-type</a></span>;
        <span class="yang_kw">max-elements</span> <span class="yang_str">5</span>;
      }
    }  <span class="yang_cmt">// container a</span>

    <a name="b.22"></a><span class="yang_kw">leaf</span> <span class="yang_id">b</span> {
      <span class="yang_kw">type</span> <span class="yang_id">leafref</span> {
        <span class="yang_kw">path</span> <a href="#aa.16"><span class="yang_str">"../a/aa"</span></a>;
      }
    }

    <a name="c.26"></a><span class="yang_kw">list</span> <span class="yang_id">c</span> {
      <span class="yang_kw">key</span> "<a href="#x.28">x</a>";
      <a name="x.28"></a><span class="yang_kw">leaf</span> <span class="yang_id">x</span> {
        <span class="yang_kw">type</span> <span class="yang_id">uint16</span>;
      }

      <a name="y.29"></a><span class="yang_kw">leaf</span> <span class="yang_id">y</span> {
        <span class="yang_kw">type</span> <span class="yang_id">instance-identifier</span>;
      }
    }  <span class="yang_cmt">// list c</span>
  }  <span class="yang_cmt">// module test4</span>
</pre>
</div>
</body>
</html>

The following picture shows how this WEB page looks in a WEB browser:

../_images/test4_html.png

XSD Translation

Note

Note: This feature is obsolete and no longer supported. Do not use.

SQL Translation

Note

SQL translation is reserved for future use. The --format=sql enumeration is not supported.

SQL Documentation Database Translation

SQL documentation database translation for the Netconf Central documentation database can be generated using the --format=sqldb parameter value.

Canonical YANG Translation

Note

This feature is deprecated. Do not use!

Canonical YANG files can be generated by using the --format=yang parameter value.

In this translation mode, all YANG constructs are generated in the same order, with the same indentation.

The order used is the order defined in the YANG specification ABNF. The order is somewhat arbitrary, but the purpose of this translation mode is to generate consistent documentation.

Normally, the order of top-level statements within a module is preserved in the canonical YANG translation. Only the sub-statements within the top-level statements may be reordered. Child objects are never reordered, just the sub-statements within them.

Range statements will be converted to canonical form. If there are contiguous range parts, then they will be combined.

Note

Comments are not preserved in the translation.

Example range statement:

range "1 .. 10 \| 11 \| 12 .. 20";

Canonical form for this example:

range "1 .. 20";

If the --unified parameter is set to 'true', then all statements of a similar type will be grouped together, from all sub-modules included by the main module.

The ncx:hidden extension will cause objects containing this extension to be omitted during translation.

Copy and Rename YANG Files

Exact copies of a YANG file can be copied to another directory and renamed to the default naming scheme, using the --format=copy parameter value.

Only YANG files that have no errors will be copied. If the validation phase produces a non-zero error count, then the file will not be copied and renamed.

The --defnames parameter is set to 'true' in this mode. The default YANG file names will be created for each input file.

Example file foo.yang:

module foo {
   namespace http://example.com/ns/foo;
   prefix foo;
   // header skipped
   revision 2009-02-03 {
      description "Initial version";
   }
}

Example renamed file, if --output=~/workdir:

Server SIL and SIL-SA Code Generation

The yangdump-pro program can be used to generate C code-stub files for the netconfd-pro server.

Note

The yangdump-sdk program is identical to yangdump-pro, starting in the 21.10-4 release.

Normally a SIL file is generated for a single YANG module. However this does not allow SIL code for external augmentation statements to be generated. In order to generate SIL code for a set of modules, such as a base module and 1 or more modules that augment the main module, the --sil-bundle parameter must be used.

The SIL bundle name must be different than all the module names in the bundle. A H and C file will be generated for the SIL bundle initialization and cleanup hooks (with make_sil_bundle). If the bundle name is 'bundle1', then there will be files created called y_bundle1.c and y_bundle1.h.

The following scripts are installed to help create complete SIL directories. The yangdump-sdk program is invoked multiple times to generate each type of of file each time (e.g, C and H).

  • make_sil_bundle

  • make_sil_dir_pro

  • make_sil_sa_bundle

  • make_sil_sa_dir

There are 2 modes of operation:

  • split-mode: The SIL code is split into user and system files. This is the recommended and default approach.

  • combined-mode: SIL modules contain the user and system callback functions combined. This mode is not recommended since the list keys are not automatically handled in this mode.

Note

The combined mode is now deprecated. The split mode is now the default, starting in 21.10-1.

To inject C “include statements” into the C files that are generated, use the --sil-include parameter.

Note

Code generation defaults have changed starting in the 21.10-1 release.

  • sil-edit2 is the default so it can be omitted

  • sil-get2 is the default so it can be omitted

  • To generate GET1 functions, use the –sil-get1 parameter

  • To generate EDIT1 functions, use the –sil-edit1 parameter

Server Instrumentation H File Generation

There are 4 different parameters for generating SIL developer H files:

--format=h

Generate combined User and YumaPro SIL H file

--format=uh

Generate split User SIL H file

--format=yh

Generate split YumaPro SIL H file

--format=bh

Generate a SIL bundle H file

These parameter values are only relevant for YumaPro server developers. Refer to the YumaPro Developer Manual for more details.

Server Instrumentation C File Generation

There are 4 different parameters for generating SIL developer C files:

--format=c

Generate combined User and YumaPro SIL C file

--format=uc

Generate split User SIL C file

--format=yc

Generate split YumaPro SIL C file

--format=bc

Generate a SIL bundle C file

These parameter values are only relevant for YumaPro server developers. Refer to the YumaPro Developer Manual for more details.

There are 6 additional parameters for modifying how SIL developer code will be generated:

Parameter

Description

--sil-bundle

Generate code for multiple modules instead of 1 module

--sil-edit2

Generate 2nd generation edit callbacks instead of 1st generation

--sil-get2

Generate 2nd generation get callbacks instead of 1st generation

--sil-include

Generate an 'include' directive for the specified header

--sil-nmda

Generate additional NMDA code in GET2 functions

--sil-sa

Generate SIL-SA code instead of SIL code

Doxygen Header Generation

The Doxygen program is a widely available open-source program for generating source code documentation.

The auto-generated SIL or SIL-SA code now includes doxygen formatted header comments by default. To turn this feature off, use the --doxygen-headers=false setting, and the original style comments will be generated instead.

Refer to the YumaPro Doxygen Browser section of the YumaPro Developer Manual for more details.