table

package
v0.0.0-...-7a34c7c Latest Latest
Warning

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

Go to latest
Published: Jun 7, 2017 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
const (
	INCLUDE singleAsPathMatchMode = iota
	LEFT_MOST
	ORIGIN
	ONLY
)
View Source
const (
	ADD opType = iota
	REMOVE
	REPLACE
)
View Source
const (
	ASPATH_REGEXP_MAGIC = "(^|[,{}() ]|$)"
)
View Source
const (
	DEFAULT_LOCAL_PREF = 100
)
View Source
const (
	GLOBAL_RIB_NAME = "global"
)

Variables

Functions

func AddrToRadixkey

func AddrToRadixkey(addr bgp.AddrPrefixInterface) string

func CanImportToVrf

func CanImportToVrf(v *Vrf, path *Path) bool

func CidrToRadixkey

func CidrToRadixkey(cidr string) string

func CreateUpdateMsgFromPaths

func CreateUpdateMsgFromPaths(pathList []*Path) []*bgp.BGPMessage

func IpToRadixkey

func IpToRadixkey(b []byte, max uint8) string

func NewSingleAsPathMatch

func NewSingleAsPathMatch(arg string) *singleAsPathMatch

func ParseCommunity

func ParseCommunity(arg string) (uint32, error)

func ParseCommunityRegexp

func ParseCommunityRegexp(arg string) (*regexp.Regexp, error)

func ParseExtCommunity

func ParseExtCommunity(arg string) (bgp.ExtendedCommunityInterface, error)

func ParseExtCommunityRegexp

func ParseExtCommunityRegexp(arg string) (bgp.ExtendedCommunityAttrSubType, *regexp.Regexp, error)

func ParseLargeCommunityRegexp

func ParseLargeCommunityRegexp(arg string) (*regexp.Regexp, error)

func RegexpRemoveCommunities

func RegexpRemoveCommunities(path *Path, exps []*regexp.Regexp)

func RegexpRemoveExtCommunities

func RegexpRemoveExtCommunities(path *Path, exps []*regexp.Regexp, subtypes []bgp.ExtendedCommunityAttrSubType)

func RegexpRemoveLargeCommunities

func RegexpRemoveLargeCommunities(path *Path, exps []*regexp.Regexp)

func UpdatePathAggregator2ByteAs

func UpdatePathAggregator2ByteAs(msg *bgp.BGPUpdate)

func UpdatePathAggregator4ByteAs

func UpdatePathAggregator4ByteAs(msg *bgp.BGPUpdate) error

func UpdatePathAttrs2ByteAs

func UpdatePathAttrs2ByteAs(msg *bgp.BGPUpdate) error

func UpdatePathAttrs4ByteAs

func UpdatePathAttrs4ByteAs(msg *bgp.BGPUpdate) error

Types

type Action

type Action interface {
	Type() ActionType
	Apply(*Path, *PolicyOptions) *Path
	String() string
}

type ActionType

type ActionType int
const (
	ACTION_ROUTING ActionType = iota
	ACTION_COMMUNITY
	ACTION_EXT_COMMUNITY
	ACTION_MED
	ACTION_AS_PATH_PREPEND
	ACTION_NEXTHOP
	ACTION_LOCAL_PREF
	ACTION_LARGE_COMMUNITY
)

type AdjRib

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

func NewAdjRib

func NewAdjRib(id string, rfList []bgp.RouteFamily) *AdjRib

func (*AdjRib) Accepted

func (adj *AdjRib) Accepted(rfList []bgp.RouteFamily) int

func (*AdjRib) Count

func (adj *AdjRib) Count(rfList []bgp.RouteFamily) int

func (*AdjRib) Drop

func (adj *AdjRib) Drop(rfList []bgp.RouteFamily)

func (*AdjRib) DropStale

func (adj *AdjRib) DropStale(rfList []bgp.RouteFamily) []*Path

func (*AdjRib) Exists

func (adj *AdjRib) Exists(path *Path) bool

func (*AdjRib) PathList

func (adj *AdjRib) PathList(rfList []bgp.RouteFamily, accepted bool) []*Path

func (*AdjRib) RefreshAcceptedNumber

func (adj *AdjRib) RefreshAcceptedNumber(rfList []bgp.RouteFamily)

func (*AdjRib) Select

func (adj *AdjRib) Select(family bgp.RouteFamily, accepted bool, option ...TableSelectOption) (*Table, error)

func (*AdjRib) StaleAll

func (adj *AdjRib) StaleAll(rfList []bgp.RouteFamily)

func (*AdjRib) TableInfo

func (adj *AdjRib) TableInfo(family bgp.RouteFamily) (*TableInfo, error)

func (*AdjRib) Update

func (adj *AdjRib) Update(pathList []*Path)

type AsPathCondition

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

func NewAsPathCondition

func NewAsPathCondition(c config.MatchAsPathSet) (*AsPathCondition, error)

func (*AsPathCondition) Evaluate

func (c *AsPathCondition) Evaluate(path *Path, _ *PolicyOptions) bool

func (*AsPathCondition) Name

func (c *AsPathCondition) Name() string

func (*AsPathCondition) Option

func (c *AsPathCondition) Option() MatchOption

func (*AsPathCondition) Set

func (c *AsPathCondition) Set() DefinedSet

func (*AsPathCondition) Type

func (c *AsPathCondition) Type() ConditionType

type AsPathLengthCondition

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

func NewAsPathLengthCondition

func NewAsPathLengthCondition(c config.AsPathLength) (*AsPathLengthCondition, error)

func (*AsPathLengthCondition) Evaluate

func (c *AsPathLengthCondition) Evaluate(path *Path, _ *PolicyOptions) bool

compare AS_PATH length in the message's AS_PATH attribute with the one in condition.

func (*AsPathLengthCondition) Name

