Skip to content

Commit d24fc26

Browse files
committed
fix setting LR option always_learn_from_arp_request (kubeovn#5426)
Signed-off-by: zhangzujian <[email protected]>
1 parent 5ea4d14 commit d24fc26

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

pkg/controller/subnet.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ func (c *Controller) enqueueUpdateSubnet(oldObj, newObj any) {
9292
c.updateVpcStatusQueue.Add(oldSubnet.Spec.Vpc)
9393
}
9494

95+
if oldSubnet.Spec.U2OInterconnection != newSubnet.Spec.U2OInterconnection {
96+
klog.Infof("enqueue update vpc %s triggered by u2o interconnection change of subnet %s", newSubnet.Spec.Vpc, key)
97+
c.addOrUpdateVpcQueue.Add(newSubnet.Spec.Vpc)
98+
}
99+
95100
if oldSubnet.Spec.Private != newSubnet.Spec.Private ||
96101
oldSubnet.Spec.CIDRBlock != newSubnet.Spec.CIDRBlock ||
97102
!slices.Equal(oldSubnet.Spec.AllowSubnets, newSubnet.Spec.AllowSubnets) ||
@@ -188,6 +193,11 @@ func (c *Controller) formatSubnet(subnet *kubeovnv1.Subnet) (*kubeovnv1.Subnet,
188193
changed = true
189194
}
190195

196+
if subnet.Spec.Vlan == "" && subnet.Spec.U2OInterconnection {
197+
subnet.Spec.U2OInterconnection = false
198+
changed = true
199+
}
200+
191201
klog.Infof("format subnet %v, changed %v", subnet.Name, changed)
192202
if changed {
193203
newSubnet, err := c.config.KubeOvnClient.KubeovnV1().Subnets().Update(context.Background(), subnet, metav1.UpdateOptions{})

pkg/controller/vpc.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ func (c *Controller) enqueueUpdateVpc(oldObj, newObj any) {
6161
oldVpc.Spec.EnableExternal != newVpc.Spec.EnableExternal ||
6262
oldVpc.Spec.EnableBfd != newVpc.Spec.EnableBfd ||
6363
vpcBFDPortChanged(oldVpc.Spec.BFDPort, newVpc.Spec.BFDPort) ||
64-
oldVpc.Labels[util.VpcExternalLabel] != newVpc.Labels[util.VpcExternalLabel] {
64+
oldVpc.Labels[util.VpcExternalLabel] != newVpc.Labels[util.VpcExternalLabel] ||
65+
!slices.Equal(oldVpc.Status.Subnets, newVpc.Status.Subnets) {
6566
// TODO:// label VpcExternalLabel replace with spec enable external
6667

6768
if newVpc.Annotations == nil {
@@ -268,7 +269,25 @@ func (c *Controller) handleAddOrUpdateVpc(key string) error {
268269
return err
269270
}
270271

271-
if err = c.createVpcRouter(key, vpc.Spec.EnableExternal); err != nil {
272+
learnFromARPRequest := vpc.Spec.EnableExternal
273+
if !learnFromARPRequest {
274+
for _, subnetName := range vpc.Status.Subnets {
275+
subnet, err := c.subnetsLister.Get(subnetName)
276+
if err != nil {
277+
if k8serrors.IsNotFound(err) {
278+
continue
279+
}
280+
klog.Errorf("failed to get subnet %s for vpc %s: %v", subnetName, key, err)
281+
return err
282+
}
283+
if subnet.Spec.Vlan != "" && subnet.Spec.U2OInterconnection {
284+
learnFromARPRequest = true
285+
break
286+
}
287+
}
288+
}
289+
290+
if err = c.createVpcRouter(key, learnFromARPRequest); err != nil {
272291
klog.Errorf("failed to create vpc router for vpc %s: %v", key, err)
273292
return err
274293
}
@@ -1231,11 +1250,12 @@ func (c *Controller) getVpcSubnets(vpc *kubeovnv1.Vpc) (subnets []string, defaul
12311250
defaultSubnet = vpc.Spec.DefaultSubnet
12321251
}
12331252
}
1253+
sort.Strings(subnets)
12341254
return
12351255
}
12361256

12371257
// createVpcRouter create router to connect logical switches in vpc
1238-
func (c *Controller) createVpcRouter(lr string, enableExternal bool) error {
1258+
func (c *Controller) createVpcRouter(lr string, learnFromARPRequest bool) error {
12391259
if err := c.OVNNbClient.CreateLogicalRouter(lr); err != nil {
12401260
klog.Errorf("create logical router %s failed: %v", lr, err)
12411261
return err
@@ -1251,7 +1271,7 @@ func (c *Controller) createVpcRouter(lr string, enableExternal bool) error {
12511271
"mac_binding_age_threshold": "300",
12521272
"dynamic_neigh_routers": "true",
12531273
}
1254-
if !enableExternal {
1274+
if !learnFromARPRequest {
12551275
lrOptions["always_learn_from_arp_request"] = "false"
12561276
}
12571277
if !maps.Equal(vpcRouter.Options, lrOptions) {

0 commit comments

Comments
 (0)