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  }