Documentation ¶
Index ¶
- Constants
- func ParseIPv4(str string) (net.IP, error)
- func ParseIPv6(str string) (net.IP, error)
- type LocalSIDDescriptor
- func (d *LocalSIDDescriptor) Create(key string, value *srv6.LocalSID) (metadata interface{}, err error)
- func (d *LocalSIDDescriptor) Delete(key string, value *srv6.LocalSID, metadata interface{}) error
- func (d *LocalSIDDescriptor) Dependencies(key string, localSID *srv6.LocalSID) (dependencies []scheduler.Dependency)
- func (d *LocalSIDDescriptor) EquivalentLocalSIDs(key string, oldLocalSID, newLocalSID *srv6.LocalSID) bool
- func (d *LocalSIDDescriptor) GetDescriptor() *adapter.LocalSIDDescriptor
- func (d *LocalSIDDescriptor) Validate(key string, localSID *srv6.LocalSID) error
- type PolicyDescriptor
- func (d *PolicyDescriptor) Create(key string, policy *srv6.Policy) (metadata interface{}, err error)
- func (d *PolicyDescriptor) Delete(key string, policy *srv6.Policy, metadata interface{}) error
- func (d *PolicyDescriptor) EquivalentPolicies(key string, oldPolicy, newPolicy *srv6.Policy) bool
- func (d *PolicyDescriptor) GetDescriptor() *adapter.PolicyDescriptor
- func (d *PolicyDescriptor) Update(key string, oldPolicy, newPolicy *srv6.Policy, oldMetadata interface{}) (newMetadata interface{}, err error)
- func (d *PolicyDescriptor) UpdateWithRecreate(key string, oldPolicy, newPolicy *srv6.Policy, oldMetadata interface{}) bool
- func (d *PolicyDescriptor) Validate(key string, policy *srv6.Policy) error
- type PolicyMetadata
- type SteeringDescriptor
- func (d *SteeringDescriptor) Create(key string, steering *srv6.Steering) (metadata interface{}, err error)
- func (d *SteeringDescriptor) Delete(key string, steering *srv6.Steering, metadata interface{}) error
- func (d *SteeringDescriptor) Dependencies(key string, steering *srv6.Steering) (dependencies []scheduler.Dependency)
- func (d *SteeringDescriptor) EquivalentSteering(key string, oldSteering, newSteering *srv6.Steering) bool
- func (d *SteeringDescriptor) GetDescriptor() *adapter.SteeringDescriptor
- func (d *SteeringDescriptor) Validate(key string, steering *srv6.Steering) error
Constants ¶
const (
// LocalSIDDescriptorName is the name of the descriptor for VPP LocalSIDs
LocalSIDDescriptorName = "vpp-sr-localsid"
)
const PolicyDescriptorName = "vpp-sr-policy"
PolicyDescriptorName is the name of the descriptor for VPP policies
const (
// SteeringDescriptorName is the name of the descriptor for VPP SRv6 steering
SteeringDescriptorName = "vpp-sr-steering"
)
Variables ¶
This section is empty.
Functions ¶
Types ¶
type LocalSIDDescriptor ¶
type LocalSIDDescriptor struct {
// contains filtered or unexported fields
}
LocalSIDDescriptor teaches KVScheduler how to configure VPP LocalSIDs.
func NewLocalSIDDescriptor ¶
func NewLocalSIDDescriptor(srHandler vppcalls.SRv6VppAPI, log logging.PluginLogger) *LocalSIDDescriptor
NewLocalSIDDescriptor creates a new instance of the LocalSID descriptor.
func (*LocalSIDDescriptor) Create ¶
func (d *LocalSIDDescriptor) Create(key string, value *srv6.LocalSID) (metadata interface{}, err error)
Create creates new Local SID into VPP using VPP's binary api
func (*LocalSIDDescriptor) Delete ¶
func (d *LocalSIDDescriptor) Delete(key string, value *srv6.LocalSID, metadata interface{}) error
Delete removes Local SID from VPP using VPP's binary api
func (*LocalSIDDescriptor) Dependencies ¶
func (d *LocalSIDDescriptor) Dependencies(key string, localSID *srv6.LocalSID) (dependencies []scheduler.Dependency)
Dependencies for LocalSIDs are represented by interface (interface in up state)
func (*LocalSIDDescriptor) EquivalentLocalSIDs ¶
func (d *LocalSIDDescriptor) EquivalentLocalSIDs(key string, oldLocalSID, newLocalSID *srv6.LocalSID) bool
EquivalentLocalSIDs determines whether 2 localSIDs are logically equal. This comparison takes into consideration also semantics that couldn't be modeled into proto models (i.e. SID is IPv6 address and not only string)
func (*LocalSIDDescriptor) GetDescriptor ¶
func (d *LocalSIDDescriptor) GetDescriptor() *adapter.LocalSIDDescriptor
GetDescriptor returns descriptor suitable for registration (via adapter) with the KVScheduler.
type PolicyDescriptor ¶
type PolicyDescriptor struct {
// contains filtered or unexported fields
}
PolicyDescriptor teaches KVScheduler how to configure VPP SRv6 policies.
Implementation note: according to https://tools.ietf.org/html/draft-ietf-spring-segment-routing-policy-02#section-2.6, (weight,segments) tuple is not unique identification of candidate path(segment list) in policy (VPP also allows to have multiple segment lists that have the same (weight,segments) but differs in index (in ietf material they call it "Discriminator of a Candidate Path")). However, in validation and equivalency stage of vpp-agent there is no way how to get from VPP the index (validation precedes creation call and VPP doesn't have it). As result, restriction must be made, (weight,segments) is unique within given Policy. The drawback is that you can't create multiple segment lists with the same (weight,segments), but that is not issue if you don't want to explicitly rely on special attributes used by tie-breaking rules from https://tools.ietf.org/html/draft-ietf-spring-segment-routing-policy-02#section-2.9 (i.e. VPP-internal index). These special attributes can't be explicitly set in VPP, so can't rely on them anyway. So we should not miss any client use case for current VPP implementation (by removing duplicated segment list we don't break any use case).
func NewPolicyDescriptor ¶
func NewPolicyDescriptor(srHandler vppcalls.SRv6VppAPI, log logging.PluginLogger) *PolicyDescriptor
NewPolicyDescriptor creates a new instance of the Srv6 policy descriptor.
func (*PolicyDescriptor) Create ¶
func (d *PolicyDescriptor) Create(key string, policy *srv6.Policy) (metadata interface{}, err error)
Create creates new Policy into VPP using VPP's binary api
func (*PolicyDescriptor) Delete ¶
func (d *PolicyDescriptor) Delete(key string, policy *srv6.Policy, metadata interface{}) error
Delete removes Policy from VPP using VPP's binary api
func (*PolicyDescriptor) EquivalentPolicies ¶
func (d *PolicyDescriptor) EquivalentPolicies(key string, oldPolicy, newPolicy *srv6.Policy) bool
EquivalentPolicies determines whether 2 policies are logically equal. This comparison takes into consideration also semantics that couldn't be modeled into proto models (i.e. SID is IPv6 address and not only string)
func (*PolicyDescriptor) GetDescriptor ¶
func (d *PolicyDescriptor) GetDescriptor() *adapter.PolicyDescriptor
GetDescriptor returns descriptor suitable for registration (via adapter) with the KVScheduler.
func (*PolicyDescriptor) Update ¶
func (d *PolicyDescriptor) Update(key string, oldPolicy, newPolicy *srv6.Policy, oldMetadata interface{}) (newMetadata interface{}, err error)
Update updates Policy in VPP using VPP's binary api. Only changes of segment list handled here. Other updates are handle by recreation (see function UpdateWithRecreate)
func (*PolicyDescriptor) UpdateWithRecreate ¶
func (d *PolicyDescriptor) UpdateWithRecreate(key string, oldPolicy, newPolicy *srv6.Policy, oldMetadata interface{}) bool
UpdateWithRecreate define whether update case should be handled by complete policy recreation
type PolicyMetadata ¶
type PolicyMetadata struct {
// contains filtered or unexported fields
}
PolicyMetadata are Policy-related metadata that KVscheduler bundles with Policy data. They are served by KVScheduler in Create/Update descriptor methods.
type SteeringDescriptor ¶
type SteeringDescriptor struct {
// contains filtered or unexported fields
}
SteeringDescriptor teaches KVScheduler how to configure VPP SRv6 steering.
func NewSteeringDescriptor ¶
func NewSteeringDescriptor(srHandler vppcalls.SRv6VppAPI, log logging.PluginLogger) *SteeringDescriptor
NewSteeringDescriptor creates a new instance of the Srv6 steering descriptor.
func (*SteeringDescriptor) Create ¶
func (d *SteeringDescriptor) Create(key string, steering *srv6.Steering) (metadata interface{}, err error)
Create adds new steering into VPP using VPP's binary api
func (*SteeringDescriptor) Delete ¶
func (d *SteeringDescriptor) Delete(key string, steering *srv6.Steering, metadata interface{}) error
Delete removes steering from VPP using VPP's binary api
func (*SteeringDescriptor) Dependencies ¶
func (d *SteeringDescriptor) Dependencies(key string, steering *srv6.Steering) (dependencies []scheduler.Dependency)
Dependencies defines dependencies of Steering descriptor
func (*SteeringDescriptor) EquivalentSteering ¶
func (d *SteeringDescriptor) EquivalentSteering(key string, oldSteering, newSteering *srv6.Steering) bool
EquivalentSteering determines whether 2 steerings are logically equal. This comparison takes into consideration also semantics that couldn't be modeled into proto models (i.e. SID is IPv6 address and not only string)
func (*SteeringDescriptor) GetDescriptor ¶
func (d *SteeringDescriptor) GetDescriptor() *adapter.SteeringDescriptor
GetDescriptor returns descriptor suitable for registration (via adapter) with the KVScheduler.