{"record":{"id":"7e49a296ff915866","repo":"slackhq/nebula","slug":"failed-to-create-route-routemessage-w-7e49a2","errorCode":null,"errorMessage":"failed to create route.RouteMessage: %w","messagePattern":"failed to create route\\.RouteMessage: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"overlay/tun_netbsd.go","lineNumber":483,"sourceCode":"\t\t\tunix.RTAX_DST:     &netroute.Inet4Addr{IP: prefix.Masked().Addr().As4()},\n\t\t\tunix.RTAX_NETMASK: &netroute.Inet4Addr{IP: prefixToMask(prefix).As4()},\n\t\t\tunix.RTAX_GATEWAY: &netroute.Inet4Addr{IP: gw.Addr().As4()},\n\t\t}\n\t} else {\n\t\tgw, err := selectGateway(prefix, gateways)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\troute.Addrs = []netroute.Addr{\n\t\t\tunix.RTAX_DST:     &netroute.Inet6Addr{IP: prefix.Masked().Addr().As16()},\n\t\t\tunix.RTAX_NETMASK: &netroute.Inet6Addr{IP: prefixToMask(prefix).As16()},\n\t\t\tunix.RTAX_GATEWAY: &netroute.Inet6Addr{IP: gw.Addr().As16()},\n\t\t}\n\t}\n\n\tdata, err := route.Marshal()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to create route.RouteMessage: %w\", err)\n\t}\n\n\t_, err = unix.Write(sock, data[:])\n\tif err != nil {\n\t\tif errors.Is(err, unix.EEXIST) {\n\t\t\t// Try to do a change\n\t\t\troute.Type = unix.RTM_CHANGE\n\t\t\tdata, err = route.Marshal()\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to create route.RouteMessage for change: %w\", err)\n\t\t\t}\n\t\t\t_, err = unix.Write(sock, data[:])\n\t\t\treturn err\n\t\t}\n\t\treturn fmt.Errorf(\"failed to write route.RouteMessage to socket: %w\", err)\n\t}\n\n\treturn nil","sourceCodeStart":465,"sourceCodeEnd":501,"githubUrl":"https://github.com/slackhq/nebula/blob/dd8f660c0ac37903ec4080ca4d3c861ba9342ceb/overlay/tun_netbsd.go#L465-L501","documentation":"After building a netroute.RouteMessage (RTM_ADD), addRoute marshals it to wire format before writing it to the routing socket. This error is returned when route.Marshal() fails, meaning the route message could not be serialized — usually because required fields (addresses, prefixes) are malformed.","triggerScenarios":"addRoute (via addRoutes) receiving a prefix or gateway whose binary form cannot be marshaled, e.g. an IPv6 gateway misformatted for the address-family slot or a zero-length address.","commonSituations":"A VPN network configured with an invalid CIDR; a gateway address of the wrong family (IPv4 vs IPv6) for the route being added; corrupted netip.Prefix values from config parsing.","solutions":["Validate configured vpnNetworks and gateway prefixes parse to valid netip.Prefix values (netip.ParsePrefix) before adding routes.","Ensure the gateway address family matches the prefix family and that Addr().IsValid() is true.","Log the prefix and gateway values when this error occurs to identify the malformed input.","Update the netroute dependency if a Marshal bug for a specific address family is suspected."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"func validateRoute(prefix netip.Prefix, gateways []netip.Prefix) error {\n    if !prefix.IsValid() {\n        return fmt.Errorf(\"invalid route prefix\")\n    }\n    for _, gw := range gateways {\n        if !gw.IsValid() || !gw.Addr().IsValid() {\n            return fmt.Errorf(\"invalid gateway %v\", gw)\n        }\n        if gw.Addr().Is4() != prefix.Addr().Is4() {\n            return fmt.Errorf(\"gateway family %v does not match prefix family %v\", gw, prefix)\n        }\n    }\n    return nil\n}","typeGuard":null,"tryCatchPattern":"if err := addRoute(prefix, gateways); err != nil {\n    if strings.Contains(err.Error(), \"failed to create route.RouteMessage\") {\n        return fmt.Errorf(\"malformed route data (prefix=%v gateways=%v): %w\", prefix, gateways, err)\n    }\n    return err\n}","preventionTips":["Validate all prefixes with netip.ParsePrefix and IsValid before route installation.","Keep gateway and prefix address families consistent.","Log prefix/gateway values when route operations fail.","Pin and update the netroute dependency; verify NetBSD Marshal support for your version."],"tags":["netbsd","routing","marshal","route-message"],"backgroundTag":"route-message-marshal-failed","analyzedSha":"dd8f660c0ac37903ec4080ca4d3c861ba9342ceb","analyzedAt":"2026-09-03T11:13:55.444Z","contentChangedAt":"2026-09-03T11:13:55.444Z","schemaVersion":2},"datasetVersion":"2026-09-10T17:17:09.494Z"}