mirror of
https://github.com/jsimonetti/rtnetlink.git
synced 2026-05-05 10:56:15 +02:00
Merge pull request #76 from dd4e/add-replace-route
Added methods for replace route
This commit is contained in:
commit
2d3c724ef0
11
route.go
11
route.go
@ -111,6 +111,17 @@ func (r *RouteService) Add(req *RouteMessage) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Replace or add new route
|
||||
func (r *RouteService) Replace(req *RouteMessage) error {
|
||||
flags := netlink.Request | netlink.Create | netlink.Replace | netlink.Acknowledge
|
||||
_, err := r.c.Execute(req, unix.RTM_NEWROUTE, flags)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete existing route
|
||||
func (r *RouteService) Delete(req *RouteMessage) error {
|
||||
flags := netlink.Request | netlink.Acknowledge
|
||||
|
||||
@ -8,17 +8,11 @@ import (
|
||||
"github.com/jsimonetti/rtnetlink"
|
||||
)
|
||||
|
||||
// RouteAdd adds infomation about a network route.
|
||||
func (c *Conn) RouteAdd(ifc *net.Interface, dst net.IPNet, gw net.IP) (err error) {
|
||||
return c.RouteAddSrc(ifc, dst, nil, gw)
|
||||
}
|
||||
|
||||
// RouteAddSrc adds infomation about a network route with the given destination
|
||||
// and source. If source is `nil` it's ignored.
|
||||
func (c *Conn) RouteAddSrc(ifc *net.Interface, dst net.IPNet, src *net.IPNet, gw net.IP) (err error) {
|
||||
// generating route message
|
||||
func genRouteMessage(ifc *net.Interface, dst net.IPNet, src *net.IPNet, gw net.IP) (rm *rtnetlink.RouteMessage, err error) {
|
||||
af, err := addrFamily(dst.IP)
|
||||
if err != nil {
|
||||
return err
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Determine scope
|
||||
@ -60,7 +54,45 @@ func (c *Conn) RouteAddSrc(ifc *net.Interface, dst net.IPNet, src *net.IPNet, gw
|
||||
SrcLength: uint8(srclen),
|
||||
Attributes: attr,
|
||||
}
|
||||
return c.Conn.Route.Add(tx)
|
||||
return tx, nil
|
||||
}
|
||||
|
||||
// RouteAdd adds infomation about a network route.
|
||||
func (c *Conn) RouteAdd(ifc *net.Interface, dst net.IPNet, gw net.IP) (err error) {
|
||||
rm, err := genRouteMessage(ifc, dst, nil, gw)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Conn.Route.Add(rm)
|
||||
}
|
||||
|
||||
// RouteReplace adds or replace information about a network route.
|
||||
func (c *Conn) RouteReplace(ifc *net.Interface, dst net.IPNet, gw net.IP) (err error) {
|
||||
rm, err := genRouteMessage(ifc, dst, nil, gw)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Conn.Route.Replace(rm)
|
||||
}
|
||||
|
||||
// RouteReplaceSrc adds or replace infomation about a network route with the given destination
|
||||
// and source. If source is `nil` it's ignored.
|
||||
func (c *Conn) RouteReplaceSrc(ifc *net.Interface, dst net.IPNet, src *net.IPNet, gw net.IP) (err error) {
|
||||
rm, err := genRouteMessage(ifc, dst, src, gw)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Conn.Route.Replace(rm)
|
||||
}
|
||||
|
||||
// RouteAddSrc adds infomation about a network route with the given destination
|
||||
// and source. If source is `nil` it's ignored.
|
||||
func (c *Conn) RouteAddSrc(ifc *net.Interface, dst net.IPNet, src *net.IPNet, gw net.IP) (err error) {
|
||||
rm, err := genRouteMessage(ifc, dst, src, gw)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return c.Conn.Route.Add(rm)
|
||||
}
|
||||
|
||||
// RouteDel deletes the route to the given destination.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user