rctx

package
v0.0.0-...-c8fc2fc Latest Latest
Warning

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

Go to latest
Published: Mar 2, 2018 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Overview

Copyright 2017 ETH Zurich

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Set

func Set(newCtx *Ctx)

Set updates the current router context.

Types

type Ctx

type Ctx struct {
	// Conf contains the router state for this context.
	Conf *conf.Conf
	// LockSockIn is a slice of Sock's for receiving packets from the local AS,
	// indexed by the local address index.
	LocSockIn []*Sock
	// LocSockOut is a slice of Sock's for sending packets to the local AS,
	// indexed by the local address index.
	LocSockOut []*Sock
	// ExtSockIn is a map of Sock's for receiving packets from neighbouring
	// ASes, keyed by the interface ID of the relevant link.
	ExtSockIn map[common.IFIDType]*Sock
	// ExtSockOut is a map of Sock's for sending packets to neighbouring ASes,
	// keyed by the interface ID of the relevant link.
	ExtSockOut map[common.IFIDType]*Sock
}

Ctx is the main router context structure.

func Get

func Get() *Ctx

Get returns a pointer to the current router context.

func New

func New(conf *conf.Conf, intAddrCnt int) *Ctx

New returns a new Ctx instance.

type Sock

type Sock struct {
	// Ring is a ring-buffer that's written to by writers, and read from by readers.
	Ring *ringbuf.Ring
	// Conn is the underlying connection that this Sock represents.
	Conn conn.Conn
	// Dir is the direction that a packet is being read from/written to.
	Dir rcmn.Dir
	// Ifids is the list of interface IDs associated with a connection.
	Ifids []common.IFIDType
	// LocIdx is the local address index. It is only meaningful for packets
	// received from the local AS.
	LocIdx int
	// Labels holds the exported prometheus labels.
	Labels prometheus.Labels
	// Reader is an optional function that reads from Sock.Ring. It is spawned
	// in a go routine when Sock.Start() is called.
	Reader SockFunc
	// Writer is an optional function that writes to Sock.Ring. It is spawned
	// in a go routine when Sock.Start() is called.
	Writer SockFunc
	// contains filtered or unexported fields
}

Sock represents one direction of data-flow from an underlying connection. Each connection will have 2 Sock's associated, one for reading data from the network, the other for writing data to the network.

func NewSock

func NewSock(ring *ringbuf.Ring, conn conn.Conn, dir rcmn.Dir,
	ifids []common.IFIDType, locIdx int, labels prometheus.Labels, reader, writer SockFunc) *Sock

func (*Sock) Start

func (s *Sock) Start()

Start starts the reader/writer goroutines (if any). Does nothing if they have been started already.

func (*Sock) Stop

func (s *Sock) Stop()

Stop stops the running reader/writer goroutines (if any) and waits until the routines are stopped before returing to the caller.

type SockFunc

type SockFunc func(sock *Sock, stop, stopped chan struct{})

SockFunc is a function that is started as a goroutine by Sock.Start()/Sock.Stop() to read/write to the underlying connection.

Jump to

Keyboard shortcuts

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