netconf

package
v0.1.4 Latest Latest
Warning

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

Go to latest
Published: Oct 25, 2021 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

View Source
const (
	CONN_HOST = "0.0.0.0"
	CONN_PORT = "4334"
	CONN_TYPE = "tcp"
)

Variables

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

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 CallhomeListener added in v0.1.3

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

func (*CallhomeListener) Connection added in v0.1.3

func (cl *CallhomeListener) Connection()

func (*CallhomeListener) Initialize added in v0.1.3

func (cl *CallhomeListener) Initialize(user, pass string) error

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 MethodEditConfig added in v0.1.3

func MethodEditConfig(database string, dataXml string) RawMethod

MethodEditConfig files a NETCONF edit-config request with the remote host

func MethodGet added in v0.1.3

func MethodGet(filterType string, dataXml string) RawMethod

MethodGet files a NETCONF get source request with the remote host

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.3

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
	SetVersion(version string)
}

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

type TransportJunos added in v0.1.3

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.3

func (t *TransportJunos) Close() error

Close closes an existing local NETCONF session.

func (*TransportJunos) Open added in v0.1.3

func (t *TransportJunos) Open() error

Open creates a new local NETCONF session.

func (*TransportJunos) Receive added in v0.1.3

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

func (*TransportJunos) ReceiveHello added in v0.1.3

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

func (*TransportJunos) Send added in v0.1.3

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.3

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

func (*TransportJunos) SetVersion added in v0.1.3

func (t *TransportJunos) SetVersion(version string)

func (*TransportJunos) WaitForBytes added in v0.1.3

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

func (*TransportJunos) WaitForFunc added in v0.1.3

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

func (*TransportJunos) WaitForRegexp added in v0.1.3

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

func (*TransportJunos) WaitForString added in v0.1.3

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

func (*TransportJunos) Writeln added in v0.1.3

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

type TransportSSH

type TransportSSH struct {
	SshClient  *ssh.Client
	SshSession *ssh.Session
	// 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) SetVersion added in v0.1.3

func (t *TransportSSH) SetVersion(version string)

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