diff --git a/pkg/controller/subnet.go b/pkg/controller/subnet.go index eb398d0f06f..3a4da221570 100644 --- a/pkg/controller/subnet.go +++ b/pkg/controller/subnet.go @@ -598,7 +598,23 @@ func (c *Controller) checkSubnetConflict(subnet *kubeovnv1.Subnet) error { func (c *Controller) updateSubnetDHCPOption(subnet *kubeovnv1.Subnet, needRouter bool) error { var dhcpOptionsUUIDs *ovs.DHCPOptionsUUIDs var err error - dhcpOptionsUUIDs, err = c.ovnLegacyClient.UpdateDHCPOptions(subnet.Name, subnet.Spec.CIDRBlock, subnet.Spec.Gateway, subnet.Spec.DHCPv4Options, subnet.Spec.DHCPv6Options, subnet.Spec.EnableDHCP) + var mtu int + if subnet.Spec.Vlan != "" { + mtu = 1500 + } else { + switch c.config.NetworkType { + case util.NetworkTypeVxlan: + mtu = 1500 - util.VxlanHeaderLength + case util.NetworkTypeGeneve: + mtu = 1500 - util.GeneveHeaderLength + case util.NetworkTypeStt: + mtu = 1500 - util.SttHeaderLength + default: + return fmt.Errorf("invalid network type: %s", c.config.NetworkType) + } + } + + dhcpOptionsUUIDs, err = c.ovnLegacyClient.UpdateDHCPOptions(subnet.Name, subnet.Spec.CIDRBlock, subnet.Spec.Gateway, subnet.Spec.DHCPv4Options, subnet.Spec.DHCPv6Options, subnet.Spec.EnableDHCP, mtu) if err != nil { klog.Errorf("failed to update dhcp options for switch %s, %v", subnet.Name, err) return err diff --git a/pkg/ovs/ovn-nbctl-legacy.go b/pkg/ovs/ovn-nbctl-legacy.go index 00d50140f7d..e310314fb5b 100644 --- a/pkg/ovs/ovn-nbctl-legacy.go +++ b/pkg/ovs/ovn-nbctl-legacy.go @@ -413,7 +413,7 @@ func (c *LegacyClient) createDHCPOptions(ls, cidr, optionsStr string) (dhcpOptio return dhcpOptionsUuid, nil } -func (c *LegacyClient) updateDHCPv4Options(ls, v4CIDR, v4Gateway, dhcpV4OptionsStr string) (dhcpV4OptionsUuid string, err error) { +func (c *LegacyClient) updateDHCPv4Options(ls, v4CIDR, v4Gateway, dhcpV4OptionsStr string, mtu int) (dhcpV4OptionsUuid string, err error) { dhcpV4OptionsStr = strings.ReplaceAll(dhcpV4OptionsStr, " ", "") dhcpV4Options, err := c.ListDHCPOptions(true, ls, kubeovnv1.ProtocolIPv4) if err != nil { @@ -427,7 +427,7 @@ func (c *LegacyClient) updateDHCPv4Options(ls, v4CIDR, v4Gateway, dhcpV4OptionsS mac := util.GenerateMac() if len(dhcpV4OptionsStr) == 0 { // default dhcp v4 options - dhcpV4OptionsStr = fmt.Sprintf("lease_time=%d,router=%s,server_id=%s,server_mac=%s", 3600, v4Gateway, "169.254.0.254", mac) + dhcpV4OptionsStr = fmt.Sprintf("lease_time=%d,router=%s,server_id=%s,server_mac=%s,mtu=%d", 3600, v4Gateway, "169.254.0.254", mac, mtu) } dhcpV4OptionsUuid, err = c.createDHCPOptions(ls, v4CIDR, dhcpV4OptionsStr) if err != nil { @@ -442,7 +442,7 @@ func (c *LegacyClient) updateDHCPv4Options(ls, v4CIDR, v4Gateway, dhcpV4OptionsS if len(mac) == 0 { mac = util.GenerateMac() } - dhcpV4OptionsStr = fmt.Sprintf("lease_time=%d,router=%s,server_id=%s,server_mac=%s", 3600, v4Gateway, "169.254.0.254", mac) + dhcpV4OptionsStr = fmt.Sprintf("lease_time=%d,router=%s,server_id=%s,server_mac=%s,mtu=%d", 3600, v4Gateway, "169.254.0.254", mac, mtu) } _, err = c.ovnNbCommand("set", "dhcp_options", v4Options.UUID, fmt.Sprintf("cidr=%s", v4CIDR), fmt.Sprintf("options=%s", strings.ReplaceAll(dhcpV4OptionsStr, ":", "\\:"))) @@ -512,7 +512,7 @@ func (c *LegacyClient) updateDHCPv6Options(ls, v6CIDR, dhcpV6OptionsStr string) return } -func (c *LegacyClient) UpdateDHCPOptions(ls, cidrBlock, gateway, dhcpV4OptionsStr, dhcpV6OptionsStr string, enableDHCP bool) (dhcpOptionsUUIDs *DHCPOptionsUUIDs, err error) { +func (c *LegacyClient) UpdateDHCPOptions(ls, cidrBlock, gateway, dhcpV4OptionsStr, dhcpV6OptionsStr string, enableDHCP bool, mtu int) (dhcpOptionsUUIDs *DHCPOptionsUUIDs, err error) { dhcpOptionsUUIDs = &DHCPOptionsUUIDs{} if enableDHCP { var v4CIDR, v6CIDR string @@ -530,7 +530,7 @@ func (c *LegacyClient) UpdateDHCPOptions(ls, cidrBlock, gateway, dhcpV4OptionsSt v4Gateway = gateways[0] } - dhcpOptionsUUIDs.DHCPv4OptionsUUID, err = c.updateDHCPv4Options(ls, v4CIDR, v4Gateway, dhcpV4OptionsStr) + dhcpOptionsUUIDs.DHCPv4OptionsUUID, err = c.updateDHCPv4Options(ls, v4CIDR, v4Gateway, dhcpV4OptionsStr, mtu) if err != nil { klog.Errorf("update dhcp options for switch %s failed: %v", ls, err) return nil, err