Documentation ¶
Overview ¶
Package yang is used to parse .yang files (see RFC 6020).
A generic yang statements takes one of the forms:
keyword [argument] ; keyword [argument] { [statement [...]] }
At the lowest level, package yang returns a simple tree of statements via the Parse function. The Parse function makes no attempt to determine the validity of the source, other than checking for generic syntax errors.
At it's simplest, the GetModule function is used. The GetModule function searches the current directory, and any directory added to the Path variable, for a matching .yang source file by appending .yang to the name of the module:
// Get the tree for the module module-name by looking for the source // file named module-name.yang. e, errs := yang.GetModule("module-name" [, optional sources...]) if len(errs) > 0 { for _, err := range errs { fmt.Fprintln(os.Stderr, err) } os.Exit(1) } // e is the Entry tree for "module-name"
More complicated uses cases should use NewModules and then some combination of Modules.GetModule, Modules.Read, Modules.Parse, and Modules.GetErrors.
The GetErrors method is mandatory, however, both yang.GetModule and Modules.GetModule automatically call Modules.GetErrors.
Index ¶
- Constants
- Variables
- func CamelCase(s string) string
- func Frac(f float64) float64
- func NodePath(n Node) string
- func PathsWithModules(root string) (paths []string, err error)
- func PrintNode(w io.Writer, n Node)
- func Source(n Node) string
- type Action
- type AnyData
- type AnyXML
- type Argument
- type Augment
- type BelongsTo
- type Bit
- type Case
- type Choice
- type Container
- type Deviate
- type DeviateOpt
- type DeviateOptions
- type DeviatedEntry
- type Deviation
- type Element
- type Entry
- func (e *Entry) ApplyDeviate(deviateOpts ...DeviateOpt) []error
- func (e *Entry) Augment(addErrors bool) (processed, skipped int)
- func (e *Entry) DefaultValues() []string
- func (e *Entry) Find(name string) *Entry
- func (e *Entry) FixChoice()
- func (e *Entry) GetErrors() []error
- func (e *Entry) GetWhenXPath() (string, bool)
- func (e *Entry) InstantiatingModule() (string, error)
- func (e *Entry) IsCase() bool
- func (e *Entry) IsChoice() bool
- func (e *Entry) IsContainer() bool
- func (e *Entry) IsDir() bool
- func (e *Entry) IsLeaf() bool
- func (e *Entry) IsLeafList() bool
- func (e *Entry) IsList() bool
- func (e *Entry) Modules() *Modules
- func (e *Entry) Namespace() *Value
- func (e *Entry) Path() string
- func (e *Entry) Print(w io.Writer)
- func (e *Entry) ReadOnly() bool
- func (e *Entry) SingleDefaultValue() (string, bool)
- type EntryKind
- type Enum
- type EnumType
- func (e *EnumType) IsDefined(name string) bool
- func (e *EnumType) Name(value int64) string
- func (e *EnumType) NameMap() map[string]int64
- func (e *EnumType) Names() []string
- func (e *EnumType) Set(name string, value int64) error
- func (e *EnumType) SetNext(name string) error
- func (e *EnumType) Value(name string) int64
- func (e *EnumType) ValueMap() map[int64]string
- func (e *EnumType) Values() []int64
- type ErrorNode
- type Extension
- type Feature
- type Grouping
- type Identity
- func (s *Identity) Exts() []*Statement
- func (s *Identity) GetValue(name string) *Identity
- func (s *Identity) IsDefined(name string) bool
- func (Identity) Kind() string
- func (s *Identity) NName() string
- func (s *Identity) ParentNode() Node
- func (s *Identity) PrefixedName() string
- func (s *Identity) Statement() *Statement
- type Import
- type Include
- type Input
- type Leaf
- type LeafList
- type Length
- type List
- type ListAttr
- type Module
- func (s *Module) Current() string
- func (s *Module) Exts() []*Statement
- func (s *Module) FullName() string
- func (s *Module) GetPrefix() string
- func (s *Module) Groupings() []*Grouping
- func (s *Module) Identities() []*Identity
- func (s *Module) Kind() string
- func (s *Module) NName() string
- func (s *Module) ParentNode() Node
- func (s *Module) Statement() *Statement
- func (s *Module) Typedefs() []*Typedef
- type Modules
- func (ms *Modules) AddPath(paths ...string)
- func (ms *Modules) ClearEntryCache()
- func (ms *Modules) FindModule(n Node) *Module
- func (ms *Modules) FindModuleByNamespace(ns string) (*Module, error)
- func (ms *Modules) GetModule(name string) (*Entry, []error)
- func (ms *Modules) Parse(data, name string) error
- func (ms *Modules) Process() []error
- func (ms *Modules) Read(name string) error
- type Must
- type Node
- type Notification
- type Number
- type Options
- type Output
- type Pattern
- type RPC
- type RPCEntry
- type Range
- type Refine
- type Revision
- type Statement
- func (s *Statement) Arg() (string, bool)
- func (s *Statement) Exts() []*Statement
- func (s *Statement) Kind() string
- func (s *Statement) Location() string
- func (s *Statement) NName() string
- func (s *Statement) ParentNode() Node
- func (s *Statement) Statement() *Statement
- func (s *Statement) SubStatements() []*Statement
- func (s *Statement) Write(w io.Writer, indent string) error
- type TriState
- type Type
- type TypeKind
- type Typedef
- type Typedefer
- type Uses
- type UsesStmt
- type Value
- type YRange
- type YangRange
- type YangType
Constants ¶
const ( TSUnset = TriState(iota) TSTrue TSFalse )
The possible states of a TriState.
const ( LeafEntry = EntryKind(iota) DirectoryEntry AnyDataEntry AnyXMLEntry CaseEntry ChoiceEntry InputEntry NotificationEntry OutputEntry DeviateEntry )
Enumeration of the types of entries.
const ( // DeviationUnset specifies that the argument was unset, which is invalid. DeviationUnset deviationType = iota // DeviationNotSupported corresponds to the not-supported deviate argument. DeviationNotSupported // DeviationAdd corresponds to the add deviate argument to the deviate stmt. DeviationAdd // DeviationReplace corresponds to the replace argument to the deviate stmt. DeviationReplace // DeviationDelete corresponds to the delete argument to the deviate stmt. DeviationDelete )
const ( // MaxInt64 corresponds to the maximum value of a signed int64. MaxInt64 = 1<<63 - 1 // MinInt64 corresponds to the maximum value of a signed int64. MinInt64 = -1 << 63 // Min/MaxDecimal64 are the max/min decimal64 values. MinDecimal64 float64 = -922337203685477580.8 MaxDecimal64 float64 = 922337203685477580.7 // AbsMinInt64 is the absolute value of MinInt64. AbsMinInt64 = 1 << 63 // MaxEnum is the maximum value of an enumeration. MaxEnum = 1<<31 - 1 // MinEnum is the minimum value of an enumeration. MinEnum = -1 << 31 // MaxBitfieldSize is the maximum number of bits in a bitfield. MaxBitfieldSize = 1 << 32 // MaxFractionDigits is the maximum number of fractional digits as per RFC6020 Section 9.3.4. MaxFractionDigits uint8 = 18 )
const ( // Ynone represents the invalid (unset) type. Ynone = TypeKind(iota) // Yint8 is an int in the range [-128, 127]. Yint8 // Yint16 is an int in the range [-32768, 32767]. Yint16 // Yint32 is an int in the range [-2147483648, 2147483647]. Yint32 // Yint64 is an int in the range [-9223372036854775808, 9223372036854775807] Yint64 // Yuint8 is an int in the range [0, 255] Yuint8 // Yuint16 is an int in the range [0, 65535] Yuint16 // Yuint32 is an int in the range [0, 4294967295] Yuint32 // Yuint64 is an int in the range [0, 18446744073709551615] Yuint64 // Ybinary stores arbitrary data. Ybinary // Ybits is a named set of bits or flags. Ybits // Ybool is true or false. Ybool // Ydecimal64 is a signed decimal number. Ydecimal64 // Yempty has no associated value. Yempty // Yenum stores enumerated strings. Yenum // Yidentityref stores an extensible enumeration. Yidentityref // YinstanceIdentifier stores a reference to a data tree node. YinstanceIdentifier // Yleafref stores a reference to a leaf instance. Yleafref // Ystring is a human readable string. Ystring // Yunion is a choice of types. Yunion )
Variables ¶
var ( Int8Range = mustParseRangesInt("-128..127") Int16Range = mustParseRangesInt("-32768..32767") Int32Range = mustParseRangesInt("-2147483648..2147483647") Int64Range = mustParseRangesInt("-9223372036854775808..9223372036854775807") Uint8Range = mustParseRangesInt("0..255") Uint16Range = mustParseRangesInt("0..65535") Uint32Range = mustParseRangesInt("0..4294967295") Uint64Range = mustParseRangesInt("0..18446744073709551615") )
These are the default ranges defined by the YANG standard.
var ( // TypeKindFromName maps the string name used in a YANG file to the enumerated // TypeKind used in this library. TypeKindFromName = map[string]TypeKind{ "none": Ynone, "int8": Yint8, "int16": Yint16, "int32": Yint32, "int64": Yint64, "uint8": Yuint8, "uint16": Yuint16, "uint32": Yuint32, "uint64": Yuint64, "binary": Ybinary, "bits": Ybits, "boolean": Ybool, "decimal64": Ydecimal64, "empty": Yempty, "enumeration": Yenum, "identityref": Yidentityref, "instance-identifier": YinstanceIdentifier, "leafref": Yleafref, "string": Ystring, "union": Yunion, } // TypeKindToName maps the enumerated type used in this library to the string // used in a YANG file. TypeKindToName = map[TypeKind]string{ Ynone: "none", Yint8: "int8", Yint16: "int16", Yint32: "int32", Yint64: "int64", Yuint8: "uint8", Yuint16: "uint16", Yuint32: "uint32", Yuint64: "uint64", Ybinary: "binary", Ybits: "bits", Ybool: "boolean", Ydecimal64: "decimal64", Yempty: "empty", Yenum: "enumeration", Yidentityref: "identityref", YinstanceIdentifier: "instance-identifier", Yleafref: "leafref", Ystring: "string", Yunion: "union", } // BaseTypedefs is a map of all base types to the Typedef structure manufactured // for the type. BaseTypedefs = map[string]*Typedef{} )
var EntryKindToName = map[EntryKind]string{ LeafEntry: "Leaf", DirectoryEntry: "Directory", AnyDataEntry: "AnyData", AnyXMLEntry: "AnyXML", CaseEntry: "Case", ChoiceEntry: "Choice", InputEntry: "Input", NotificationEntry: "Notification", OutputEntry: "Output", DeviateEntry: "Deviate", }
EntryKindToName maps EntryKind to their names
Functions ¶
func CamelCase ¶
CamelCase returns a CamelCased name for a YANG identifier. Currently this supports the output being used for a Go or proto identifier. Dash and dot are first converted to underscore, and then any underscores before a lower-case letter are removed, and the letter converted to upper-case. Any input characters not part of the YANG identifier specification (https://tools.ietf.org/html/rfc7950#section-6.2) are treated as lower-case characters. The first letter is always upper-case in order to be an exported name in Go. There is a remote possibility of this rewrite causing a name collision, but it's so remote we're prepared to pretend it's nonexistent - since the C++ generator lowercases names, it's extremely unlikely to have two fields with different capitalizations. In short, _my_field-name_2 becomes XMyFieldName_2.
func PathsWithModules ¶
PathsWithModules returns all paths under and including the root containing files with a ".yang" extension, as well as any error encountered
Types ¶
type Action ¶
type Action struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Description *Value `yang:"description"` Grouping []*Grouping `yang:"grouping"` IfFeature []*Value `yang:"if-feature"` Input *Input `yang:"input"` Output *Output `yang:"output"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Typedef []*Typedef `yang:"typedef"` }
An Action is defined in http://tools.ietf.org/html/rfc7950#section-7.15
Action define an RPC operation connected to a specific container or list data node in the schema. In the schema tree, Action differ from RPC only in where in the tree they are found. RPC nodes are only found as sub-statements of a Module, while Action are found only as sub-statements of Container, List, Grouping and Augment nodes.
func (*Action) ParentNode ¶
type AnyData ¶
type AnyData struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Config *Value `yang:"config"` Description *Value `yang:"description"` IfFeature []*Value `yang:"if-feature"` Mandatory *Value `yang:"mandatory"` Must []*Must `yang:"must"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` When *Value `yang:"when"` }
An AnyData is defined in: http://tools.ietf.org/html/rfc7950#section-7.10
AnyData are only expected in YANG 1.1 modules (those with a "yang-version 1.1;" statement in the module).
func (*AnyData) ParentNode ¶
type AnyXML ¶
type AnyXML struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Config *Value `yang:"config"` Description *Value `yang:"description"` IfFeature []*Value `yang:"if-feature"` Mandatory *Value `yang:"mandatory"` Must []*Must `yang:"must"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` When *Value `yang:"when"` }
An AnyXML is defined in: http://tools.ietf.org/html/rfc6020#section-7.10
func (*AnyXML) ParentNode ¶
type Argument ¶
type Argument struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge" json:"-"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext" json:",omitempty"` YinElement *Value `yang:"yin-element" json:",omitempty"` }
An Argument is defined in: http://tools.ietf.org/html/rfc6020#section-7.17.2
func (*Argument) ParentNode ¶
type Augment ¶
type Augment struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Anydata []*AnyData `yang:"anydata"` Action []*Action `yang:"action"` Anyxml []*AnyXML `yang:"anyxml"` Case []*Case `yang:"case"` Choice []*Choice `yang:"choice"` Container []*Container `yang:"container"` Description *Value `yang:"description"` IfFeature []*Value `yang:"if-feature"` Leaf []*Leaf `yang:"leaf"` LeafList []*LeafList `yang:"leaf-list"` List []*List `yang:"list"` Notification []*Notification `yang:"notification"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Uses []*Uses `yang:"uses"` When *Value `yang:"when"` }
An Augment is defined in: http://tools.ietf.org/html/rfc6020#section-7.15 and http://tools.ietf.org/html/rfc7950#section-7.17 ("augment" sub-statement)
func (*Augment) ParentNode ¶
type BelongsTo ¶
type BelongsTo struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge" json:"-"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext" json:",omitempty"` Prefix *Value `yang:"prefix,required"` }
A BelongsTo is defined in: http://tools.ietf.org/html/rfc6020#section-7.2.2
func (*BelongsTo) ParentNode ¶
type Bit ¶
type Bit struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Description *Value `yang:"description"` IfFeature []*Value `yang:"if-feature"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Position *Value `yang:"position"` }
A Bit is defined in: http://tools.ietf.org/html/rfc6020#section-9.7.4
func (*Bit) ParentNode ¶
type Case ¶
type Case struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Anydata []*AnyData `yang:"anydata"` Anyxml []*AnyXML `yang:"anyxml"` Choice []*Choice `yang:"choice"` Container []*Container `yang:"container"` Description *Value `yang:"description"` IfFeature []*Value `yang:"if-feature"` Leaf []*Leaf `yang:"leaf"` LeafList []*LeafList `yang:"leaf-list"` List []*List `yang:"list"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Uses []*Uses `yang:"uses"` When *Value `yang:"when"` }
A Case is defined in: http://tools.ietf.org/html/rfc6020#section-7.9.2
func (*Case) ParentNode ¶
type Choice ¶
type Choice struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Anydata []*AnyData `yang:"anydata"` Anyxml []*AnyXML `yang:"anyxml"` Case []*Case `yang:"case"` Config *Value `yang:"config"` Container []*Container `yang:"container"` Default *Value `yang:"default"` Description *Value `yang:"description"` IfFeature []*Value `yang:"if-feature"` Leaf []*Leaf `yang:"leaf"` LeafList []*LeafList `yang:"leaf-list"` List []*List `yang:"list"` Mandatory *Value `yang:"mandatory"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` When *Value `yang:"when"` }
A Choice is defined in: http://tools.ietf.org/html/rfc6020#section-7.9
func (*Choice) ParentNode ¶
type Container ¶
type Container struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Anydata []*AnyData `yang:"anydata"` Action []*Action `yang:"action"` Anyxml []*AnyXML `yang:"anyxml"` Choice []*Choice `yang:"choice"` Config *Value `yang:"config"` Container []*Container `yang:"container"` Description *Value `yang:"description"` Grouping []*Grouping `yang:"grouping"` IfFeature []*Value `yang:"if-feature"` Leaf []*Leaf `yang:"leaf"` LeafList []*LeafList `yang:"leaf-list"` List []*List `yang:"list"` Must []*Must `yang:"must"` Notification []*Notification `yang:"notification"` Presence *Value `yang:"presence"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Typedef []*Typedef `yang:"typedef"` Uses []*Uses `yang:"uses"` When *Value `yang:"when"` }
A Container is defined in: http://tools.ietf.org/html/rfc6020#section-7.5 and http://tools.ietf.org/html/rfc7950#section-7.5 ("container" sub-statement)
func (*Container) ParentNode ¶
type Deviate ¶
type Deviate struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Config *Value `yang:"config"` Default *Value `yang:"default"` Mandatory *Value `yang:"mandatory"` MaxElements *Value `yang:"max-elements"` MinElements *Value `yang:"min-elements"` Must []*Must `yang:"must"` Type *Type `yang:"type"` Unique []*Value `yang:"unique"` Units *Value `yang:"units"` }
A Deviate is defined in: http://tools.ietf.org/html/rfc6020#section-7.18.3.2
func (*Deviate) ParentNode ¶
type DeviateOpt ¶ added in v1.2.0
type DeviateOpt interface {
IsDeviateOpt()
}
DeviateOpt is an interface that can be used in function arguments.
type DeviateOptions ¶ added in v1.2.0
type DeviateOptions struct { // IgnoreDeviateNotSupported indicates to the parser to retain nodes // that are marked with "deviate not-supported". An example use case is // where the user wants to interact with different targets that have // different support for a leaf without having to use a second instance // of an AST. IgnoreDeviateNotSupported bool }
DeviateOptions contains options for how deviations are handled.
func (DeviateOptions) IsDeviateOpt ¶ added in v1.2.0
func (DeviateOptions) IsDeviateOpt()
IsDeviateOpt ensures that DeviateOptions satisfies the DeviateOpt interface.
type DeviatedEntry ¶
type DeviatedEntry struct { Type deviationType // Type specifies the deviation type. DeviatedPath string // DeviatedPath corresponds to the path that is being deviated. // Entry is the embedded Entry storing the deviations that are made. Fields // are set to the value in the schema after the deviation has been applied. *Entry }
DeviatedEntry stores a wrapped Entry that corresponds to a deviation.
type Deviation ¶
type Deviation struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Description *Value `yang:"description"` Deviate []*Deviate `yang:"deviate,required"` Reference *Value `yang:"reference"` }
A Deviation is defined in: http://tools.ietf.org/html/rfc6020#section-7.18.3
func (*Deviation) ParentNode ¶
type Element ¶
type Element struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` YinElement *Value `yang:"yin-element"` }
An Element is defined in: http://tools.ietf.org/html/rfc6020#section-7.17.2.2
func (*Element) ParentNode ¶
type Entry ¶
type Entry struct { Parent *Entry `json:"-"` Node Node `json:"-"` // the base node this Entry was derived from. Name string // our name, same as the key in our parent Dirs Description string `json:",omitempty"` // description from node, if any // Default value for the node, if any. Note that only leaf-lists may // have more than one value. For all other types, use the // SingleDefaultValue() method to access the default value. Default []string `json:",omitempty"` Units string `json:",omitempty"` // units associated with the type, if any Errors []error `json:"-"` // list of errors encountered on this node Kind EntryKind // kind of Entry Config TriState // config state of this entry, if known Prefix *Value `json:",omitempty"` // prefix to use from this point down Mandatory TriState `json:",omitempty"` // whether this entry is mandatory in the tree // Fields associated with directory nodes Dir map[string]*Entry `json:",omitempty"` Key string `json:",omitempty"` // Optional key name for lists (i.e., maps) // Fields associated with leaf nodes Type *YangType `json:",omitempty"` // Extensions found Exts []*Statement `json:",omitempty"` // Fields associated with list nodes (both lists and leaf-lists) ListAttr *ListAttr `json:",omitempty"` RPC *RPCEntry `json:",omitempty"` // set if we are an RPC // Identities that are defined in this context, this is set if the Entry // is a module only. Identities []*Identity `json:",omitempty"` Augments []*Entry `json:",omitempty"` // Augments defined in this entry. Augmented []*Entry `json:",omitempty"` // Augments merged into this entry. Deviations []*DeviatedEntry `json:"-"` // Deviations associated with this entry. Deviate map[deviationType][]*Entry `json:"-"` Uses []*UsesStmt `json:",omitempty"` // Uses merged into this entry. // Extra maps all the unsupported fields to their values Extra map[string][]interface{} `json:"extra-unstable,omitempty"` // Annotation stores annotated values, and is not populated by this // library but rather can be used by calling code where additional // information should be stored alongside the Entry. Annotation map[string]interface{} `json:",omitempty"` // contains filtered or unexported fields }
Entry represents a single schema tree node, which can be a directory (containing a subtree) or a leaf node (which contains YANG types that have no children, e.g., leaf, leaf-list). They can be distinguished by whether their "Dir" field is nil. This object is created from a corresponding AST node after applying modifications (i.e. uses, augments, deviations). If Errors is not nil then it means semantic errors existed while converting the AST, in which case the only other valid field other than Errors is Node.
func GetModule ¶
GetModule optionally reads in a set of YANG source files, named by sources, and then returns the Entry for the module named module. If sources is missing, or the named module is not yet known, GetModule searches for name with the suffix ".yang". GetModule either returns an Entry or returns one or more errors.
GetModule is a convenience function for calling NewModules, Read, and Process, and then looking up the module name.
func ToEntry ¶
ToEntry expands node n into a directory Entry. Expansion is based on the YANG tags in the structure behind n. ToEntry must only be used with nodes that are directories, such as top level modules and sub-modules. ToEntry never returns nil. Any errors encountered are found in the Errors fields of the returned Entry and its children. Use GetErrors to determine if there were any errors.
func (*Entry) ApplyDeviate ¶
func (e *Entry) ApplyDeviate(deviateOpts ...DeviateOpt) []error
ApplyDeviate walks the deviations within the supplied entry, and applies them to the schema.
func (*Entry) Augment ¶
Augment processes augments in e, return the number of augments processed and the augments skipped. If addErrors is true then missing augments will generate errors.
func (*Entry) DefaultValues ¶ added in v1.0.0
DefaultValues returns all default values for the leaf entry. This is useful for determining the default values for a leaf-list, which may have more than one default value. If the entry has no explicit default, its type default (if any) will be used. nil is returned when no default value exists.
For a leaf entry, use SingleDefaultValue() instead.
func (*Entry) FixChoice ¶
func (e *Entry) FixChoice()
FixChoice inserts missing Case entries for non-case entries within a choice entry.
func (*Entry) GetWhenXPath ¶
GetWhenXPath returns the when XPath statement of e if able.
func (*Entry) InstantiatingModule ¶
InstantiatingModule returns the YANG module which instantiated the Entry within the schema tree - using the same rules described in the documentation of the Namespace function. The namespace is resolved in the module name. This approach to namespacing is used when serialising YANG-modelled data to JSON as per RFC7951.
func (*Entry) IsContainer ¶
IsContainer returns true if e is a container.
func (*Entry) IsLeaf ¶
IsLeaf returns true if e is a leaf i.e. is not a container, list, leaf-list, choice or case statement.
func (*Entry) IsLeafList ¶
IsLeafList returns true if e is a leaf-list.
func (*Entry) Modules ¶
Modules returns the Modules structure that e is part of. This is needed when looking for rooted nodes not part of this Entry tree.
func (*Entry) Namespace ¶
Namespace returns the YANG/XML namespace Value for e as mounted in the Entry tree (e.g., as placed by grouping statements).
Per RFC6020 section 7.12, the namespace on elements in the tree due to a "uses" statement is that of the where the uses statement occurs, i.e., the user, rather than creator (grouping) of those elements, so we follow the usage (Entry) tree up to the parent before obtaining the (then adjacent) root node for its namespace Value.
func (*Entry) ReadOnly ¶
ReadOnly returns true if e is a read-only variable (config == false). If Config is unset in e, then false is returned if e has no parent, otherwise the value parent's ReadOnly is returned.
func (*Entry) SingleDefaultValue ¶ added in v1.0.0
SingleDefaultValue returns the single schema default value for e and a bool indicating whether the entry contains one and only one default value. The empty string is returned when the entry has zero or multiple default values. This function is useful for determining the default values of a non-leaf-list leaf entry. If the leaf has no explicit default, its type default (if any) will be used.
For a leaf-list entry, use DefaultValues() instead.
type EntryKind ¶
type EntryKind int
An EntryKind is the kind of node an Entry is. All leaf nodes are of kind LeafEntry. A LeafList is also considered a leaf node. All other kinds are directory nodes.
type Enum ¶
type Enum struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Description *Value `yang:"description"` IfFeature []*Value `yang:"if-feature"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Value *Value `yang:"value"` }
An Enum is defined in: http://tools.ietf.org/html/rfc6020#section-9.6.4
func (*Enum) ParentNode ¶
type EnumType ¶
type EnumType struct { ToString map[int64]string `json:",omitempty"` // map of enum entries by value (integer) ToInt map[string]int64 `json:",omitempty"` // map of enum entries by name (string) // contains filtered or unexported fields }
A EnumType represents a mapping of strings to integers. It is used both for enumerations as well as bitfields.
func NewBitfield ¶
func NewBitfield() *EnumType
NewBitfield returns an EnumType initialized as a bitfield. Multiple string values may map to the same numeric values. Numeric values must be small non-negative integers.
func (*EnumType) Name ¶
Name returns the name in e associated with value. The empty string is returned if no name has been assigned to value.
func (*EnumType) Set ¶
Set sets name in e to the provided value. Set returns an error if the value is invalid, name is already signed, or when used as an enum rather than a bitfield, the value has previousl been used. When two different names are assigned to the same value, the conversion from value to name will result in the most recently assigned name.
func (*EnumType) SetNext ¶
SetNext sets the name in e using the next possible value that is greater than all previous values.
func (*EnumType) Value ¶
Value returns the value associated with name in e associated. 0 is returned if name is not in e, or if it is the first value in an unnumbered enum. Use IsDefined to definitively confirm name is in e.
type Extension ¶
type Extension struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge" json:"-"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext" json:",omitempty"` Argument *Argument `yang:"argument" json:",omitempty"` Description *Value `yang:"description" json:",omitempty"` Reference *Value `yang:"reference" json:",omitempty"` Status *Value `yang:"status" json:",omitempty"` }
An Extension is defined in: http://tools.ietf.org/html/rfc6020#section-7.17
func (*Extension) ParentNode ¶
type Feature ¶
type Feature struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge" json:"-"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext" json:",omitempty"` Description *Value `yang:"description" json:",omitempty"` IfFeature []*Value `yang:"if-feature" json:",omitempty"` Status *Value `yang:"status" json:",omitempty"` Reference *Value `yang:"reference" json:",omitempty"` }
A Feature is defined in: http://tools.ietf.org/html/rfc6020#section-7.18.1
func (*Feature) ParentNode ¶
type Grouping ¶
type Grouping struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Anydata []*AnyData `yang:"anydata"` Action []*Action `yang:"action"` Anyxml []*AnyXML `yang:"anyxml"` Choice []*Choice `yang:"choice"` Container []*Container `yang:"container"` Description *Value `yang:"description"` Grouping []*Grouping `yang:"grouping"` Leaf []*Leaf `yang:"leaf"` LeafList []*LeafList `yang:"leaf-list"` List []*List `yang:"list"` Notification []*Notification `yang:"notification"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Typedef []*Typedef `yang:"typedef"` Uses []*Uses `yang:"uses"` }
A Grouping is defined in: http://tools.ietf.org/html/rfc6020#section-7.11 and http://tools.ietf.org/html/rfc7950#section-7.12 ("grouping" sub-statement)
func FindGrouping ¶
FindGrouping finds the grouping named name according to YANG namespace rules using the input node as the initial context node. The seen parameter provides a list of the modules previously seen by FindGrouping during traversal. If the named grouping cannot be found, nil is returned.
FindGrouping works by recursively looking through the context node's parent nodes for grouping fields, or in included or imported submodules/modules for externally-defined groupings. Note that any prefix in the name must match the module prefix of its import statement in the context node's module.
func (*Grouping) ParentNode ¶
type Identity ¶
type Identity struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge" json:"-"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext" json:"-"` Base []*Value `yang:"base" json:"-"` Description *Value `yang:"description" json:"-"` IfFeature []*Value `yang:"if-feature" json:"-"` Reference *Value `yang:"reference" json:"-"` Status *Value `yang:"status" json:"-"` Values []*Identity `json:",omitempty"` }
An Identity is defined in: http://tools.ietf.org/html/rfc6020#section-7.16
func (*Identity) GetValue ¶
GetValue returns a pointer to the identity with name "name" that is within the values of the identity
func (*Identity) IsDefined ¶
IsDefined behaves the same as the implementation for Enum - it returns true if an identity with the name is defined within the Values of the identity
func (*Identity) ParentNode ¶
func (*Identity) PrefixedName ¶
PrefixedName returns the prefix-qualified name for the identity
type Import ¶
type Import struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge" json:"-"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext"` Prefix *Value `yang:"prefix,required"` RevisionDate *Value `yang:"revision-date"` Reference *Value `yang:"reference,nomerge"` Description *Value `yang:"description,nomerge"` // Module is the imported module. The types and groupings are // available to the importer with the defined prefix. Module *Module }
An Import is defined in: http://tools.ietf.org/html/rfc6020#section-7.1.5
func (*Import) ParentNode ¶
type Include ¶
type Include struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge" json:"-"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext" json:",omitempty"` RevisionDate *Value `yang:"revision-date"` // Module is the included module. The types and groupings are // available to the importer with the defined prefix. Module *Module }
An Include is defined in: http://tools.ietf.org/html/rfc6020#section-7.1.6
func (*Include) ParentNode ¶
type Input ¶
type Input struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Anydata []*AnyData `yang:"anydata"` Anyxml []*AnyXML `yang:"anyxml"` Choice []*Choice `yang:"choice"` Container []*Container `yang:"container"` Grouping []*Grouping `yang:"grouping"` Leaf []*Leaf `yang:"leaf"` LeafList []*LeafList `yang:"leaf-list"` List []*List `yang:"list"` Typedef []*Typedef `yang:"typedef"` Uses []*Uses `yang:"uses"` }
An Input is defined in: http://tools.ietf.org/html/rfc6020#section-7.13.2
func (*Input) ParentNode ¶
type Leaf ¶
type Leaf struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Config *Value `yang:"config"` Default *Value `yang:"default"` Description *Value `yang:"description"` IfFeature []*Value `yang:"if-feature"` Mandatory *Value `yang:"mandatory"` Must []*Must `yang:"must"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Type *Type `yang:"type,required"` Units *Value `yang:"units"` When *Value `yang:"when"` }
A Leaf is defined in: http://tools.ietf.org/html/rfc6020#section-7.6
func (*Leaf) ParentNode ¶
type LeafList ¶
type LeafList struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Config *Value `yang:"config"` Default []*Value `yang:"default"` Description *Value `yang:"description"` IfFeature []*Value `yang:"if-feature"` MaxElements *Value `yang:"max-elements"` MinElements *Value `yang:"min-elements"` Must []*Must `yang:"must"` OrderedBy *Value `yang:"ordered-by"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Type *Type `yang:"type,required"` Units *Value `yang:"units"` When *Value `yang:"when"` }
A LeafList is defined in: YANG 1: http://tools.ietf.org/html/rfc6020#section-7.7 YANG 1.1: https://tools.ietf.org/html/rfc7950#section-7.7 It this is supposed to be an array of nodes..
func (*LeafList) ParentNode ¶
type Length ¶
type Length struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Description *Value `yang:"description"` ErrorAppTag *Value `yang:"error-app-tag"` ErrorMessage *Value `yang:"error-message"` Reference *Value `yang:"reference"` }
A Length is defined in: http://tools.ietf.org/html/rfc6020#section-9.4.4
func (*Length) ParentNode ¶
type List ¶
type List struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Anydata []*AnyData `yang:"anydata"` Action []*Action `yang:"action"` Anyxml []*AnyXML `yang:"anyxml"` Choice []*Choice `yang:"choice"` Config *Value `yang:"config"` Container []*Container `yang:"container"` Description *Value `yang:"description"` Grouping []*Grouping `yang:"grouping"` IfFeature []*Value `yang:"if-feature"` Key *Value `yang:"key"` Leaf []*Leaf `yang:"leaf"` LeafList []*LeafList `yang:"leaf-list"` List []*List `yang:"list"` MaxElements *Value `yang:"max-elements"` MinElements *Value `yang:"min-elements"` Must []*Must `yang:"must"` Notification []*Notification `yang:"notification"` OrderedBy *Value `yang:"ordered-by"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Typedef []*Typedef `yang:"typedef"` Unique []*Value `yang:"unique"` Uses []*Uses `yang:"uses"` When *Value `yang:"when"` }
A List is defined in: http://tools.ietf.org/html/rfc6020#section-7.8 and http://tools.ietf.org/html/rfc7950#section-7.8 ("list" sub-statement)
func (*List) ParentNode ¶
type ListAttr ¶
type ListAttr struct { MinElements uint64 // leaf-list or list MUST have at least min-elements MaxElements uint64 // leaf-list or list has at most max-elements // OrderedBy is deprecated. Use OrderedByUser instead. OrderedBy *Value // OrderedByUser indicates whether the entries are "ordered-by user". // Otherwise the order is determined by the system. OrderedByUser bool }
A ListAttr is associated with an Entry that represents a List node
func NewDefaultListAttr ¶ added in v0.2.1
func NewDefaultListAttr() *ListAttr
NewDefaultListAttr returns a new ListAttr object with min/max elements being set to 0/math.MaxUint64 respectively.
type Module ¶
type Module struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge" json:"-"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext"` Anydata []*AnyData `yang:"anydata"` Anyxml []*AnyXML `yang:"anyxml"` Augment []*Augment `yang:"augment"` BelongsTo *BelongsTo `yang:"belongs-to,required=submodule,nomerge"` Choice []*Choice `yang:"choice"` Contact *Value `yang:"contact,nomerge"` Container []*Container `yang:"container"` Description *Value `yang:"description,nomerge"` Deviation []*Deviation `yang:"deviation"` Extension []*Extension `yang:"extension"` Feature []*Feature `yang:"feature"` Grouping []*Grouping `yang:"grouping"` Identity []*Identity `yang:"identity"` Import []*Import `yang:"import"` Include []*Include `yang:"include"` Leaf []*Leaf `yang:"leaf"` LeafList []*LeafList `yang:"leaf-list"` List []*List `yang:"list"` Namespace *Value `yang:"namespace,required=module,nomerge"` Notification []*Notification `yang:"notification"` Organization *Value `yang:"organization,nomerge"` Prefix *Value `yang:"prefix,required=module,nomerge"` Reference *Value `yang:"reference,nomerge"` Revision []*Revision `yang:"revision,nomerge"` RPC []*RPC `yang:"rpc"` Typedef []*Typedef `yang:"typedef"` Uses []*Uses `yang:"uses"` YangVersion *Value `yang:"yang-version,nomerge"` // Modules references the Modules object from which this Module node // was parsed. Modules *Modules }
A Module is defined in: http://tools.ietf.org/html/rfc6020#section-7.1
A SubModule is defined in: http://tools.ietf.org/html/rfc6020#section-7.2
func FindModuleByPrefix ¶
FindModuleByPrefix finds the module or submodule with the provided prefix relative to where n was defined. If the prefix cannot be resolved then nil is returned.
func (*Module) Current ¶
Current returns the most recent revision of this module, or "" if the module has no revisions.
func (*Module) FullName ¶
FullName returns the full name of the module including the most recent revision, if any.
func (*Module) GetPrefix ¶
GetPrefix returns the proper prefix of m. Useful when looking up types in modules found by FindModuleByPrefix.
func (*Module) Identities ¶
func (*Module) ParentNode ¶
type Modules ¶
type Modules struct { Modules map[string]*Module // All "module" nodes SubModules map[string]*Module // All "submodule" nodes // ParseOptions sets the options for the current YANG module parsing. It can be // directly set by the caller to influence how goyang will behave in the presence // of certain exceptional cases. ParseOptions Options // Path is the list of directories to look for .yang files in. Path []string // contains filtered or unexported fields }
Modules contains information about all the top level modules and submodules that are read into it via its Read method.
func NewModules ¶
func NewModules() *Modules
NewModules returns a newly created and initialized Modules.
func (*Modules) AddPath ¶ added in v1.0.0
AddPath adds the directories specified in p, a colon separated list of directory names, to Path, if they are not already in Path. Using multiple arguments is also supported.
func (*Modules) ClearEntryCache ¶ added in v1.4.4
func (ms *Modules) ClearEntryCache()
ClearEntryCache clears the entryCache containing previously converted nodes used by the ToEntry function.
func (*Modules) FindModule ¶
FindModule returns the Module/Submodule specified by n, which must be a *Include or *Import. If n is a *Include then a submodule is returned. If n is a *Import then a module is returned.
func (*Modules) FindModuleByNamespace ¶
FindModuleByNamespace either returns the Module specified by the namespace or returns an error.
func (*Modules) GetModule ¶
GetModule returns the Entry of the module named by name. GetModule will search for and read the file named name + ".yang" if it cannot satisfy the request from what it has currently read.
GetModule is a convenience function for calling Read and Process, and then looking up the module name. It is safe to call Read and Process prior to calling GetModule.
func (*Modules) Parse ¶
Parse parses data as YANG source and adds it to ms. The name should reflect the source of data. Note: If an error is returned, valid modules might still have been added to the Modules cache.
func (*Modules) Process ¶
Process processes all the modules and submodules that have been read into ms. While processing, if an include or import is found for which there is no matching module, Process attempts to locate the source file (using Path) and automatically load them. If a file cannot be found then an error is returned. When looking for a source file, Process searches for a file using the module's or submodule's name with ".yang" appended. After searching the current directory, the directories in Path are searched.
Process builds Entry trees for each modules and submodules in ms. These trees are accessed using the ToEntry function. Process does augmentation on Entry trees once all the modules and submodules in ms have been built. Following augmentation, Process inserts implied case statements. I.e.,
choice interface-type { container ethernet { ... } }
has a case statement inserted to become:
choice interface-type { case ethernet { container ethernet { ... } } }
Process may return multiple errors if multiple errors were encountered while processing. Even though multiple errors may be returned, this does not mean these are all the errors. Process will terminate processing early based on the type and location of the error.
type Must ¶
type Must struct { Name string `yang:"Name,nomerge" json:",omitempty"` Source *Statement `yang:"Statement,nomerge" json:"-"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext" json:",omitempty"` Description *Value `yang:"description" json:",omitempty"` ErrorAppTag *Value `yang:"error-app-tag" json:",omitempty"` ErrorMessage *Value `yang:"error-message" json:",omitempty"` Reference *Value `yang:"reference" json:",omitempty"` }
A Must is defined in: http://tools.ietf.org/html/rfc6020#section-7.5.3
func (*Must) ParentNode ¶
type Node ¶
type Node interface { // Kind returns the kind of yang statement (the keyword). Kind() string // NName returns the node's name (the argument) NName() string // Statement returns the original Statement of this Node. Statement() *Statement // ParentNode returns the parent of this Node, or nil if the // Node has no parent. ParentNode() Node // Exts returns the list of extension statements found. Exts() []*Statement }
A Node contains a yang statement and all attributes and sub-statements. Only pointers to structures should implement Node.
func ChildNode ¶
ChildNode finds n's child node named name. It returns nil if the node could not be found. ChildNode looks at every direct Node pointer in n as well as every node in all slices of Node pointers. Names must be non-ambiguous, otherwise ChildNode has a non-deterministic result.
type Notification ¶
type Notification struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Anydata []*AnyData `yang:"anydata"` Anyxml []*AnyXML `yang:"anyxml"` Choice []*Choice `yang:"choice"` Container []*Container `yang:"container"` Description *Value `yang:"description"` Grouping []*Grouping `yang:"grouping"` IfFeature []*Value `yang:"if-feature"` Leaf []*Leaf `yang:"leaf"` LeafList []*LeafList `yang:"leaf-list"` List []*List `yang:"list"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Typedef []*Typedef `yang:"typedef"` Uses []*Uses `yang:"uses"` }
A Notification is defined in: http://tools.ietf.org/html/rfc6020#section-7.14
func (*Notification) Exts ¶
func (s *Notification) Exts() []*Statement
func (*Notification) Groupings ¶
func (s *Notification) Groupings() []*Grouping
func (Notification) Kind ¶
func (Notification) Kind() string
func (*Notification) NName ¶
func (s *Notification) NName() string
func (*Notification) ParentNode ¶
func (s *Notification) ParentNode() Node
func (*Notification) Statement ¶
func (s *Notification) Statement() *Statement
func (*Notification) Typedefs ¶
func (s *Notification) Typedefs() []*Typedef
type Number ¶
type Number struct { // Absolute value of the number. Value uint64 // Number of fractional digits. // 0 means it's an integer. For decimal64 it falls within [1, 18]. FractionDigits uint8 // Negative indicates whether the number is negative. Negative bool }
A Number is either an integer the range of [-(1<<64) - 1, (1<<64)-1], or a YANG decimal conforming to https://tools.ietf.org/html/rfc6020#section-9.3.4.
func FromFloat ¶
FromFloat creates a Number from a float64. Input values with absolute value outside the boundaries specified for the decimal64 value specified in RFC6020/RFC7950 are clamped down to the closest boundary value.
func ParseDecimal ¶
ParseDecimal returns s as a Number with a non-zero FractionDigits. octal, or hexadecimal using the standard prefix notations (e.g., 0 and 0x)
func ParseInt ¶
ParseInt returns s as a Number with FractionDigits=0. octal, or hexadecimal using the standard prefix notations (e.g., 0 and 0x)
func (Number) Int ¶
Int returns n as an int64. It returns an error if n overflows an int64 or the number is decimal.
type Options ¶
type Options struct { // IgnoreSubmoduleCircularDependencies specifies whether circular dependencies // between submodules. Setting this value to true will ensure that this // package will explicitly ignore the case where a submodule will include // itself through a circular reference. IgnoreSubmoduleCircularDependencies bool // StoreUses controls whether the Uses field of each YANG entry should be // populated. Setting this value to true will cause each Entry which is // generated within the schema to store the logical grouping from which it // is derived. StoreUses bool // DeviateOptions contains options for how deviations are handled. DeviateOptions DeviateOptions }
Options defines the options that should be used when parsing YANG modules, including specific overrides for potentially problematic YANG constructs.
type Output ¶
type Output struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Anydata []*AnyData `yang:"anydata"` Anyxml []*AnyXML `yang:"anyxml"` Choice []*Choice `yang:"choice"` Container []*Container `yang:"container"` Grouping []*Grouping `yang:"grouping"` Leaf []*Leaf `yang:"leaf"` LeafList []*LeafList `yang:"leaf-list"` List []*List `yang:"list"` Typedef []*Typedef `yang:"typedef"` Uses []*Uses `yang:"uses"` }
An Output is defined in: http://tools.ietf.org/html/rfc6020#section-7.13.3
func (*Output) ParentNode ¶
type Pattern ¶
type Pattern struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Description *Value `yang:"description"` ErrorAppTag *Value `yang:"error-app-tag"` ErrorMessage *Value `yang:"error-message"` Reference *Value `yang:"reference"` }
A Pattern is defined in: http://tools.ietf.org/html/rfc6020#section-9.4.6
func (*Pattern) ParentNode ¶
type RPC ¶
type RPC struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Description *Value `yang:"description"` Grouping []*Grouping `yang:"grouping"` IfFeature []*Value `yang:"if-feature"` Input *Input `yang:"input"` Output *Output `yang:"output"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Typedef []*Typedef `yang:"typedef"` }
An RPC is defined in: http://tools.ietf.org/html/rfc6020#section-7.13
func (*RPC) ParentNode ¶
type Range ¶
type Range struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Description *Value `yang:"description"` ErrorAppTag *Value `yang:"error-app-tag"` ErrorMessage *Value `yang:"error-message"` Reference *Value `yang:"reference"` }
A Range is defined in: http://tools.ietf.org/html/rfc6020#section-9.2.4
func (*Range) ParentNode ¶
type Refine ¶
type Refine struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Default *Value `yang:"default"` Description *Value `yang:"description"` IfFeature []*Value `yang:"if-feature"` Reference *Value `yang:"reference"` Config *Value `yang:"config"` Mandatory *Value `yang:"mandatory"` Presence *Value `yang:"presence"` Must []*Must `yang:"must"` MaxElements *Value `yang:"max-elements"` MinElements *Value `yang:"min-elements"` }
A Refine is defined in: http://tools.ietf.org/html/rfc6020#section-7.12.2
func (*Refine) ParentNode ¶
type Revision ¶
type Revision struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge" json:"-"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext" json:",omitempty"` Description *Value `yang:"description"` Reference *Value `yang:"reference"` }
A Revision is defined in: http://tools.ietf.org/html/rfc6020#section-7.1.9
func (*Revision) ParentNode ¶
type Statement ¶
type Statement struct { Keyword string HasArgument bool Argument string // contains filtered or unexported fields }
Statement is a generic YANG statement that may have sub-statements. It implements the Node interface.
Within the parser, it represents a non-terminal token. From https://tools.ietf.org/html/rfc7950#section-6.3: statement = keyword [argument] (";" / "{" *statement "}") The argument is a string.
func MatchingEntryExtensions ¶ added in v0.2.6
MatchingEntryExtensions returns the subset of the given entry's extensions that match the given module and identifier.
func MatchingExtensions ¶
MatchingExtensions returns the subset of the given node's extensions that match the given module and identifier.
func Parse ¶
Parse parses the input as generic YANG and returns the statements parsed. The path parameter should be the source name where input was read from (e.g., the file name the input was read from). If one more more errors are encountered, nil and an error are returned. The error's text includes all errors encountered.
func (*Statement) Arg ¶
Arg returns the optional argument to s. It returns false if s has no argument.
func (*Statement) ParentNode ¶
func (*Statement) SubStatements ¶
SubStatements returns a slice of Statements found in s.
type Type ¶
type Type struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` IdentityBase *Value `yang:"base"` // Name == identityref Bit []*Bit `yang:"bit"` Enum []*Enum `yang:"enum"` FractionDigits *Value `yang:"fraction-digits"` // Name == decimal64 Length *Length `yang:"length"` Path *Value `yang:"path"` Pattern []*Pattern `yang:"pattern"` Range *Range `yang:"range"` RequireInstance *Value `yang:"require-instance"` Type []*Type `yang:"type"` // len > 1 only when Name is "union" YangType *YangType }
A Type is defined in: http://tools.ietf.org/html/rfc6020#section-7.4 Note that Name is the name of the type we want, it is what must be looked up and resolved.
func (*Type) ParentNode ¶
type TypeKind ¶
type TypeKind uint
TypeKind is the enumeration of the base types available in YANG. It is analogous to reflect.Kind.
type Typedef ¶
type Typedef struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge"` Parent Node `yang:"Parent,nomerge"` Extensions []*Statement `yang:"Ext"` Default *Value `yang:"default"` Description *Value `yang:"description"` Reference *Value `yang:"reference"` Status *Value `yang:"status"` Type *Type `yang:"type,required"` Units *Value `yang:"units"` YangType *YangType `json:"-"` }
A Typedef is defined in: http://tools.ietf.org/html/rfc6020#section-7.3
func (*Typedef) ParentNode ¶
type Uses ¶
type Uses struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge" json:"-"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext" json:"-"` Augment *Augment `yang:"augment" json:",omitempty"` Description *Value `yang:"description" json:",omitempty"` IfFeature []*Value `yang:"if-feature" json:"-"` Refine []*Refine `yang:"refine" json:"-"` Reference *Value `yang:"reference" json:"-"` Status *Value `yang:"status" json:"-"` When *Value `yang:"when" json:",omitempty"` }
A Uses is defined in: http://tools.ietf.org/html/rfc6020#section-7.12
func (*Uses) ParentNode ¶
type Value ¶
type Value struct { Name string `yang:"Name,nomerge"` Source *Statement `yang:"Statement,nomerge" json:",omitempty"` Parent Node `yang:"Parent,nomerge" json:"-"` Extensions []*Statement `yang:"Ext" json:",omitempty"` Description *Value `yang:"description" json:",omitempty"` }
A Value is just a string that can have extensions.
func (*Value) ParentNode ¶
type YRange ¶
YRange is a single range of consecutive numbers, inclusive.
type YangRange ¶
type YangRange []YRange
A YangRange is a set of non-overlapping ranges.
func ParseRangesDecimal ¶
ParseRangesDecimal parses s into a series of ranges. Each individual range is in s is separated by the pipe character (|). The min and max value of a range are separated by "..". An error is returned if the range is invalid. The output range is sorted and coalesced.
func ParseRangesInt ¶
ParseRangesInt parses s into a series of ranges. Each individual range is in s is separated by the pipe character (|). The min and max value of a range are separated by "..". An error is returned if the range is invalid. The output range is sorted and coalesced.
func (YangRange) Contains ¶
Contains returns true if all possible values in s are also possible values in r. An empty range is assumed to be min..max when it is the receiver argument.
func (YangRange) Equal ¶
Equal returns true if ranges r and q are identically equivalent. TODO(borman): should we coalesce ranges in the comparison?
func (YangRange) Sort ¶
func (r YangRange) Sort()
Sort r. Must be called before Validate and coalesce if unsorted
type YangType ¶
type YangType struct { Name string Kind TypeKind // Ynone if not a base type Base *Type `json:"-"` // Base type for non-builtin types IdentityBase *Identity `json:",omitempty"` // Base statement for a type using identityref Root *YangType `json:"-"` // root of this type that is the same Bit *EnumType `json:",omitempty"` // bit position, "status" is lost Enum *EnumType `json:",omitempty"` // enum name to value, "status" is lost Units string `json:",omitempty"` // units to be used for this type Default string `json:",omitempty"` // default value, if any HasDefault bool `json:",omitempty"` // whether the type has a default. FractionDigits int `json:",omitempty"` // decimal64 fixed point precision Length YangRange `json:",omitempty"` // this should be processed by section 12 OptionalInstance bool `json:",omitempty"` // !require-instances which defaults to true Path string `json:",omitempty"` // the path in a leafref Pattern []string `json:",omitempty"` // limiting XSD-TYPES expressions on strings POSIXPattern []string `json:",omitempty"` // limiting POSIX ERE on strings (specified by openconfig-extensions:posix-pattern) Range YangRange `json:",omitempty"` // range for integers Type []*YangType `json:",omitempty"` // for unions }
A YangType is the internal representation of a type in YANG. It may refer to either a builtin type or type specified with typedef. Not all fields in YangType are used for all types.