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