func setTunIP(iface *water.Interface, ip net.IP, subnet *net.IPNet) (err error) { ip = ip.To4() logger.Debug("%v", ip) if ip[3]%2 == 0 { return invalidAddr } peer := net.IP(make([]byte, 4)) copy([]byte(peer), []byte(ip)) peer[3]++ tun_peer = peer sargs := fmt.Sprintf("addr add dev %s local %s peer %s", iface.Name(), ip, peer) args := strings.Split(sargs, " ") cmd := exec.Command("ip", args...) logger.Info("ip %s", sargs) err = cmd.Run() if err != nil { return err } sargs = fmt.Sprintf("route add %s via %s dev %s", subnet, peer, iface.Name()) args = strings.Split(sargs, " ") cmd = exec.Command("ip", args...) logger.Info("ip %s", sargs) err = cmd.Run() return err }