func (c *AsPathLengthCondition) Name() string

func (*AsPathLengthCondition) Set

func (*AsPathLengthCondition) String

func (c *AsPathLengthCondition) String() string

func (*AsPathLengthCondition) Type

type AsPathPrependAction

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

func NewAsPathPrependAction

func NewAsPathPrependAction(action config.SetAsPathPrepend) (*AsPathPrependAction, error)

NewAsPathPrependAction creates AsPathPrependAction object. If ASN cannot be parsed, nil will be returned.

func (*AsPathPrependAction) Apply

func (a *AsPathPrependAction) Apply(path *Path, _ *PolicyOptions) *Path

func (*AsPathPrependAction) MarshalJSON

func (a *AsPathPrependAction) MarshalJSON() ([]byte, error)

func (*AsPathPrependAction) String

func (a *AsPathPrependAction) String() string

func (*AsPathPrependAction) ToConfig

func (*AsPathPrependAction) Type

func (a *AsPathPrependAction) Type() ActionType

type AsPathSet

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

func NewAsPathSet

func NewAsPathSet(c config.AsPathSet) (*AsPathSet, error)

func (*AsPathSet) Append

func (lhs *AsPathSet) Append(arg DefinedSet) error

func (*AsPathSet) List

func (s *AsPathSet) List() []string

func (*AsPathSet) MarshalJSON

func (s *AsPathSet) MarshalJSON() ([]byte, error)

func (*AsPathSet) Name

func (s *AsPathSet) Name() string

func (*AsPathSet) Remove

func (lhs *AsPathSet) Remove(arg DefinedSet) error

func (*AsPathSet) Replace

func (lhs *AsPathSet) Replace(arg DefinedSet) error

func (*AsPathSet) String

func (s *AsPathSet) String() string

func (*AsPathSet) ToConfig

func (s *AsPathSet) ToConfig() *config.AsPathSet

func (*AsPathSet) Type

func (s *AsPathSet) Type() DefinedType

type Assignment

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

type AttributeComparison

type AttributeComparison int
const (
	// "== comparison"
	ATTRIBUTE_EQ AttributeComparison = iota
	// ">= comparison"
	ATTRIBUTE_GE
	// "<= comparison"
	ATTRIBUTE_LE
)

func (AttributeComparison) String

func (c AttributeComparison) String() string

type BestPathReason

type BestPathReason string
const (
	BPR_UNKNOWN            BestPathReason = "Unknown"
	BPR_ONLY_PATH          BestPathReason = "Only Path"
	BPR_REACHABLE_NEXT_HOP BestPathReason = "Reachable Next Hop"
	BPR_HIGHEST_WEIGHT     BestPathReason = "Highest Weight"
	BPR_LOCAL_PREF         BestPathReason = "Local Pref"
	BPR_LOCAL_ORIGIN       BestPathReason = "Local Origin"
	BPR_ASPATH             BestPathReason = "AS Path"
	BPR_ORIGIN             BestPathReason = "Origin"
	BPR_MED                BestPathReason = "MED"
	BPR_ASN                BestPathReason = "ASN"
	BPR_IGP_COST           BestPathReason = "IGP Cost"
	BPR_ROUTER_ID          BestPathReason = "Router ID"
	BPR_OLDER              BestPathReason = "Older"
	BPR_NON_LLGR_STALE     BestPathReason = "no LLGR Stale"
)

type Bitmap

type Bitmap []uint64

func NewBitmap

func NewBitmap(size int) Bitmap

func (Bitmap) Flag

func (b Bitmap) Flag(i uint)

func (Bitmap) GetFlag

func (b Bitmap) GetFlag(i uint) bool

func (Bitmap) Unflag

func (b Bitmap) Unflag(i uint)

type CommunityAction

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

func NewCommunityAction

func NewCommunityAction(c config.SetCommunity) (*CommunityAction, error)

func (*CommunityAction) Apply

func (a *CommunityAction) Apply(path *Path, _ *PolicyOptions) *Path

func (*CommunityAction) MarshalJSON

func (a *CommunityAction) MarshalJSON() ([]byte, error)

func (*CommunityAction) String

func (a *CommunityAction) String() string

func (*CommunityAction) ToConfig

func (a *CommunityAction) ToConfig() *config.SetCommunity

func (*CommunityAction) Type

func (a *CommunityAction) Type() ActionType

type CommunityCondition

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

func NewCommunityCondition

func NewCommunityCondition(c config.MatchCommunitySet) (*CommunityCondition, error)

func (*CommunityCondition) Evaluate

func (c *CommunityCondition) Evaluate(path *Path, _ *PolicyOptions) bool

func (*CommunityCondition) Name

func (c *CommunityCondition) Name() string

func (*CommunityCondition) Option

func (c *CommunityCondition) Option() MatchOption

func (*CommunityCondition) Set

func (c *CommunityCondition) Set() DefinedSet

func (*CommunityCondition) Type

type CommunitySet

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

func NewCommunitySet

func NewCommunitySet(c config.CommunitySet) (*CommunitySet, error)

func (*CommunitySet) Append

func (lhs *CommunitySet) Append(arg DefinedSet) error

func (*CommunitySet) List

func (s *CommunitySet) List() []string

func (*CommunitySet) MarshalJSON

func (s *CommunitySet) MarshalJSON() ([]byte, error)

func (*CommunitySet) Name

func (s *CommunitySet) Name() string

func (*CommunitySet) Remove

func (lhs *CommunitySet) Remove(arg DefinedSet) error

func (*CommunitySet) Replace

func (lhs *CommunitySet) Replace(arg DefinedSet) error

func (*CommunitySet) String

func (s *CommunitySet) String() string

func (*CommunitySet) ToConfig

func (s *CommunitySet) ToConfig() *config.CommunitySet

func (*CommunitySet) Type

func (s *CommunitySet) Type() DefinedType

