{"record":{"id":"444c5728b4db2745","repo":"dotnetcore/CAP","slug":"no-available-mac-found","errorCode":null,"errorMessage":"no available mac found","messagePattern":"no available mac found","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/DotNetCore.CAP/Internal/ISnowflakeId.Default.cs","lineNumber":162,"sourceCode":"        }\n        catch\n        {\n            return GenerateRandomWorkerId(maxWorkerId);\n        }\n    }\n\n    /// <summary>\n    /// use lowest 10 bit of available MAC as workerId\n    /// </summary>\n    /// <returns>workerId</returns>\n    private static long GenerateWorkerIdBaseOnMac()\n    {\n        NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();\n        //exclude virtual and Loopback\n        var firstUpInterface = nics.OrderByDescending(x => x.Speed).FirstOrDefault(x =>\n            !x.Description.Contains(\"Virtual\") && x.NetworkInterfaceType != NetworkInterfaceType.Loopback &&\n            x.OperationalStatus == OperationalStatus.Up);\n        if (firstUpInterface == null) throw new Exception(\"no available mac found\");\n        var address = firstUpInterface.GetPhysicalAddress();\n        var mac = address.GetAddressBytes();\n\n        return ((mac[4] & 0B11) << 8) | (mac[5] & 0xFF);\n    }\n\n    /// <summary>\n    /// randomly generate one as workerId\n    /// </summary>\n    /// <returns></returns>\n    private static long GenerateRandomWorkerId(int maxWorkerId)\n    {\n        return new Random().Next(maxWorkerId + 1);\n    }\n}","sourceCodeStart":144,"sourceCodeEnd":177,"githubUrl":"https://github.com/dotnetcore/CAP/blob/e52b8508e54cdb7a9ce7f9fec03d9ea8ad2710fb/src/DotNetCore.CAP/Internal/ISnowflakeId.Default.cs#L144-L177","documentation":"A hardware-environment guard in SnowflakeId's MAC-based worker-id generation: GenerateWorkerIdBaseOnMac iterates network interfaces excluding virtual and loopback adapters, and when none qualifies (e.g. containers/VMs exposing only virtual NICs, or no network hardware) the method reports that no usable MAC address exists to derive a worker id from. It is raised inside worker-id auto-detection, not during message flow.","triggerScenarios":"Thrown at src/DotNetCore.CAP/Internal/ISnowflakeId.Default.cs:162 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set SnowflakeIdOptions.WorkerId explicitly to a stable value in the 0–1023 range so MAC detection is never needed.","In containerized environments where only virtual adapters exist, prefer explicit configuration or an external id allocator over MAC-based auto-detection."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e52b8508e54cdb7a9ce7f9fec03d9ea8ad2710fb","analyzedAt":"2026-09-14T14:46:34.677Z","contentChangedAt":"2026-09-14T14:46:34.677Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}