1
0
mirror of https://github.com/rancher/os.git synced 2025-09-21 02:19:48 +00:00
Files
os/pkg/util/network/route.go
Olli Janatuinen 872f1cd6da Initiate Burmilla OS project
- Use burmilla GitHub repos
- Release under burmilla Docker Hub
- GitHub action for create releases
- Updated boot image and login banner
- Use Debian as default console
- Updated system-cron to v0.5.0
- Updated services to latest versions
- Bump up kernel to 4.14.206
- Include burmilla/os-debianconsole:v1.9.0 to initrd
2021-02-18 20:07:36 +02:00

112 lines
1.9 KiB
Go

package network
import (
"bufio"
"fmt"
"io"
"os"
"strings"
"github.com/burmilla/os/pkg/log"
"github.com/burmilla/os/pkg/util"
)
const (
DefaultRoutesCheckTimeout = 20000 // 20 second
ipv4RouteFile = "/proc/net/route"
ipv6RouteFile = "/proc/net/ipv6_route"
ipv4DefaultGWFlags = "0003"
ipv6DefaultGWFlags = "00450003"
)
func checkIPv4GW() bool {
if _, err := os.Stat(ipv4RouteFile); os.IsNotExist(err) {
return false
}
file, err := os.Open(ipv4RouteFile)
if err != nil {
return false
}
defer file.Close()
scanner := bufio.NewReader(file)
for {
line, err := scanner.ReadString('\n')
if err == io.EOF {
break
}
//ignore the headers in the route info
if strings.HasPrefix(line, "Iface") {
continue
}
fields := strings.Fields(line)
// Interested in fields:
// 3 - flags
if fields[3] == ipv4DefaultGWFlags {
return true
}
}
return false
}
func checkIPv6GW() bool {
if _, err := os.Stat(ipv6RouteFile); os.IsNotExist(err) {
return false
}
file, err := os.Open(ipv6RouteFile)
if err != nil {
return false
}
defer file.Close()
scanner := bufio.NewReader(file)
for {
line, err := scanner.ReadString('\n')
if err == io.EOF {
break
}
fields := strings.Fields(line)
// Interested in fields:
// 3 - flags
if fields[3] == ipv6DefaultGWFlags {
return true
}
}
return false
}
func checkAllDefaultGW() bool {
return checkIPv4GW() || checkIPv6GW()
}
func AllDefaultGWOK(timeout int) error {
backoff := util.Backoff{
StartMillis: 100,
MaxIntervalMillis: 2000,
MaxMillis: timeout,
}
defer backoff.Close()
var err error
for ok := range backoff.Start() {
if !ok {
err = fmt.Errorf("Timeout waiting for the default gateway ready")
break
}
if checkAllDefaultGW() {
break
}
log.Debug("Waiting for the default gateway ready")
}
if err != nil {
return err
}
log.Debug("The default gateway is ready")
return nil
}