4443b0b964
- Add missing httpLoader.Close() in localRouter.Close() to prevent resource leak - Log parse errors from file/redis/http loaders instead of silently discarding them - Add nil reader guards before calling parseRoutes in load() - Default nil logger to xlogger.Nop() to prevent nil panics - Use context.Background() instead of context.TODO() for root context - Use strings.ReplaceAll instead of deprecated strings.Replace with -1 - Add doc comments to all exported symbols - Add 27 unit tests + 1 benchmark
34 lines
681 B
Go
34 lines
681 B
Go
package router
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
|
|
"github.com/go-gost/core/router"
|
|
"github.com/vishvananda/netlink"
|
|
)
|
|
|
|
// setSysRoutes applies the given routes as system-level network routes using netlink.
|
|
func (p *localRouter) setSysRoutes(routes ...*router.Route) error {
|
|
for _, route := range routes {
|
|
if route.Net == nil {
|
|
continue
|
|
}
|
|
gw := net.ParseIP(route.Gateway)
|
|
if gw == nil {
|
|
continue
|
|
}
|
|
|
|
p.options.logger.Debugf("ip route replace %s via %s", route.Net, route.Gateway)
|
|
r := netlink.Route{
|
|
Dst: route.Net,
|
|
Gw: gw,
|
|
}
|
|
if err := netlink.RouteReplace(&r); err != nil {
|
|
return fmt.Errorf("set route %v %v: %v", r.Dst, r.Gw, err)
|
|
}
|
|
|
|
}
|
|
return nil
|
|
}
|