diff --git a/internal/dhcp/dhcp_test.go b/internal/dhcp/dhcp_test.go index a2d5e60..94c7d7b 100644 --- a/internal/dhcp/dhcp_test.go +++ b/internal/dhcp/dhcp_test.go @@ -109,6 +109,32 @@ func TestGenerateConfig_NoDefaultGateway(t *testing.T) { } } +func TestGenerateConfig_NoDefaultGatewaySuppressesRouterOption(t *testing.T) { + conf := newConf(t, "192.168.1.0/29") + conf.DefaultGateway = nil + path, _, _ := GenerateConfig(conf) + content, _ := os.ReadFile(path) + + if !strings.Contains(string(content), "\ndhcp-option=3\n") { + t.Errorf("dhcp-option=3 nue absente : sans elle dnsmasq annonce sa propre adresse comme routeur\n%s", content) + } +} + +func TestGenerateConfig_VxlanEmitsNoRouterOption(t *testing.T) { + conf := newConf(t, "192.168.1.0/29") + conf.DefaultGateway = nil + + path, _, _ := GenerateConfig(conf) + content, _ := os.ReadFile(path) + + if !strings.Contains(string(content), "dhcp-option=121,") { + t.Fatalf("dhcp-option=121 attendue pour un subnet vxlan :\n%s", content) + } + if strings.Contains(string(content), "dhcp-option=3,") { + t.Errorf("un subnet vxlan est privé : aucune route par défaut ne doit être émise\n%s", content) + } +} + func TestGenerateConfig_ContainsVPCRoute(t *testing.T) { conf := newConf(t, "192.168.1.0/29") path, _, _ := GenerateConfig(conf) diff --git a/internal/dhcp/generate.go b/internal/dhcp/generate.go index 2b6c72f..40250f6 100644 --- a/internal/dhcp/generate.go +++ b/internal/dhcp/generate.go @@ -19,6 +19,8 @@ func GenerateConfig(c Config) (string, map[string]string, error) { } if c.DefaultGateway != nil { fmt.Fprintf(&sb, "dhcp-option=3,%s\n", c.DefaultGateway.String()) + } else { + fmt.Fprintf(&sb, "dhcp-option=3\n") } fmt.Fprintf(&sb, "dhcp-option=6,1.1.1.1,8.8.8.8\n\n") diff --git a/internal/dhcp/struct.go b/internal/dhcp/struct.go index bf6ace9..bacb1e0 100644 --- a/internal/dhcp/struct.go +++ b/internal/dhcp/struct.go @@ -10,7 +10,7 @@ type Config struct { Network *net.IPNet VPCGateway net.IP // next-hop for VPCRoute (option 121) VPCRoute *net.IPNet // if non-nil, emit dhcp-option=121,VPCRoute,VPCGateway - DefaultGateway net.IP // if non-nil, emit dhcp-option=3,DefaultGateway + DefaultGateway net.IP // if non-nil, emit dhcp-option=3,DefaultGateway; if nil, emit a bare dhcp-option=3 to suppress the dnsmasq default Name string ConfDir string }