53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package controller
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"os/exec"
|
|
"strings"
|
|
)
|
|
|
|
func gateway() (net.IP, error) {
|
|
cmd := `ip route | grep "^default" | cut -d" " -f3`
|
|
out, err := exec.Command("bash", "-c", cmd).Output()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Failed to execute command: %s", cmd)
|
|
}
|
|
return net.ParseIP(strings.TrimSpace(string(out))), nil
|
|
}
|
|
|
|
func localAddress(gw net.IP) (net.IP, error) {
|
|
addrs, err := net.InterfaceAddrs()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, addr := range addrs {
|
|
switch v := addr.(type) {
|
|
case *net.IPNet:
|
|
if v.Contains(gw) {
|
|
return v.IP, nil
|
|
}
|
|
}
|
|
}
|
|
return nil, fmt.Errorf("Unable to find local address")
|
|
}
|
|
|
|
func addLoopback(name string, addr *net.IPNet) error {
|
|
mask := fmt.Sprintf("%d.%d.%d.%d", addr.Mask[0], addr.Mask[1], addr.Mask[2], addr.Mask[3])
|
|
cmd := fmt.Sprintf("ifconfig lo:%s %s netmask %s up", name, addr.IP.String(), mask)
|
|
_, err := exec.Command("bash", "-c", cmd).Output()
|
|
if err != nil {
|
|
return fmt.Errorf("Failed to Add loopback command: %v", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func deleteLoopback(name string) error {
|
|
cmd := fmt.Sprintf("ifconfig lo:%s down", name)
|
|
_, err := exec.Command("bash", "-c", cmd).Output()
|
|
if err != nil {
|
|
return fmt.Errorf("Failed to delete loopback command: %v", err)
|
|
}
|
|
return nil
|
|
}
|