Просмотр исходного кода

new mtu setting and const for default

Ryan Huber 5 лет назад
Родитель
Сommit
9981510554
3 измененных файлов с 21 добавлено и 1 удалено
  1. 1 1
      main.go
  2. 19 0
      tun_common.go
  3. 1 0
      tun_linux.go

+ 1 - 1
main.go

@@ -111,7 +111,7 @@ func Main(configPath string, configTest bool, buildVersion string) {
 	tun, err := newTun(
 	tun, err := newTun(
 		config.GetString("tun.dev", ""),
 		config.GetString("tun.dev", ""),
 		tunCidr,
 		tunCidr,
-		config.GetInt("tun.mtu", 1300),
+		config.GetInt("tun.mtu", DEFAULT_MTU),
 		routes,
 		routes,
 		unsafeRoutes,
 		unsafeRoutes,
 		config.GetInt("tun.tx_queue", 500),
 		config.GetInt("tun.tx_queue", 500),

+ 19 - 0
tun_common.go

@@ -6,6 +6,8 @@ import (
 	"strconv"
 	"strconv"
 )
 )
 
 
+const DEFAULT_MTU = 1300
+
 type route struct {
 type route struct {
 	mtu   int
 	mtu   int
 	route *net.IPNet
 	route *net.IPNet
@@ -106,6 +108,23 @@ func parseUnsafeRoutes(config *Config, network *net.IPNet) ([]route, error) {
 			return nil, fmt.Errorf("entry %v in tun.unsafe_routes is invalid", i+1)
 			return nil, fmt.Errorf("entry %v in tun.unsafe_routes is invalid", i+1)
 		}
 		}
 
 
+		rMtu, ok := m["mtu"]
+		if !ok {
+			rMtu = config.GetInt("tun.mtu", DEFAULT_MTU)
+		}
+
+		mtu, ok := rMtu.(int)
+		if !ok {
+			mtu, err = strconv.Atoi(rMtu.(string))
+			if err != nil {
+				return nil, fmt.Errorf("entry %v.mtu in tun.unsafe_routes is not an integer: %v", i+1, err)
+			}
+		}
+
+		if mtu < 500 {
+			return nil, fmt.Errorf("entry %v.mtu in tun.unsafe_routes is below 500: %v", i+1, mtu)
+		}
+
 		rVia, ok := m["via"]
 		rVia, ok := m["via"]
 		if !ok {
 		if !ok {
 			return nil, fmt.Errorf("entry %v.via in tun.unsafe_routes is not present", i+1)
 			return nil, fmt.Errorf("entry %v.via in tun.unsafe_routes is not present", i+1)

+ 1 - 0
tun_linux.go

@@ -245,6 +245,7 @@ func (c Tun) Activate() error {
 		nr := netlink.Route{
 		nr := netlink.Route{
 			LinkIndex: link.Attrs().Index,
 			LinkIndex: link.Attrs().Index,
 			Dst:       r.route,
 			Dst:       r.route,
+			MTU:       r.mtu,
 			Scope:     unix.RT_SCOPE_LINK,
 			Scope:     unix.RT_SCOPE_LINK,
 		}
 		}