(a *api.PeerGroup)
| 1183 | } |
| 1184 | |
| 1185 | func newPeerGroupFromAPIStruct(a *api.PeerGroup) (*oc.PeerGroup, error) { |
| 1186 | pconf := &oc.PeerGroup{} |
| 1187 | if a.Conf != nil { |
| 1188 | pconf.Config.PeerAs = a.Conf.PeerAsn |
| 1189 | pconf.Config.LocalAs = a.Conf.LocalAsn |
| 1190 | pconf.Config.AuthPassword = a.Conf.AuthPassword |
| 1191 | pconf.Config.RouteFlapDamping = a.Conf.RouteFlapDamping |
| 1192 | pconf.Config.Description = a.Conf.Description |
| 1193 | pconf.Config.PeerGroupName = a.Conf.PeerGroupName |
| 1194 | pconf.Config.SendSoftwareVersion = a.Conf.SendSoftwareVersion |
| 1195 | if a.Conf.AllowOwnAsn > math.MaxUint8 { |
| 1196 | return nil, fmt.Errorf("allow_own_asn is out of range: %d", a.Conf.AllowOwnAsn) |
| 1197 | } |
| 1198 | pconf.AsPathOptions.Config.AllowOwnAs = uint8(a.Conf.AllowOwnAsn) |
| 1199 | pconf.AsPathOptions.Config.ReplacePeerAs = a.Conf.ReplacePeerAsn |
| 1200 | pconf.AsPathOptions.Config.AllowAsPathLoopLocal = a.Conf.AllowAspathLoopLocal |
| 1201 | |
| 1202 | switch a.Conf.RemovePrivate { |
| 1203 | case api.RemovePrivate_REMOVE_PRIVATE_ALL: |
| 1204 | pconf.Config.RemovePrivateAs = oc.REMOVE_PRIVATE_AS_OPTION_ALL |
| 1205 | case api.RemovePrivate_REMOVE_PRIVATE_REPLACE: |
| 1206 | pconf.Config.RemovePrivateAs = oc.REMOVE_PRIVATE_AS_OPTION_REPLACE |
| 1207 | } |
| 1208 | |
| 1209 | for _, af := range a.AfiSafis { |
| 1210 | afiSafi := oc.AfiSafi{} |
| 1211 | readMpGracefulRestartFromAPIStruct(&afiSafi.MpGracefulRestart, af.MpGracefulRestart) |
| 1212 | readAfiSafiConfigFromAPIStruct(&afiSafi.Config, af.Config) |
| 1213 | readAfiSafiStateFromAPIStruct(&afiSafi.State, af.Config) |
| 1214 | readApplyPolicyFromAPIStruct(&afiSafi.ApplyPolicy, af.ApplyPolicy) |
| 1215 | readRouteSelectionOptionsFromAPIStruct(&afiSafi.RouteSelectionOptions, af.RouteSelectionOptions) |
| 1216 | readUseMultiplePathsFromAPIStruct(&afiSafi.UseMultiplePaths, af.UseMultiplePaths) |
| 1217 | readPrefixLimitFromAPIStruct(&afiSafi.PrefixLimit, af.PrefixLimits) |
| 1218 | readRouteTargetMembershipFromAPIStruct(&afiSafi.RouteTargetMembership, af.RouteTargetMembership) |
| 1219 | readLongLivedGracefulRestartFromAPIStruct(&afiSafi.LongLivedGracefulRestart, af.LongLivedGracefulRestart) |
| 1220 | readAddPathsFromAPIStruct(&afiSafi.AddPaths, af.AddPaths) |
| 1221 | pconf.AfiSafis = append(pconf.AfiSafis, afiSafi) |
| 1222 | } |
| 1223 | } |
| 1224 | |
| 1225 | if a.Timers != nil { |
| 1226 | if a.Timers.Config != nil { |
| 1227 | pconf.Timers.Config.ConnectRetry = float64(a.Timers.Config.ConnectRetry) |
| 1228 | pconf.Timers.Config.HoldTime = float64(a.Timers.Config.HoldTime) |
| 1229 | pconf.Timers.Config.KeepaliveInterval = float64(a.Timers.Config.KeepaliveInterval) |
| 1230 | pconf.Timers.Config.MinimumAdvertisementInterval = float64(a.Timers.Config.MinimumAdvertisementInterval) |
| 1231 | pconf.Timers.Config.IdleHoldTimeAfterReset = float64(a.Timers.Config.IdleHoldTimeAfterReset) |
| 1232 | } |
| 1233 | if a.Timers.State != nil { |
| 1234 | pconf.Timers.State.KeepaliveInterval = float64(a.Timers.State.KeepaliveInterval) |
| 1235 | pconf.Timers.State.NegotiatedHoldTime = float64(a.Timers.State.NegotiatedHoldTime) |
| 1236 | } |
| 1237 | } |
| 1238 | if a.RouteReflector != nil { |
| 1239 | if id, err := netip.ParseAddr(a.RouteReflector.RouteReflectorClusterId); err == nil { |
| 1240 | pconf.RouteReflector.Config.RouteReflectorClusterId = id |
| 1241 | } |
| 1242 | pconf.RouteReflector.Config.RouteReflectorClient = a.RouteReflector.RouteReflectorClient |
searching dependent graphs…