devices

package
v1.3.0 Latest Latest
Warning

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

Go to latest
Published: Oct 14, 2020 License: Apache-2.0 Imports: 34 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Default mode = iota
	OnlyONU
	OnlyPON
	Both
)

Constants for Controlled Activation modes

Variables

View Source
var ControlledActivationModes = map[string]mode{
	"default":  Default,
	"only-onu": OnlyONU,
	"only-pon": OnlyPON,
	"both":     Both,
}

ControlledActivationModes maps string to int value of mode

Functions

func HexDecode

func HexDecode(pkt []byte) []byte

HexDecode converts the hex encoding to binary

func InterfaceIDToPortNo added in v0.0.19

func InterfaceIDToPortNo(intfID uint32, intfType string) uint32

InterfaceIDToPortNo converts InterfaceID to voltha PortID Refer openolt adapter code(master) voltha-openolt-adapter/adaptercore/olt_platform.go: IntfIDToPortNo()

Types

type DefaultExecutor added in v0.0.2

type DefaultExecutor struct{}

func (DefaultExecutor) Command added in v0.0.2

func (d DefaultExecutor) Command(name string, arg ...string) Runnable

type Executor added in v0.0.2

type Executor interface {
	Command(name string, arg ...string) Runnable
}

type FlowAddSpy added in v0.0.5

type FlowAddSpy struct {
	CallCount int
	Calls     map[int]*openolt.Flow
}

type FlowKey added in v0.0.18

type FlowKey struct {
	ID        uint64
	Direction string
}

type Message

type Message struct {
	Type MessageType
	Data interface{}
}

type MessageType

type MessageType int
const (
	OltIndication     MessageType = 0
	NniIndication     MessageType = 1
	PonIndication     MessageType = 2
	OnuDiscIndication MessageType = 3
	OnuIndication     MessageType = 4
	OMCI              MessageType = 5
	FlowAdd           MessageType = 6
	FlowRemoved       MessageType = 18
	StartEAPOL        MessageType = 7
	StartDHCP         MessageType = 8
	OnuPacketOut      MessageType = 9

	// BBR messages
	OmciIndication MessageType = 10 // this are OMCI messages going from the OLT to VOLTHA
	SendEapolFlow  MessageType = 11
	SendDhcpFlow   MessageType = 12
	OnuPacketIn    MessageType = 13

	//IGMP
	IGMPMembershipReportV2 MessageType = 14 // Version 2 Membership Report (JOIN)
	IGMPLeaveGroup         MessageType = 15 // Leave Group

	AlarmIndication        MessageType = 16 // message data is an openolt.AlarmIndication
	IGMPMembershipReportV3 MessageType = 17 // Version 3 Membership Report
)

func (MessageType) String

func (m MessageType) String() string

type NniIndicationMessage

type NniIndicationMessage struct {
	OperState OperState
	NniPortID uint32
}

type NniPort

type NniPort struct {
	// BBSIM Internals
	ID uint32

	PacketCount uint64

	// PON Attributes
	OperState *fsm.FSM
	Type      string
	// contains filtered or unexported fields
}

func CreateNNI

func CreateNNI(olt *OltDevice) (NniPort, error)

func (*NniPort) NewVethChan added in v0.0.7

func (n *NniPort) NewVethChan() (chan *types.PacketMsg, *pcap.Handle, error)

NewVethChan returns a new channel for receiving packets over the NNI interface

type OltDevice

type OltDevice struct {
	sync.Mutex

	// BBSIM Internals
	ID            int
	SerialNumber  string
	NumNni        int
	NumPon        int
	NumOnuPerPon  int
	InternalState *fsm.FSM

	Flows                map[FlowKey]openolt.Flow
	Delay                int
	ControlledActivation mode
	EventChannel         chan common.Event
	PublishEvents        bool
	PortStatsInterval    int

	Pons []*PonPort
	Nnis []*NniPort

	// OLT Attributes
	OperState *fsm.FSM

	OpenoltStream openolt.Openolt_EnableIndicationServer
	// contains filtered or unexported fields
}

func CreateOLT

func CreateOLT(options common.GlobalConfig, services []common.ServiceYaml, isMock bool) *OltDevice

func GetOLT

func GetOLT() *OltDevice

func (*OltDevice) ActivateOnu

func (o *OltDevice) ActivateOnu(context context.Context, onu *openolt.Onu) (*openolt.Empty, error)

func (*OltDevice) CollectStatistics

func (o *OltDevice) CollectStatistics(context.Context, *openolt.Empty) (*openolt.Empty, error)

func (*OltDevice) CreateTrafficQueues

