| 4247 | } |
| 4248 | |
| 4249 | func (r *RoutingPolicy) GetDefinedSet(typ DefinedType, name string) (*oc.DefinedSets, error) { |
| 4250 | dl, err := func() (DefinedSetList, error) { |
| 4251 | r.mu.RLock() |
| 4252 | defer r.mu.RUnlock() |
| 4253 | |
| 4254 | set, ok := r.definedSetMap[typ] |
| 4255 | if !ok { |
| 4256 | return nil, fmt.Errorf("invalid defined-set type: %d", typ) |
| 4257 | } |
| 4258 | |
| 4259 | var dl DefinedSetList |
| 4260 | for _, s := range set { |
| 4261 | dl = append(dl, s) |
| 4262 | } |
| 4263 | return dl, nil |
| 4264 | }() |
| 4265 | if err != nil { |
| 4266 | return nil, err |
| 4267 | } |
| 4268 | |
| 4269 | sort.Sort(dl) |
| 4270 | |
| 4271 | sets := &oc.DefinedSets{ |
| 4272 | PrefixSets: make([]oc.PrefixSet, 0), |
| 4273 | NeighborSets: make([]oc.NeighborSet, 0), |
| 4274 | BgpDefinedSets: oc.BgpDefinedSets{ |
| 4275 | CommunitySets: make([]oc.CommunitySet, 0), |
| 4276 | ExtCommunitySets: make([]oc.ExtCommunitySet, 0), |
| 4277 | LargeCommunitySets: make([]oc.LargeCommunitySet, 0), |
| 4278 | AsPathSets: make([]oc.AsPathSet, 0), |
| 4279 | }, |
| 4280 | } |
| 4281 | for _, s := range dl { |
| 4282 | if name != "" && s.Name() != name { |
| 4283 | continue |
| 4284 | } |
| 4285 | switch v := s.(type) { |
| 4286 | case *PrefixSet: |
| 4287 | sets.PrefixSets = append(sets.PrefixSets, *v.ToConfig()) |
| 4288 | case *NeighborSet: |
| 4289 | sets.NeighborSets = append(sets.NeighborSets, *v.ToConfig()) |
| 4290 | case *CommunitySet: |
| 4291 | sets.BgpDefinedSets.CommunitySets = append(sets.BgpDefinedSets.CommunitySets, *v.ToConfig()) |
| 4292 | case *ExtCommunitySet: |
| 4293 | sets.BgpDefinedSets.ExtCommunitySets = append(sets.BgpDefinedSets.ExtCommunitySets, *v.ToConfig()) |
| 4294 | case *LargeCommunitySet: |
| 4295 | sets.BgpDefinedSets.LargeCommunitySets = append(sets.BgpDefinedSets.LargeCommunitySets, *v.ToConfig()) |
| 4296 | case *AsPathSet: |
| 4297 | sets.BgpDefinedSets.AsPathSets = append(sets.BgpDefinedSets.AsPathSets, *v.ToConfig()) |
| 4298 | } |
| 4299 | } |
| 4300 | return sets, nil |
| 4301 | } |
| 4302 | |
| 4303 | func (r *RoutingPolicy) AddDefinedSet(s DefinedSet, replace bool) error { |
| 4304 | r.mu.Lock() |