iproute2: route: prepare for route del

This commit is contained in:
Yousong Zhou
2020-05-18 19:02:59 +08:00
parent d714e450fb
commit a5c253e129
2 changed files with 49 additions and 33 deletions
+4
View File
@@ -48,6 +48,10 @@ func (l *Link) addErr(err error, fmtStr string, vals ...interface{}) {
l.errs = append(l.errs, errors.Wrapf(err, fmtStr, vals...))
}
func (l *Link) addErr2(err error) {
l.errs = append(l.errs, err)
}
func (l *Link) Err() error {
err := errors.NewAggregate(l.errs)
if err != nil {
+45 -33
View File
@@ -89,25 +89,57 @@ func (route *Route) AddByIPNet(ipnet *net.IPNet, gw net.IP) *Route {
}
func (route *Route) AddByCidr(cidr string, gwStr string) *Route {
var (
dst *net.IPNet
gw net.IP
err error
)
if _, dst, err = net.ParseCIDR(cidr); err != nil {
route.addErr(err, "parse cidr")
dst, gw, err := route.parseCidr(cidr, gwStr)
if err != nil {
route.addErr2(err)
return route
}
return route.AddByIPNet(dst, gw)
}
func (route *Route) parseCidr(cidr, gwStr string) (dst *net.IPNet, gw net.IP, err error) {
if _, dst, err = net.ParseCIDR(cidr); err != nil {
err = errors.Wrap(err, "parse cidr")
return
}
if gwStr != "" {
gw = net.ParseIP(gwStr)
if len(gw) == 0 {
route.addErr(errBadIP, "gwStr: %s", gwStr)
return route
err = errors.Wrapf(errBadIP, "gwStr: %s", gwStr)
return
}
}
return
}
return route.AddByIPNet(dst, gw)
func (route *Route) parse(netStr, maskStr, gwStr string) (ip net.IP, mask net.IPMask, gw net.IP, err error) {
if ip = net.ParseIP(netStr); len(ip) == 0 {
err = errors.Wrapf(errBadIP, "netStr %s", netStr)
return
}
if maskIp := net.ParseIP(maskStr); len(maskIp) == 0 {
err = errors.Wrapf(errBadIP, "maskStr %s", maskStr)
return
} else {
if ip := maskIp.To4(); len(ip) > 0 {
maskIp = ip
}
mask = net.IPMask(maskIp)
ones, bits := mask.Size()
if ones == 0 && bits == 0 {
err = errors.Wrapf(errBadIP, "bad mask %s", maskStr)
return
}
}
if gwStr != "" {
if gw = net.ParseIP(gwStr); len(gw) == 0 {
err = errors.Wrapf(errBadIP, "gwStr %s", gwStr)
return
}
}
return
}
func (route *Route) Add(netStr, maskStr, gwStr string) *Route {
@@ -117,29 +149,9 @@ func (route *Route) Add(netStr, maskStr, gwStr string) *Route {
gw net.IP
)
if ip = net.ParseIP(netStr); len(ip) == 0 {
route.addErr(errBadIP, "netStr %s", netStr)
return route
}
if maskIp := net.ParseIP(maskStr); len(maskIp) == 0 {
route.addErr(errBadIP, "maskStr %s", maskStr)
return route
} else {
if ip := maskIp.To4(); len(ip) > 0 {
maskIp = ip
}
mask = net.IPMask(maskIp)
ones, bits := mask.Size()
if ones == 0 && bits == 0 {
route.addErr(errBadIP, "bad mask %s", maskStr)
return route
}
}
if gwStr != "" {
if gw = net.ParseIP(gwStr); len(gw) == 0 {
route.addErr(errBadIP, "gwStr %s", gwStr)
return route
}
ip, mask, gw, err := route.parse(netStr, maskStr, gwStr)
if err != nil {
route.addErr2(err)
}
ipnet := &net.IPNet{