| 4039 | } |
| 4040 | |
| 4041 | func (r *RoutingPolicy) validateCondition(v Condition) (err error) { |
| 4042 | switch v.Type() { |
| 4043 | case CONDITION_PREFIX: |
| 4044 | m := r.definedSetMap[DEFINED_TYPE_PREFIX] |
| 4045 | if i, ok := m[v.Name()]; !ok { |
| 4046 | return fmt.Errorf("not found prefix set %s", v.Name()) |
| 4047 | } else { |
| 4048 | c := v.(*PrefixCondition) |
| 4049 | c.set = i.(*PrefixSet) |
| 4050 | } |
| 4051 | case CONDITION_NEIGHBOR: |
| 4052 | m := r.definedSetMap[DEFINED_TYPE_NEIGHBOR] |
| 4053 | if i, ok := m[v.Name()]; !ok { |
| 4054 | return fmt.Errorf("not found neighbor set %s", v.Name()) |
| 4055 | } else { |
| 4056 | c := v.(*NeighborCondition) |
| 4057 | c.set = i.(*NeighborSet) |
| 4058 | } |
| 4059 | case CONDITION_AS_PATH: |
| 4060 | m := r.definedSetMap[DEFINED_TYPE_AS_PATH] |
| 4061 | if i, ok := m[v.Name()]; !ok { |
| 4062 | return fmt.Errorf("not found as path set %s", v.Name()) |
| 4063 | } else { |
| 4064 | c := v.(*AsPathCondition) |
| 4065 | c.set = i.(*AsPathSet) |
| 4066 | } |
| 4067 | case CONDITION_COMMUNITY: |
| 4068 | m := r.definedSetMap[DEFINED_TYPE_COMMUNITY] |
| 4069 | if i, ok := m[v.Name()]; !ok { |
| 4070 | return fmt.Errorf("not found community set %s", v.Name()) |
| 4071 | } else { |
| 4072 | c := v.(*CommunityCondition) |
| 4073 | c.set = i.(*CommunitySet) |
| 4074 | } |
| 4075 | case CONDITION_EXT_COMMUNITY: |
| 4076 | m := r.definedSetMap[DEFINED_TYPE_EXT_COMMUNITY] |
| 4077 | if i, ok := m[v.Name()]; !ok { |
| 4078 | return fmt.Errorf("not found ext-community set %s", v.Name()) |
| 4079 | } else { |
| 4080 | c := v.(*ExtCommunityCondition) |
| 4081 | c.set = i.(*ExtCommunitySet) |
| 4082 | } |
| 4083 | case CONDITION_LARGE_COMMUNITY: |
| 4084 | m := r.definedSetMap[DEFINED_TYPE_LARGE_COMMUNITY] |
| 4085 | if i, ok := m[v.Name()]; !ok { |
| 4086 | return fmt.Errorf("not found large-community set %s", v.Name()) |
| 4087 | } else { |
| 4088 | c := v.(*LargeCommunityCondition) |
| 4089 | c.set = i.(*LargeCommunitySet) |
| 4090 | } |
| 4091 | case CONDITION_NEXT_HOP: |
| 4092 | case CONDITION_AFI_SAFI_IN: |
| 4093 | case CONDITION_AS_PATH_LENGTH: |
| 4094 | case CONDITION_RPKI: |
| 4095 | case CONDITION_LOCAL_PREF_EQ: |
| 4096 | case CONDITION_MED_EQ: |
| 4097 | } |
| 4098 | return nil |