Skip to content

Commit a1377c8

Browse files
committed
fix setting LR option always_learn_from_arp_request (#5426)
Signed-off-by: zhangzujian <zhangzujian.7@gmail.com>
1 parent 0b4f2a3 commit a1377c8

2 files changed

Lines changed: 35 additions & 4 deletions

File tree

pkg/controller/subnet.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ func (c *Controller) enqueueUpdateSubnet(oldObj, newObj interface{}) {
112112
c.updateVpcStatusQueue.Add(oldSubnet.Spec.Vpc)
113113
}
114114

115+
if oldSubnet.Spec.U2OInterconnection != newSubnet.Spec.U2OInterconnection {
116+
klog.Infof("enqueue update vpc %s triggered by u2o interconnection change of subnet %s", newSubnet.Spec.Vpc, key)
117+
c.addOrUpdateVpcQueue.Add(newSubnet.Spec.Vpc)
118+
}
119+
115120
if oldSubnet.Spec.Private != newSubnet.Spec.Private ||
116121
oldSubnet.Spec.CIDRBlock != newSubnet.Spec.CIDRBlock ||
117122
!reflect.DeepEqual(oldSubnet.Spec.AllowSubnets, newSubnet.Spec.AllowSubnets) ||
@@ -349,6 +354,11 @@ func formatSubnet(subnet *kubeovnv1.Subnet, c *Controller) (*kubeovnv1.Subnet, e
349354
changed = true
350355
}
351356

357+
if subnet.Spec.Vlan == "" && subnet.Spec.U2OInterconnection {
358+
subnet.Spec.U2OInterconnection = false
359+
changed = true
360+
}
361+
352362
klog.Infof("format subnet %v, changed %v", subnet.Name, changed)
353363
if changed {
354364
subnet, err = c.config.KubeOvnClient.KubeovnV1().Subnets().Update(context.Background(), subnet, metav1.UpdateOptions{})

pkg/controller/vpc.go

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ func (c *Controller) enqueueUpdateVpc(oldObj, newObj interface{}) {
5656
!reflect.DeepEqual(oldVpc.Spec.ExtraExternalSubnets, newVpc.Spec.ExtraExternalSubnets) ||
5757
oldVpc.Spec.EnableExternal != newVpc.Spec.EnableExternal ||
5858
oldVpc.Spec.EnableBfd != newVpc.Spec.EnableBfd ||
59-
oldVpc.Labels[util.VpcExternalLabel] != newVpc.Labels[util.VpcExternalLabel] {
59+
oldVpc.Labels[util.VpcExternalLabel] != newVpc.Labels[util.VpcExternalLabel] ||
60+
!slices.Equal(oldVpc.Status.Subnets, newVpc.Status.Subnets) {
6061
// TODO:// label VpcExternalLabel replace with spec enable external
6162
var (
6263
key string
@@ -279,7 +280,26 @@ func (c *Controller) handleAddOrUpdateVpc(key string) error {
279280
klog.Errorf("failed to format vpc %s: %v", key, err)
280281
return err
281282
}
282-
if err = c.createVpcRouter(key, vpc.Spec.EnableExternal); err != nil {
283+
284+
learnFromARPRequest := vpc.Spec.EnableExternal
285+
if !learnFromARPRequest {
286+
for _, subnetName := range vpc.Status.Subnets {
287+
subnet, err := c.subnetsLister.Get(subnetName)
288+
if err != nil {
289+
if k8serrors.IsNotFound(err) {
290+
continue
291+
}
292+
klog.Errorf("failed to get subnet %s for vpc %s: %v", subnetName, key, err)
293+
return err
294+
}
295+
if subnet.Spec.Vlan != "" && subnet.Spec.U2OInterconnection {
296+
learnFromARPRequest = true
297+
break
298+
}
299+
}
300+
}
301+
302+
if err = c.createVpcRouter(key, learnFromARPRequest); err != nil {
283303
klog.Errorf("failed to create vpc router for vpc %s: %v", key, err)
284304
return err
285305
}
@@ -1047,11 +1067,12 @@ func (c *Controller) getVpcSubnets(vpc *kubeovnv1.Vpc) (subnets []string, defaul
10471067
defaultSubnet = subnet.Name
10481068
}
10491069
}
1070+
sort.Strings(subnets)
10501071
return
10511072
}
10521073

10531074
// createVpcRouter create router to connect logical switches in vpc
1054-
func (c *Controller) createVpcRouter(lr string, enableExternal bool) error {
1075+
func (c *Controller) createVpcRouter(lr string, learnFromARPRequest bool) error {
10551076
if err := c.OVNNbClient.CreateLogicalRouter(lr); err != nil {
10561077
klog.Errorf("create logical router %s failed: %v", lr, err)
10571078
return err
@@ -1067,7 +1088,7 @@ func (c *Controller) createVpcRouter(lr string, enableExternal bool) error {
10671088
"mac_binding_age_threshold": "300",
10681089
"dynamic_neigh_routers": "true",
10691090
}
1070-
if !enableExternal {
1091+
if !learnFromARPRequest {
10711092
lrOptions["always_learn_from_arp_request"] = "false"
10721093
}
10731094
if !maps.Equal(vpcRouter.Options, lrOptions) {

0 commit comments

Comments
 (0)