Skip to content

Commit

Permalink
fix vlan gw disabled
Browse files Browse the repository at this point in the history
Signed-off-by: bobz965 <[email protected]>
  • Loading branch information
zbb88888 committed Feb 6, 2024
1 parent b5a3a6d commit f145159
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 13 deletions.
9 changes: 4 additions & 5 deletions pkg/daemon/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ const (
gatewayModeDisabled = iota
gatewayCheckModePing
gatewayCheckModeArping
gatewayCheckModePingNotConcerned
gatewayCheckModeArpingNotConcerned
gatewayCheckModeNoPing
)

type cniServerHandler struct {
Expand Down Expand Up @@ -227,13 +226,13 @@ func (csh cniServerHandler) handleAdd(req *restful.Request, resp *restful.Respon
if pod.Annotations[fmt.Sprintf(util.LiveMigrationAnnotationTemplate, podRequest.Provider)] != "true" {
if subnetHasVlan && !podSubnet.Spec.LogicalGateway {
if podSubnet.Spec.DisableGatewayCheck {
gatewayCheckMode = gatewayCheckModeArpingNotConcerned
gatewayCheckMode = gatewayCheckModeNoPing
} else {
gatewayCheckMode = gatewayCheckModeArping
}
} else {
if podSubnet.Spec.DisableGatewayCheck {
gatewayCheckMode = gatewayCheckModePingNotConcerned
gatewayCheckMode = gatewayCheckModeNoPing
} else {
gatewayCheckMode = gatewayCheckModePing
}
Expand Down Expand Up @@ -333,7 +332,7 @@ func (csh cniServerHandler) handleAdd(req *restful.Request, resp *restful.Respon
err = csh.configureNic(podRequest.PodName, podRequest.PodNamespace, podRequest.Provider, podRequest.NetNs, podRequest.ContainerID, podRequest.VfDriver, ifName, macAddr, mtu, ipAddr, gw, isDefaultRoute, detectIPConflict, allRoutes, podRequest.DNS.Nameservers, podRequest.DNS.Search, ingress, egress, podRequest.DeviceID, nicType, latency, limit, loss, gatewayCheckMode, u2oInterconnectionIP)
}
if err != nil {
errMsg := fmt.Errorf("configure nic failed %v", err)
errMsg := fmt.Errorf("configure nic failed, %v", err)
klog.Error(errMsg)
if err := resp.WriteHeaderAndEntity(http.StatusInternalServerError, request.CniResponse{Err: errMsg.Error()}); err != nil {
klog.Errorf("failed to write response, %v", err)
Expand Down
39 changes: 31 additions & 8 deletions pkg/daemon/ovs_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,22 +83,28 @@ func (csh cniServerHandler) configureNic(podName, podNamespace, provider, netns,
fmt.Sprintf("external_ids:ip=%s", ipStr),
fmt.Sprintf("external_ids:pod_netns=%s", netns))
if err != nil {
return fmt.Errorf("add nic to ovs failed %v: %q", err, output)
err = fmt.Errorf("add nic to ovs failed %v: %q", err, output)
klog.Error(err)
return err
}

// lsp and container nic must use same mac address, otherwise ovn will reject these packets by default
macAddr, err := net.ParseMAC(mac)
if err != nil {
klog.Error(err)
return fmt.Errorf("failed to parse mac %s %v", macAddr, err)
}
if err = configureHostNic(hostNicName); err != nil {
klog.Error(err)
return err
}
if err = ovs.SetInterfaceBandwidth(podName, podNamespace, ifaceID, egress, ingress); err != nil {
klog.Error(err)
return err
}

if err = ovs.SetNetemQos(podName, podNamespace, ifaceID, latency, limit, loss); err != nil {
klog.Error(err)
return err
}

Expand All @@ -107,20 +113,25 @@ func (csh cniServerHandler) configureNic(podName, podNamespace, provider, netns,
}
isUserspaceDP, err := ovs.IsUserspaceDataPath()
if err != nil {
klog.Error(err)
return err
}
if isUserspaceDP {
// turn off tx checksum
if err = turnOffNicTxChecksum(containerNicName); err != nil {
klog.Error(err)
return err
}
}

podNS, err := ns.GetNS(netns)
if err != nil {
return fmt.Errorf("failed to open netns %q: %v", netns, err)
err := fmt.Errorf("failed to open netns %q: %v", netns, err)
klog.Error(err)
return err
}
if err = configureContainerNic(containerNicName, ifName, ip, gateway, isDefaultRoute, detectIPConflict, routes, macAddr, podNS, mtu, nicType, gwCheckMode, u2oInterconnectionIP); err != nil {
klog.Error(err)
return err
}
return nil
Expand Down Expand Up @@ -214,7 +225,9 @@ func configureHostNic(nicName string) error {
func configureContainerNic(nicName, ifName string, ipAddr, gateway string, isDefaultRoute, detectIPConflict bool, routes []request.Route, macAddr net.HardwareAddr, netns ns.NetNS, mtu int, nicType string, gwCheckMode int, u2oInterconnectionIP string) error {
containerLink, err := netlink.LinkByName(nicName)
if err != nil {
return fmt.Errorf("can not find container nic %s: %v", nicName, err)
err = fmt.Errorf("can not find container nic %s: %v", nicName, err)
klog.Error(err)
return err
}

// Set link alias to its origin link name for fastpath to recognize and bypass netfilter
Expand All @@ -224,13 +237,16 @@ func configureContainerNic(nicName, ifName string, ipAddr, gateway string, isDef
}

if err = netlink.LinkSetNsFd(containerLink, int(netns.Fd())); err != nil {
return fmt.Errorf("failed to move link to netns: %v", err)
err = fmt.Errorf("failed to move link to netns: %v", err)
klog.Error(err)
return err
}

return ns.WithNetNSPath(netns.Path(), func(_ ns.NetNS) error {

if nicType != util.InternalType {
if err = netlink.LinkSetName(containerLink, ifName); err != nil {
klog.Error(err)
return err
}
}
Expand All @@ -252,16 +268,20 @@ func configureContainerNic(nicName, ifName string, ipAddr, gateway string, isDef

if nicType == util.InternalType {
if err = addAdditionalNic(ifName); err != nil {
klog.Error(err)
return err
}
if err = configureAdditionalNic(ifName, ipAddr); err != nil {
klog.Error(err)
return err
}
if err = configureNic(nicName, ipAddr, macAddr, mtu, detectIPConflict); err != nil {
klog.Error(err)
return err
}
} else {
if err = configureNic(ifName, ipAddr, macAddr, mtu, detectIPConflict); err != nil {
klog.Error(err)
return err
}
}
Expand Down Expand Up @@ -313,7 +333,9 @@ func configureContainerNic(nicName, ifName string, ipAddr, gateway string, isDef
}

if err != nil {
return fmt.Errorf("failed to configure gateway: %v", err)
err = fmt.Errorf("failed to configure gateway: %v", err)
klog.Error(err)
return err
}
}

Expand Down Expand Up @@ -344,7 +366,7 @@ func configureContainerNic(nicName, ifName string, ipAddr, gateway string, isDef

if gwCheckMode != gatewayModeDisabled {
var (
underlayGateway = gwCheckMode == gatewayCheckModeArping || gwCheckMode == gatewayCheckModeArpingNotConcerned
underlayGateway = gwCheckMode == gatewayCheckModeArping
interfaceName = nicName
)

Expand All @@ -354,6 +376,7 @@ func configureContainerNic(nicName, ifName string, ipAddr, gateway string, isDef

if u2oInterconnectionIP != "" {
if err := checkGatewayReady(gwCheckMode, interfaceName, ipAddr, u2oInterconnectionIP, false, true); err != nil {
klog.Error(err)
return err
}
}
Expand All @@ -367,8 +390,8 @@ func configureContainerNic(nicName, ifName string, ipAddr, gateway string, isDef
func checkGatewayReady(gwCheckMode int, intr, ipAddr, gateway string, underlayGateway, verbose bool) error {
var err error

if gwCheckMode == gatewayCheckModeArpingNotConcerned || gwCheckMode == gatewayCheckModePingNotConcerned {
// ignore error while disableGatewayCheck=true
if gwCheckMode == gatewayCheckModeNoPing {
// ignore error while disableGatewayCheck is true
if err = waitNetworkReady(intr, ipAddr, gateway, underlayGateway, verbose, 1); err != nil {
err = nil
}
Expand Down

0 comments on commit f145159

Please sign in to comment.