Skip to content

Commit

Permalink
fix: for existing nic, no need to set the port type to internal (#3243)
Browse files Browse the repository at this point in the history
Signed-off-by: oilbeater <liumengxinfly@gmail.com>
  • Loading branch information
oilbeater committed Sep 25, 2023
1 parent b183e57 commit 6701083
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 16 deletions.
67 changes: 51 additions & 16 deletions pkg/daemon/ovs.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,29 +44,64 @@ func pingGateway(gw, src string, verbose bool, maxRetry int) error {
}

func configureGlobalMirror(portName string, mtu int) error {
raw, err := ovs.Exec(ovs.MayExist, "add-port", "br-int", portName, "--",
"set", "interface", portName, "type=internal", "--",
"clear", "bridge", "br-int", "mirrors", "--",
"--id=@mirror0", "get", "port", portName, "--",
"--id=@m", "create", "mirror", fmt.Sprintf("name=%s", util.MirrorDefaultName), "select_all=true", "output_port=@mirror0", "--",
"add", "bridge", "br-int", "mirrors", "@m")
nicExist, err := linkExists(portName)
if err != nil {
klog.Errorf("failed to configure mirror nic %s %q", portName, raw)
return fmt.Errorf(raw)
return err
}

if !nicExist {
raw, err := ovs.Exec(ovs.MayExist, "add-port", "br-int", portName, "--",
"set", "interface", portName, "type=internal", "--",
"clear", "bridge", "br-int", "mirrors", "--",
"--id=@mirror0", "get", "port", portName, "--",
"--id=@m", "create", "mirror", fmt.Sprintf("name=%s", util.MirrorDefaultName), "select_all=true", "output_port=@mirror0", "--",
"add", "bridge", "br-int", "mirrors", "@m")
if err != nil {
klog.Errorf("failed to configure mirror nic %s %q", portName, raw)
return fmt.Errorf(raw)
}
} else {
raw, err := ovs.Exec(ovs.MayExist, "add-port", "br-int", portName, "--",
"clear", "bridge", "br-int", "mirrors", "--",
"--id=@mirror0", "get", "port", portName, "--",
"--id=@m", "create", "mirror", fmt.Sprintf("name=%s", util.MirrorDefaultName), "select_all=true", "output_port=@mirror0", "--",
"add", "bridge", "br-int", "mirrors", "@m")
if err != nil {
klog.Errorf("failed to configure mirror nic %s %q", portName, raw)
return fmt.Errorf(raw)
}
}

return configureMirrorLink(portName, mtu)
}

func configureEmptyMirror(portName string, mtu int) error {
raw, err := ovs.Exec(ovs.MayExist, "add-port", "br-int", portName, "--",
"set", "interface", portName, "type=internal", "--",
"clear", "bridge", "br-int", "mirrors", "--",
"--id=@mirror0", "get", "port", portName, "--",
"--id=@m", "create", "mirror", fmt.Sprintf("name=%s", util.MirrorDefaultName), "output_port=@mirror0", "--",
"add", "bridge", "br-int", "mirrors", "@m")
nicExist, err := linkExists(portName)
if err != nil {
klog.Errorf("failed to configure mirror nic %s %q", portName, raw)
return fmt.Errorf(raw)
return err
}

if !nicExist {
raw, err := ovs.Exec(ovs.MayExist, "add-port", "br-int", portName, "--",
"set", "interface", portName, "type=internal", "--",
"clear", "bridge", "br-int", "mirrors", "--",
"--id=@mirror0", "get", "port", portName, "--",
"--id=@m", "create", "mirror", fmt.Sprintf("name=%s", util.MirrorDefaultName), "output_port=@mirror0", "--",
"add", "bridge", "br-int", "mirrors", "@m")
if err != nil {
klog.Errorf("failed to configure mirror nic %s %q", portName, raw)
return fmt.Errorf(raw)
}
} else {
raw, err := ovs.Exec(ovs.MayExist, "add-port", "br-int", portName, "--",
"clear", "bridge", "br-int", "mirrors", "--",
"--id=@mirror0", "get", "port", portName, "--",
"--id=@m", "create", "mirror", fmt.Sprintf("name=%s", util.MirrorDefaultName), "output_port=@mirror0", "--",
"add", "bridge", "br-int", "mirrors", "@m")
if err != nil {
klog.Errorf("failed to configure mirror nic %s %q", portName, raw)
return fmt.Errorf(raw)
}
}
return configureMirrorLink(portName, mtu)
}
Expand Down
11 changes: 11 additions & 0 deletions pkg/daemon/ovs_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -1167,3 +1167,14 @@ func turnOffNicTxChecksum(nicName string) (err error) {
func getShortSharedDir(uid types.UID, volumeName string) string {
return filepath.Join(util.DefaultHostVhostuserBaseDir, string(uid), volumeName)
}

func linkExists(name string) (bool, error) {
_, err := netlink.LinkByName(name)
if err == nil {
return true, nil
} else if _, ok := err.(netlink.LinkNotFoundError); ok {
return false, nil
} else {
return false, err
}
}
8 changes: 8 additions & 0 deletions pkg/daemon/ovs_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -333,3 +333,11 @@ func getShortSharedDir(uid types.UID, volumeName string) string {
// DPDK is not supported on Windows
return ""
}

func linkExists(name string) (bool, error) {
_, err := util.GetNetAdapter(name, true)
if err != nil {
return false, nil
}
return true, nil
}

0 comments on commit 6701083

Please sign in to comment.