From 720ca124f7c74fd7ca103481958500d37fe26a82 Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Mon, 26 Aug 2024 10:08:44 +0200 Subject: [PATCH 1/7] [esock] Spelling of SIOCGENADDR OTP-19209 (OTP-19132) --- erts/emulator/nifs/unix/unix_socket_syncio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erts/emulator/nifs/unix/unix_socket_syncio.c b/erts/emulator/nifs/unix/unix_socket_syncio.c index 1700be833f5a..0954ef801dd1 100644 --- a/erts/emulator/nifs/unix/unix_socket_syncio.c +++ b/erts/emulator/nifs/unix/unix_socket_syncio.c @@ -4546,7 +4546,7 @@ IOCTL_GET_FUNCS2 /* *** essio_ioctl_gifenaddr *** */ #if defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR) #define IOCTL_GIFENADDR_FUNC3_DECL \ - IOCTL_GET_REQUEST3_DECL(gifenaddr, SIOCGENENADDR, hwaddr, &ifreq.ifr_enaddr) + IOCTL_GET_REQUEST3_DECL(gifenaddr, SIOCGENADDR, hwaddr, &ifreq.ifr_enaddr) #else #define IOCTL_GIFENADDR_FUNC3_DECL #endif From e53f54a6d512db390c04be89dca0ab33b07e1c8e Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Tue, 27 Aug 2024 18:25:41 +0200 Subject: [PATCH 2/7] [esock] More spelling of SIOCGENADDR OTP-19209 (OTP-19132) --- erts/emulator/nifs/unix/unix_socket_syncio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erts/emulator/nifs/unix/unix_socket_syncio.c b/erts/emulator/nifs/unix/unix_socket_syncio.c index 0954ef801dd1..25589d375596 100644 --- a/erts/emulator/nifs/unix/unix_socket_syncio.c +++ b/erts/emulator/nifs/unix/unix_socket_syncio.c @@ -5093,7 +5093,7 @@ ERL_NIF_TERM encode_ioctl_ifrmap(ErlNifEnv* env, #if (defined(SIOCGIFHWADDR) && defined(ESOCK_USE_HWADDR)) || \ - (defined(SIOCGIFENADDR) && defined(ESOCK_USE_ENADDR)) + (defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR)) static ERL_NIF_TERM encode_ioctl_hwaddr(ErlNifEnv* env, ESockDescriptor* descP, From b46ce76934e1c1d5e42fed7a70582081ea131969 Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Wed, 28 Aug 2024 08:46:03 +0200 Subject: [PATCH 3/7] [esock] More spelling of SIOCGENADDR OTP-19209 (OTP-19132) --- erts/emulator/nifs/unix/unix_socket_syncio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erts/emulator/nifs/unix/unix_socket_syncio.c b/erts/emulator/nifs/unix/unix_socket_syncio.c index 25589d375596..a87f925db60f 100644 --- a/erts/emulator/nifs/unix/unix_socket_syncio.c +++ b/erts/emulator/nifs/unix/unix_socket_syncio.c @@ -651,7 +651,7 @@ static ERL_NIF_TERM encode_ioctl_ifrmap(ErlNifEnv* env, struct ifmap* mapP); #endif #if (defined(SIOCGIFHWADDR) && defined(ESOCK_USE_HWADDR)) || \ - (defined(SIOCGIFENADDR) && defined(ESOCK_USE_ENADDR)) + (defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR)) static ERL_NIF_TERM encode_ioctl_hwaddr(ErlNifEnv* env, ESockDescriptor* descP, struct sockaddr* addrP); From 9ad07bedd9ef17339778ef260354f5799d003d5f Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Fri, 30 Aug 2024 12:44:21 +0200 Subject: [PATCH 4/7] [esock] Comment out the 'enaddr' stuff OTP-19209 (OTP-19132) --- erts/emulator/nifs/common/prim_socket_nif.c | 4 +- erts/emulator/nifs/unix/unix_socket_syncio.c | 55 +++++++++++++++----- 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/erts/emulator/nifs/common/prim_socket_nif.c b/erts/emulator/nifs/common/prim_socket_nif.c index 80d7072c9ae3..eb9d941b13bd 100644 --- a/erts/emulator/nifs/common/prim_socket_nif.c +++ b/erts/emulator/nifs/common/prim_socket_nif.c @@ -2361,7 +2361,7 @@ ERL_NIF_TERM esock_atom_socket_tag; // This has a "special" name ('$socket') LOCAL_ATOM_DECL(exclude); \ LOCAL_ATOM_DECL(false); \ LOCAL_ATOM_DECL(frag_needed); \ - LOCAL_ATOM_DECL(genhwaddr); \ + LOCAL_ATOM_DECL(genaddr); \ LOCAL_ATOM_DECL(gifaddr); \ LOCAL_ATOM_DECL(gifbrdaddr); \ LOCAL_ATOM_DECL(gifconf); \ @@ -4936,8 +4936,10 @@ ERL_NIF_TERM esock_supports_ioctl_requests(ErlNifEnv* env) #if defined(SIOCGIFHWADDR) && defined(ESOCK_USE_HWADDR) requests = MKC(env, MKT2(env, atom_gifhwaddr, MKUL(env, SIOCGIFHWADDR)), requests); + /* #elif defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR) requests = MKC(env, MKT2(env, atom_genaddr, MKUL(env, SIOCGENADDR)), requests); + */ #endif #if defined(SIOCGIFMAP) && defined(ESOCK_USE_IFMAP) diff --git a/erts/emulator/nifs/unix/unix_socket_syncio.c b/erts/emulator/nifs/unix/unix_socket_syncio.c index a87f925db60f..7c305b03b5d0 100644 --- a/erts/emulator/nifs/unix/unix_socket_syncio.c +++ b/erts/emulator/nifs/unix/unix_socket_syncio.c @@ -650,12 +650,18 @@ static ERL_NIF_TERM encode_ioctl_ifrmap(ErlNifEnv* env, ESockDescriptor* descP, struct ifmap* mapP); #endif -#if (defined(SIOCGIFHWADDR) && defined(ESOCK_USE_HWADDR)) || \ - (defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR)) +#if (defined(SIOCGIFHWADDR) && defined(ESOCK_USE_HWADDR)) static ERL_NIF_TERM encode_ioctl_hwaddr(ErlNifEnv* env, ESockDescriptor* descP, struct sockaddr* addrP); #endif +/* +#if (defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR)) +static ERL_NIF_TERM encode_ioctl_enaddr(ErlNifEnv* env, + ESockDescriptor* descP, + char* addrP); +#endif +*/ static ERL_NIF_TERM encode_ioctl_ifraddr(ErlNifEnv* env, ESockDescriptor* descP, struct sockaddr* addrP); @@ -4110,6 +4116,7 @@ ERL_NIF_TERM essio_ioctl2(ErlNifEnv* env, * gifnetmask name string * gifmtu name string * gifhwaddr name string + * genaddr name string * gifmap name string * giftxqlen name string */ @@ -4177,11 +4184,13 @@ ERL_NIF_TERM essio_ioctl3(ErlNifEnv* env, break; #endif -#if defined(SIOCGENHWADDR) && defined(ESOCK_USE_ENADDR) - case SIOCGIFENADDR: - return essio_ioctl_gifenaddr(env, descP, arg); + /* +#if defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR) + case SIOCGENADDR: + return essio_ioctl_genaddr(env, descP, arg); break; #endif + */ #if defined(SIOCGIFMAP) && defined(ESOCK_USE_IFMAP) case SIOCGIFMAP: @@ -4543,13 +4552,15 @@ IOCTL_GET_FUNCS2 #define IOCTL_GIFHWADDR_FUNC3_DECL #endif -/* *** essio_ioctl_gifenaddr *** */ +/* *** essio_ioctl_genaddr *** */ +/* #if defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR) -#define IOCTL_GIFENADDR_FUNC3_DECL \ - IOCTL_GET_REQUEST3_DECL(gifenaddr, SIOCGENADDR, hwaddr, &ifreq.ifr_enaddr) +#define IOCTL_GENADDR_FUNC3_DECL \ + IOCTL_GET_REQUEST3_DECL(genaddr, SIOCGENADDR, enaddr, ifreq.ifr_enaddr) #else -#define IOCTL_GIFENADDR_FUNC3_DECL +#define IOCTL_GENADDR_FUNC3_DECL #endif +*/ /* *** essio_ioctl_gifmap *** */ #if defined(SIOCGIFMAP) && defined(ESOCK_USE_IFMAP) @@ -4576,7 +4587,6 @@ IOCTL_GET_FUNCS2 IOCTL_GIFNETMASK_FUNC3_DECL \ IOCTL_GIFMTU_FUNC3_DECL \ IOCTL_GIFHWADDR_FUNC3_DECL \ - IOCTL_GIFENADDR_FUNC3_DECL \ IOCTL_GIFMAP_FUNC3_DECL \ IOCTL_GIFTXQLEN_FUNC3_DECL @@ -5092,8 +5102,7 @@ ERL_NIF_TERM encode_ioctl_ifrmap(ErlNifEnv* env, #endif -#if (defined(SIOCGIFHWADDR) && defined(ESOCK_USE_HWADDR)) || \ - (defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR)) +#if (defined(SIOCGIFHWADDR) && defined(ESOCK_USE_HWADDR)) static ERL_NIF_TERM encode_ioctl_hwaddr(ErlNifEnv* env, ESockDescriptor* descP, @@ -5113,6 +5122,28 @@ ERL_NIF_TERM encode_ioctl_hwaddr(ErlNifEnv* env, #endif +/* +#if (defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR)) +static +ERL_NIF_TERM encode_ioctl_enaddr(ErlNifEnv* env, + ESockDescriptor* descP, + char* enaddr) +{ + ERL_NIF_TERM eenaddr; + // SOCKLEN_T len = sizeof(struct ifreq.ifr_enaddr); + + eenaddr = esock_make_new_binary(env, enaddr, 6); + + SSDBG( descP, ("UNIX-ESSIO", "encode_ioctl_enaddr -> done with" + "\r\n Gen Addr: %T" + "\r\n", eenaddr) ); + + return esock_make_ok2(env, eenaddr);; +} +#endif +*/ + + static ERL_NIF_TERM encode_ioctl_ifraddr(ErlNifEnv* env, ESockDescriptor* descP, From 23a5cdceae5cf281743296080e77f693cc9428e1 Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Fri, 30 Aug 2024 15:34:28 +0200 Subject: [PATCH 5/7] [esock] Cleanup OTP-19209 (OTP-19132) --- erts/emulator/nifs/common/prim_socket_nif.c | 2 -- erts/emulator/nifs/unix/unix_socket_syncio.c | 23 +++++++------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/erts/emulator/nifs/common/prim_socket_nif.c b/erts/emulator/nifs/common/prim_socket_nif.c index eb9d941b13bd..74d652d79426 100644 --- a/erts/emulator/nifs/common/prim_socket_nif.c +++ b/erts/emulator/nifs/common/prim_socket_nif.c @@ -4936,10 +4936,8 @@ ERL_NIF_TERM esock_supports_ioctl_requests(ErlNifEnv* env) #if defined(SIOCGIFHWADDR) && defined(ESOCK_USE_HWADDR) requests = MKC(env, MKT2(env, atom_gifhwaddr, MKUL(env, SIOCGIFHWADDR)), requests); - /* #elif defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR) requests = MKC(env, MKT2(env, atom_genaddr, MKUL(env, SIOCGENADDR)), requests); - */ #endif #if defined(SIOCGIFMAP) && defined(ESOCK_USE_IFMAP) diff --git a/erts/emulator/nifs/unix/unix_socket_syncio.c b/erts/emulator/nifs/unix/unix_socket_syncio.c index 7c305b03b5d0..e83aef62e983 100644 --- a/erts/emulator/nifs/unix/unix_socket_syncio.c +++ b/erts/emulator/nifs/unix/unix_socket_syncio.c @@ -518,10 +518,10 @@ static ERL_NIF_TERM essio_ioctl_gifname(ErlNifEnv* env, #endif /* esock_ioctl_gifenaddr */ -#if defined(SIOCGENHWADDR) && defined(ESOCK_USE_ENADDR) -#define IOCTL_GIFENADDR_FUNC3_DEF IOCTL_GET_FUNC3_DEF(gifenaddr) +#if defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR) +#define IOCTL_GENADDR_FUNC3_DEF IOCTL_GET_FUNC3_DEF(genaddr) #else -#define IOCTL_GIFENADDR_FUNC3_DEF +#define IOCTL_GENADDR_FUNC3_DEF #endif /* esock_ioctl_gifmap */ @@ -547,7 +547,7 @@ static ERL_NIF_TERM essio_ioctl_gifname(ErlNifEnv* env, IOCTL_GIFNETMASK_FUNC3_DEF; \ IOCTL_GIFMTU_FUNC3_DEF; \ IOCTL_GIFHWADDR_FUNC3_DEF; \ - IOCTL_GIFENADDR_FUNC3_DEF; \ + IOCTL_GENADDR_FUNC3_DEF; \ IOCTL_GIFMAP_FUNC3_DEF; \ IOCTL_GIFTXQLEN_FUNC3_DEF; #define IOCTL_GET_FUNC3_DEF(F) \ @@ -655,13 +655,11 @@ static ERL_NIF_TERM encode_ioctl_hwaddr(ErlNifEnv* env, ESockDescriptor* descP, struct sockaddr* addrP); #endif -/* #if (defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR)) static ERL_NIF_TERM encode_ioctl_enaddr(ErlNifEnv* env, ESockDescriptor* descP, char* addrP); #endif -*/ static ERL_NIF_TERM encode_ioctl_ifraddr(ErlNifEnv* env, ESockDescriptor* descP, struct sockaddr* addrP); @@ -4184,13 +4182,11 @@ ERL_NIF_TERM essio_ioctl3(ErlNifEnv* env, break; #endif - /* #if defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR) case SIOCGENADDR: return essio_ioctl_genaddr(env, descP, arg); break; #endif - */ #if defined(SIOCGIFMAP) && defined(ESOCK_USE_IFMAP) case SIOCGIFMAP: @@ -4553,14 +4549,12 @@ IOCTL_GET_FUNCS2 #endif /* *** essio_ioctl_genaddr *** */ -/* #if defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR) #define IOCTL_GENADDR_FUNC3_DECL \ IOCTL_GET_REQUEST3_DECL(genaddr, SIOCGENADDR, enaddr, ifreq.ifr_enaddr) #else #define IOCTL_GENADDR_FUNC3_DECL #endif -*/ /* *** essio_ioctl_gifmap *** */ #if defined(SIOCGIFMAP) && defined(ESOCK_USE_IFMAP) @@ -4587,6 +4581,7 @@ IOCTL_GET_FUNCS2 IOCTL_GIFNETMASK_FUNC3_DECL \ IOCTL_GIFMTU_FUNC3_DECL \ IOCTL_GIFHWADDR_FUNC3_DECL \ + IOCTL_GENADDR_FUNC3_DECL \ IOCTL_GIFMAP_FUNC3_DECL \ IOCTL_GIFTXQLEN_FUNC3_DECL @@ -5122,7 +5117,6 @@ ERL_NIF_TERM encode_ioctl_hwaddr(ErlNifEnv* env, #endif -/* #if (defined(SIOCGENADDR) && defined(ESOCK_USE_ENADDR)) static ERL_NIF_TERM encode_ioctl_enaddr(ErlNifEnv* env, @@ -5130,9 +5124,10 @@ ERL_NIF_TERM encode_ioctl_enaddr(ErlNifEnv* env, char* enaddr) { ERL_NIF_TERM eenaddr; - // SOCKLEN_T len = sizeof(struct ifreq.ifr_enaddr); + struct ifreq foo; + SOCKLEN_T len = sizeof(foo.ifr_enaddr); - eenaddr = esock_make_new_binary(env, enaddr, 6); + eenaddr = esock_make_new_binary(env, enaddr, len); SSDBG( descP, ("UNIX-ESSIO", "encode_ioctl_enaddr -> done with" "\r\n Gen Addr: %T" @@ -5141,8 +5136,6 @@ ERL_NIF_TERM encode_ioctl_enaddr(ErlNifEnv* env, return esock_make_ok2(env, eenaddr);; } #endif -*/ - static ERL_NIF_TERM encode_ioctl_ifraddr(ErlNifEnv* env, From bb991e3f1bc501e570c89787de22e771d40d87c1 Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Fri, 30 Aug 2024 19:17:18 +0200 Subject: [PATCH 6/7] [esock] Added some (IFF) flags OTP-19209 (OTP-19132) --- erts/emulator/nifs/common/prim_socket_nif.c | 27 ++++++++++++++++++--- erts/emulator/nifs/common/socket_int.h | 4 ++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/erts/emulator/nifs/common/prim_socket_nif.c b/erts/emulator/nifs/common/prim_socket_nif.c index 74d652d79426..6db99c5e6012 100644 --- a/erts/emulator/nifs/common/prim_socket_nif.c +++ b/erts/emulator/nifs/common/prim_socket_nif.c @@ -827,11 +827,29 @@ const ESockFlag esock_ioctl_flags[] = { // FreeBSD, ... { #ifdef IFF_NOGROUP - IFF_NOGROUP, + IFF_NOGROUP, #else - 0, + 0, +#endif + &esock_atom_nogroup}, + + // Solaris, ... + { +#ifdef IFF_DHCPRUNNING + IFF_DHCPRUNNING, +#else + 0, #endif - &esock_atom_nogroup} + &esock_atom_dhcprunning}, + + // Solaris, ... + { +#ifdef IFF_PRIVATE + IFF_PRIVATE, +#else + 0, +#endif + &esock_atom_private} }; const int esock_ioctl_flags_length = NUM(esock_ioctl_flags); @@ -2007,6 +2025,7 @@ static const struct in6_addr in6addr_loopback = GLOBAL_ATOM_DECL(default_send_params); \ GLOBAL_ATOM_DECL(delayed_ack_time); \ GLOBAL_ATOM_DECL(dgram); \ + GLOBAL_ATOM_DECL(dhcprunning); \ GLOBAL_ATOM_DECL(disable_fragments); \ GLOBAL_ATOM_DECL(dlci); \ GLOBAL_ATOM_DECL(dma); \ @@ -2182,6 +2201,7 @@ static const struct in6_addr in6addr_loopback = GLOBAL_ATOM_DECL(primary_addr); \ GLOBAL_ATOM_DECL(prim_file); \ GLOBAL_ATOM_DECL(priority); \ + GLOBAL_ATOM_DECL(private); \ GLOBAL_ATOM_DECL(promisc); \ GLOBAL_ATOM_DECL(pronet); \ GLOBAL_ATOM_DECL(protocol); \ @@ -4881,6 +4901,7 @@ ERL_NIF_TERM esock_supports_ioctl_requests(ErlNifEnv* env) requests = MKEL(env); + /* --- GET REQUESTS --- */ #if defined(SIOCGIFCONF) requests = MKC(env, MKT2(env, atom_gifconf, MKUL(env, SIOCGIFCONF)), requests); diff --git a/erts/emulator/nifs/common/socket_int.h b/erts/emulator/nifs/common/socket_int.h index c88efdd02d0a..46f4573086d4 100644 --- a/erts/emulator/nifs/common/socket_int.h +++ b/erts/emulator/nifs/common/socket_int.h @@ -281,6 +281,7 @@ typedef long ssize_t; GLOBAL_ATOM_DEF(default_send_params); \ GLOBAL_ATOM_DEF(delayed_ack_time); \ GLOBAL_ATOM_DEF(dgram); \ + GLOBAL_ATOM_DEF(dhcprunning); \ GLOBAL_ATOM_DEF(disable_fragments); \ GLOBAL_ATOM_DEF(dlci); \ GLOBAL_ATOM_DEF(dma); \ @@ -454,8 +455,9 @@ typedef long ssize_t; GLOBAL_ATOM_DEF(portrange); \ GLOBAL_ATOM_DEF(portsel); \ GLOBAL_ATOM_DEF(primary_addr); \ - GLOBAL_ATOM_DEF(priority); \ GLOBAL_ATOM_DEF(prim_file); \ + GLOBAL_ATOM_DEF(priority); \ + GLOBAL_ATOM_DEF(private); \ GLOBAL_ATOM_DEF(promisc); \ GLOBAL_ATOM_DEF(pronet); \ GLOBAL_ATOM_DEF(protocol); \ From dba30727e9f640ea1807ab48b5fa47b72d55c2d4 Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Fri, 30 Aug 2024 19:26:28 +0200 Subject: [PATCH 7/7] [kernel] Fixed ioctl guards and specs OTP-19209 (OTP-19132) --- lib/kernel/src/socket.erl | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/kernel/src/socket.erl b/lib/kernel/src/socket.erl index 265e0697fdfd..c75dd2d68f30 100644 --- a/lib/kernel/src/socket.erl +++ b/lib/kernel/src/socket.erl @@ -6226,6 +6226,12 @@ ioctl(Socket, GetRequest) -> %% Name :: string(), %% HWAddr :: sockaddr(), %% Reason :: posix() | 'closed'; +%% (Socket, GetRequest, Name) -> {'ok', GenAddr} | {'error', Reason} when +%% Socket :: socket(), +%% GetRequest :: 'genaddr', +%% Name :: string(), +%% GenAddr :: binary(), +%% Reason :: posix() | 'closed'; %% (Socket, GetRequest, Name) -> {'ok', MTU} | {'error', Reason} when %% Socket :: socket(), %% GetRequest :: 'gifmtu', @@ -6291,10 +6297,10 @@ Also, see the note above. Result; the network mask of the interface, `t:sockaddr/0`. -- **`gifhwaddr` | `gifenaddr`** - Get the hardware address for the interface with the +- **`gifhwaddr` | `genaddr`** - Get the hardware address for the interface with the specified name. - Result; the hardware address of the interface, `t:sockaddr/0`. + Result; the hardware address of the interface, `t:sockaddr/0` | `t:binary/0`. The family field contains the 'ARPHRD' device type (or an integer). - **`gifmtu`** - Get the MTU (Maximum Transfer Unit) for the interface with the @@ -6372,7 +6378,7 @@ the `Value` for the request parameter *(since OTP 26.1)*. Socket :: socket(), GetRequest :: 'gifname' | 'gifindex' | 'gifaddr' | 'gifdstaddr' | 'gifbrdaddr' | - 'gifnetmask' | 'gifhwaddr' | 'gifhwaddr' | + 'gifnetmask' | 'gifhwaddr' | 'genaddr' | 'gifmtu' | 'giftxqlen' | 'gifflags' | 'tcp_info', NameOrIndex :: string() | integer(), @@ -6413,7 +6419,7 @@ ioctl(?socket(SockRef), gifmtu = GetRequest, Name) ioctl(?socket(SockRef), gifhwaddr = GetRequest, Name) when is_list(Name) -> prim_socket:ioctl(SockRef, GetRequest, Name); -ioctl(?socket(SockRef), gifenaddr = GetRequest, Name) +ioctl(?socket(SockRef), genaddr = GetRequest, Name) when is_list(Name) -> prim_socket:ioctl(SockRef, GetRequest, Name); ioctl(?socket(SockRef), giftxqlen = GetRequest, Name)