mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-08-30 17:13:08 +08:00
iproute2: route: prepare for route del
This commit is contained in:
@@ -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
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user