Skip to content

Commit 059e3c6

Browse files
kyrtapzjcaamano
authored andcommitted
Add BGP support for Layer2 primary UDN in SGW
Adapts subnet advertisements for layer2 networks. Adds layer2 networks to the route import controller. Adds E2Es. Signed-off-by: Patryk Diak <[email protected]>
1 parent e9289b1 commit 059e3c6

File tree

9 files changed

+395
-205
lines changed

9 files changed

+395
-205
lines changed

go-controller/pkg/clustermanager/routeadvertisements/controller.go

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919

2020
corev1 "k8s.io/api/core/v1"
2121
apierrors "k8s.io/apimachinery/pkg/api/errors"
22-
meta "k8s.io/apimachinery/pkg/api/meta"
22+
"k8s.io/apimachinery/pkg/api/meta"
2323
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2424
"k8s.io/apimachinery/pkg/labels"
2525
"k8s.io/apimachinery/pkg/util/sets"
@@ -319,6 +319,8 @@ type selectedNetworks struct {
319319
hostNetworkSubnets map[string][]string
320320
// prefixLength is a map of selected network to their prefix length
321321
prefixLength map[string]uint32
322+
// networkType is a map of selected network to their topology
323+
networkTopology map[string]string
322324
}
323325

324326
// generateFRRConfigurations generates FRRConfigurations for the route
@@ -346,9 +348,10 @@ func (c *Controller) generateFRRConfigurations(ra *ratypes.RouteAdvertisements)
346348
// validate and gather information about the networks
347349
networkSet := sets.New[string]()
348350
selectedNetworks := &selectedNetworks{
349-
networkVRFs: map[string]string{},
350-
networkSubnets: map[string][]string{},
351-
prefixLength: map[string]uint32{},
351+
networkVRFs: map[string]string{},
352+
networkSubnets: map[string][]string{},
353+
prefixLength: map[string]uint32{},
354+
networkTopology: map[string]string{},
352355
}
353356
for _, nad := range nads {
354357
networkName := util.GetAnnotatedNetworkName(nad)
@@ -363,17 +366,22 @@ func (c *Controller) generateFRRConfigurations(ra *ratypes.RouteAdvertisements)
363366
if !network.IsDefault() && !network.IsPrimaryNetwork() {
364367
return nil, nil, fmt.Errorf("%w: selected network %q is not the default nor a primary network", errConfig, networkName)
365368
}
366-
if network.TopologyType() != types.Layer3Topology {
367-
// TODO don't really know what to do with layer 2 topologies yet
369+
if network.TopologyType() != types.Layer3Topology && network.TopologyType() != types.Layer2Topology {
368370
return nil, nil, fmt.Errorf("%w: selected network %q has unsupported topology %q", errConfig, networkName, network.TopologyType())
369371
}
372+
373+
if config.Gateway.Mode == config.GatewayModeLocal && network.TopologyType() == types.Layer2Topology {
374+
return nil, nil, fmt.Errorf("%w: BGP is currenty not supported for Layer2 networks in local gateway mode, network: %s", errConfig, network.GetNetworkName())
375+
}
376+
370377
vrf := util.GetNetworkVRFName(network)
371378
if vfrNet, hasVFR := selectedNetworks.networkVRFs[vrf]; hasVFR && vfrNet != networkName {
372379
return nil, nil, fmt.Errorf("%w: vrf %q found to be mapped to multiple networks %v", errConfig, vrf, []string{vfrNet, networkName})
373380
}
374381
networkSet.Insert(networkName)
375382
selectedNetworks.vrfs = append(selectedNetworks.vrfs, vrf)
376383
selectedNetworks.networkVRFs[vrf] = networkName
384+
selectedNetworks.networkTopology[networkName] = network.TopologyType()
377385
// TODO check overlaps?
378386
for _, cidr := range network.Subnets() {
379387
subnet := cidr.CIDR.String()
@@ -480,14 +488,24 @@ func (c *Controller) generateFRRConfigurations(ra *ratypes.RouteAdvertisements)
480488
return eipsByNodesByNetworks[nodeName], nil
481489
}
482490

483-
// helper to gather host subnets and egress ips as prefixes
484-
getPrefixes := func(nodeName string, network string) ([]string, error) {
491+
// helper to gather the following prefixes:
492+
// - EgressIPs
493+
// - host subnets for networks with networkTopology layer3
494+
// - network subnets for networks with networkTopology layer2
495+
getPrefixes := func(nodeName, network, networkTopology string, networkSubnets []string) ([]string, error) {
485496
// gather host subnets
486497
var subnets []string
487498
if advertisements.Has(ratypes.PodNetwork) {
488-
subnets, err = getHostSubnets(nodeName, network)
489-
if err != nil || len(subnets) == 0 {
490-
return nil, fmt.Errorf("%w: will wait for subnet annotation to be set for node %q and network %q: %w", errConfig, nodeName, network, err)
499+
if networkTopology == types.Layer2Topology {
500+
subnets = networkSubnets
501+
if len(subnets) == 0 {
502+
return nil, fmt.Errorf("%w: no layer2 subnets found", errConfig)
503+
}
504+
} else {
505+
subnets, err = getHostSubnets(nodeName, network)
506+
if err != nil || len(subnets) == 0 {
507+
return nil, fmt.Errorf("%w: will wait for subnet annotation to be set for node %q and network %q: %w", errConfig, nodeName, network, err)
508+
}
491509
}
492510

493511
}
@@ -515,7 +533,8 @@ func (c *Controller) generateFRRConfigurations(ra *ratypes.RouteAdvertisements)
515533

516534
// gather node specific information
517535
for _, network := range selectedNetworks.networks {
518-
selectedNetworks.hostNetworkSubnets[network], err = getPrefixes(nodeName, network)
536+
selectedNetworks.hostNetworkSubnets[network], err = getPrefixes(nodeName, network,
537+
selectedNetworks.networkTopology[network], selectedNetworks.networkSubnets[network])
519538
if err != nil {
520539
return nil, nil, err
521540
}
@@ -1148,7 +1167,8 @@ func nadNeedsUpdate(oldObj, newObj *nadtypes.NetworkAttachmentDefinition) bool {
11481167
if err != nil {
11491168
return true
11501169
}
1151-
return network.IsDefault() || (network.IsPrimaryNetwork() && network.TopologyType() == types.Layer3Topology)
1170+
return network.IsDefault() ||
1171+
(network.IsPrimaryNetwork() && (network.TopologyType() == types.Layer3Topology || network.TopologyType() == types.Layer2Topology))
11521172
}
11531173
// ignore if we don't support this NAD
11541174
if !nadSupported(oldObj) && !nadSupported(newObj) {

go-controller/pkg/clustermanager/routeadvertisements/controller_test.go

Lines changed: 84 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,15 @@ func (tn testNeighbor) Neighbor() frrapi.Neighbor {
177177
if sep == -1 {
178178
continue
179179
}
180+
if isLayer2 := strings.Count(receive, "/") == 1; isLayer2 {
181+
n.ToReceive.Allowed.Prefixes = append(n.ToReceive.Allowed.Prefixes,
182+
frrapi.PrefixSelector{
183+
Prefix: receive,
184+
},
185+
)
186+
continue
187+
}
188+
180189
first := receive[:sep]
181190
last := receive[sep+1:]
182191
len := ovntest.MustAtoi(last)
@@ -314,9 +323,6 @@ func (tn testNAD) NAD() *nadtypes.NetworkAttachmentDefinition {
314323
nad.ObjectMeta.OwnerReferences = []metav1.OwnerReference{ownerRef}
315324
}
316325
topology := tn.Topology
317-
if topology == "" {
318-
topology = "layer3"
319-
}
320326
switch {
321327
case tn.IsSecondary:
322328
nad.Spec.Config = fmt.Sprintf("{\"cniVersion\": \"0.4.0\", \"name\": \"%s\", \"type\": \"%s\", \"topology\": \"%s\", \"netAttachDefName\": \"%s\", \"subnets\": \"%s\"}",
@@ -477,8 +483,10 @@ func TestController_reconcile(t *testing.T) {
477483
},
478484
},
479485
nads: []*testNAD{
480-
{Name: "red", Namespace: "red", Network: "cluster_udn_red", Topology: "layer3", Subnet: "1.2.0.0/16", Labels: map[string]string{"selected": "true"}},
481-
{Name: "blue", Namespace: "blue", Network: "cluster_udn_blue", Topology: "layer3", Subnet: "1.3.0.0/16", Labels: map[string]string{"selected": "true"}},
486+
{Name: "red", Namespace: "red", Network: util.GenerateCUDNNetworkName("red"), Topology: "layer3", Subnet: "1.2.0.0/16", Labels: map[string]string{"selected": "true"}},
487+
{Name: "blue", Namespace: "blue", Network: util.GenerateCUDNNetworkName("blue"), Topology: "layer3", Subnet: "1.3.0.0/16", Labels: map[string]string{"selected": "true"}},
488+
{Name: "green", Namespace: "green", Network: util.GenerateCUDNNetworkName("green"), Topology: "layer2", Subnet: "1.4.0.0/16", Labels: map[string]string{"selected": "true"}},
489+
{Name: "black", Namespace: "black", Network: util.GenerateCUDNNetworkName("black"), Topology: "layer2", Subnet: "1.5.0.0/16", Labels: map[string]string{"selected": "true"}},
482490
},
483491
nodes: []*testNode{{Name: "node", SubnetsAnnotation: "{\"default\":\"1.1.0.0/24\", \"cluster_udn_red\":\"1.2.0.0/24\", \"cluster_udn_blue\":\"1.3.0.0/24\"}"}},
484492
eips: []*testEIP{{Name: "eip", EIPs: map[string]string{"node": "1.0.1.1"}}},
@@ -490,17 +498,19 @@ func TestController_reconcile(t *testing.T) {
490498
Annotations: map[string]string{types.OvnRouteAdvertisementsKey: "ra/frrConfig/node"},
491499
NodeSelector: map[string]string{"kubernetes.io/hostname": "node"},
492500
Routers: []*testRouter{
493-
{ASN: 1, Prefixes: []string{"1.2.0.0/24", "1.3.0.0/24"}, Imports: []string{"blue", "red"}, Neighbors: []*testNeighbor{
494-
{ASN: 1, Address: "1.0.0.100", Advertise: []string{"1.2.0.0/24", "1.3.0.0/24"}, Receive: []string{"1.2.0.0/16/24", "1.3.0.0/16/24"}},
501+
{ASN: 1, Prefixes: []string{"1.2.0.0/24", "1.3.0.0/24", "1.4.0.0/16", "1.5.0.0/16"}, Imports: []string{"black", "blue", "green", "red"}, Neighbors: []*testNeighbor{
502+
{ASN: 1, Address: "1.0.0.100", Advertise: []string{"1.2.0.0/24", "1.3.0.0/24", "1.4.0.0/16", "1.5.0.0/16"}, Receive: []string{"1.2.0.0/16/24", "1.3.0.0/16/24", "1.4.0.0/16", "1.5.0.0/16"}},
495503
}},
504+
{ASN: 1, VRF: "black", Imports: []string{"default"}},
496505
{ASN: 1, VRF: "blue", Imports: []string{"default"}},
506+
{ASN: 1, VRF: "green", Imports: []string{"default"}},
497507
{ASN: 1, VRF: "red", Imports: []string{"default"}},
498508
}},
499509
},
500-
expectNADAnnotations: map[string]map[string]string{"red": {types.OvnRouteAdvertisementsKey: "[\"ra\"]"}, "blue": {types.OvnRouteAdvertisementsKey: "[\"ra\"]"}},
510+
expectNADAnnotations: map[string]map[string]string{"red": {types.OvnRouteAdvertisementsKey: "[\"ra\"]"}, "blue": {types.OvnRouteAdvertisementsKey: "[\"ra\"]"}, "green": {types.OvnRouteAdvertisementsKey: "[\"ra\"]"}, "black": {types.OvnRouteAdvertisementsKey: "[\"ra\"]"}},
501511
},
502512
{
503-
name: "reconciles eip RouteAdvertisement for a single FRR config, node, non default network and non default target VRF",
513+
name: "(layer3) reconciles eip RouteAdvertisement for a single FRR config, node, non default network and non default target VRF",
504514
ra: &testRA{Name: "ra", TargetVRF: "red", AdvertiseEgressIPs: true, NetworkSelector: map[string]string{"selected": "true"}},
505515
frrConfigs: []*testFRRConfig{
506516
{
@@ -546,6 +556,53 @@ func TestController_reconcile(t *testing.T) {
546556
},
547557
expectNADAnnotations: map[string]map[string]string{"blue": {types.OvnRouteAdvertisementsKey: "[\"ra\"]"}},
548558
},
559+
{
560+
name: "(layer2) reconciles eip RouteAdvertisement for a single FRR config, node, non default networks and non default target VRF",
561+
ra: &testRA{Name: "ra", TargetVRF: "green", AdvertiseEgressIPs: true, NetworkSelector: map[string]string{"selected": "true"}},
562+
frrConfigs: []*testFRRConfig{
563+
{
564+
Name: "frrConfig",
565+
Namespace: frrNamespace,
566+
Routers: []*testRouter{
567+
{ASN: 1, VRF: "green", Prefixes: []string{"1.4.0.0/16"}, Neighbors: []*testNeighbor{
568+
{ASN: 1, Address: "1.0.0.100"},
569+
}},
570+
},
571+
},
572+
},
573+
nads: []*testNAD{
574+
{Name: "default", Namespace: "ovn-kubernetes", Network: "default"},
575+
{Name: "green", Namespace: "green", Network: util.GenerateCUDNNetworkName("green"), Topology: "layer2", Subnet: "1.4.0.0/16", Labels: map[string]string{"selected": "true"}},
576+
{Name: "black", Namespace: "black", Network: util.GenerateCUDNNetworkName("black"), Topology: "layer2", Subnet: "1.5.0.0/16"},
577+
},
578+
nodes: []*testNode{
579+
{Name: "node", SubnetsAnnotation: "{\"default\":\"1.1.1.0/24\""},
580+
},
581+
namespaces: []*testNamespace{
582+
{Name: "default", Labels: map[string]string{"selected": "default"}},
583+
{Name: "green", Labels: map[string]string{"selected": "green"}},
584+
{Name: "black", Labels: map[string]string{"selected": "black"}},
585+
},
586+
eips: []*testEIP{
587+
{Name: "eip1", EIPs: map[string]string{"node": "172.100.0.17"}, NamespaceSelector: map[string]string{"selected": "green"}}, // secondary interface EIP also advertised
588+
{Name: "eip2", EIPs: map[string]string{"node": "1.0.1.4"}, NamespaceSelector: map[string]string{"selected": "black"}}, // namespace served by unselected network, ignored
589+
{Name: "eip3", EIPs: map[string]string{"node": "1.0.1.5"}, NamespaceSelector: map[string]string{"selected": "green"}},
590+
},
591+
reconcile: "ra",
592+
expectAcceptedStatus: metav1.ConditionTrue,
593+
expectFRRConfigs: []*testFRRConfig{
594+
{
595+
Labels: map[string]string{types.OvnRouteAdvertisementsKey: "ra"},
596+
Annotations: map[string]string{types.OvnRouteAdvertisementsKey: "ra/frrConfig/node"},
597+
NodeSelector: map[string]string{"kubernetes.io/hostname": "node"},
598+
Routers: []*testRouter{
599+
{ASN: 1, VRF: "green", Prefixes: []string{"1.0.1.5/32", "172.100.0.17/32"}, Neighbors: []*testNeighbor{
600+
{ASN: 1, Address: "1.0.0.100", Advertise: []string{"1.0.1.5/32", "172.100.0.17/32"}},
601+
}},
602+
}},
603+
},
604+
expectNADAnnotations: map[string]map[string]string{"green": {types.OvnRouteAdvertisementsKey: "[\"ra\"]"}},
605+
},
549606
{
550607
name: "reconciles a RouteAdvertisement updating the generated FRRConfigurations if needed",
551608
ra: &testRA{Name: "ra", AdvertisePods: true, AdvertiseEgressIPs: true, SelectsDefault: true},
@@ -620,8 +677,10 @@ func TestController_reconcile(t *testing.T) {
620677
},
621678
nads: []*testNAD{
622679
{Name: "default", Namespace: "ovn-kubernetes", Network: "default", Labels: map[string]string{"selected": "true"}},
623-
{Name: "red", Namespace: "red", Network: "cluster_udn_red", Topology: "layer3", Subnet: "1.2.0.0/16", Labels: map[string]string{"selected": "true"}},
624-
{Name: "blue", Namespace: "blue", Network: "cluster_udn_blue", Topology: "layer3"}, // not selected
680+
{Name: "red", Namespace: "red", Network: util.GenerateCUDNNetworkName("red"), Topology: "layer3", Subnet: "1.2.0.0/16", Labels: map[string]string{"selected": "true"}},
681+
{Name: "blue", Namespace: "blue", Network: util.GenerateCUDNNetworkName("blue"), Topology: "layer3"}, // not selected
682+
{Name: "green", Namespace: "green", Network: util.GenerateCUDNNetworkName("green"), Topology: "layer2", Subnet: "1.4.0.0/16", Labels: map[string]string{"selected": "true"}},
683+
{Name: "black", Namespace: "black", Network: util.GenerateCUDNNetworkName("black"), Topology: "layer2"}, // not selected
625684
},
626685
frrConfigs: []*testFRRConfig{
627686
{
@@ -636,6 +695,9 @@ func TestController_reconcile(t *testing.T) {
636695
{ASN: 1, VRF: "red", Prefixes: []string{"1.0.2.0/24"}, Neighbors: []*testNeighbor{
637696
{ASN: 1, Address: "1.0.0.100"},
638697
}},
698+
{ASN: 1, VRF: "green", Prefixes: []string{"1.2.0.0/16"}, Neighbors: []*testNeighbor{
699+
{ASN: 1, Address: "1.0.0.100"},
700+
}},
639701
},
640702
},
641703
{
@@ -658,6 +720,9 @@ func TestController_reconcile(t *testing.T) {
658720
{ASN: 1, VRF: "red", Prefixes: []string{"1.0.2.0/24"}, Neighbors: []*testNeighbor{
659721
{ASN: 1, Address: "1.0.0.100"},
660722
}},
723+
{ASN: 1, VRF: "green", Prefixes: []string{"1.2.0.0/16"}, Neighbors: []*testNeighbor{
724+
{ASN: 1, Address: "1.0.0.100"},
725+
}},
661726
},
662727
},
663728
{ // not selected
@@ -688,6 +753,9 @@ func TestController_reconcile(t *testing.T) {
688753
{ASN: 1, VRF: "red", Prefixes: []string{"1.2.1.0/24"}, Neighbors: []*testNeighbor{
689754
{ASN: 1, Address: "1.0.0.100", Advertise: []string{"1.2.1.0/24"}, Receive: []string{"1.2.0.0/16/24"}},
690755
}},
756+
{ASN: 1, VRF: "green", Prefixes: []string{"1.4.0.0/16"}, Neighbors: []*testNeighbor{
757+
{ASN: 1, Address: "1.0.0.100", Advertise: []string{"1.4.0.0/16"}, Receive: []string{"1.4.0.0/16"}},
758+
}},
691759
},
692760
},
693761
{
@@ -708,6 +776,9 @@ func TestController_reconcile(t *testing.T) {
708776
{ASN: 1, VRF: "red", Prefixes: []string{"1.2.2.0/24"}, Neighbors: []*testNeighbor{
709777
{ASN: 1, Address: "1.0.0.100", Advertise: []string{"1.2.2.0/24"}, Receive: []string{"1.2.0.0/16/24"}},
710778
}},
779+
{ASN: 1, VRF: "green", Prefixes: []string{"1.4.0.0/16"}, Neighbors: []*testNeighbor{
780+
{ASN: 1, Address: "1.0.0.100", Advertise: []string{"1.4.0.0/16"}, Receive: []string{"1.4.0.0/16"}},
781+
}},
711782
},
712783
},
713784
},
@@ -722,15 +793,6 @@ func TestController_reconcile(t *testing.T) {
722793
reconcile: "ra",
723794
expectAcceptedStatus: metav1.ConditionFalse,
724795
},
725-
{
726-
name: "fails to reconcile an unsupported topology",
727-
ra: &testRA{Name: "ra", AdvertisePods: true, NetworkSelector: map[string]string{"selected": "true"}},
728-
nads: []*testNAD{
729-
{Name: "red", Namespace: "red", Network: "red", Topology: "layer2", Subnet: "1.2.0.0/16", Labels: map[string]string{"selected": "true"}},
730-
},
731-
reconcile: "ra",
732-
expectAcceptedStatus: metav1.ConditionFalse,
733-
},
734796
{
735797
name: "fails to reconcile an non-cluster UDN",
736798
ra: &testRA{Name: "ra", AdvertisePods: true, NetworkSelector: map[string]string{"selected": "true"}},
@@ -827,7 +889,7 @@ func TestController_reconcile(t *testing.T) {
827889
ra: &testRA{Name: "ra", TargetVRF: "auto", AdvertisePods: true, NetworkSelector: map[string]string{"selected": "true"}},
828890
nads: []*testNAD{
829891
{Name: "red", Namespace: "red", Network: "cluster_udn_red", Topology: "layer3", Labels: map[string]string{"selected": "true"}},
830-
{Name: "blue", Namespace: "blue", Network: "cluster_udn_blue", Topology: "layer3", Labels: map[string]string{"selected": "true"}},
892+
{Name: "blue", Namespace: "blue", Network: "cluster_udn_blue", Topology: "layer2", Subnet: "1.4.0.0/16", Labels: map[string]string{"selected": "true"}},
831893
},
832894
frrConfigs: []*testFRRConfig{
833895
{
@@ -840,7 +902,7 @@ func TestController_reconcile(t *testing.T) {
840902
},
841903
},
842904
},
843-
nodes: []*testNode{{Name: "node", SubnetsAnnotation: "{\"cluster_udn_red\":\"1.1.0.0/24\", \"cluster_udn_blue\":\"1.2.0.0/24\"}"}},
905+
nodes: []*testNode{{Name: "node", SubnetsAnnotation: "{\"cluster_udn_red\":\"1.1.0.0/24\"}"}},
844906
reconcile: "ra",
845907
expectAcceptedStatus: metav1.ConditionFalse,
846908
},
@@ -1163,22 +1225,6 @@ func TestUpdates(t *testing.T) {
11631225
name: "does not reconcile a new unsupported (secondary) NAD",
11641226
newObject: &testNAD{Name: "net", Namespace: "net", Network: "net", IsSecondary: true, Topology: "layer3", Labels: map[string]string{"select": "2"}},
11651227
},
1166-
{
1167-
name: "does not reconcile a new unsupported (layer2 primary) NAD",
1168-
newObject: &testNAD{Name: "net", Namespace: "net", Network: "net", Topology: "layer2", Subnet: "1.2.0.0/16", Labels: map[string]string{"select": "2"}},
1169-
},
1170-
{
1171-
name: "does not reconcile an updated unsupported NAD",
1172-
oldObject: &testNAD{Name: "net", Namespace: "net", Network: "net", Topology: "layer2", Subnet: "1.2.0.0/16", Labels: map[string]string{"select": "2"}},
1173-
newObject: &testNAD{Name: "net", Namespace: "net", Network: "net", Topology: "layer2", Subnet: "1.2.0.0/16", Labels: map[string]string{"select": "1"}},
1174-
},
1175-
{
1176-
// TODO shouldn't happen but needs FIX in controller utility which
1177-
// does not call filter predicate on deletes
1178-
name: "reconciles all RAs on deleted unsupported NAD",
1179-
oldObject: &testNAD{Name: "net", Namespace: "net", Network: "net", Topology: "layer2", Subnet: "1.2.0.0/16", Labels: map[string]string{"select": "2"}},
1180-
expectedReconcile: []string{"ra1", "ra2", "ra3"},
1181-
},
11821228
{
11831229
name: "reconciles all RAs that advertise EIPs on new EIP with status",
11841230
newObject: &testEIP{Name: "eip", EIPs: map[string]string{"node": "ip"}},

go-controller/pkg/controllermanager/controller_manager.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func (cm *ControllerManager) NewNetworkController(nInfo util.NetInfo) (networkma
7777
case ovntypes.Layer3Topology:
7878
return ovn.NewSecondaryLayer3NetworkController(cnci, nInfo, cm.networkManager.Interface(), cm.routeImportManager, cm.eIPController, cm.portCache)
7979
case ovntypes.Layer2Topology:
80-
return ovn.NewSecondaryLayer2NetworkController(cnci, nInfo, cm.networkManager.Interface(), cm.eIPController, cm.portCache)
80+
return ovn.NewSecondaryLayer2NetworkController(cnci, nInfo, cm.networkManager.Interface(), cm.routeImportManager, cm.portCache, cm.eIPController)
8181
case ovntypes.LocalnetTopology:
8282
return ovn.NewSecondaryLocalnetNetworkController(cnci, nInfo, cm.networkManager.Interface()), nil
8383
}
@@ -97,7 +97,7 @@ func (cm *ControllerManager) newDummyNetworkController(topoType, netName string)
9797
case ovntypes.Layer3Topology:
9898
return ovn.NewSecondaryLayer3NetworkController(cnci, netInfo, cm.networkManager.Interface(), cm.routeImportManager, cm.eIPController, cm.portCache)
9999
case ovntypes.Layer2Topology:
100-
return ovn.NewSecondaryLayer2NetworkController(cnci, netInfo, cm.networkManager.Interface(), cm.eIPController, cm.portCache)
100+
return ovn.NewSecondaryLayer2NetworkController(cnci, netInfo, cm.networkManager.Interface(), cm.routeImportManager, cm.portCache, cm.eIPController)
101101
case ovntypes.LocalnetTopology:
102102
return ovn.NewSecondaryLocalnetNetworkController(cnci, netInfo, cm.networkManager.Interface()), nil
103103
}

0 commit comments

Comments
 (0)