summaryrefslogtreecommitdiffhomepage
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/pkg/config/util.go75
-rw-r--r--internal/pkg/table/policy.go16
2 files changed, 91 insertions, 0 deletions
diff --git a/internal/pkg/config/util.go b/internal/pkg/config/util.go
index 47c7d37f..ed9d3049 100644
--- a/internal/pkg/config/util.go
+++ b/internal/pkg/config/util.go
@@ -642,3 +642,78 @@ func NewGlobalFromConfigStruct(c *Global) *api.Global {
ApplyPolicy: applyPolicy,
}
}
+
+func newAPIPrefixFromConfigStruct(c Prefix) (*api.Prefix, error) {
+ min, max, err := ParseMaskLength(c.IpPrefix, c.MasklengthRange)
+ if err != nil {
+ return nil, err
+ }
+ return &api.Prefix{
+ IpPrefix: c.IpPrefix,
+ MaskLengthMin: uint32(min),
+ MaskLengthMax: uint32(max),
+ }, nil
+}
+
+func NewAPIDefinedSetsFromConfigStruct(t *DefinedSets) ([]*api.DefinedSet, error) {
+ definedSets := make([]*api.DefinedSet, 0)
+
+ for _, ps := range t.PrefixSets {
+ prefixes := make([]*api.Prefix, 0)
+ for _, p := range ps.PrefixList {
+ ap, err := newAPIPrefixFromConfigStruct(p)
+ if err != nil {
+ return nil, err
+ }
+ prefixes = append(prefixes, ap)
+ }
+ definedSets = append(definedSets, &api.DefinedSet{
+ Type: api.DefinedType_PREFIX,
+ Name: ps.PrefixSetName,
+ Prefixes: prefixes,
+ })
+ }
+
+ for _, ns := range t.NeighborSets {
+ definedSets = append(definedSets, &api.DefinedSet{
+ Type: api.DefinedType_NEIGHBOR,
+ Name: ns.NeighborSetName,
+ List: ns.NeighborInfoList,
+ })
+ }
+
+ bs := t.BgpDefinedSets
+ for _, cs := range bs.CommunitySets {
+ definedSets = append(definedSets, &api.DefinedSet{
+ Type: api.DefinedType_COMMUNITY,
+ Name: cs.CommunitySetName,
+ List: cs.CommunityList,
+ })
+ }
+
+ for _, es := range bs.ExtCommunitySets {
+ definedSets = append(definedSets, &api.DefinedSet{
+ Type: api.DefinedType_EXT_COMMUNITY,
+ Name: es.ExtCommunitySetName,
+ List: es.ExtCommunityList,
+ })
+ }
+
+ for _, ls := range bs.LargeCommunitySets {
+ definedSets = append(definedSets, &api.DefinedSet{
+ Type: api.DefinedType_LARGE_COMMUNITY,
+ Name: ls.LargeCommunitySetName,
+ List: ls.LargeCommunityList,
+ })
+ }
+
+ for _, as := range bs.AsPathSets {
+ definedSets = append(definedSets, &api.DefinedSet{
+ Type: api.DefinedType_AS_PATH,
+ Name: as.AsPathSetName,
+ List: as.AsPathList,
+ })
+ }
+
+ return definedSets, nil
+}
diff --git a/internal/pkg/table/policy.go b/internal/pkg/table/policy.go
index b06da47d..73bfac75 100644
--- a/internal/pkg/table/policy.go
+++ b/internal/pkg/table/policy.go
@@ -4117,3 +4117,19 @@ func NewAPIPolicyAssignmentFromTableStruct(t *PolicyAssignment) *api.PolicyAssig
}(),
}
}
+
+func NewAPIRoutingPolicyFromConfigStruct(c *config.RoutingPolicy) (*api.RoutingPolicy, error) {
+ definedSets, err := config.NewAPIDefinedSetsFromConfigStruct(&c.DefinedSets)
+ if err != nil {
+ return nil, err
+ }
+ policies := make([]*api.Policy, 0, len(c.PolicyDefinitions))
+ for _, policy := range c.PolicyDefinitions {
+ policies = append(policies, ToPolicyApi(&policy))
+ }
+
+ return &api.RoutingPolicy{
+ DefinedSets: definedSets,
+ Policies: policies,
+ }, nil
+}