Documentation ¶
Overview ¶
Package snet implements interfaces net.Conn and net.PacketConn for SCION connections.
The default (package-wide) SCION network must first be initialized by calling Init. All future package scoped DialSCION and ListenSCION calls will use this initial context to get the local ISD-AS, dispatcher or sciond.
A connection can be created by calling DialSCION or ListenSCION; both functions register an address-port pair with the local dispatcher. For Dial, the remote address is fixed, meaning only Read and Write can be used. Attempting to ReadFrom or WriteTo a connection created by Dial is an invalid operation. For Listen, the remote address cannot be fixed. ReadFrom, ReadFromSCION can be used to read from the connection and find out the sender's address; WriteTo and WriteToSCION can be used to send a message to a chosen destination.
For applications that need to run in multiple ASes, new networking contexts can be created using NewNetwork. Calling the DialSCION or ListenSCION methods on the networking context yields connections that run in that context.
Multiple networking contexts can share the same SCIOND and/or dispatcher.
Write calls never return SCMP errors directly. If a write call caused an SCMP message to be received by the Conn, it can be inspected by calling Read. In this case, the error value is non-nil and can be type asserted to *OpError. Method SCMP() can be called on the error to extract the SCMP header.
Important: not draining SCMP errors via Read calls can cause the dispatcher to shutdown the socket (see https://github.com/scionproto/scion/pull/1356). To prevent this on a Conn object with only Write calls, run a separate goroutine that continuously calls Read on the Conn.
Index ¶
- Constants
- func IA() addr.IA
- func Init(ia addr.IA, sciondPath string, dispatcherPath string) error
- func InitWithNetwork(network *SCIONNetwork) error
- type Addr
- type Conn
- func DialSCION(network string, laddr, raddr *Addr) (Conn, error)
- func DialSCIONWithBindSVC(network string, laddr, raddr, baddr *Addr, svc addr.HostSVC) (Conn, error)
- func ListenSCION(network string, laddr *Addr) (Conn, error)
- func ListenSCIONWithBindSVC(network string, laddr, baddr *Addr, svc addr.HostSVC) (Conn, error)
- type Error
- type Network
- type OpError
- type SCIONConn
- func (c *SCIONConn) BindAddr() net.Addr
- func (c *SCIONConn) BindSnetAddr() *Addr
- func (c *SCIONConn) Close() error
- func (c *SCIONConn) LocalAddr() net.Addr
- func (c *SCIONConn) LocalSnetAddr() *Addr
- func (c *SCIONConn) Read(b []byte) (int, error)
- func (c *SCIONConn) ReadFrom(b []byte) (int, net.Addr, error)
- func (c *SCIONConn) ReadFromSCION(b []byte) (int, *Addr, error)
- func (c *SCIONConn) RemoteAddr() net.Addr
- func (c *SCIONConn) RemoteSnetAddr() *Addr
- func (c *SCIONConn) SVC() addr.HostSVC
- func (c *SCIONConn) SetDeadline(t time.Time) error
- func (c *SCIONConn) SetReadDeadline(t time.Time) error
- func (c *SCIONConn) SetWriteDeadline(t time.Time) error
- func (c *SCIONConn) Write(b []byte) (int, error)
- func (c *SCIONConn) WriteTo(b []byte, raddr net.Addr) (int, error)
- func (c *SCIONConn) WriteToSCION(b []byte, raddr *Addr) (int, error)
- type SCIONNetwork
- func (n *SCIONNetwork) DialSCION(network string, laddr, raddr *Addr, timeout time.Duration) (Conn, error)
- func (n *SCIONNetwork) DialSCIONWithBindSVC(network string, laddr, raddr, baddr *Addr, svc addr.HostSVC, ...) (Conn, error)
- func (n *SCIONNetwork) IA() addr.IA
- func (n *SCIONNetwork) ListenSCION(network string, laddr *Addr, timeout time.Duration) (Conn, error)
- func (n *SCIONNetwork) ListenSCIONWithBindSVC(network string, laddr, baddr *Addr, svc addr.HostSVC, timeout time.Duration) (Conn, error)
- func (n *SCIONNetwork) PathResolver() *pathmgr.PR
- func (n *SCIONNetwork) Sciond() sciond.Service
Constants ¶
const (
// Receive and send buffer sizes
BufSize = 1<<16 - 1
)
Variables ¶
This section is empty.
Functions ¶
func InitWithNetwork ¶
func InitWithNetwork(network *SCIONNetwork) error
InitWithNetwork initializes snet with the provided SCION networking context.
Types ¶
type Addr ¶
func AddrFromString ¶
AddrFromString converts an address string of format isd-as,[ipaddr]:port (e.g., 1-ff00:0:300,[192.168.1.1]:80) to a SCION address.
func (*Addr) UnmarshalText ¶
UnmarshalText implements encoding.TextUnmarshaler
type Conn ¶
type Conn interface { Read(b []byte) (int, error) ReadFrom(b []byte) (int, net.Addr, error) ReadFromSCION(b []byte) (int, *Addr, error) Write(b []byte) (int, error) WriteTo(b []byte, address net.Addr) (int, error) WriteToSCION(b []byte, address *Addr) (int, error) Close() error LocalAddr() net.Addr BindAddr() net.Addr SVC() addr.HostSVC RemoteAddr() net.Addr SetDeadline(deadline time.Time) error SetReadDeadline(deadline time.Time) error SetWriteDeadline(deadline time.Time) error }
func DialSCIONWithBindSVC ¶
func DialSCIONWithBindSVC(network string, laddr, raddr, baddr *Addr, svc addr.HostSVC) (Conn, error)
DialSCIONWithBindSVC calls DialSCIONWithBindSVC with infinite timeout on the default networking context.
func ListenSCION ¶
ListenSCION calls ListenSCION with infinite timeout on the default networking context.
type SCIONConn ¶ added in v0.3.0
type SCIONConn struct {
// contains filtered or unexported fields
}
func (*SCIONConn) BindSnetAddr ¶ added in v0.3.0
func (*SCIONConn) LocalSnetAddr ¶ added in v0.3.0
func (*SCIONConn) Read ¶ added in v0.3.0
Read reads data into b from a connection with a fixed remote address. If the remote address for the connection is unknown, Read returns an error.
func (*SCIONConn) ReadFromSCION ¶ added in v0.3.0
ReadFromSCION reads data into b, returning the length of copied data and the address of the sender. If the remote address for the connection is already known, ReadFromSCION returns an error.
func (*SCIONConn) RemoteAddr ¶ added in v0.3.0
func (*SCIONConn) RemoteSnetAddr ¶ added in v0.3.0
func (*SCIONConn) SetReadDeadline ¶ added in v0.3.0
func (*SCIONConn) SetWriteDeadline ¶ added in v0.3.0
func (*SCIONConn) Write ¶ added in v0.3.0
Write sends b through a connection with fixed remote address. If the remote address for the conenction is unknown, Write returns an error.
type SCIONNetwork ¶ added in v0.3.0
type SCIONNetwork struct {
// contains filtered or unexported fields
}
SCION networking context, containing local ISD-AS, SCIOND, Dispatcher and Path resolver.
var ( // Default SCION networking context for package-level Dial and Listen DefNetwork *SCIONNetwork )
func NewNetwork ¶
NewNetwork creates a new networking context, on which future Dial or Listen calls can be made. The new connections use the SCIOND server at sciondPath, the dispatcher at dispatcherPath, and ia for the local ISD-AS.
If sciondPath is the empty string, the network will run without SCIOND. In this mode of operation, the app is fully responsible with supplying paths for sent traffic.
func NewNetworkWithPR ¶
NewNetworkWithPR creates a new networking context with path resolver pr. A nil path resolver means the Network will run without SCIOND.
func (*SCIONNetwork) DialSCION ¶ added in v0.3.0
func (n *SCIONNetwork) DialSCION(network string, laddr, raddr *Addr, timeout time.Duration) (Conn, error)
DialSCION returns a SCION connection to raddr. Nil values for laddr are not supported yet. Parameter network must be "udp4". The returned connection's Read and Write methods can be used to receive and send SCION packets.
A timeout of 0 means infinite timeout.
func (*SCIONNetwork) DialSCIONWithBindSVC ¶ added in v0.3.0
func (n *SCIONNetwork) DialSCIONWithBindSVC(network string, laddr, raddr, baddr *Addr, svc addr.HostSVC, timeout time.Duration) (Conn, error)
DialSCIONWithBindSVC returns a SCION connection to raddr. Nil values for laddr are not supported yet. Parameter network must be "udp4". The returned connection's Read and Write methods can be used to receive and send SCION packets.
A timeout of 0 means infinite timeout.
func (*SCIONNetwork) IA ¶ added in v0.3.0
func (n *SCIONNetwork) IA() addr.IA
IA returns the ISD-AS assigned to n
func (*SCIONNetwork) ListenSCION ¶ added in v0.3.0
func (n *SCIONNetwork) ListenSCION(network string, laddr *Addr, timeout time.Duration) (Conn, error)
ListenSCION registers laddr with the dispatcher. Nil values for laddr are not supported yet. The returned connection's ReadFrom and WriteTo methods can be used to receive and send SCION packets with per-packet addressing. Parameter network must be "udp4".
A timeout of 0 means infinite timeout.
func (*SCIONNetwork) ListenSCIONWithBindSVC ¶ added in v0.3.0
func (n *SCIONNetwork) ListenSCIONWithBindSVC(network string, laddr, baddr *Addr, svc addr.HostSVC, timeout time.Duration) (Conn, error)
ListenSCIONWithBindSVC registers laddr with the dispatcher. Nil values for laddr are not supported yet. The returned connection's ReadFrom and WriteTo methods can be used to receive and send SCION packets with per-packet addressing. Parameter network must be "udp4".
A timeout of 0 means infinite timeout.
func (*SCIONNetwork) PathResolver ¶ added in v0.3.0
func (n *SCIONNetwork) PathResolver() *pathmgr.PR
PathResolver returns the pathmgr.PR that the network is using.
func (*SCIONNetwork) Sciond ¶ added in v0.3.0
func (n *SCIONNetwork) Sciond() sciond.Service
Sciond returns the sciond.Service that the network is using.
Directories ¶
Path | Synopsis |
---|---|
package rpt (Reliable Packet Transport) implements a simple packet-oriented protocol with ACKs on top of net.PacketConn.
|
package rpt (Reliable Packet Transport) implements a simple packet-oriented protocol with ACKs on top of net.PacketConn. |
Package snetproxy implements transparent logic for reconnecting to the dispatcher.
|
Package snetproxy implements transparent logic for reconnecting to the dispatcher. |
QUIC/SCION implementation.
|
QUIC/SCION implementation. |