type Condition

type Condition interface {
	Name() string
	Type() ConditionType
	Evaluate(*Path, *PolicyOptions) bool
	Set() DefinedSet
}

type ConditionType

type ConditionType int
const (
	CONDITION_PREFIX ConditionType = iota
	CONDITION_NEIGHBOR
	CONDITION_AS_PATH
	CONDITION_COMMUNITY
	CONDITION_EXT_COMMUNITY
	CONDITION_AS_PATH_LENGTH
	CONDITION_RPKI
	CONDITION_ROUTE_TYPE
	CONDITION_LARGE_COMMUNITY
)

type DefinedSet

type DefinedSet interface {
	Type() DefinedType
	Name() string
	Append(DefinedSet) error
	Remove(DefinedSet) error
	Replace(DefinedSet) error
	String() string
	List() []string
}

type DefinedSetList

type DefinedSetList []DefinedSet

func (DefinedSetList) Len

func (l DefinedSetList) Len() int

func (DefinedSetList) Less

func (l DefinedSetList) Less(i, j int) bool

func (DefinedSetList) Swap

func (l DefinedSetList) Swap(i, j int)

type DefinedSetMap

type DefinedSetMap map[DefinedType]map[string]DefinedSet

type DefinedType

type DefinedType int
const (
	DEFINED_TYPE_PREFIX DefinedType = iota
	DEFINED_TYPE_NEIGHBOR
	DEFINED_TYPE_TAG
	DEFINED_TYPE_AS_PATH
	DEFINED_TYPE_COMMUNITY
	DEFINED_TYPE_EXT_COMMUNITY
	DEFINED_TYPE_LARGE_COMMUNITY
)

type Destination

type Destination struct {
	RadixKey string
	// contains filtered or unexported fields
}

func NewDestination

func NewDestination(nlri bgp.AddrPrefixInterface, known ...*Path) *Destination

func (*Destination) AddNewPath

func (dd *Destination) AddNewPath(newPath *Path)

func (*Destination) AddWithdraw

func (dd *Destination) AddWithdraw(withdraw *Path)

func (*Destination) Calculate

func (dest *Destination) Calculate(ids []string, peerDown bool) (map[string]*Path, map[string]*Path, []*Path)

Calculates best-path among known paths for this destination.

Modifies destination's state related to stored paths. Removes withdrawn paths from known paths. Also, adds new paths to known paths.

func (*Destination) Family

func (dd *Destination) Family() bgp.RouteFamily

func (*Destination) GetAllKnownPathList

func (dd *Destination) GetAllKnownPathList() []*Path

func (*Destination) GetBestPath

func (dd *Destination) GetBestPath(id string) *Path

func (*Destination) GetKnownPathList

func (dd *Destination) GetKnownPathList(id string) []*Path

func (*Destination) GetMultiBestPath

func (dd *Destination) GetMultiBestPath(id string) []*Path

func (*Destination) GetNlri

func (dd *Destination) GetNlri() bgp.AddrPrefixInterface

func (*Destination) MarshalJSON

func (d *Destination) MarshalJSON() ([]byte, error)

func (*Destination) Select

func (old *Destination) Select(option ...DestinationSelectOption) *Destination

func (*Destination) String

func (dest *Destination) String() string

type DestinationSelectOption

type DestinationSelectOption struct {
	ID  string
	VRF *Vrf

	Best      bool
	MultiPath bool
	// contains filtered or unexported fields
}

type ExtCommunityAction

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

func NewExtCommunityAction

func NewExtCommunityAction(c config.SetExtCommunity) (*ExtCommunityAction, error)

func (*ExtCommunityAction) Apply

func (a *ExtCommunityAction) Apply(path *Path, _ *PolicyOptions) *Path

func (*ExtCommunityAction) MarshalJSON

func (a *ExtCommunityAction) MarshalJSON() ([]byte, error)

func (*ExtCommunityAction) String

func (a *ExtCommunityAction) String() string

func (*ExtCommunityAction) ToConfig

func (a *ExtCommunityAction) ToConfig() *config.SetExtCommunity

func (*ExtCommunityAction) Type

func (a *ExtCommunityAction) Type() ActionType

type ExtCommunityCondition

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

func (*ExtCommunityCondition) Evaluate

func (c *ExtCommunityCondition) Evaluate(path *Path, _ *PolicyOptions) bool

func (*ExtCommunityCondition) Name

func (c *ExtCommunityCondition) Name() string

func (*ExtCommunityCondition) Option

func (c *ExtCommunityCondition) Option() MatchOption

func (*ExtCommunityCondition) Set

func (*ExtCommunityCondition) Type

type ExtCommunitySet

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

func NewExtCommunitySet

func NewExtCommunitySet(c config.ExtCommunitySet) (*ExtCommunitySet, error)

func (*ExtCommunitySet) Append

func (s *ExtCommunitySet) Append(arg DefinedSet) error

func (*ExtCommunitySet) List

func (s *ExtCommunitySet) List() []string

func (*ExtCommunitySet) MarshalJSON

func (s *ExtCommunitySet) MarshalJSON() ([]byte, error)

func (*ExtCommunitySet) Name

func (s *ExtCommunitySet) Name() string

func (*ExtCommunitySet) Remove

func (lhs *ExtCommunitySet) Remove(arg DefinedSet) error

func (*ExtCommunitySet) Replace

func (lhs *ExtCommunitySet) Replace(arg DefinedSet) error

func (*ExtCommunitySet) String

func (s *ExtCommunitySet) String() string

func (*ExtCommunitySet) ToConfig

func (s *ExtCommunitySet) ToConfig() *config.ExtCommunitySet

func (*ExtCommunitySet) Type

func (s *ExtCommunitySet) Type() DefinedType

type FlowSpecComponents

type FlowSpecComponents []bgp.FlowSpecComponentInterface

