mirror of https://github.com/vishvananda/netlink
Add RouteChange API
Signed-off-by: Maxime Soulé <btik-git@scoubidou.com>
This commit is contained in:
parent
6ab7f5a376
commit
124bb8e721
|
@ -263,6 +263,10 @@ func (h *Handle) RouteAppend(route *Route) error {
|
||||||
return ErrNotImplemented
|
return ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Handle) RouteChange(route *Route) error {
|
||||||
|
return ErrNotImplemented
|
||||||
|
}
|
||||||
|
|
||||||
func (h *Handle) RouteDel(route *Route) error {
|
func (h *Handle) RouteDel(route *Route) error {
|
||||||
return ErrNotImplemented
|
return ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,6 +204,10 @@ func RouteAppend(route *Route) error {
|
||||||
return ErrNotImplemented
|
return ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RouteChange(route *Route) error {
|
||||||
|
return ErrNotImplemented
|
||||||
|
}
|
||||||
|
|
||||||
func RouteDel(route *Route) error {
|
func RouteDel(route *Route) error {
|
||||||
return ErrNotImplemented
|
return ErrNotImplemented
|
||||||
}
|
}
|
||||||
|
|
|
@ -790,6 +790,21 @@ func (h *Handle) RouteAddEcmp(route *Route) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RouteChange will change an existing route in the system.
|
||||||
|
// Equivalent to: `ip route change $route`
|
||||||
|
func RouteChange(route *Route) error {
|
||||||
|
return pkgHandle.RouteChange(route)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RouteChange will change an existing route in the system.
|
||||||
|
// Equivalent to: `ip route change $route`
|
||||||
|
func (h *Handle) RouteChange(route *Route) error {
|
||||||
|
flags := unix.NLM_F_REPLACE | unix.NLM_F_ACK
|
||||||
|
req := h.newNetlinkRequest(unix.RTM_NEWROUTE, flags)
|
||||||
|
_, err := h.routeHandle(route, req, nl.NewRtMsg())
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// RouteReplace will add a route to the system.
|
// RouteReplace will add a route to the system.
|
||||||
// Equivalent to: `ip route replace $route`
|
// Equivalent to: `ip route replace $route`
|
||||||
func RouteReplace(route *Route) error {
|
func RouteReplace(route *Route) error {
|
||||||
|
|
|
@ -331,6 +331,72 @@ func TestRoute6AddDel(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRouteChange(t *testing.T) {
|
||||||
|
tearDown := setUpNetlinkTest(t)
|
||||||
|
defer tearDown()
|
||||||
|
|
||||||
|
// get loopback interface
|
||||||
|
link, err := LinkByName("lo")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// bring the interface up
|
||||||
|
if err := LinkSetUp(link); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// add a gateway route
|
||||||
|
dst := &net.IPNet{
|
||||||
|
IP: net.IPv4(192, 168, 0, 0),
|
||||||
|
Mask: net.CIDRMask(24, 32),
|
||||||
|
}
|
||||||
|
|
||||||
|
ip := net.IPv4(127, 1, 1, 1)
|
||||||
|
route := Route{LinkIndex: link.Attrs().Index, Dst: dst, Src: ip}
|
||||||
|
|
||||||
|
if err := RouteChange(&route); err == nil {
|
||||||
|
t.Fatal("Route added while it should fail")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := RouteAdd(&route); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
routes, err := RouteList(link, FAMILY_V4)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if len(routes) != 1 {
|
||||||
|
t.Fatal("Route not added properly")
|
||||||
|
}
|
||||||
|
|
||||||
|
ip = net.IPv4(127, 1, 1, 2)
|
||||||
|
route = Route{LinkIndex: link.Attrs().Index, Dst: dst, Src: ip}
|
||||||
|
if err := RouteChange(&route); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
routes, err = RouteList(link, FAMILY_V4)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(routes) != 1 || !routes[0].Src.Equal(ip) {
|
||||||
|
t.Fatal("Route not changed properly")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := RouteDel(&route); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
routes, err = RouteList(link, FAMILY_V4)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if len(routes) != 0 {
|
||||||
|
t.Fatal("Route not removed properly")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestRouteReplace(t *testing.T) {
|
func TestRouteReplace(t *testing.T) {
|
||||||
tearDown := setUpNetlinkTest(t)
|
tearDown := setUpNetlinkTest(t)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
@ -390,7 +456,6 @@ func TestRouteReplace(t *testing.T) {
|
||||||
if len(routes) != 0 {
|
if len(routes) != 0 {
|
||||||
t.Fatal("Route not removed properly")
|
t.Fatal("Route not removed properly")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRouteAppend(t *testing.T) {
|
func TestRouteAppend(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue