router: update system routes for linux
This commit is contained in:
@ -113,19 +113,25 @@ func (p *localRouter) periodReload(ctx context.Context) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (r *localRouter) reload(ctx context.Context) error {
|
||||
routes := r.options.routes
|
||||
func (p *localRouter) reload(ctx context.Context) error {
|
||||
routes := p.options.routes
|
||||
|
||||
v, err := r.load(ctx)
|
||||
v, err := p.load(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
routes = append(routes, v...)
|
||||
|
||||
r.mu.Lock()
|
||||
defer r.mu.Unlock()
|
||||
p.options.logger.Debugf("load items %d", len(routes))
|
||||
|
||||
r.routes = routes
|
||||
if err := p.setSysRoutes(routes...); err != nil {
|
||||
p.options.logger.Error(err)
|
||||
}
|
||||
|
||||
p.mu.Lock()
|
||||
defer p.mu.Unlock()
|
||||
|
||||
p.routes = routes
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -177,7 +183,6 @@ func (p *localRouter) load(ctx context.Context) (routes []*router.Route, err err
|
||||
routes = append(routes, v...)
|
||||
}
|
||||
|
||||
p.options.logger.Debugf("load items %d", len(routes))
|
||||
return
|
||||
}
|
||||
|
||||
|
23
router/router_linux.go
Normal file
23
router/router_linux.go
Normal file
@ -0,0 +1,23 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/go-gost/core/router"
|
||||
"github.com/vishvananda/netlink"
|
||||
)
|
||||
|
||||
func (p *localRouter) setSysRoutes(routes ...*router.Route) error {
|
||||
for _, route := range routes {
|
||||
p.options.logger.Debugf("ip route replace %s via %s", route.Net, route.Gateway)
|
||||
r := netlink.Route{
|
||||
Dst: route.Net,
|
||||
Gw: route.Gateway,
|
||||
}
|
||||
if err := netlink.RouteReplace(&r); err != nil {
|
||||
return fmt.Errorf("set route %v %v: %v", r.Dst, r.Gw, err)
|
||||
}
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
11
router/router_other.go
Normal file
11
router/router_other.go
Normal file
@ -0,0 +1,11 @@
|
||||
//go:build !linux
|
||||
|
||||
package router
|
||||
|
||||
import (
|
||||
"github.com/go-gost/core/router"
|
||||
)
|
||||
|
||||
func (*localRouter) setSysRoutes(routes ...*router.Route) error {
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user