github.com/keysonzzz/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgSys/Ip_forward.go (about) 1 package kmgSys 2 3 import ( 4 "bytes" 5 "fmt" 6 7 "github.com/bronze1man/kmg/kmgFile" 8 "github.com/bronze1man/kmg/kmgPlatform" 9 ) 10 11 func IsIpForwardOn() bool { 12 if !kmgPlatform.IsLinux() { 13 panic("[IsIpForwardOn] only support linux now") 14 } 15 b := kmgFile.MustReadFile("/proc/sys/net/ipv4/ip_forward") 16 if bytes.Contains(b, []byte{'0'}) { 17 return false 18 } 19 if bytes.Contains(b, []byte{'1'}) { 20 return true 21 } 22 panic(fmt.Errorf("[IsIpForwardOn] unable to understand info in /proc/sys/net/ipv4/ip_forward %#v", b)) 23 } 24 25 // 证实可用 26 func SetIpForwardOn() { 27 if !kmgPlatform.IsLinux() { 28 panic("[SetIpForwardOn] only support linux now") 29 } 30 kmgFile.MustWriteFile("/proc/sys/net/ipv4/ip_forward", []byte("1")) 31 // 已经证实,多次写入不会出现任何问题. 32 // TODO 正确解析/etc/sysctl.conf 如果后面又加一条 = 0 估计就挂了. 33 if !bytes.Contains(kmgFile.MustReadFile("/etc/sysctl.conf"), []byte("\nnet.ipv4.ip_forward = 1")) { 34 kmgFile.MustAppendFile("/etc/sysctl.conf", []byte("\nnet.ipv4.ip_forward = 1")) 35 } 36 }