{"record":{"id":"96444ce947232b01","repo":"sgl-project/sglang","slug":"invalid-ipv6-address-format-missing","errorCode":null,"errorMessage":"invalid IPv6 address format: missing ']'","messagePattern":"invalid IPv6 address format: missing '\\]'","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/utils/common.py","lineNumber":163,"sourceCode":"    except ValueError as exc:\n        raise ValueError(f\"{field_name} port must be an integer: {port_str}\") from exc\n\n    if port < 0 or port > 65535:\n        raise ValueError(f\"{field_name} port must be between 0 and 65535: {port}\")\n    return host, port\n\n\ndef format_tcp_endpoint(host: str, port: int, field_name: str) -> str:\n    if port < 0 or port > 65535:\n        raise ValueError(f\"{field_name} port must be between 0 and 65535: {port}\")\n    return f\"tcp://{host}:{port}\"\n\n\ndef configure_ipv6(dist_init_addr):\n    addr = dist_init_addr\n    end = addr.find(\"]\")\n    if end == -1:\n        raise ValueError(\"invalid IPv6 address format: missing ']'\")\n\n    host = addr[: end + 1]\n\n    # this only validates the address without brackets: we still need the below checks.\n    # if it's invalid, immediately raise an error so we know it's not formatting issues.\n    if not is_valid_ipv6_address(host[1:end]):\n        raise ValueError(f\"invalid IPv6 address: {host}\")\n\n    port_str = None\n    if len(addr) > end + 1:\n        if addr[end + 1] == \":\":\n            port_str = addr[end + 2 :]\n        else:\n            raise ValueError(\"received IPv6 address format: expected ':' after ']'\")\n\n    if not port_str:\n        raise ValueError(\n            \"a port must be specified in IPv6 address (format: [ipv6]:port)\"","sourceCodeStart":145,"sourceCodeEnd":181,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/utils/common.py#L145-L181","documentation":"Thrown by configure_ipv6 when the dist_init_addr contains no ']' character, meaning an IPv6 address was expected in bracketed form [ipv6]:port but the closing bracket is missing.","triggerScenarios":"Passing a bare IPv6 address like \"fe80::1:29500\" or \"::1\" (no brackets) as dist-init address to configure_ipv6.","commonSituations":"Forgetting brackets when switching a distributed init method from IPv4 to IPv6; some orchestrators emit unbracketed IPv6 pod addresses.","solutions":["Wrap the IPv6 address in square brackets with a port: \"[fe80::1]:29500\"","If the address is actually IPv4/hostname, use plain host:port form","Verify what the scheduler/k8s injected as the init address"],"exampleFix":"# before\n--dist-init-addr fe80::1:29500\n# after\n--dist-init-addr [fe80::1]:29500","handlingStrategy":"validation","validationCode":"def is_bracketed_ipv6(addr: str) -> bool:\n    return addr.startswith(\"[\") and \"]\" in addr","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always write IPv6 init addresses as [addr]:port","Add a config lint step for dist-init addresses"],"tags":["ipv6","distributed","network","validation"],"backgroundTag":"invalid-ipv6-address","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}