func (FlowSpecComponents) Len

func (c FlowSpecComponents) Len() int

func (FlowSpecComponents) Less

func (c FlowSpecComponents) Less(i, j int) bool

func (FlowSpecComponents) Swap

func (c FlowSpecComponents) Swap(i, j int)

type IPPrefix

type IPPrefix struct {
	Prefix net.IP
	Length uint8
}

func (*IPPrefix) String

func (p *IPPrefix) String() string

type LargeCommunityAction

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

func (*LargeCommunityAction) Apply

func (a *LargeCommunityAction) Apply(path *Path, _ *PolicyOptions) *Path

func (*LargeCommunityAction) MarshalJSON

func (a *LargeCommunityAction) MarshalJSON() ([]byte, error)

func (*LargeCommunityAction) String

func (a *LargeCommunityAction) String() string

func (*LargeCommunityAction) ToConfig

func (*LargeCommunityAction) Type

func (a *LargeCommunityAction) Type() ActionType

type LargeCommunityCondition

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

func (*LargeCommunityCondition) Evaluate

func (c *LargeCommunityCondition) Evaluate(path *Path, _ *PolicyOptions) bool

func (*LargeCommunityCondition) Name

func (c *LargeCommunityCondition) Name() string

func (*LargeCommunityCondition) Option

func (*LargeCommunityCondition) Set

func (*LargeCommunityCondition) Type

type LargeCommunitySet

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

func NewLargeCommunitySet

func NewLargeCommunitySet(c config.LargeCommunitySet) (*LargeCommunitySet, error)

func (*LargeCommunitySet) Append

func (lhs *LargeCommunitySet) Append(arg DefinedSet) error

func (*LargeCommunitySet) List

func (s *LargeCommunitySet) List() []string

func (*LargeCommunitySet) MarshalJSON

func (s *LargeCommunitySet) MarshalJSON() ([]byte, error)

func (*LargeCommunitySet) Name

func (s *LargeCommunitySet) Name() string

func (*LargeCommunitySet) Remove

func (lhs *LargeCommunitySet) Remove(arg DefinedSet) error

func (*LargeCommunitySet) Replace

func (lhs *LargeCommunitySet) Replace(arg DefinedSet) error

func (*LargeCommunitySet) String

func (s *LargeCommunitySet) String() string

func (*LargeCommunitySet) ToConfig

func (*LargeCommunitySet) Type

func (s *LargeCommunitySet) Type() DefinedType

type LocalPrefAction

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

func NewLocalPrefAction

func NewLocalPrefAction(value uint32) (*LocalPrefAction, error)

func (*LocalPrefAction) Apply

func (a *LocalPrefAction) Apply(path *Path, _ *PolicyOptions) *Path

func (*LocalPrefAction) MarshalJSON

func (a *LocalPrefAction) MarshalJSON() ([]byte, error)

func (*LocalPrefAction) String

func (a *LocalPrefAction) String() string

func (*LocalPrefAction) ToConfig

func (a *LocalPrefAction) ToConfig() uint32

func (*LocalPrefAction) Type

func (a *LocalPrefAction) Type() ActionType

type LookupOption

type LookupOption uint8
const (
	LOOKUP_EXACT LookupOption = iota
	LOOKUP_LONGER
	LOOKUP_SHORTER
)

type LookupPrefix

type LookupPrefix struct {
	Prefix string
	LookupOption
}

type MatchOption

type MatchOption int
const (
	MATCH_OPTION_ANY MatchOption = iota
	MATCH_OPTION_ALL
	MATCH_OPTION_INVERT
)

func NewMatchOption

func NewMatchOption(c interface{}) (MatchOption, error)

func (MatchOption) ConvertToMatchSetOptionsRestrictedType

func (o MatchOption) ConvertToMatchSetOptionsRestrictedType() config.MatchSetOptionsRestrictedType

func (MatchOption) String

func (o MatchOption) String() string

type MedAction

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

func NewMedAction

func NewMedAction(c config.BgpSetMedType) (*MedAction, error)

func NewMedActionFromApiStruct

func NewMedActionFromApiStruct(action MedActionType, value int64) *MedAction

func (*MedAction) Apply

func (a *MedAction) Apply(path *Path, _ *PolicyOptions) *Path

func (*MedAction) MarshalJSON

func (a *MedAction) MarshalJSON() ([]byte, error)

func (*MedAction) String

func (a *MedAction) String() string

func (*MedAction) ToConfig

func (a *MedAction) ToConfig() config.BgpSetMedType

func (*MedAction) Type

func (a *MedAction) Type() ActionType

type MedActionType

type MedActionType int
const (
	MED_ACTION_MOD MedActionType = iota
	MED_ACTION_REPLACE
)

type NeighborCondition

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

func NewNeighborCondition

func NewNeighborCondition(c config.MatchNeighborSet) (*NeighborCondition, error)

func (*NeighborCondition) Evaluate

func (c *NeighborCondition) Evaluate(path *Path, options *PolicyOptions) bool

compare neighbor ipaddress of this condition and source address of path and, subsequent comparisons are skipped if that matches the conditions. If NeighborList's length is zero, return true.

func (*NeighborCondition) Name

func (c *NeighborCondition) Name() string

func (*NeighborCondition) Option

func (c *NeighborCondition) Option() MatchOption

func (*NeighborCondition) Set

func (c *NeighborCondition) Set() DefinedSet

func (*NeighborCondition) Type

func (c *NeighborCondition) Type() ConditionType

type NeighborSet

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

func NewNeighborSet

func NewNeighborSet(c config.NeighborSet) (*NeighborSet, error)

func NewNeighborSetFromApiStruct

func NewNeighborSetFromApiStruct(name string, list []net.IP) (*NeighborSet, error)

func (*NeighborSet) Append

func (lhs *NeighborSet) Append(arg DefinedSet) error

