File 2651-snmp-Add-extra-socket-options-option.patch of Package erlang

From 2bb67cbe361efbb1acc52fbcac83d8e809bea541 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Mon, 23 Sep 2019 12:14:39 +0200
Subject: [PATCH 1/4] [snmp] Add 'extra socket options' option

Make it possible for the user to add extra socket
options used when creating the socket.
These are used 'as is', with only a check that its
actually a list.

OTP-16092
---
 lib/snmp/src/agent/snmpa_net_if.erl   | 13 ++++++++++++-
 lib/snmp/src/manager/snmpm_net_if.erl | 10 +++++++++-
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/lib/snmp/src/agent/snmpa_net_if.erl b/lib/snmp/src/agent/snmpa_net_if.erl
index afed4482d2..58c01146be 100644
--- a/lib/snmp/src/agent/snmpa_net_if.erl
+++ b/lib/snmp/src/agent/snmpa_net_if.erl
@@ -1456,7 +1456,15 @@ socket_opts(Domain, {IpAddr, IpPort}, Opts) ->
 		 [];
 	     Sz ->
 		 [{sndbuf, Sz}]
-	 end].
+	 end] ++
+        case get_extra_sock_opts(Opts) of
+            ESO when is_list(ESO) ->
+                ESO;
+            BadESO ->
+                error_msg("Invalid 'extra socket options' (=> ignored):"
+                          "~n   ~p", [BadESO]),
+                []
+        end.
 
 
 %% ----------------------------------------------------------------
@@ -1510,6 +1518,9 @@ get_no_reuse_address(Opts) ->
 get_bind_to_ip_address(Opts) ->
     snmp_misc:get_option(bind_to, Opts, false).
 
+get_extra_sock_opts(Opts) ->
+    snmp_misc:get_option(extra_sock_opts, Opts, []).
+
 
 %% ----------------------------------------------------------------
 
diff --git a/lib/snmp/src/manager/snmpm_net_if.erl b/lib/snmp/src/manager/snmpm_net_if.erl
index 184f782860..c2e5c6d2f0 100644
--- a/lib/snmp/src/manager/snmpm_net_if.erl
+++ b/lib/snmp/src/manager/snmpm_net_if.erl
@@ -372,7 +372,15 @@ common_socket_opts(Opts) ->
 		 [{reuseaddr, true}];
 	     _ ->
 		 []
-	 end].
+	 end ++
+         case get_opt(Opts, extra_sock_opts, []) of
+             ESO when is_list(ESO) ->
+                 ESO;
+             BadESO ->
+                 error_msg("Invalid 'extra socket options' (=> ignored):"
+                           "~n   ~p", [BadESO]),
+                 []
+         end].
 
 
 create_filter(Opts) when is_list(Opts) ->
-- 
2.16.4

openSUSE Build Service is sponsored by