func (s *OltDevice) CreateTrafficQueues(context.Context, *tech_profile.TrafficQueues) (*openolt.Empty, error)

func (*OltDevice) CreateTrafficSchedulers

func (s *OltDevice) CreateTrafficSchedulers(context context.Context, trafficSchedulers *tech_profile.TrafficSchedulers) (*openolt.Empty, error)

func (*OltDevice) DeactivateOnu

func (o *OltDevice) DeactivateOnu(context.Context, *openolt.Onu) (*openolt.Empty, error)

func (*OltDevice) DeleteGroup added in v1.0.0

func (o *OltDevice) DeleteGroup(ctx context.Context, group *openolt.Group) (*openolt.Empty, error)

func (*OltDevice) DeleteOnu

func (o *OltDevice) DeleteOnu(_ context.Context, onu *openolt.Onu) (*openolt.Empty, error)

func (*OltDevice) DisableOlt

func (o *OltDevice) DisableOlt(context.Context, *openolt.Empty) (*openolt.Empty, error)

func (*OltDevice) DisablePonIf

func (o *OltDevice) DisablePonIf(_ context.Context, intf *openolt.Interface) (*openolt.Empty, error)

func (*OltDevice) Enable

Enable implements the OpenOLT EnableIndicationServer functionality

func (*OltDevice) EnableIndication

func (o *OltDevice) EnableIndication(_ *openolt.Empty, stream openolt.Openolt_EnableIndicationServer) error

func (*OltDevice) EnablePonIf

func (o *OltDevice) EnablePonIf(_ context.Context, intf *openolt.Interface) (*openolt.Empty, error)

func (*OltDevice) FindOnuById added in v0.0.2

func (o *OltDevice) FindOnuById(intfId uint32, onuId uint32) (*Onu, error)

returns an ONU with a given interface/Onu Id

func (*OltDevice) FindOnuBySn added in v0.0.2

func (o *OltDevice) FindOnuBySn(serialNumber string) (*Onu, error)

returns an ONU with a given Serial Number

func (*OltDevice) FindServiceByMacAddress added in v1.0.0

func (o *OltDevice) FindServiceByMacAddress(mac net.HardwareAddr) (ServiceIf, error)

returns a Service with a given Mac Address

func (*OltDevice) FlowAdd

func (o *OltDevice) FlowAdd(ctx context.Context, flow *openolt.Flow) (*openolt.Empty, error)

func (*OltDevice) FlowRemove

func (o *OltDevice) FlowRemove(_ context.Context, flow *openolt.Flow) (*openolt.Empty, error)

FlowRemove request from VOLTHA

func (*OltDevice) GetDeviceInfo

func (o *OltDevice) GetDeviceInfo(context.Context, *openolt.Empty) (*openolt.DeviceInfo, error)

func (*OltDevice) GetExtValue added in v1.0.0

func (*OltDevice) GetLogicalOnuDistance added in v1.0.0

func (o *OltDevice) GetLogicalOnuDistance(ctx context.Context, in *openolt.Onu) (*openolt.OnuLogicalDistance, error)

func (*OltDevice) GetLogicalOnuDistanceZero added in v1.0.0

func (o *OltDevice) GetLogicalOnuDistanceZero(ctx context.Context, in *openolt.Onu) (*openolt.OnuLogicalDistance, error)

func (*OltDevice) GetOnuByFlowId added in v0.2.5

func (o *OltDevice) GetOnuByFlowId(flowId uint64) (*Onu, error)

func (*OltDevice) GetOnuInfo

func (o *OltDevice) GetOnuInfo(context context.Context, packet *openolt.Onu) (*openolt.OnuIndication, error)

func (*OltDevice) GetPonById added in v0.0.2

func (o *OltDevice) GetPonById(id uint32) (*PonPort, error)

func (*OltDevice) GetPonIf

func (o *OltDevice) GetPonIf(context context.Context, packet *openolt.Interface) (*openolt.IntfIndication, error)

func (*OltDevice) HeartbeatCheck

func (o *OltDevice) HeartbeatCheck(context.Context, *openolt.Empty) (*openolt.Heartbeat, error)

func (*OltDevice) InitOlt added in v0.0.7

func (o *OltDevice) InitOlt()

func (*OltDevice) OmciMsgOut

func (o *OltDevice) OmciMsgOut(ctx context.Context, omci_msg *openolt.OmciMsg) (*openolt.Empty, error)

func (*OltDevice) OnuItuPonAlarmSet added in v1.0.0

func (o *OltDevice) OnuItuPonAlarmSet(ctx context.Context, in *config.OnuItuPonAlarm) (*openolt.Empty, error)