func (*NeighborSet) List

func (s *NeighborSet) List() []string

func (*NeighborSet) MarshalJSON

func (s *NeighborSet) MarshalJSON() ([]byte, error)

func (*NeighborSet) Name

func (s *NeighborSet) Name() string

func (*NeighborSet) Remove

func (lhs *NeighborSet) Remove(arg DefinedSet) error

func (*NeighborSet) Replace

func (lhs *NeighborSet) Replace(arg DefinedSet) error

func (*NeighborSet) String

func (s *NeighborSet) String() string

func (*NeighborSet) ToConfig

func (s *NeighborSet) ToConfig() *config.NeighborSet

func (*NeighborSet) Type

func (s *NeighborSet) Type() DefinedType

type NexthopAction

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

func NewNexthopAction

func NewNexthopAction(c config.BgpNextHopType) (*NexthopAction, error)

func (*NexthopAction) Apply

func (a *NexthopAction) Apply(path *Path, options *PolicyOptions) *Path

func (*NexthopAction) MarshalJSON

func (a *NexthopAction) MarshalJSON() ([]byte, error)

func (*NexthopAction) String

func (a *NexthopAction) String() string

func (*NexthopAction) ToConfig

func (a *NexthopAction) ToConfig() config.BgpNextHopType

func (*NexthopAction) Type

func (a *NexthopAction) Type() ActionType

type Path

type Path struct {
	IsWithdraw bool

	VrfIds []uint16
	// For BGP Nexthop Tracking, this field shows if nexthop is invalidated by IGP.
	IsNexthopInvalid bool
	// contains filtered or unexported fields
}

func NewEOR

func NewEOR(family bgp.RouteFamily) *Path

func NewPath

func NewPath(source *PeerInfo, nlri bgp.AddrPrefixInterface, isWithdraw bool, pattrs []bgp.PathAttributeInterface, timestamp time.Time, noImplicitWithdraw bool) *Path

func ProcessMessage

func ProcessMessage(m *bgp.BGPMessage, peerInfo *PeerInfo, timestamp time.Time) []*Path

func UpdatePathAttrs

func UpdatePathAttrs(global *config.Global, peer *config.Neighbor, info *PeerInfo, original *Path) *Path

func (*Path) AssignNewUUID

func (path *Path) AssignNewUUID()

func (*Path) Clone

func (path *Path) Clone(isWithdraw bool) *Path

create new PathAttributes

func (*Path) Compare

func (lhs *Path) Compare(rhs *Path) int

func (*Path) Equal

func (lhs *Path) Equal(rhs *Path) bool

func (*Path) Filter

func (path *Path) Filter(id string, reason PolicyDirection)

func (*Path) Filtered

func (path *Path) Filtered(id string) PolicyDirection

func (*Path) GetAsList

func (path *Path) GetAsList() []uint32

func (*Path) GetAsPath

func (path *Path) GetAsPath() *bgp.PathAttributeAsPath

func (*Path) GetAsPathLen

func (path *Path) GetAsPathLen() int

GetAsPathLen returns the number of AS_PATH

func (*Path) GetAsSeqList

func (path *Path) GetAsSeqList() []uint32

func (*Path) GetAsString

func (path *Path) GetAsString() string

func (*Path) GetClusterList

func (path *Path) GetClusterList() []net.IP

func (*Path) GetCommunities

func (path *Path) GetCommunities() []uint32

func (*Path) GetExtCommunities

func (path *Path) GetExtCommunities() []bgp.ExtendedCommunityInterface

func (*Path) GetLargeCommunities

func (path *Path) GetLargeCommunities() []*bgp.LargeCommunity

func (*Path) GetLocalPref

func (path *Path) GetLocalPref() (uint32, error)

func (*Path) GetMed

func (path *Path) GetMed() (uint32, error)

func (*Path) GetNexthop

func (path *Path) GetNexthop() net.IP

func (*Path) GetNlri

func (path *Path) GetNlri() bgp.AddrPrefixInterface

func (*Path) GetOrigin

func (path *Path) GetOrigin() (uint8, error)

func (*Path) GetOriginatorID

func (path *Path) GetOriginatorID() net.IP

func (*Path) GetPathAttrs

func (path *Path) GetPathAttrs() []bgp.PathAttributeInterface

func (*Path) GetRouteFamily

func (path *Path) GetRouteFamily() bgp.RouteFamily

func (*Path) GetSource

func (path *Path) GetSource() *PeerInfo

func (*Path) GetSourceAs

func (path *Path) GetSourceAs() uint32

func (*Path) GetTimestamp

func (path *Path) GetTimestamp() time.Time

func (*Path) IsEOR

func (path *Path) IsEOR() bool

func (*Path) IsFromExternal

func (path *Path) IsFromExternal() bool

func (*Path) IsIBGP

func (path *Path) IsIBGP() bool

func (*Path) IsLLGRStale

func (path *Path) IsLLGRStale() bool

func (*Path) IsLocal

func (path *Path) IsLocal() bool

func (*Path) IsStale

func (path *Path) IsStale() bool

func (*Path) MarkStale

func (path *Path) MarkStale(s bool)

func (*Path) MarshalJSON

func (path *Path) MarshalJSON() ([]byte, error)

func (*Path) NoImplicitWithdraw

func (path *Path) NoImplicitWithdraw() bool

func (*Path) OriginInfo

func (path *Path) OriginInfo() *originInfo

func (*Path) PrependAsn

func (path *Path) PrependAsn(asn uint32, repeat uint8)

