netconf

package
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 5, 2019 License: BSD-2-Clause-Views Imports: 16 Imported by: 0

Documentation

Overview

Package netconf provides support for a a simple NETCONF client based on RFC6241 and RFC6242 (although not fully compliant yet).

Index

Constants

This section is empty.

Variables

View Source
var DefaultCapabilities = []string{
	"urn:ietf:params:netconf:base:1.0",
}

DefaultCapabilities sets the default capabilities of the client library

Functions

func SSHConfigPassword

func SSHConfigPassword(user string, pass string) *ssh.ClientConfig

SSHConfigPassword is a convenience function that takes a username and password and returns a new ssh.ClientConfig setup to pass that username and password. Convenience means that HostKey checks are disabled so it's probably less secure

func SSHConfigPubKeyAgent

func SSHConfigPubKeyAgent(user string) (*ssh.ClientConfig, error)

SSHConfigPubKeyAgent is a convience function that takes a username and returns a new ssh.Clientconfig setup to pass credentials received from an ssh agent

func SSHConfigPubKeyFile

func SSHConfigPubKeyFile(user string, file string, passphrase string) (*ssh.ClientConfig, error)

SSHConfigPubKeyFile is a convenience function that takes a username, private key and passphrase and returns a new ssh.ClientConfig setup to pass credentials to DialSSH

Types

type HelloMessage

type HelloMessage struct {
	XMLName      xml.Name `xml:"urn:ietf:params:xml:ns:netconf:base:1.0 hello"`
	Capabilities []string `xml:"capabilities>capability"`
	SessionID    int      `xml:"session-id,omitempty"`
}

HelloMessage is used when bringing up a NETCONF session

type RPCError

type RPCError struct {
	Type     string `xml:"error-type"`
	Tag      string `xml:"error-tag"`
	Severity string `xml:"error-severity"`
	Path     string `xml:"error-path"`
	Message  string `xml:"error-message"`
	Info     string `xml:",innerxml"`
}

RPCError defines an error reply to a RPC request

func (*RPCError) Error

func (re *RPCError) Error() string

Error generates a string representation of the provided RPC error

type RPCMessage

type RPCMessage struct {
	MessageID string
	Methods   []RPCMethod
}

RPCMessage represents an RPC Message to be sent.

func NewRPCMessage

func NewRPCMessage(methods []RPCMethod) *RPCMessage

NewRPCMessage generates a new RPC Message structure with the provided methods

func (*RPCMessage) MarshalXML

func (m *RPCMessage) MarshalXML(e *xml.Encoder, start xml.StartElement) error

MarshalXML marshals the NETCONF XML data

type RPCMethod

type RPCMethod interface {
	MarshalMethod() string
}

RPCMethod defines the interface for creating an RPC method.

type RPCReply

type RPCReply struct {
	XMLName   xml.Name   `xml:"rpc-reply"`
	Errors    []RPCError `xml:"rpc-error,omitempty"`
	Data      string     `xml:",innerxml"`
	Ok        bool       `xml:",omitempty"`
	RawReply  string     `xml:"-"`
	MessageID string     `xml:"-"`
}

RPCReply defines a reply to a RPC request

type RawMethod

type RawMethod string

RawMethod defines how a raw text request will be responded to

func MethodCommitSetTimeout added in v0.1.2

func MethodCommitSetTimeout(timeout int) RawMethod

func MethodDiscardChanges added in v0.1.2

func MethodDiscardChanges() RawMethod

func MethodGetConfig

func MethodGetConfig(source string) RawMethod

MethodGetConfig files a NETCONF get-config source request with the remote host

func MethodLock

func MethodLock(target string) RawMethod

MethodLock files a NETCONF lock target request with the remote host

func MethodUnlock

func MethodUnlock(target string) RawMethod

MethodUnlock files a NETCONF unlock target request with the remote host

func (RawMethod) MarshalMethod

func (r RawMethod) MarshalMethod() string

MarshalMethod converts the method's output into a string

type ReadWriteCloser

type ReadWriteCloser struct {
	io.Reader
	io.WriteCloser
}

ReadWriteCloser represents a combined IO Reader and WriteCloser

func NewReadWriteCloser

func NewReadWriteCloser(r io.Reader, w io.WriteCloser) *ReadWriteCloser

NewReadWriteCloser creates a new combined IO Reader and Write Closer from the provided objects

type Session

type Session struct {
	Transport          Transport
	SessionID          int
	ServerCapabilities []string
	ErrOnWarning       bool
}

Session defines the necessary components for a NETCONF session

func DialJunos added in v0.1.2

func DialJunos() (*Session, error)

DialJunos creates a new NETCONF session via Junos local shell NETCONF interface (xml-mode netconf need-trailer).

func DialSSH

func DialSSH(target string, config *ssh.ClientConfig) (*Session, error)

DialSSH creates a new NETCONF session using a SSH Transport. See TransportSSH.Dial for arguments.