func (*OltDevice) OnuPacketOut

func (o *OltDevice) OnuPacketOut(ctx context.Context, onuPkt *openolt.OnuPacket) (*openolt.Empty, error)

func (*OltDevice) PerformGroupOperation added in v1.0.0

func (o *OltDevice) PerformGroupOperation(ctx context.Context, group *openolt.Group) (*openolt.Empty, error)

func (*OltDevice) Reboot

func (*OltDevice) ReenableOlt

func (o *OltDevice) ReenableOlt(context.Context, *openolt.Empty) (*openolt.Empty, error)

func (*OltDevice) RemoveTrafficQueues

func (s *OltDevice) RemoveTrafficQueues(context.Context, *tech_profile.TrafficQueues) (*openolt.Empty, error)

func (*OltDevice) RemoveTrafficSchedulers

func (s *OltDevice) RemoveTrafficSchedulers(context context.Context, trafficSchedulers *tech_profile.TrafficSchedulers) (*openolt.Empty, error)

func (*OltDevice) RestartOLT added in v0.0.7

func (o *OltDevice) RestartOLT() error

func (*OltDevice) SendAlarmIndication added in v0.0.12

func (o *OltDevice) SendAlarmIndication(context context.Context, ind *openolt.AlarmIndication) error

assumes caller has properly formulated an openolt.AlarmIndication

func (*OltDevice) StopOltServer added in v0.0.8

func (o *OltDevice) StopOltServer() error

StopOltServer stops the OpenOLT grpc server

func (*OltDevice) UplinkPacketOut

func (o *OltDevice) UplinkPacketOut(context context.Context, packet *openolt.UplinkPacket) (*openolt.Empty, error)

type OltIndicationMessage

type OltIndicationMessage struct {
	OperState OperState
}

type OmciIndicationMessage added in v0.0.2

type OmciIndicationMessage struct {
	OnuSN   *openolt.SerialNumber
	OnuID   uint32
	OmciInd *openolt.OmciIndication
}

type OmciMessage

type OmciMessage struct {
	OnuSN *openolt.SerialNumber
	OnuID uint32
	// contains filtered or unexported fields
}

type Onu

type Onu struct {
	ID                  uint32
	PonPortID           uint32
	PonPort             *PonPort
	InternalState       *fsm.FSM
	DiscoveryRetryDelay time.Duration // this is the time between subsequent Discovery Indication
	DiscoveryDelay      time.Duration // this is the time to send the first Discovery Indication

	Services []ServiceIf

	Backoff *backoff.Backoff
	// ONU State
	// PortNo comes with flows and it's used when sending packetIndications,
	// There is one PortNo per UNI Port, for now we're only storing the first one
	// FIXME add support for multiple UNIs (each UNI has a different PortNo)
	PortNo uint32
	// deprecated (gemPort is on a Service basis)
	GemPortAdded bool
	Flows        []FlowKey
	FlowIds      []uint64 // keep track of the flows we currently have in the ONU

	OperState    *fsm.FSM
	SerialNumber *openolt.SerialNumber

	Channel chan Message // this Channel is to track state changes OMCI messages, EAPOL and DHCP packets

	DoneChannel       chan bool // this channel is used to signal once the onu is complete (when the struct is used by BBR)
	TrafficSchedulers *tech_profile.TrafficSchedulers
	// contains filtered or unexported fields
}

func CreateONU

func CreateONU(olt *OltDevice, pon *PonPort, id uint32, delay time.Duration, isMock bool) *Onu

func (*Onu) DeleteFlow added in v0.0.18

func (onu *Onu) DeleteFlow(key FlowKey)

DeleteFlow method search and delete flowKey from the onu flows slice

func (Onu) NewSN

func (o Onu) NewSN(oltid int, intfid uint32, onuid uint32) *openolt.SerialNumber

func (*Onu) ProcessOnuMessages added in v0.0.2

func (o *Onu) ProcessOnuMessages(ctx context.Context, stream openolt.Openolt_EnableIndicationServer, client openolt.OpenoltClient)

ProcessOnuMessages starts indication channel for each ONU

func (*Onu) ReDiscoverOnu added in v0.3.0

func (onu *Onu) ReDiscoverOnu()

func (*Onu) SetID added in v0.0.7

func (o *Onu) SetID(id uint32)

func (*Onu) Sn

func (o *Onu) Sn() string

func (*Onu) StartOmci added in v0.0.2

func (o *Onu) StartOmci(client openolt.OpenoltClient)

TODO move this method in responders/omcisim

type OnuDiscIndicationMessage

type OnuDiscIndicationMessage struct {
	OperState OperState
	Onu       *Onu
}