PrependAsn prepends AS number. This function updates the AS_PATH attribute as follows.

  1. if the first path segment of the AS_PATH is of type AS_SEQUENCE, the local system prepends the specified AS num as the last element of the sequence (put it in the left-most position with respect to the position of octets in the protocol message) the specified number of times. If the act of prepending will cause an overflow in the AS_PATH segment (i.e., more than 255 ASes), it SHOULD prepend a new segment of type AS_SEQUENCE and prepend its own AS number to this new segment.

  2. if the first path segment of the AS_PATH is of other than type AS_SEQUENCE, the local system prepends a new path segment of type AS_SEQUENCE to the AS_PATH, including the specified AS number in that segment.

  3. if the AS_PATH is empty, the local system creates a path segment of type AS_SEQUENCE, places the specified AS number into that segment, and places that segment into the AS_PATH.

func (*Path) RemoveCommunities

func (path *Path) RemoveCommunities(communities []uint32) int

RemoveCommunities removes specific communities. If the length of communities is 0, it does nothing. If all communities are removed, it removes Communities path attribute itself.

func (*Path) RemoveLocalPref

func (path *Path) RemoveLocalPref()

func (*Path) RemovePrivateAS

func (path *Path) RemovePrivateAS(localAS uint32, option config.RemovePrivateAsOption)

func (*Path) ReplaceAS

func (path *Path) ReplaceAS(localAS, peerAS uint32) *Path

func (*Path) SetCommunities

func (path *Path) SetCommunities(communities []uint32, doReplace bool)

SetCommunities adds or replaces communities with new ones. If the length of communities is 0 and doReplace is true, it clears communities.

func (*Path) SetExtCommunities

func (path *Path) SetExtCommunities(exts []bgp.ExtendedCommunityInterface, doReplace bool)

func (*Path) SetIsFromExternal

func (path *Path) SetIsFromExternal(y bool)

func (*Path) SetLargeCommunities

func (path *Path) SetLargeCommunities(cs []*bgp.LargeCommunity, doReplace bool)

func (*Path) SetMed

func (path *Path) SetMed(med int64, doReplace bool) error

SetMed replace, add or subtraction med with new ones.

func (*Path) SetNexthop

func (path *Path) SetNexthop(nexthop net.IP)

func (*Path) SetSource

func (path *Path) SetSource(source *PeerInfo)

func (*Path) SetUUID

func (path *Path) SetUUID(id []byte)

func (*Path) SetValidation

func (path *Path) SetValidation(r config.RpkiValidationResultType)

func (*Path) String

func (path *Path) String() string

return Path's string representation

func (*Path) ToGlobal

func (p *Path) ToGlobal(vrf *Vrf) *Path

func (*Path) ToLocal

func (p *Path) ToLocal() *Path

func (*Path) UUID

func (path *Path) UUID() uuid.UUID

func (*Path) Validation

func (path *Path) Validation() config.RpkiValidationResultType

type PathAttrs

type PathAttrs []bgp.PathAttributeInterface

func (PathAttrs) Len

func (a PathAttrs) Len() int

func (PathAttrs) Less

func (a PathAttrs) Less(i, j int) bool

func (PathAttrs) Swap

func (a PathAttrs) Swap(i, j int)

type PeerInfo

type PeerInfo struct {
	AS                      uint32
	ID                      net.IP
	LocalAS                 uint32
	LocalID                 net.IP
	Address                 net.IP
	LocalAddress            net.IP
	RouteReflectorClient    bool
	RouteReflectorClusterID net.IP
	MultihopTtl             uint8
}

func NewPeerInfo

func NewPeerInfo(g *config.Global, p *config.Neighbor) *PeerInfo

func (*PeerInfo) Equal

func (lhs *PeerInfo) Equal(rhs *PeerInfo) bool

func (*PeerInfo) String

func (i *PeerInfo) String() string

type Policies

type Policies []*Policy

func (Policies) Len

func (p Policies) Len() int

func (Policies) Less

func (p Policies) Less(i, j int) bool

func (Policies) Swap

func (p Policies) Swap(i, j int)

type Policy

type Policy struct {
	Name       string
	Statements []*Statement
}

func NewPolicy

func NewPolicy(c config.PolicyDefinition) (*Policy, error)

func (*Policy) Add

func (lhs *Policy) Add(rhs *Policy) error

func (*Policy) Apply

func (p *Policy) Apply(path *Path, options *PolicyOptions) (RouteType, *Path)

Compare path with a policy's condition in stored order in the policy. If a condition match, then this function stops evaluation and subsequent conditions are skipped.

func (*Policy) FillUp

func (p *Policy) FillUp(m map[string]*Statement) error

func (*Policy) MarshalJSON

func (p *Policy) MarshalJSON() ([]byte, error)

func (*Policy) Remove

func (lhs *Policy) Remove(rhs *Policy) error

func (*Policy) Replace

func (lhs *Policy) Replace(rhs *Policy) error

func (*Policy) ToConfig

func (p *Policy) ToConfig() *config.PolicyDefinition

type PolicyAssignment

type PolicyAssignment struct {
	Name     string
	Type     PolicyDirection
	Policies []*Policy
	Default  RouteType
}

type PolicyDirection

type PolicyDirection int
const (
	POLICY_DIRECTION_NONE PolicyDirection = iota
	POLICY_DIRECTION_IN
	POLICY_DIRECTION_IMPORT
	POLICY_DIRECTION_EXPORT
)

func (PolicyDirection) String

func (d PolicyDirection) String() string

type PolicyOptions

type PolicyOptions struct {
	Info *PeerInfo
}

type Prefix

type Prefix struct {
	Prefix             *net.IPNet
	AddressFamily      bgp.RouteFamily
	MasklengthRangeMax uint8
	MasklengthRangeMin uint8
}

func NewPrefix

func NewPrefix(c config.Prefix) (*Prefix, error)

func (*Prefix) Equal

func (lhs *Prefix) Equal(rhs *Prefix) bool

func (*Prefix) Match

func (p *Prefix) Match(path *Path) bool

func (*Prefix) PrefixString

func (p *Prefix) PrefixString() string

