+++ /dev/null
-/* STANDARD_RIFT_IO_COPYRIGHT */
-
-/**
- * @file rw-pb-ext.yang
- * @author Tim Mortsolf, Anil Gunturu, Tom Seidenberg
- * @date 2013/03/21
- * @brief RiftWare yang to protobuf conversion extensions
- */
-
-module rw-pb-ext
-{
- namespace "http://riftio.com/ns/riftware-1.0/rw-pb-ext";
- prefix "rwpb";
-
- revision 2014-03-28 {
- description
- "Initial revision.";
- reference
- "RIFT yang extensions for converting yang files to Google
- Protocol Buffers (protobuf) using rift protoc-c extensions.";
- }
-
- extension msg-new {
- argument "typename";
- description
- "Generate an equivalent, top-level, protobuf message for this
- container, list, rpc input, rpc output, or notification. The
- argument is the name of the protobuf message type. Allowed
- values are valid C identifiers.
-
- The protobuf definition will only be generated when processing
- the same module that defines the yang object - a duplicate will
- not be generated when importing reusing a yang object via uses,
- or when importing the module.";
- }
-
- extension msg-name {
- argument "typename";
- description
- "Change the name of an embedded protobuf message type for this
- container or list. Allowed values are valid C identifiers.
-
- In lieu of this extension, embedded protobuf message typenames
- are based on the fieldname, and further mangled by removing
- underscores and CamelCased at underscore boundaries. This
- extension allows the automatic mangling procedure to be
- overridden.
-
- This extension is incompatible with msg-new, which already
- defines the typename for top-level messages. Use this extension
- solely for embedded messages.";
- }
-
- extension msg-flat {
- argument "selection";
- description
- "Set the protobuf message rw_msgopts flat option on a container
- or list statement. Allowed values are 'true', 'false', and
- 'auto'. The default is 'false' for top-level messages, and
- 'auto' for embedded messages. If 'auto' is specified, the
- behavior is the same as the enclosing container or list.
-
- Unless overridden, this extension effectively applies to all
- enclosed descendent container and list statements. Flatness will
- be required by the protobuf compilation step.";
- }
-
- extension msg-tag-base {
- argument "value";
- description
- "Specify a base tag value for a container, list, grouping, or
- uses statement. Field tags may be specified relative to this
- base. Allowed values are positive
- decimal integers.";
- // ATTN: would really like to specify field-relative in uses!
- }
-
-/*
- extension msg-tag-reserve {
- argument "value";
- description
- "Reserve space in the tag numbering for future expansion of the
- enclosing grouping, container, or choice. Must be a positive
- decimal integer. Choose carefully, as you cannot increase the
- value at a later time.";
- }
-*/
-
- extension msg-proto-max-size {
- argument "value";
- description
- "Specify the maximum size of this message in the C structure or
- so in bytes. Allowed values are positive decimal integers.";
- }
-
- extension msg-typedef {
- argument "typename";
- description
- "Create a prototbuf-c message typedef for the original, base
- definition of the container, list, grouping, rpc input, rpc
- output, or notification. Allowed values are valid C identifiers.
-
- typename will be appended to the mangeled protobuf package name
- and an underscore, to ensure name uniqueness across the global
- schema.
-
- The typedef will only be generated when processing
- the same module that defines the yang object - a duplicate will
- not be generated when importing reusing a yang object via uses,
- or when importing the module.";
- }
-
- extension field-name {
- argument "fieldname";
- description
- "Change the name of the element to fieldname, when converting the
- object to protobuf. Allowed values are valid C identifiers.
-
- In lieu of this extension, element names will be used as-is, if
- possible, or mangled to fit in the C identifier character space
- (invalid C identifier characters will be replaced with
- underscore). This extension allows the automatic mangling
- procedure to be overridden.";
- }
-
- extension field-inline {
- argument "selection";
- description
- "Set the protobuf field 'inline' option on a container, list,
- leaf-list, or leaf statement. Allowed values are 'true',
- 'false', and 'auto'. If 'auto' is specified, the behavior is
- controlled by the enclosing container or list's protobuf-msg-flat
- setting.
-
- When applied to a container or list statement, this extension is
- inherited by all enclosed objects, unless overridden.";
- }
-
- extension field-inline-max {
- argument "limit";
- description
- "Set the protobuf field 'inline_max' option for list and
- leaf-list statements. Allowed values are a positive decimal
- integer, 'yang', or 'none'. Example limits:
-
- '64'
- 'yang'
- 'none'
-
- If 'none' is specified, then the inline_max protobuf extension
- will not be used.
-
- If 'yang' is specified, then the number of elements specified in
- the yang 'max-elements' statement is used. If there is no
- 'max-elements' statement, the behavior defaults to 'none'.
-
- If a decimal integer is specified, that number is used as the
- maximum length.
-
- If this extension is not specified, the behavior defaults to
- 'yang'. Descendant list and leaf-list objects do not inherit
- this extension.";
- }
-
- extension field-string-max {
- argument "limit";
- description
- "Set the protobuf field 'string_max' option for a leaf or
- leaf-list of type string, binary, leafref, identityref, or
- instance-identifier. Allowed values are a positive decimal
- integer, 'yang', or 'none'. An optional encoding specifier may
- also be specified, as octet or utf8, which specifies how
- characters are counted. If specified, the encoding must come
- first. Example limits:
-
- 'octet 64'
- 'utf8 20'
- 'utf8 yang'
- 'utf8'
- '128'
- 'none'
-
- If 'none' is specified, then the string_max protobuf extension
- will not be used. 'none' cannot be combined with 'octet' or
- 'utf8'.
-
- If 'yang' is specified, the yang type must be string or binary.
- If the yang type includes the length statement, then the
- statements maximum length is used as the length. Otherwise,
- behavior defaults to 'none'.
-
- If a decimal integer is specified, that number is used as the
- length.
-
- The encoding specifiers are used to determine the actual number
- of bytes used in the protobuf extension. If the 'octet'
- specifier is used, then the maximum length is used literally as
- the byte length. If the 'utf8' specified is used, then the
- maximum length is considered to be in terms of worst-case UTF-8
- characters, in which case the protobuf byte length will actually
- be 4 times the specified length.
-
- For string and binary types, the default encoding is 'octet'.
- For the remaining types, the default encoding is 'utf8',
- reflecting those types fundemental description as XML entities
- assumed to be encoded in UTF-8.
-
- If this extension is not specified, then the default is 'yang'
- for string and binary, and 'none' for the other types. This
- extension cannot be specified on aggregate objects, and so it
- cannot be inherited.";
- }
-
- extension field-tag {
- argument "value";
- description
- "Set the protobuf field tag. Allowed values are a positive
- decimal integer, 'auto', a base-relative addition expression, or
- a field-relative addition expression.
-
- If a decimal integer is specified, then the tag is set to the
- specified number. You should avoid using this form in a
- grouping, because you may not be able to guarantee uniqueness
- across all the uses of the group. However, the syntax will be
- allowed.
-
- A base-relative addition expression allows the tag of a field to
- be defined in terms of the base tag of an enclosing grouping,
- container, list, or uses statement. The expression has the form
- '+NUMBER', where NUMBER is the value to add to the base to derive
- the current field's tag.
-
- A field-relative addition expression allows the tag of one field
- to be defined in terms of another field. The expression has the
- form 'NAME+NUMBER', where NAME is the name of the other field,
- and NUMBER is the value to add to the other fields tag to derive
- the current field's tag.
-
- If this extension is not specified, the default behavior is
- 'auto'.";
- }
-
- extension field-type {
- argument "type";
- description
- "Override the default protobuf field type mapping for a leaf or
- leaf-list type, and use the specified protobuf type instead.
-
- Allowed values are any of the Protobuf scalar types, as
- restricted by the yang leaf type:
-
- +---------------------------+-------------------------------+
- | (pseudo) yang leaf type | (pseudo) protobuf scalar type |
- |---------------------------+-------------------------------+
- | int8, int16, int32 | int32, sint32, sfixed32, auto |
- +---------------------------+-------------------------------+
- | int64 | int64, sint64, sfixed64, auto |
- +---------------------------+-------------------------------+
- | uint8, uint16, uint32 | uint32, fixed32, auto |
- +---------------------------+-------------------------------+
- | uint64 | uint64, fixed64, auto |
- +---------------------------+-------------------------------+
- | decimal | uint64, sint64, int64, |
- | | fixed64, sfixed64, |
- | | float, double, auto |
- +---------------------------+-------------------------------+
- | empty, boolean | bool, auto |
- +---------------------------+-------------------------------+
- | string, leafref, | string, auto |
- | identityref, | |
- | instance-identifier, | |
- | anyxml | |
- +---------------------------+-------------------------------+
- | bits, binary | bytes, auto |
- +---------------------------+-------------------------------+
-
- If 'auto' is specified, the default conversion will be used. The
- protobuf pseudo-type utf8 is equivalent to string, except that
- length limits will be adjusted in protobuf extentions to allow
- the string to be composed entirely of the maximum sized UTF-8
- multibyte characters (byte length is 4 times larger than the
- character length).";
- }
-
- extension field-c-type {
- argument "type";
- description
- "Override the default protoc-c C-language type mapping for a leaf
- or leaf-list type, and use the specified C type instead.";
- }
-
- /* ATTN: Stop using this extension? */
- extension package-name {
- argument "pkgname";
- description
- "Specifies the name of the package name in the generated .proto
- file on a module statement The argument is the name of the
- package-name. Allowed values are valid C identifiers When
- package-name is not specified the generated package name defaults
- to the Yang module name";
- }
-
- extension application-request-point {
- description
- "This extension is used temporarily until the config and data portions
- are split into different namespaces and keyspecs. This allows
- applications to provide data at a keyspec, and request config at a
- different level";
- }
-
- extension enum-name {
- argument "enumname";
- description
- "Use the specified name for the enum enumerator in the .proto
- instead of the default mangled name of the yang identifer.
- If there is a name conflict with other enum name either specified
- explicitly or generated one, the yangpbc conversion will fail.
- Allowed values are valid C identifiers.";
- }
-
- extension enum-type {
- argument "enumtypename";
- description
- "Use the specified name for the enum type in the .proto instead
- of the default mangled name of the yang identifier. If there is
- a name conflict with another enum type, either auto-generated or
- explicitly specified one, the yangpbc conversion will fail.
- Allowed values are valid C identifiers.";
- }
-
- extension file-pbc-include {
- argument "pathstring";
- description
- "A module level extension to specify the include files for pb-c.h
- when any rift specific c-types are used. This extension can
- occur multiple times as a child of module statement. The value
- should be a valid path string.";
- }
-
- extension field-merge-behavior {
- argument "value";
- description
- "An extension for controlling the merge done for listy types
- during upacking of protobuf. It can take 3 different value:
-
- 1) default: The default is whatever protobuf-c does today
- (for keyed lists, the default is equivalent to by-keys).
-
- 2) by-keys: allowed on keyed lists (and leaf-lists): merge
- elements with matching key.
-
- 3) none: allowed on keyed lists (and leaf-lists): do not
- attempt to merge elements. This must ONLY be used when it
- is known or expected that the proto message would contain
- large number of list items.";
- }
-
-} // rw-pb-ext