mirror of
https://github.com/netbirdio/netbird.git
synced 2024-12-01 20:43:43 +01:00
1012172f04
Handle routes updates from management Manage routing firewall rules Manage peer RIB table Add get peer and get notification channel from the status recorder Update interface peers allowed IPs
74 lines
1.2 KiB
Go
74 lines
1.2 KiB
Go
package routemanager
|
|
|
|
import (
|
|
"github.com/vishvananda/netlink"
|
|
"io/ioutil"
|
|
"net"
|
|
"net/netip"
|
|
)
|
|
|
|
const ipv4ForwardingPath = "/proc/sys/net/ipv4/ip_forward"
|
|
|
|
func addToRouteTable(prefix netip.Prefix, addr string) error {
|
|
_, ipNet, err := net.ParseCIDR(prefix.String())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
addrMask := "/32"
|
|
if prefix.Addr().Unmap().Is6() {
|
|
addrMask = "/128"
|
|
}
|
|
|
|
ip, _, err := net.ParseCIDR(addr + addrMask)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
route := &netlink.Route{
|
|
Scope: netlink.SCOPE_UNIVERSE,
|
|
Dst: ipNet,
|
|
Gw: ip,
|
|
}
|
|
|
|
err = netlink.RouteAdd(route)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func removeFromRouteTable(prefix netip.Prefix) error {
|
|
_, ipNet, err := net.ParseCIDR(prefix.String())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
route := &netlink.Route{
|
|
Scope: netlink.SCOPE_UNIVERSE,
|
|
Dst: ipNet,
|
|
}
|
|
|
|
err = netlink.RouteDel(route)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func enableIPForwarding() error {
|
|
err := ioutil.WriteFile(ipv4ForwardingPath, []byte("1"), 0644)
|
|
return err
|
|
}
|
|
|
|
func isNetForwardHistoryEnabled() bool {
|
|
out, err := ioutil.ReadFile(ipv4ForwardingPath)
|
|
if err != nil {
|
|
// todo
|
|
panic(err)
|
|
}
|
|
return string(out) == "1"
|
|
}
|