type PrefixCondition

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

func NewPrefixCondition

func NewPrefixCondition(c config.MatchPrefixSet) (*PrefixCondition, error)

func (*PrefixCondition) Evaluate

func (c *PrefixCondition) Evaluate(path *Path, _ *PolicyOptions) bool

compare prefixes in this condition and nlri of path and subsequent comparison is skipped if that matches the conditions. If PrefixList's length is zero, return true.

func (*PrefixCondition) Name

func (c *PrefixCondition) Name() string

func (*PrefixCondition) Option

func (c *PrefixCondition) Option() MatchOption

func (*PrefixCondition) Set

func (c *PrefixCondition) Set() DefinedSet

func (*PrefixCondition) Type

func (c *PrefixCondition) Type() ConditionType

type PrefixSet

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

func NewPrefixSet

func NewPrefixSet(c config.PrefixSet) (*PrefixSet, error)

func NewPrefixSetFromApiStruct

func NewPrefixSetFromApiStruct(name string, prefixes []*Prefix) (*PrefixSet, error)

func (*PrefixSet) Append

func (lhs *PrefixSet) Append(arg DefinedSet) error

func (*PrefixSet) List

func (s *PrefixSet) List() []string

func (*PrefixSet) MarshalJSON

func (s *PrefixSet) MarshalJSON() ([]byte, error)

func (*PrefixSet) Name

func (s *PrefixSet) Name() string

func (*PrefixSet) Remove

func (lhs *PrefixSet) Remove(arg DefinedSet) error

func (*PrefixSet) Replace

func (lhs *PrefixSet) Replace(arg DefinedSet) error

func (*PrefixSet) String

func (s *PrefixSet) String() string

func (*PrefixSet) ToConfig

func (s *PrefixSet) ToConfig() *config.PrefixSet

func (*PrefixSet) Type

func (s *PrefixSet) Type() DefinedType

type ROA

type ROA struct {
	Family int
	Prefix *IPPrefix
	MaxLen uint8
	AS     uint32
	Src    string
}

func NewROA

func NewROA(family int, prefixByte []byte, prefixLen uint8, maxLen uint8, as uint32, src string) *ROA

func (*ROA) Equal

func (r *ROA) Equal(roa *ROA) bool

type RouteType

type RouteType int
const (
	ROUTE_TYPE_NONE RouteType = iota
	ROUTE_TYPE_ACCEPT
	ROUTE_TYPE_REJECT
)

func (RouteType) String

func (t RouteType) String() string

type RouteTypeCondition

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

func NewRouteTypeCondition

func NewRouteTypeCondition(c config.RouteType) (*RouteTypeCondition, error)

func (*RouteTypeCondition) Evaluate

func (c *RouteTypeCondition) Evaluate(path *Path, _ *PolicyOptions) bool

func (*RouteTypeCondition) Name

func (c *RouteTypeCondition) Name() string

func (*RouteTypeCondition) Set

func (c *RouteTypeCondition) Set() DefinedSet

func (*RouteTypeCondition) String

func (c *RouteTypeCondition) String() string

func (*RouteTypeCondition) Type

type RoutingAction

type RoutingAction struct {
	AcceptRoute bool
}

func NewRoutingAction

func NewRoutingAction(c config.RouteDisposition) (*RoutingAction, error)

func (*RoutingAction) Apply

func (a *RoutingAction) Apply(path *Path, _ *PolicyOptions) *Path

func (*RoutingAction) String

func (a *RoutingAction) String() string

func (*RoutingAction) Type

func (a *RoutingAction) Type() ActionType

type RoutingPolicy

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

func NewRoutingPolicy

func NewRoutingPolicy() *RoutingPolicy

func (*RoutingPolicy) AddDefinedSet

func (r *RoutingPolicy) AddDefinedSet(s DefinedSet) error

func (*RoutingPolicy) AddPolicy

func (r *RoutingPolicy) AddPolicy(x *Policy, refer bool) (err error)

func (*RoutingPolicy) AddPolicyAssignment

func (r *RoutingPolicy) AddPolicyAssignment(id string, dir PolicyDirection, policies []*config.PolicyDefinition, def RouteType) (err error)

func (*RoutingPolicy) AddStatement

func (r *RoutingPolicy) AddStatement(st *Statement) (err error)

func (*RoutingPolicy) ApplyPolicy

func (r *RoutingPolicy) ApplyPolicy(id string, dir PolicyDirection, before *Path, options *PolicyOptions) *Path

func (*RoutingPolicy) DeleteDefinedSet

func (r *RoutingPolicy) DeleteDefinedSet(a DefinedSet, all bool) (err error)

func (*RoutingPolicy) DeletePolicy

func (r *RoutingPolicy) DeletePolicy(x *Policy, all, preserve bool, activeId []string) (err error)

func (*RoutingPolicy) DeletePolicyAssignment

func (r *RoutingPolicy) DeletePolicyAssignment(id string, dir PolicyDirection, policies []*config.PolicyDefinition, all bool) (err error)

func (*RoutingPolicy) DeleteStatement

func (r *RoutingPolicy) DeleteStatement(st *Statement, all bool) (err error)

func (*RoutingPolicy) GetAllPolicy

func (r *RoutingPolicy) GetAllPolicy() []*config.PolicyDefinition

func (*RoutingPolicy) GetDefinedSet

func (r *RoutingPolicy) GetDefinedSet(typ DefinedType, name string) (*config.DefinedSets, error)

func (*RoutingPolicy) GetPolicyAssignment

func (r *RoutingPolicy) GetPolicyAssignment(id string, dir PolicyDirection) (RouteType, []*config.PolicyDefinition, error)

func (*RoutingPolicy) GetStatement

func (r *RoutingPolicy) GetStatement() []*config.Statement

func (*RoutingPolicy) ReplaceDefinedSet