func DialSSHTimeout

func DialSSHTimeout(target string, config *ssh.ClientConfig, timeout time.Duration) (*Session, error)

DialSSHTimeout creates a new NETCONF session using a SSH Transport with timeout. See TransportSSH.Dial for arguments. The timeout value is used for both connection establishment and Read/Write operations.

func NewSSHSession

func NewSSHSession(conn net.Conn, config *ssh.ClientConfig) (*Session, error)

NewSSHSession creates a new NETCONF session using an existing net.Conn.

func NewSession

func NewSession(t Transport) *Session

NewSession creates a new NETCONF session using the provided transport layer.

func (*Session) Close

func (s *Session) Close() error

Close is used to close and end a transport session

func (*Session) Exec

func (s *Session) Exec(methods ...RPCMethod) (*RPCReply, error)

Exec is used to execute an RPC method or methods

type Transport

type Transport interface {
	Send([]byte) error
	Receive() ([]byte, error)
	Close() error
	ReceiveHello() (*HelloMessage, error)
	SendHello(*HelloMessage) error
}

Transport interface defines what characterisitics make up a NETCONF transport layer object.

type TransportJunos added in v0.1.2

type TransportJunos struct {
	// contains filtered or unexported fields
}

TransportJunos maintains the information necessary to communicate with Junos via local shell NETCONF interface.

func (*TransportJunos) Close added in v0.1.2

func (t *TransportJunos) Close() error

Close closes an existing local NETCONF session.

func (*TransportJunos) Open added in v0.1.2

func (t *TransportJunos) Open() error

Open creates a new local NETCONF session.

func (*TransportJunos) Receive added in v0.1.2

func (t *TransportJunos) Receive() ([]byte, error)

func (*TransportJunos) ReceiveHello added in v0.1.2

func (t *TransportJunos) ReceiveHello() (*HelloMessage, error)

func (*TransportJunos) Send added in v0.1.2

func (t *TransportJunos) Send(data []byte) error

Sends a well formated NETCONF rpc message as a slice of bytes adding on the nessisary framining messages.

func (*TransportJunos) SendHello added in v0.1.2

func (t *TransportJunos) SendHello(hello *HelloMessage) error

func (*TransportJunos) WaitForBytes added in v0.1.2

func (t *TransportJunos) WaitForBytes(b []byte) ([]byte, error)

func (*TransportJunos) WaitForFunc added in v0.1.2

func (t *TransportJunos) WaitForFunc(f func([]byte) (int, error)) ([]byte, error)

func (*TransportJunos) WaitForRegexp added in v0.1.2

func (t *TransportJunos) WaitForRegexp(re *regexp.Regexp) ([]byte, [][]byte, error)

func (*TransportJunos) WaitForString added in v0.1.2

func (t *TransportJunos) WaitForString(s string) (string, error)

func (*TransportJunos) Writeln added in v0.1.2

func (t *TransportJunos) Writeln(b []byte) (int, error)

type TransportSSH

type TransportSSH struct {
	// contains filtered or unexported fields
}

TransportSSH maintains the information necessary to communicate with the remote device over SSH

func (*TransportSSH) Close

func (t *TransportSSH) Close() error

Close closes an existing SSH session and socket if they exist.

func (*TransportSSH) Dial

func (t *TransportSSH) Dial(target string, config *ssh.ClientConfig) error

Dial connects and establishes SSH sessions

target can be an IP address (e.g.) 172.16.1.1 which utlizes the default NETCONF over SSH port of 830. Target can also specify a port with the following format <host>:<port (e.g 172.16.1.1:22)

config takes a ssh.ClientConfig connection. See documentation for go.crypto/ssh for documenation. There is a helper function SSHConfigPassword thar returns a ssh.ClientConfig for simple username/password authentication

func (*TransportSSH) Receive

func (t *TransportSSH) Receive() ([]byte, error)

func (*TransportSSH) ReceiveHello

func (t *TransportSSH) ReceiveHello() (*HelloMessage, error)

func (*TransportSSH) Send

func (t *TransportSSH) Send(data []byte) error

Sends a well formated NETCONF rpc message as a slice of bytes adding on the nessisary framining messages.

func (*TransportSSH) SendHello

func (t *TransportSSH) SendHello(hello *HelloMessage) error

func (*TransportSSH) WaitForBytes

func (t *TransportSSH) WaitForBytes(b []byte) ([]byte, error)

func (*TransportSSH) WaitForFunc

func (t *TransportSSH) WaitForFunc(f func([]byte) (int, error)) ([]byte, error)

func (*TransportSSH) WaitForRegexp

func (t *TransportSSH) WaitForRegexp(re *regexp.Regexp) ([]byte, [][]byte, error)

func (*TransportSSH) WaitForString

func (t *TransportSSH) WaitForString(s string) (string, error)

func (*TransportSSH) Writeln

func (t *TransportSSH) Writeln(b []byte) (int, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL