mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-12-24 11:51:13 +08:00
49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
//go:build !windows || ignore || !darwin
|
|
// +build !windows ignore !darwin
|
|
|
|
package pkg
|
|
|
|
import (
|
|
"net"
|
|
"os/exec"
|
|
"strings"
|
|
)
|
|
|
|
func getRouteTable() (map[string][]*net.IPNet, error) {
|
|
output, err := exec.Command("route", "-n").CombinedOutput()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
split := strings.Split(string(output), "\n")
|
|
routeTable := make(map[string][]*net.IPNet)
|
|
for _, i := range split {
|
|
fields := strings.Fields(i)
|
|
if len(fields) >= 8 {
|
|
dst := net.ParseIP(fields[0])
|
|
mask := make(net.IPMask, net.IPv4len)
|
|
copy(mask, net.ParseIP(fields[2]))
|
|
eth := fields[7]
|
|
if v, ok := routeTable[eth]; ok {
|
|
routeTable[eth] = append(v, &net.IPNet{IP: dst, Mask: mask})
|
|
} else {
|
|
routeTable[eth] = []*net.IPNet{{IP: dst, Mask: mask}}
|
|
}
|
|
}
|
|
}
|
|
return routeTable, nil
|
|
}
|
|
|
|
func disableDevice(list []string) error {
|
|
for _, dev := range list {
|
|
if err := exec.Command("sudo", "ifconfig", dev, "down").Run(); err != nil {
|
|
return err
|
|
} else {
|
|
rollbackFuncList = append(rollbackFuncList, func() {
|
|
_ = exec.Command("sudo", "ifconfig", dev, "up").Run()
|
|
})
|
|
}
|
|
|
|
}
|
|
return nil
|
|
}
|