netconf

package
Version: v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Feb 18, 2018 License: BSD-2-Clause-Views Imports: 16 Imported by: 0

Documentation

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

func SetLog

func SetLog(l Logger)

SetLog sets the logger as the currently selected logger.

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 LogLevel

type LogLevel int

LogLevel represents at which level the app should log

const (
	LogError LogLevel = iota
	LogWarn
	LogInfo
	LogDebug
)

Sets the log levels based on the system being connected to

type Logger

type Logger interface {
	Debugf(string, ...interface{})
	Infof(string, ...interface{})
	Warnf(string, ...interface{})
	Errorf(string, ...interface{})
	Fatalf(string, ...interface{})
	Panicf(string, ...interface{})
}

Logger defines different logging levels for use by a logger

type NoopLog

type NoopLog struct{}

NoopLog is for use when you don't want to actually log out

func (NoopLog) Debugf

func (l NoopLog) Debugf(format string, v ...interface{})

Debugf adds the formatted debug logging function string

func (NoopLog) Errorf

func (l NoopLog) Errorf(format string, v ...interface{})

Errorf adds the formatted error logging function string

func (NoopLog) Fatalf

func (l NoopLog) Fatalf(format string, v ...interface{})

Fatalf adds the formatted fatal logging function string

func (NoopLog) Infof

func (l NoopLog) Infof(format string, v ...interface{})

Infof adds the formatted information logging function string

func (NoopLog) Panicf

func (l NoopLog) Panicf(format string, v ...interface{})

Panicf adds the formatted panic logging function string

func (NoopLog) Warnf

func (l NoopLog) Warnf(format string, v ...interface{})

Warnf adds the formatted warning logging function string

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:"-"`
}

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 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 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 DialTelnet

func DialTelnet(target string, username string, password string, vendor VendorIOProc) (*Session, error)

DialTelnet dials and returns the usable telnet session.

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 StdLog

type StdLog struct {
	*stdlog.Logger
	// contains filtered or unexported fields
}

StdLog represents the log level and logger for use in logging

func NewStdLog

func NewStdLog(l *stdlog.Logger, level LogLevel) *StdLog

NewStdLog creates a new StdLog instance with the log level and logger provided

func (*StdLog) Debugf

func (l *StdLog) Debugf(format string, v ...interface{})

Debugf adds the formatted debug logging function string

func (*StdLog) Errorf

func (l *StdLog) Errorf(format string, v ...interface{})

Errorf adds the formatted error logging function string

func (*StdLog) Fatalf

func (l *StdLog) Fatalf(format string, v ...interface{})

Fatalf adds the formatted fatal logging function string

func (*StdLog) Infof

func (l *StdLog) Infof(format string, v ...interface{})

Infof adds the formatted information logging function string

func (*StdLog) Panicf

func (l *StdLog) Panicf(format string, v ...interface{})

Panicf adds the formatted panic logging function string

func (*StdLog) Warnf

func (l *StdLog) Warnf(format string, v ...interface{})

Warnf adds the formatted warning logging function string

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 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)

type TransportTelnet

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

TransportTelnet is used to define what makes up a Telnet Transport layer for NETCONF

func (*TransportTelnet) Dial

func (t *TransportTelnet) Dial(target string, username string, password string, vendor VendorIOProc) error

Dial is used to create a TCP Telnet connection to the remote host returning only an error if it is unable to dial the remote host.

func (*TransportTelnet) Receive

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

func (*TransportTelnet) ReceiveHello

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

func (*TransportTelnet) Send

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

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

func (*TransportTelnet) SendHello

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

func (*TransportTelnet) WaitForBytes

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

func (*TransportTelnet) WaitForFunc

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

func (*TransportTelnet) WaitForRegexp

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

func (*TransportTelnet) WaitForString

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

func (*TransportTelnet) Writeln

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

type VendorIOProc

type VendorIOProc interface {
	Login(*TransportTelnet, string, string) error
	StartNetconf(*TransportTelnet) error
}

VendorIOProc is the interface used when establishing a telnet NETCONF session

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
t or T : Toggle theme light dark auto
y or Y : Canonical URL