{"record":{"id":"6101fcadcbb97489","repo":"hashicorp/nomad","slug":"invalid-bridge-network-subnet-ipv6-w","errorCode":null,"errorMessage":"invalid bridge_network_subnet_ipv6: %w","messagePattern":"invalid bridge_network_subnet_ipv6: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"command/agent/agent.go","lineNumber":1125,"sourceCode":"\tconf.CNIConfigDir = agentConfig.Client.CNIConfigDir\n\tconf.BridgeNetworkName = agentConfig.Client.BridgeNetworkName\n\tipv4Subnet := agentConfig.Client.BridgeNetworkSubnet\n\tif ipv4Subnet != \"\" {\n\t\tip, _, err := net.ParseCIDR(ipv4Subnet)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid bridge_network_subnet: %w\", err)\n\t\t}\n\t\t// it's a valid IP, so now make sure it is ipv4\n\t\tif ip.To4() == nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid bridge_network_subnet: not an IPv4 address: %s\", ipv4Subnet)\n\t\t}\n\t\tconf.BridgeNetworkAllocSubnet = ipv4Subnet\n\t}\n\tipv6Subnet := agentConfig.Client.BridgeNetworkSubnetIPv6\n\tif ipv6Subnet != \"\" {\n\t\tip, _, err := net.ParseCIDR(ipv6Subnet)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid bridge_network_subnet_ipv6: %w\", err)\n\t\t}\n\t\t// it's valid, so now make sure it's *not* ipv4\n\t\tif ip.To4() != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid bridge_network_subnet_ipv6: not an IPv6 address: %s\", ipv6Subnet)\n\t\t}\n\t\tconf.BridgeNetworkAllocSubnetIPv6 = ipv6Subnet\n\t}\n\tconf.BridgeNetworkHairpinMode = agentConfig.Client.BridgeNetworkHairpinMode\n\n\tfor _, hn := range agentConfig.Client.HostNetworks {\n\t\tconf.HostNetworks[hn.Name] = hn\n\t}\n\tconf.BindWildcardDefaultHostNetwork = agentConfig.Client.BindWildcardDefaultHostNetwork\n\n\tif agentConfig.Client.NomadServiceDiscovery != nil {\n\t\tconf.NomadServiceDiscovery = *agentConfig.Client.NomadServiceDiscovery\n\t}\n","sourceCodeStart":1107,"sourceCodeEnd":1143,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/command/agent/agent.go#L1107-L1143","documentation":"convertClientConfig parses client.bridge_network_subnet_ipv6 with net.ParseCIDR; if parsing fails the wrapped error is returned as this message, aborting agent start or reload. The field must be a syntactically valid CIDR.","triggerScenarios":"client.bridge_network_subnet_ipv6 set to an unparsable string: missing prefix ('fd00::'), malformed address, or garbage/templating artifact; raised via clientConfig, agent start, or handleReload.","commonSituations":"Typos in the HCL/JSON config, omitting /prefix, shell/env templating rendering empty or partial values, mixing up the IPv4 and IPv6 field names.","solutions":["Correct client.bridge_network_subnet_ipv6 to a valid IPv6 CIDR, e.g. 'fd00::/64'","Ensure the value includes a prefix length (/n)","Validate the config with `nomad agent -verify-only` before restart"],"exampleFix":"// before\nclient {\n  bridge_network_subnet_ipv6 = \"fd00::\"\n}\n// after\nclient {\n  bridge_network_subnet_ipv6 = \"fd00::/64\"\n}","handlingStrategy":"validation","validationCode":"subnet := \"fd00::/64\"\nif _, _, err := net.ParseCIDR(subnet); err != nil {\n    return fmt.Errorf(\"bridge_network_subnet_ipv6 must be a valid CIDR: %w\", err)\n}","typeGuard":"func isValidIPv6CIDR(s string) bool {\n    ip, _, err := net.ParseCIDR(s)\n    return err == nil && ip.To4() == nil\n}","tryCatchPattern":null,"preventionTips":["Always include /prefix in the IPv6 subnet value","Verify templated config renders complete values (guard against empty strings)","Validate config with `nomad agent -verify-only` before deploy"],"tags":["nomad","config-validation","ipv6","cidr"],"backgroundTag":"invalid-cidr-notation","analyzedSha":"482b49bf1aec006f089bcfc7e632d8f6ac303e5e","analyzedAt":"2026-09-04T07:54:14.808Z","contentChangedAt":"2026-09-04T07:54:14.808Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}