File 0800-erts-kernel-Fized-admin-status-encoding.patch of Package erlang

From 4f0a5742c79e07915b518b8e520acd2ee4b613b2 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Tue, 19 Nov 2024 17:04:38 +0100
Subject: [PATCH 2/2] [erts,kernel] Fized admin status encoding

OTP-19366
---
 erts/emulator/nifs/common/prim_net_nif.c | 26 ++----------
 lib/kernel/src/net.erl                   | 50 +++++++++++++-----------
 2 files changed, 32 insertions(+), 44 deletions(-)

diff --git a/erts/emulator/nifs/common/prim_net_nif.c b/erts/emulator/nifs/common/prim_net_nif.c
index 8655c561e3..10c487ae8c 100644
--- a/erts/emulator/nifs/common/prim_net_nif.c
+++ b/erts/emulator/nifs/common/prim_net_nif.c
@@ -3334,28 +3334,10 @@ ERL_NIF_TERM encode_if_admin_status(ErlNifEnv* env,
 {
     ERL_NIF_TERM estatus;
 
-    switch (status) {
-    case IF_OPER_STATUS_NON_OPERATIONAL:
-        estatus = atom_non_operational;
-        break;
-    case IF_OPER_STATUS_UNREACHABLE:
-        estatus = atom_unreachable;
-        break;
-    case IF_OPER_STATUS_DISCONNECTED:
-        estatus = atom_disconnected;
-        break;
-    case IF_OPER_STATUS_CONNECTING:
-        estatus = esock_atom_connecting;
-        break;
-    case IF_OPER_STATUS_CONNECTED:
-        estatus = esock_atom_connected;
-        break;
-    case IF_OPER_STATUS_OPERATIONAL:
-        estatus = atom_operational;
-        break;
-    default:
-        estatus = MKUI(env, status);
-        break;
+    if (status) {
+        estatus = atom_enabled;
+    } else {
+        estatus = atom_disabled;
     }
 
     return estatus;
diff --git a/lib/kernel/src/net.erl b/lib/kernel/src/net.erl
index 1da565ac69..7901b88e5c 100644
--- a/lib/kernel/src/net.erl
+++ b/lib/kernel/src/net.erl
@@ -443,7 +443,7 @@ win_getifaddrs_iat3(Name,
                      bcast_addr           := _BCastAddr} = _IpAddr,
                    #{type                 := Type,
                      admin_status         := AStatus,
-                     internal_oper_status := _OStatus,
+                     internal_oper_status := OStatus,
                      phys_addr            := PhysAddr,
                      index                := Idx} = _IfEntry) ->
     Flags1 = case Type of
@@ -455,16 +455,19 @@ win_getifaddrs_iat3(Name,
                      []
              end,
     Flags2 = case AStatus of
-                  non_operational ->
-                     [];
-                connecting ->
-                     [up, pointtopoint];
-                 connected ->
-                     [up, runnning, pointtopoint];
-                 operational ->
-                     [up, running];
-                 _ ->
-                     [up]
+                 enabled ->
+                     case OStatus of
+                         connecting ->
+                             [up, pointtopoint];
+                         connected ->
+                             [up, runnning, pointtopoint];
+                         operational ->
+                             [up, running];
+                         _ ->
+                             [up]
+                     end;
+                 disabled ->
+                     []
              end,
     Flags  = lists:sort(Flags1 ++ Flags2),
     HaType = type2hatype(Type),
@@ -540,7 +543,7 @@ win_getifaddrs_aa3(Name,
                      prefixes             := Prefixes} = _AdAddrs,
                    #{type                 := Type,
                      admin_status         := AStatus,
-                     internal_oper_status := _OStatus,
+                     internal_oper_status := OStatus,
                      phys_addr            := PhysAddr,
                      index                := Idx} = _IfEntry) ->
     Flags1 =
@@ -558,16 +561,19 @@ win_getifaddrs_aa3(Name,
                      []
              end,
     Flags3 = case AStatus of
-                 non_operational ->
-                     [];
-                 connecting ->
-                     [up, pointtopoint];
-                 connected ->
-                     [up, runnning, pointtopoint];
-                 operational ->
-                     [up, running];
-                 _ ->
-                     [up]
+                 enabled ->
+                     case OStatus of
+                         connecting ->
+                             [up, pointtopoint];
+                         connected ->
+                             [up, runnning, pointtopoint];
+                         operational ->
+                             [up, running];
+                         _ ->
+                             [up]
+                     end;
+                 disabled ->
+                     []
              end,
     Flags  = lists:sort(Flags1 ++ Flags2 ++ Flags3),
     HaType = type2hatype(Type),
-- 
2.43.0

openSUSE Build Service is sponsored by