diff --git a/internal/app/networkd/pkg/networkd/netconf.go b/internal/app/networkd/pkg/networkd/netconf.go index 88544d4ff..f4af17405 100644 --- a/internal/app/networkd/pkg/networkd/netconf.go +++ b/internal/app/networkd/pkg/networkd/netconf.go @@ -225,10 +225,13 @@ func buildKernelOptions(cmdline string) (name string, opts []nic.Option) { // case 6: // Primary DNS Resolver case 7: - resolvers = append(resolvers, net.ParseIP(field)) + fallthrough // Secondary DNS Resolver case 8: - resolvers = append(resolvers, net.ParseIP(field)) + nameserverIP := net.ParseIP(field) + if nameserverIP != nil { + resolvers = append(resolvers, nameserverIP) + } } } // NTP server diff --git a/internal/app/networkd/pkg/networkd/netconf_test.go b/internal/app/networkd/pkg/networkd/netconf_test.go index b6ab3afef..9631996db 100644 --- a/internal/app/networkd/pkg/networkd/netconf_test.go +++ b/internal/app/networkd/pkg/networkd/netconf_test.go @@ -52,6 +52,22 @@ func (suite *NetconfSuite) TestKernelNetconf() { suite.Assert().Equal(len(addr.Routes()), 1) } +func (suite *NetconfSuite) TestKernelNetconfIncomplete() { + name, opts := buildKernelOptions("1.1.1.1::3.3.3.3:255.255.255.0::eth0:none:::") + + iface, err := nic.New(opts...) + suite.Require().NoError(err) + + suite.Assert().Equal(iface.Name, name) + suite.Assert().Equal(len(iface.AddressMethod), 1) + addr := iface.AddressMethod[0] + suite.Assert().Equal(addr.Name(), "static") + suite.Assert().Equal(addr.Hostname(), "") + suite.Assert().Equal(addr.Address().IP, net.ParseIP("1.1.1.1")) + suite.Assert().Len(addr.Resolvers(), 0) + suite.Assert().Equal(len(addr.Routes()), 1) +} + func sampleConfig() []machine.Device { return []machine.Device{ {