Documentation ¶
Overview ¶
Package address contains the types used by ruv to represent IPv6 addresses or prefixes, as well as functions for working with these types. Of particular importance are the functions used to deruve addresses or subnets from a NodeID, or to get the NodeID and bitmask of the bits visible from an address, which is needed for DHT searches.
Index ¶
- Variables
- type AddHandler
- type AddHandlerFunc
- type Address
- type AllowedPublicKey
- type Core
- func (c *Core) AddPeer(uri string, sourceInterface string) error
- func (c *Core) AddrForKey(publicKey ed25519.PublicKey) *Address
- func (c *Core) Address() net.IP
- func (c *Core) CallPeer(u *url.URL, sintf string) error
- func (c *Core) GetAddressKey(a Address) ed25519.PublicKey
- func (c *Core) GetDHT() []DHTEntryInfo
- func (c *Core) GetNodeInfo(key string) (result map[string]any, err error)
- func (c *Core) GetPaths() []PathEntryInfo
- func (c *Core) GetPeers() []PeerInfo
- func (c *Core) GetPrefix() [1]byte
- func (c *Core) GetSelf() SelfInfo
- func (c *Core) GetSessions() []SessionInfo
- func (c *Core) GetSubnetKey(s Subnet) ed25519.PublicKey
- func (c *Core) GetThisNodeInfo() json.RawMessage
- func (c *Core) IsValidAddress(a Address) bool
- func (c *Core) IsValidSubnet(s Subnet) bool
- func (c *Core) Listen(u *url.URL, sintf string) (*Listener, error)
- func (c *Core) MTU() uint64
- func (c *Core) PublicKey() ed25519.PublicKey
- func (c *Core) ReadFrom(p []byte) (n int, from net.Addr, err error)
- func (c *Core) RemoteGetDHT(key string) (map[string]any, error)
- func (c *Core) RemoteGetPeers(key string) (map[string]any, error)
- func (c *Core) RemoteGetSelf(key string) (map[string]any, error)
- func (c *Core) RemovePeer(uri string, sourceInterface string) error
- func (c *Core) RemovePeers() error
- func (c *Core) RetryPeersNow()
- func (c *Core) SetAdmin(a AddHandler) error
- func (c *Core) SetLogger(log Logger)
- func (c *Core) SetThisNodeInfo(nodeinfo NodeInfo) error
- func (c *Core) Stop()
- func (c *Core) Subnet() net.IPNet
- func (c *Core) SubnetForKey(publicKey ed25519.PublicKey) *Subnet
- func (c *Core) WriteTo(p []byte, addr net.Addr) (n int, err error)
- type DHTEntryInfo
- type DebugGetDHTRequest
- type DebugGetDHTResponse
- type DebugGetPeersRequest
- type DebugGetPeersResponse
- type DebugGetSelfRequest
- type DebugGetSelfResponse
- type GetNodeInfoRequest
- type GetNodeInfoResponse
- type ListenAddress
- type Listener
- type Logger
- type NetworkDomain
- type NodeInfo
- type NodeInfoPrivacy
- type PathEntryInfo
- type Peer
- type PeerInfo
- type SelfInfo
- type SessionInfo
- type SetupOption
- type Subnet
Constants ¶
This section is empty.
Variables ¶
var ErrTimeout = errors.New("Operation timeout")
Functions ¶
This section is empty.
Types ¶
type AddHandler ¶
type AddHandler interface {
AddHandler(name, desc string, args []string, handlerfunc AddHandlerFunc) error
}
type AddHandlerFunc ¶
type AddHandlerFunc func(json.RawMessage) (interface{}, error)
type Address ¶ added in v0.4.7
type Address [16]byte
Address represents an IPv6 address in the ruv address range.
type AllowedPublicKey ¶
type Core ¶
type Core struct { // This is the main data structure that holds everything else for a node // We're going to keep our own copy of the provided config - that way we can // guarantee that it will be covered by the mutex phony.Inbox *iwe.PacketConn PeersChangedSignal signals.Signal // contains filtered or unexported fields }
The Core object represents the Ruvchain node. You should create a Core object for each Ruvchain node you plan to run.
func New ¶
func New(secret ed25519.PrivateKey, logger Logger, opts ...SetupOption) (*Core, error)
func (*Core) AddrForKey ¶ added in v0.4.7
AddrForKey takes an ed25519.PublicKey as an argument and returns an *Address. This function returns nil if the key length is not ed25519.PublicKeySize. This address begins with the contents of GetPrefix(), with the last bit set to 0 to indicate an address. The following 8 bits are set to the number of leading 1 bits in the bitwise inverse of the public key. The bitwise inverse of the key, excluding the leading 1 bits and the first leading 0 bit, is truncated to the appropriate length and makes up the remainder of the address.
func (*Core) Address ¶
Address gets the IPv6 address of the Ruvchain node. This is always a /128 address. The IPv6 address is only relevant when the node is operating as an IP router and often is meaningless when embedded into an application, unless that application also implements either VPN functionality or deals with IP packets specifically.
func (*Core) CallPeer ¶
CallPeer calls a peer once. This should be specified in the peer URI format, e.g.:
tcp://a.b.c.d:e socks://a.b.c.d:e/f.g.h.i:j
This does not add the peer to the peer list, so if the connection drops, the peer will not be called again automatically.
func (*Core) GetAddressKey ¶ added in v0.4.7
GetKet returns the partial ed25519.PublicKey for the Address. This is used for key lookup.
func (*Core) GetDHT ¶ added in v0.4.7
func (c *Core) GetDHT() []DHTEntryInfo
func (*Core) GetNodeInfo ¶ added in v0.4.7
func (*Core) GetPaths ¶
func (c *Core) GetPaths() []PathEntryInfo
func (*Core) GetPrefix ¶ added in v0.4.7
GetPrefix returns the address prefix used by ruv. The current implementation requires this to be a multiple of 8 bits + 7 bits. The 8th bit of the last byte is used to signal nodes (0) or /64 prefixes (1). Nodes that configure this differently will be unable to communicate with each other using IP packets, though routing and the DHT machinery *should* still work.
func (*Core) GetSessions ¶
func (c *Core) GetSessions() []SessionInfo
func (*Core) GetSubnetKey ¶ added in v0.4.7
GetKet returns the partial ed25519.PublicKey for the Subnet. This is used for key lookup.
func (*Core) GetThisNodeInfo ¶ added in v0.4.7
func (c *Core) GetThisNodeInfo() json.RawMessage
func (*Core) IsValidAddress ¶ added in v0.4.7
IsValid returns true if an address falls within the range used by nodes in the network.
func (*Core) IsValidSubnet ¶ added in v0.4.7
IsValid returns true if a prefix falls within the range usable by the network.
func (*Core) Listen ¶
Listen starts a new listener (either TCP or TLS). The input should be a url.URL parsed from a string of the form e.g. "tcp://a.b.c.d:e". In the case of a link-local address, the interface should be provided as the second argument.
func (*Core) RemoteGetDHT ¶ added in v0.4.7
func (*Core) RemoteGetPeers ¶ added in v0.4.7
func (*Core) RemoteGetSelf ¶ added in v0.4.7
func (*Core) RemovePeers ¶ added in v0.4.7
func (*Core) RetryPeersNow ¶
func (c *Core) RetryPeersNow()
func (*Core) SetAdmin ¶
func (c *Core) SetAdmin(a AddHandler) error
SetAdmin must be called after Init and before Start. It sets the admin handler for NodeInfo and the Debug admin functions.
func (*Core) SetLogger ¶
SetLogger sets the output logger of the Ruvchain node after startup. This may be useful if you want to redirect the output later. Note that this expects a Logger from the github.com/gologme/log package and not from Go's built-in log package.
func (*Core) SetThisNodeInfo ¶ added in v0.4.7
func (*Core) Subnet ¶
Subnet gets the routed IPv6 subnet of the Ruvchain node. This is always a /64 subnet. The IPv6 subnet is only relevant when the node is operating as an IP router and often is meaningless when embedded into an application, unless that application also implements either VPN functionality or deals with IP packets specifically.
func (*Core) SubnetForKey ¶ added in v0.4.7
SubnetForKey takes an ed25519.PublicKey as an argument and returns a *Subnet. This function returns nil if the key length is not ed25519.PublicKeySize. The subnet begins with the address prefix, with the last bit set to 1 to indicate a prefix. The following 8 bits are set to the number of leading 1 bits in the bitwise inverse of the key. The bitwise inverse of the key, excluding the leading 1 bits and the first leading 0 bit, is truncated to the appropriate length and makes up the remainder of the subnet.
type DHTEntryInfo ¶ added in v0.4.7
type DebugGetDHTRequest ¶ added in v0.4.7
type DebugGetDHTRequest struct {
Key string `json:"key"`
}
type DebugGetDHTResponse ¶ added in v0.4.7
type DebugGetDHTResponse map[string]interface{}
type DebugGetPeersRequest ¶
type DebugGetPeersRequest struct {
Key string `json:"key"`
}
type DebugGetPeersResponse ¶
type DebugGetPeersResponse map[string]interface{}
type DebugGetSelfRequest ¶
type DebugGetSelfRequest struct {
Key string `json:"key"`
}
type DebugGetSelfResponse ¶
type DebugGetSelfResponse map[string]interface{}
type GetNodeInfoRequest ¶
type GetNodeInfoRequest struct {
Key string `json:"key"`
}
type GetNodeInfoResponse ¶
type GetNodeInfoResponse map[string]json.RawMessage
type ListenAddress ¶
type ListenAddress string
type Logger ¶
type Logger interface { Printf(string, ...interface{}) Println(...interface{}) Infof(string, ...interface{}) Infoln(...interface{}) Warnf(string, ...interface{}) Warnln(...interface{}) Errorf(string, ...interface{}) Errorln(...interface{}) Debugf(string, ...interface{}) Debugln(...interface{}) Traceln(...interface{}) }
type NetworkDomain ¶ added in v0.4.7
type NetworkDomain struct {
Prefix string
}
type NodeInfoPrivacy ¶
type NodeInfoPrivacy bool
type PathEntryInfo ¶
type SessionInfo ¶
type SetupOption ¶
type SetupOption interface {
// contains filtered or unexported methods
}