| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // package for logicing client and server code
- package sysctl
- import (
- "bufio"
- "bytes"
- "fmt"
- "os"
- "path"
- "runtime"
- "strings"
- "github.com/gravitl/netmaker/logic"
- )
- type (
- sysctl struct {
- path string
- config map[string]string
- }
- )
- const (
- NM_SYSCTL_CONF = "99-nm.conf"
- )
- var (
- sysctlPaths map[string]string = map[string]string{
- "linux": "/usr/local/lib/sysctl.d",
- "darwin": "/usr/local/lib/sysctl.d",
- "freebsd": "/usr/local/lib/sysctl.d",
- "windows": "",
- }
- )
- func (s *sysctl) set(key, value string) {
- s.config[key] = value
- }
- func (s *sysctl) get(key string) (val string) {
- val, _ = s.config[key]
- return
- }
- func (s *sysctl) delete(key string) {
- delete(s.config, key)
- }
- func (s *sysctl) update() error {
- f, err := os.OpenFile(s.path, os.O_CREATE|os.O_RDWR, os.ModePerm)
- if err != nil || f == nil {
- return err
- }
- defer f.Close()
- for k, v := range s.config {
- ln := []byte(fmt.Sprintf("%s\n", strings.Join([]string{k, v}, "=")))
- if _, err := f.Write(ln); err != nil {
- return err
- }
- }
- return nil
- }
- func load() (s *sysctl, err error) {
- s = &sysctl{
- path: path.Join(sysctlPaths[runtime.GOOS], NM_SYSCTL_CONF),
- config: make(map[string]string),
- }
- if !logic.FileExists(s.path) {
- os.MkdirAll(sysctlPaths[runtime.GOOS], os.ModeDir)
- }
- f, err := os.OpenFile(s.path, os.O_CREATE|os.O_RDWR, os.ModePerm)
- if err != nil {
- return s, err
- }
- defer f.Close()
- for sc := bufio.NewScanner(f); sc.Scan(); {
- line := sc.Bytes()
- if len(line) >= 1 && line[0] == '#' {
- continue
- }
- if kvpair := bytes.Split(line, []byte{'='}); len(kvpair) == 2 {
- s.config[string(kvpair[0])] = string(kvpair[1])
- }
- }
- return
- }
- func SysctlSetIPForwarding() error {
- conf, err := load()
- if err != nil {
- return err
- }
- conf.set("net.ipv4.ip_forward", "1")
- return conf.update()
- }
|