func (r *RoutingPolicy) ReplaceDefinedSet(a DefinedSet) (err error)

func (*RoutingPolicy) ReplacePolicy

func (r *RoutingPolicy) ReplacePolicy(x *Policy, refer, preserve bool) (err error)

func (*RoutingPolicy) ReplacePolicyAssignment

func (r *RoutingPolicy) ReplacePolicyAssignment(id string, dir PolicyDirection, policies []*config.PolicyDefinition, def RouteType) (err error)

func (*RoutingPolicy) ReplaceStatement

func (r *RoutingPolicy) ReplaceStatement(st *Statement) (err error)

func (*RoutingPolicy) Reset

type RpkiValidationCondition

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

func (*RpkiValidationCondition) Evaluate

func (c *RpkiValidationCondition) Evaluate(path *Path, _ *PolicyOptions) bool

func (*RpkiValidationCondition) Name

func (c *RpkiValidationCondition) Name() string

func (*RpkiValidationCondition) Set

func (*RpkiValidationCondition) String

func (c *RpkiValidationCondition) String() string

func (*RpkiValidationCondition) Type

type Statement

type Statement struct {
	Name        string
	Conditions  []Condition
	RouteAction Action
	ModActions  []Action
}

func NewStatement

func NewStatement(c config.Statement) (*Statement, error)

func (*Statement) Add

func (lhs *Statement) Add(rhs *Statement) error

func (*Statement) Apply

func (s *Statement) Apply(path *Path, options *PolicyOptions) (RouteType, *Path)

func (*Statement) Evaluate

func (s *Statement) Evaluate(p *Path, options *PolicyOptions) bool

evaluate each condition in the statement according to MatchSetOptions

func (*Statement) MarshalJSON

func (s *Statement) MarshalJSON() ([]byte, error)

func (*Statement) Remove

func (lhs *Statement) Remove(rhs *Statement) error

func (*Statement) Replace

func (lhs *Statement) Replace(rhs *Statement) error

func (*Statement) ToConfig

func (s *Statement) ToConfig() *config.Statement

type Table

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

func NewTable

func NewTable(rf bgp.RouteFamily, dsts ...*Destination) *Table

func (*Table) Bests

func (t *Table) Bests(id string) []*Path

func (*Table) DeleteDestByPeer

func (t *Table) DeleteDestByPeer(peerInfo *PeerInfo) []*Destination

func (*Table) GetDestination

func (t *Table) GetDestination(key string) *Destination

func (*Table) GetDestinations

func (t *Table) GetDestinations() map[string]*Destination

func (*Table) GetKnownPathList

func (t *Table) GetKnownPathList(id string) []*Path

func (*Table) GetLongerPrefixDestinations

func (t *Table) GetLongerPrefixDestinations(key string) ([]*Destination, error)

func (*Table) GetRoutefamily

func (t *Table) GetRoutefamily() bgp.RouteFamily

func (*Table) GetSortedDestinations

func (t *Table) GetSortedDestinations() []*Destination

func (*Table) Info

func (t *Table) Info(id string) *TableInfo

func (*Table) MultiBests

func (t *Table) MultiBests(id string) [][]*Path

func (*Table) Select

func (t *Table) Select(option ...TableSelectOption) (*Table, error)

type TableInfo

type TableInfo struct {
	NumDestination int
	NumPath        int
	NumAccepted    int
}

type TableManager

type TableManager struct {
	Tables map[bgp.RouteFamily]*Table
	Vrfs   map[string]*Vrf
	// contains filtered or unexported fields
}

func NewTableManager

func NewTableManager(rfList []bgp.RouteFamily) *TableManager

func (*TableManager) AddVrf

func (manager *TableManager) AddVrf(name string, id uint32, rd bgp.RouteDistinguisherInterface, importRt, exportRt []bgp.ExtendedCommunityInterface, info *PeerInfo) ([]*Path, error)

func (*TableManager) DeletePathsByPeer

func (manager *TableManager) DeletePathsByPeer(ids []string, info *PeerInfo, rf bgp.RouteFamily) (map[string][]*Path, map[string][]*Path, [][]*Path)

func (*TableManager) DeleteVrf

func (manager *TableManager) DeleteVrf(name string) ([]*Path, error)

func (*TableManager) GetBestMultiPathList

func (manager *TableManager) GetBestMultiPathList(id string, rfList []bgp.RouteFamily) [][]*Path

func (*TableManager) GetBestPathList

func (manager *TableManager) GetBestPathList(id string, rfList []bgp.RouteFamily) []*Path

func (*TableManager) GetDestination

func (manager *TableManager) GetDestination(path *Path) *Destination

func (*TableManager) GetPathList

func (manager *TableManager) GetPathList(id string, rfList []bgp.RouteFamily) []*Path

func (*TableManager) GetPathListWithNexthop

func (manager *TableManager) GetPathListWithNexthop(id string, rfList []bgp.RouteFamily, nexthop net.IP) []*Path

func (*TableManager) GetRFlist

func (manager *TableManager) GetRFlist() []bgp.RouteFamily

func (*TableManager) ProcessPaths

func (manager *TableManager) ProcessPaths(ids []string, pathList []*Path) (map[string][]*Path, map[string][]*Path, [][]*Path)

func (*TableManager) TableInfo

func (manager *TableManager) TableInfo(id string, family bgp.RouteFamily) (*TableInfo, error)

type TableSelectOption

type TableSelectOption struct {
	ID             string
	LookupPrefixes []*LookupPrefix
	VRF            *Vrf

	Best      bool
	MultiPath bool
	// contains filtered or unexported fields
}

type Vrf

func (*Vrf) Clone

func (v *Vrf) Clone() *Vrf

func (*Vrf) ToGlobalPath

func (v *Vrf) ToGlobalPath(path *Path) error

Jump to

Keyboard shortcuts

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