network: add support for CIDR addresses Debian routes
OnMetal is changing their template from: `route add -net 1.2.3.0 netmask 255.255.255.0 gw 10.1.2.1 || true` to: `route add -net 1.2.3.0/24 gw 10.1.2.1 || true`
This commit is contained in:
parent
e9cd09dd7b
commit
2d28d16c92
@ -236,7 +236,11 @@ func parseInterfaceStanza(attributes []string, options []string) (*stanzaInterfa
|
|||||||
for i, field := range fields[:len(fields)-1] {
|
for i, field := range fields[:len(fields)-1] {
|
||||||
switch field {
|
switch field {
|
||||||
case "-net":
|
case "-net":
|
||||||
route.destination.IP = net.ParseIP(fields[i+1])
|
if _, dst, err := net.ParseCIDR(fields[i+1]); err == nil {
|
||||||
|
route.destination = *dst
|
||||||
|
} else {
|
||||||
|
route.destination.IP = net.ParseIP(fields[i+1])
|
||||||
|
}
|
||||||
case "netmask":
|
case "netmask":
|
||||||
route.destination.Mask = net.IPMask(net.ParseIP(fields[i+1]).To4())
|
route.destination.Mask = net.IPMask(net.ParseIP(fields[i+1]).To4())
|
||||||
case "gw":
|
case "gw":
|
||||||
|
@ -285,31 +285,57 @@ func TestBadParseInterfaceStanzasStaticPostUp(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestParseInterfaceStanzaStaticPostUp(t *testing.T) {
|
func TestParseInterfaceStanzaStaticPostUp(t *testing.T) {
|
||||||
options := []string{
|
for _, tt := range []struct {
|
||||||
"address 192.168.1.100",
|
options []string
|
||||||
"netmask 255.255.255.0",
|
expect []route
|
||||||
"post-up route add gw 192.168.1.1 -net 192.168.1.0 netmask 255.255.255.0",
|
}{
|
||||||
}
|
|
||||||
expect := []route{
|
|
||||||
{
|
{
|
||||||
destination: net.IPNet{
|
options: []string{
|
||||||
IP: net.IPv4(192, 168, 1, 0),
|
"address 192.168.1.100",
|
||||||
Mask: net.IPv4Mask(255, 255, 255, 0),
|
"netmask 255.255.255.0",
|
||||||
|
"post-up route add gw 192.168.1.1 -net 192.168.1.0 netmask 255.255.255.0",
|
||||||
|
},
|
||||||
|
expect: []route{
|
||||||
|
{
|
||||||
|
destination: net.IPNet{
|
||||||
|
IP: net.IPv4(192, 168, 1, 0),
|
||||||
|
Mask: net.IPv4Mask(255, 255, 255, 0),
|
||||||
|
},
|
||||||
|
gateway: net.IPv4(192, 168, 1, 1),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
gateway: net.IPv4(192, 168, 1, 1),
|
|
||||||
},
|
},
|
||||||
}
|
{
|
||||||
|
options: []string{
|
||||||
iface, err := parseInterfaceStanza([]string{"eth", "inet", "static"}, options)
|
"address 192.168.1.100",
|
||||||
if err != nil {
|
"netmask 255.255.255.0",
|
||||||
t.FailNow()
|
"post-up route add gw 192.168.1.1 -net 192.168.1.0/24 || true",
|
||||||
}
|
},
|
||||||
static, ok := iface.configMethod.(configMethodStatic)
|
expect: []route{
|
||||||
if !ok {
|
{
|
||||||
t.FailNow()
|
destination: func() net.IPNet {
|
||||||
}
|
if _, net, err := net.ParseCIDR("192.168.1.0/24"); err == nil {
|
||||||
if !reflect.DeepEqual(static.routes, expect) {
|
return *net
|
||||||
t.FailNow()
|
} else {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}(),
|
||||||
|
gateway: net.IPv4(192, 168, 1, 1),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
iface, err := parseInterfaceStanza([]string{"eth", "inet", "static"}, tt.options)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("bad error (%+v): want nil, got %s\n", tt, err)
|
||||||
|
}
|
||||||
|
static, ok := iface.configMethod.(configMethodStatic)
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("bad config method (%+v): want configMethodStatic, got %T\n", tt, iface.configMethod)
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(static.routes, tt.expect) {
|
||||||
|
t.Fatalf("bad routes (%+v): want %#v, got %#v\n", tt, tt.expect, static.routes)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user