type OnuFlowUpdateMessage

type OnuFlowUpdateMessage struct {
	PonPortID uint32
	OnuID     uint32
	Flow      *openolt.Flow
}

type OnuIndicationMessage

type OnuIndicationMessage struct {
	OperState OperState
	PonPortID uint32
	OnuID     uint32
	OnuSN     *openolt.SerialNumber
}

type OnuPacketMessage added in v0.0.2

type OnuPacketMessage struct {
	IntfId     uint32
	OnuId      uint32
	Packet     gopacket.Packet
	Type       packetHandlers.PacketType
	MacAddress net.HardwareAddr
	GemPortId  uint32 // this is used by BBR
}

type OperState

type OperState int
const (
	UP   OperState = iota
	DOWN           // The device has been discovered, but not yet activated
)

func (OperState) String

func (m OperState) String() string

type PacketMessage

type PacketMessage struct {
	PonPortID uint32
	OnuID     uint32
}

type PonIndicationMessage

type PonIndicationMessage struct {
	OperState OperState
	PonPortID uint32
}

type PonPort

type PonPort struct {
	// BBSIM Internals
	ID            uint32
	NumOnu        int
	Onus          []*Onu
	Olt           *OltDevice
	PacketCount   uint64
	InternalState *fsm.FSM

	// PON Attributes
	OperState *fsm.FSM
	Type      string
}

func CreatePonPort added in v0.0.10

func CreatePonPort(olt *OltDevice, id uint32) *PonPort

CreatePonPort creates pon port object

func (PonPort) GetNumOfActiveOnus added in v0.0.19

func (p PonPort) GetNumOfActiveOnus() uint32

GetNumOfActiveOnus returns number of active ONUs for PON port

func (PonPort) GetOnuById added in v0.0.2

func (p PonPort) GetOnuById(id uint32) (*Onu, error)

func (PonPort) GetOnuBySn added in v0.0.2

func (p PonPort) GetOnuBySn(sn *openolt.SerialNumber) (*Onu, error)

type Runnable added in v0.0.2

type Runnable interface {
	Run() error
}

type Service added in v1.0.0

type Service struct {
	Name                string
	HwAddress           net.HardwareAddr
	Onu                 *Onu
	CTag                int
	STag                int
	NeedsEapol          bool
	NeedsDhcp           bool
	NeedsIgmp           bool
	TechnologyProfileID int
	UniTagMatch         int
	ConfigureMacAddress bool
	UsPonCTagPriority   uint8
	UsPonSTagPriority   uint8
	DsPonCTagPriority   uint8
	DsPonSTagPriority   uint8

	// state
	GemPort       uint32
	InternalState *fsm.FSM
	EapolState    *fsm.FSM
	DHCPState     *fsm.FSM
	IGMPState     *fsm.FSM
	Channel       chan Message          // drive Service lifecycle
	PacketCh      chan OnuPacketMessage // handle packets
	Stream        bbsimTypes.Stream     // the gRPC stream to communicate with the adapter, created in the initialize transition
}

func NewService added in v1.0.0

func NewService(name string, hwAddress net.HardwareAddr, onu *Onu, cTag int, sTag int,
	needsEapol bool, needsDchp bool, needsIgmp bool, tpID int, uniTagMatch int, configMacAddress bool,
	usPonCTagPriority uint8, usPonSTagPriority uint8, dsPonCTagPriority uint8, dsPonSTagPriority uint8) (*Service, error)

func (*Service) Disable added in v1.0.0

func (s *Service) Disable()

func (*Service) HandleAuth added in v1.0.0

func (s *Service) HandleAuth()

HandleAuth is used to start EAPOL for a particular Service when the corresponding flow is received

func (*Service) HandleChannel added in v1.0.0

func (s *Service) HandleChannel()

func (*Service) HandleDhcp added in v1.0.0

func (s *Service) HandleDhcp(pbit uint8, cTag int)

HandleDhcp is used to start DHCP for a particular Service when the corresponding flow is received

func (*Service) HandlePackets added in v1.0.0

func (s *Service) HandlePackets()

func (*Service) Initialize added in v1.0.0

func (s *Service) Initialize(stream bbsimTypes.Stream)

type ServiceIf added in v1.0.0

type ServiceIf interface {
	HandlePackets()                  // start listening on the PacketCh
	HandleAuth()                     // Sends the EapoStart packet
	HandleDhcp(pbit uint8, cTag int) // Sends the DHCPDiscover packet

	Initialize(stream bbsimTypes.Stream)
	Disable()
}

Jump to

Keyboard shortcuts

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