Hello community,

here is the log from the commit of package wicked for openSUSE:Factory checked 
in at 2020-03-06 21:26:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wicked (Old)
 and      /work/SRC/openSUSE:Factory/.wicked.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wicked"

Fri Mar  6 21:26:02 2020 rev:81 rq:781526 version:0.6.63

Changes:
--------
--- /work/SRC/openSUSE:Factory/wicked/wicked.changes    2020-02-29 
21:23:23.818383806 +0100
+++ /work/SRC/openSUSE:Factory/.wicked.new.26092/wicked.changes 2020-03-06 
21:26:21.193517588 +0100
@@ -1,0 +2,7 @@
+Wed Mar  4 13:24:18 UTC 2020 - m...@suse.com
+
+- version 0.6.63
+- spec: fix old libwicked package provides/obsoletes (bsc#1165180)
+- ipv6: support to apply stable secret ifsysctl (jsc#SLE-6960)
+
+-------------------------------------------------------------------

Old:
----
  wicked-0.6.62.tar.bz2

New:
----
  wicked-0.6.63.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ wicked.spec ++++++
--- /var/tmp/diff_new_pack.87WMJG/_old  2020-03-06 21:26:21.773517909 +0100
+++ /var/tmp/diff_new_pack.87WMJG/_new  2020-03-06 21:26:21.777517911 +0100
@@ -18,7 +18,7 @@
 
 %define                release_prefix  %{?snapshot:%{snapshot}}%{!?snapshot:0}
 Name:           wicked
-Version:        0.6.62
+Version:        0.6.63
 Release:        %{release_prefix}.0.0
 Summary:        Network configuration infrastructure
 License:        GPL-2.0-or-later
@@ -39,8 +39,13 @@
 BuildRequires:  automake
 BuildRequires:  libtool
 BuildRequires:  make
-Provides:       libwicked-0_6_62 = %{version}
-Obsoletes:      libwicked-0-6 <= %{version}
+%if %{with wicked_devel}
+# libwicked-%{version}.so shlib package compatible match for wicked-devel
+Provides:       libwicked-0_6_63 = %{version}-%{release}
+%endif
+# uninstall obsolete libwicked-0-6 (libwicked-0.so.6, wicked < 0.6.60)
+Provides:       libwicked-0-6 = %{version}
+Obsoletes:      libwicked-0-6 < %{version}
 
 %if 0%{?suse_version} >= 1500
 %bcond_without  rfc4361_cid
@@ -155,7 +160,7 @@
 Group:          Development/Libraries/C and C++
 Requires:       dbus-1-devel
 Requires:       libnl3-devel
-Requires:       libwicked-0_6_62 = %{version}
+Requires:       libwicked-0_6_63 = %{version}-%{release}
 
 %description devel
 Wicked is a network configuration infrastructure incorporating a number

++++++ wicked-0.6.62.tar.bz2 -> wicked-0.6.63.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/ChangeLog new/wicked-0.6.63/ChangeLog
--- old/wicked-0.6.62/ChangeLog 2020-02-26 21:49:21.000000000 +0100
+++ new/wicked-0.6.63/ChangeLog 2020-03-04 14:16:36.000000000 +0100
@@ -1,3 +1,66 @@
+commit cc0258993e6624a4ef552af0afe3c74fe68b7f48
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Wed Mar 4 13:50:18 2020 +0100
+
+    version 0.6.63
+
+commit 866826fb7f6dfb456305eaf558f4296bc17cdb5e
+Merge: fe6ac264 c2e3f2ae
+Author: Marius Tomaschewski <m...@suse.com>
+Date:   Wed Mar 4 13:44:19 2020 +0100
+
+    Merge pull request #831 from mtomaschewski/bug-1165180-0.6.60
+    
+    spec: fix old libwicked package provides/obsoletes (bsc#1165180)
+
+commit c2e3f2aef10fb45caa5ed46009d51e18bd88ec12
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Wed Mar 4 10:47:48 2020 +0100
+
+    spec: fix old libwicked package provides/obsoletes (bsc#1165180)
+
+commit a69a119b83b1d94bd9d868b83f175eefefa7e2c6
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Fri Feb 28 12:58:09 2020 +0100
+
+    ifsysctl: fix arp_notify,accept_redirects,use_tempaddr
+
+commit 33a9744ba2bc54101bb4a8841d902c19fd5caac2
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Fri Feb 28 12:20:35 2020 +0100
+
+    ifsysctl: parse addr_gen_mode and stable_secret
+
+commit a83515b2f6e552792f2f6afba34998ad050f72e4
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Fri Feb 28 12:18:03 2020 +0100
+
+    schema: add addr_gen_mode and stable_secret to model
+
+commit 94b1d26318d06069843dbf299b8acd516badcd98
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Fri Feb 28 12:07:29 2020 +0100
+
+    ipv6: set addr_gen_mode and stable_secret in kernel
+
+commit 5468c078071561c46550827609bc091b13d4d3f2
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Fri Feb 28 11:55:12 2020 +0100
+
+    ipv6: map devconf to sysctl names as in kernel 5.5.6
+
+commit cb2696ca7144116875154b22af91ba9905bd5c3b
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Fri Feb 28 11:31:22 2020 +0100
+
+    ipv6: add addr_gen_mode stable_secret protocol variables
+
+commit 5d6c6aefb2aac33055dd1f803a0768ebd74e1e8d
+Author: Marius Tomaschewski <m...@suse.de>
+Date:   Fri Feb 28 01:39:36 2020 +0100
+
+    sysfs: add utilities to get/set ipv6 address sysctl
+
 commit d539bba071c5837bec94a0cdf1c44060ad643e1e
 Author: Marius Tomaschewski <m...@suse.de>
 Date:   Wed Feb 26 17:16:08 2020 +0100
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/VERSION new/wicked-0.6.63/VERSION
--- old/wicked-0.6.62/VERSION   2020-02-26 21:44:57.000000000 +0100
+++ new/wicked-0.6.63/VERSION   2020-03-04 14:02:52.000000000 +0100
@@ -1 +1 @@
-0.6.62
+0.6.63
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/client/compat.c 
new/wicked-0.6.63/client/compat.c
--- old/wicked-0.6.62/client/compat.c   2020-02-26 21:44:57.000000000 +0100
+++ new/wicked-0.6.63/client/compat.c   2020-03-04 13:49:38.000000000 +0100
@@ -2443,6 +2443,7 @@
 __ni_compat_generate_ipv6_devconf(xml_node_t *ifnode, const ni_ipv6_devinfo_t 
*ipv6)
 {
        xml_node_t *node;
+       const char *value;
 
        if (!ipv6)
                return TRUE;
@@ -2472,6 +2473,15 @@
        __ni_compat_optional_tristate("accept-redirects", node,
                                                ipv6->conf.accept_redirects);
 
+       if ((value = 
ni_ipv6_devconf_addr_gen_mode_to_name(ipv6->conf.addr_gen_mode)))
+               xml_node_new_element("addr-gen-mode", node, value);
+
+       if (!IN6_IS_ADDR_UNSPECIFIED(&ipv6->conf.stable_secret)) {
+               ni_sockaddr_t addr;
+               ni_sockaddr_set_ipv6(&addr, ipv6->conf.stable_secret, 0);
+               xml_node_new_element("stable-secret", node, 
ni_sockaddr_print(&addr));
+       }
+
        if (node->children) {
                xml_node_add_child(ifnode, node);
                return TRUE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/client/suse/compat-suse.c 
new/wicked-0.6.63/client/suse/compat-suse.c
--- old/wicked-0.6.62/client/suse/compat-suse.c 2020-02-26 21:44:57.000000000 
+0100
+++ new/wicked-0.6.63/client/suse/compat-suse.c 2020-03-04 13:49:38.000000000 
+0100
@@ -5994,28 +5994,68 @@
 /*
  * Read ifsysctl file
  */
-static void
-__ifsysctl_get_int(ni_var_array_t *vars, const char *path, const char *ifname,
-                                       const char *attr, int *value, int base)
+static const ni_var_t *
+__ifsysctl_get_var(ni_var_array_t *vars, const char *path, const char *ifname, 
const char *attr)
 {
        const char *names[] = { "all", "default", ifname, NULL };
        const char **name;
-       ni_var_t *var;
+       const ni_var_t *ret = NULL;
+       const ni_var_t *var;
 
        for (name = names; *name; name++) {
                var = ni_ifsysctl_vars_get(vars, "%s/%s/%s", path, *name, attr);
-               if (!var)
+               if (!var || ni_string_empty(var->value))
                        continue;
-               if (ni_parse_int(var->value, value, base) < 0) {
-                       ni_debug_readwrite("Can't parse sysctl '%s'='%s' as 
integer",
-                                       var->name, var->value);
-               } else {
-                       ni_debug_verbose(NI_LOG_DEBUG2, NI_TRACE_READWRITE,
+               ret = var;
+       }
+       return ret;
+}
+
+static const char *
+__ifsysctl_get_str(ni_var_array_t *vars, const char *path, const char *ifname, 
const char *attr)
+{
+       const ni_var_t *var;
+
+       if ((var = __ifsysctl_get_var(vars, path, ifname, attr)))
+               return var->value;
+       return NULL;
+}
+
+static ni_bool_t
+__ifsysctl_get_int(ni_var_array_t *vars, const char *path, const char *ifname,
+                                       const char *attr, int *value, int base)
+{
+       const ni_var_t *var;
+
+       if (!(var = __ifsysctl_get_var(vars, path, ifname, attr)))
+               return FALSE;
+
+       if (ni_parse_int(var->value, value, base) < 0) {
+               ni_debug_readwrite("Can't parse sysctl '%s'='%s' as integer",
+                               var->name, var->value);
+               return FALSE;
+       } else {
+               ni_debug_verbose(NI_LOG_DEBUG2, NI_TRACE_READWRITE,
                                "Parsed sysctl '%s'='%s'", var->name, 
var->value);
-               }
+               return TRUE;
        }
 }
 
+static ni_bool_t
+__ifsysctl_get_ipv6(ni_var_array_t *vars, const char *path, const char *ifname,
+                                       const char *attr, struct in6_addr *ipv6)
+{
+       ni_sockaddr_t addr;
+       const char *str;
+
+       str = __ifsysctl_get_str(vars, path, ifname, attr);
+       if (!str || ni_sockaddr_parse(&addr, str, AF_INET6) < 0)
+               return FALSE;
+
+       *ipv6 = addr.six.sin6_addr;
+       return TRUE;
+}
+
 static void
 __ifsysctl_get_tristate(ni_var_array_t *vars, const char *path, const char 
*ifname,
                        const char *attr, ni_tristate_t *tristate)
@@ -6055,9 +6095,9 @@
        __ifsysctl_get_tristate(&ifsysctl, "net/ipv4/conf", dev->name,
                                "forwarding", &ipv4->conf.forwarding);
        __ifsysctl_get_tristate(&ifsysctl, "net/ipv4/conf", dev->name,
-                               "arp-notify", &ipv4->conf.arp_notify);
+                               "arp_notify", &ipv4->conf.arp_notify);
        __ifsysctl_get_tristate(&ifsysctl, "net/ipv4/conf", dev->name,
-                               "accept-redirects", 
&ipv4->conf.accept_redirects);
+                               "accept_redirects", 
&ipv4->conf.accept_redirects);
 
        ipv6 = ni_netdev_get_ipv6(dev);
        ni_tristate_set(&ipv6->conf.enabled, !__ni_ipv6_disbled);
@@ -6093,14 +6133,21 @@
                                "autoconf", &ipv6->conf.autoconf);
 
        __ifsysctl_get_int(&ifsysctl, "net/ipv6/conf", dev->name,
-                               "privacy", &ipv6->conf.privacy, 10);
+                               "use_tempaddr", &ipv6->conf.privacy, 10);
        if (ipv6->conf.privacy > NI_IPV6_PRIVACY_PREFER_TEMPORARY)
                ipv6->conf.privacy = NI_IPV6_PRIVACY_PREFER_TEMPORARY;
        else if (ipv6->conf.privacy < NI_IPV6_PRIVACY_DEFAULT)
                ipv6->conf.privacy = NI_IPV6_PRIVACY_DISABLED;
 
        __ifsysctl_get_tristate(&ifsysctl, "net/ipv6/conf", dev->name,
-                               "accept-redirects", 
&ipv6->conf.accept_redirects);
+                               "accept_redirects", 
&ipv6->conf.accept_redirects);
+
+       __ifsysctl_get_int(&ifsysctl, "net/ipv6/conf", dev->name,
+                               "addr_gen_mode", &ipv6->conf.privacy, 10);
+
+       __ifsysctl_get_ipv6(&ifsysctl, "net/ipv6/conf", dev->name,
+                               "stable_secret", &ipv6->conf.stable_secret);
+
        return TRUE;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/configure new/wicked-0.6.63/configure
--- old/wicked-0.6.62/configure 2020-02-26 21:47:14.000000000 +0100
+++ new/wicked-0.6.63/configure 2020-03-04 14:16:28.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for wicked 0.6.62.
+# Generated by GNU Autoconf 2.69 for wicked 0.6.63.
 #
 # Report bugs to <http://bugs.opensuse.org>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='wicked'
 PACKAGE_TARNAME='wicked'
-PACKAGE_VERSION='0.6.62'
-PACKAGE_STRING='wicked 0.6.62'
+PACKAGE_VERSION='0.6.63'
+PACKAGE_STRING='wicked 0.6.63'
 PACKAGE_BUGREPORT='http://bugs.opensuse.org'
 PACKAGE_URL='https://github.com/openSUSE/wicked'
 
@@ -1396,7 +1396,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures wicked 0.6.62 to adapt to many kinds of systems.
+\`configure' configures wicked 0.6.63 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1466,7 +1466,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of wicked 0.6.62:";;
+     short | recursive ) echo "Configuration of wicked 0.6.63:";;
    esac
   cat <<\_ACEOF
 
@@ -1637,7 +1637,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-wicked configure 0.6.62
+wicked configure 0.6.63
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2236,7 +2236,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by wicked $as_me 0.6.62, which was
+It was created by wicked $as_me 0.6.63, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3099,7 +3099,7 @@
 
 # Define the identity of the package.
  PACKAGE='wicked'
- VERSION='0.6.62'
+ VERSION='0.6.63'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -15810,7 +15810,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by wicked $as_me 0.6.62, which was
+This file was extended by wicked $as_me 0.6.63, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -15877,7 +15877,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-wicked config.status 0.6.62
+wicked config.status 0.6.63
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/include/wicked/ipv6.h 
new/wicked-0.6.63/include/wicked/ipv6.h
--- old/wicked-0.6.62/include/wicked/ipv6.h     2020-02-26 21:42:56.000000000 
+0100
+++ new/wicked-0.6.63/include/wicked/ipv6.h     2020-03-04 13:49:38.000000000 
+0100
@@ -39,6 +39,14 @@
 };
 
 enum {
+       NI_IPV6_ADDR_GEN_MODE_DEFAULT   = -1,
+       NI_IPV6_ADDR_GEN_MODE_EUI64     =  0,
+       NI_IPV6_ADDR_GEN_MODE_NONE,
+       NI_IPV6_ADDR_GEN_MODE_STABLE_PRIVACY,
+       NI_IPV6_ADDR_GEN_MODE_RANDOM,
+};
+
+enum {
        NI_IPV6_READY                   = 0U,
        NI_IPV6_RS_SENT                 = 1,
        NI_IPV6_RA_RCVD                 = 2,
@@ -51,6 +59,9 @@
        int                     accept_ra;
        int                     accept_dad;
 
+       int                     addr_gen_mode;
+       struct in6_addr         stable_secret;
+
        ni_tristate_t           autoconf;
        int                     privacy; /* -1 for lo & p-t-p otherwise 0, 1, 
>1 */
 };
@@ -122,5 +133,6 @@
 extern const char *            ni_ipv6_devconf_privacy_to_name(int privacy);
 extern const char *            ni_ipv6_devconf_accept_ra_to_name(int 
accept_ra);
 extern const char *            ni_ipv6_devconf_accept_dad_to_name(int 
accept_dad);
+extern const char *            ni_ipv6_devconf_addr_gen_mode_to_name(int 
addr_gen_mode);
 
 #endif /* __WICKED_IPv6_H__ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/schema/protocol.xml 
new/wicked-0.6.63/schema/protocol.xml
--- old/wicked-0.6.62/schema/protocol.xml       2015-10-05 19:14:29.000000000 
+0200
+++ new/wicked-0.6.63/schema/protocol.xml       2020-03-04 13:49:38.000000000 
+0100
@@ -55,6 +55,13 @@
       <prefer-temporary value="2"/>
     </privacy>
     <accept-redirects type="tristate" />
+    <addr-gen-mode    type="int32" constraint="enum">
+      <eui64            value="0"/>
+      <none             value="1"/>
+      <stable-privacy   value="2"/>
+      <random           value="3"/>
+    </addr-gen-mode>
+    <stable-secret    type="ipv6-address" />
   </define>
 
   <method name="changeProtocol">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/src/dbus-objects/ipv6.c 
new/wicked-0.6.63/src/dbus-objects/ipv6.c
--- old/wicked-0.6.62/src/dbus-objects/ipv6.c   2019-04-18 11:42:50.000000000 
+0200
+++ new/wicked-0.6.63/src/dbus-objects/ipv6.c   2020-03-04 13:49:38.000000000 
+0100
@@ -24,6 +24,7 @@
 #include <wicked/dbus-service.h>
 #include <wicked/system.h>
 #include <wicked/ipv6.h>
+#include <netinet/in.h>
 #include "netinfo_priv.h"
 #include "dbus-common.h"
 #include "model.h"
@@ -95,7 +96,7 @@
  * Functions for dealing with IPv6 properties
  */
 static ni_ipv6_devinfo_t *
-__ni_objectmodel_ipv6_devinfo_handle(const ni_dbus_object_t *object, ni_bool_t 
write_access, DBusError *error)
+ni_objectmodel_ipv6_devinfo_handle(const ni_dbus_object_t *object, ni_bool_t 
write_access, DBusError *error)
 {
        ni_netdev_t *dev;
        ni_ipv6_devinfo_t *ipv6_info;
@@ -113,14 +114,55 @@
         return ipv6_info;
 }
 
-void *
+static void *
 ni_objectmodel_get_ipv6_devinfo(const ni_dbus_object_t *object, ni_bool_t 
write_access, DBusError *error)
 {
-       return __ni_objectmodel_ipv6_devinfo_handle(object, write_access, 
error);
+       return ni_objectmodel_ipv6_devinfo_handle(object, write_access, error);
+}
+
+static dbus_bool_t
+ni_objectmodel_ipv6_devconf_get_stable_secret(const ni_dbus_object_t *object,
+                               const ni_dbus_property_t *property,
+                               ni_dbus_variant_t *result,
+                               DBusError *error)
+{
+       const ni_ipv6_devinfo_t *info;
+
+       if (!(info = ni_objectmodel_ipv6_devinfo_handle(object, FALSE, error)))
+               return FALSE;
+
+       if (IN6_IS_ADDR_UNSPECIFIED(&info->conf.stable_secret))
+               return FALSE;
+
+       ni_dbus_variant_set_byte_array(result,
+                       (const unsigned char *)&info->conf.stable_secret,
+                       sizeof(info->conf.stable_secret));
+       return TRUE;
+}
+
+static dbus_bool_t
+ni_objectmodel_ipv6_devconf_set_stable_secret(ni_dbus_object_t *object,
+                               const ni_dbus_property_t *property,
+                               const ni_dbus_variant_t *argument,
+                               DBusError *error)
+{
+       ni_ipv6_devinfo_t *info;
+       unsigned int len = 0;
+
+       if (!(info = ni_objectmodel_ipv6_devinfo_handle(object, TRUE, error)))
+               return FALSE;
+
+       return ni_dbus_variant_get_byte_array_minmax(argument,
+                               (unsigned char *)&info->conf.stable_secret, 
&len,
+                               sizeof(info->conf.stable_secret),
+                               sizeof(info->conf.stable_secret));
 }
 
 #define IPV6_INT_PROPERTY(dbus_name, member_name, rw) \
        NI_DBUS_GENERIC_INT_PROPERTY(ipv6_devinfo, dbus_name, member_name, rw)
+#define IPV6_CONF_PROPERTY(dbus_name, member_name, rw) \
+       ___NI_DBUS_PROPERTY(DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING, 
\
+                       dbus_name, member_name, ni_objectmodel_ipv6_devconf, RO)
 
 const ni_dbus_property_t       ni_objectmodel_ipv6_property_table[] = {
        IPV6_INT_PROPERTY(enabled, conf.enabled, RO),
@@ -130,6 +172,8 @@
        IPV6_INT_PROPERTY(autoconf, conf.autoconf, RO),
        IPV6_INT_PROPERTY(privacy, conf.privacy, RO),
        IPV6_INT_PROPERTY(accept-redirects, conf.accept_redirects, RO),
+       IPV6_INT_PROPERTY(addr-gen-mode, conf.addr_gen_mode, RO),
+       IPV6_CONF_PROPERTY(stable-secret, stable_secret, RO),
 
        { NULL }
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/src/ipv6.c new/wicked-0.6.63/src/ipv6.c
--- old/wicked-0.6.62/src/ipv6.c        2020-02-26 21:42:56.000000000 +0100
+++ new/wicked-0.6.63/src/ipv6.c        2020-03-04 13:49:38.000000000 +0100
@@ -62,7 +62,26 @@
        NI_IPV6_DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL,
        NI_IPV6_DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL,
        NI_IPV6_DEVCONF_SUPPRESS_FRAG_NDISC,
-       __NI_IPV6_DEVCONF_MAX
+       NI_IPV6_DEVCONF_ACCEPT_RA_FROM_LOCAL,
+       NI_IPV6_DEVCONF_USE_OPTIMISTIC,
+       NI_IPV6_DEVCONF_ACCEPT_RA_MTU,
+       NI_IPV6_DEVCONF_STABLE_SECRET,
+       NI_IPV6_DEVCONF_USE_OIF_ADDRS_ONLY,
+       NI_IPV6_DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT,
+       NI_IPV6_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
+       NI_IPV6_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
+       NI_IPV6_DEVCONF_DROP_UNSOLICITED_NA,
+       NI_IPV6_DEVCONF_KEEP_ADDR_ON_DOWN,
+       NI_IPV6_DEVCONF_RTR_SOLICIT_MAX_INTERVAL,
+       NI_IPV6_DEVCONF_SEG6_ENABLED,
+       NI_IPV6_DEVCONF_SEG6_REQUIRE_HMAC,
+       NI_IPV6_DEVCONF_ENHANCED_DAD,
+       NI_IPV6_DEVCONF_ADDR_GEN_MODE,
+       NI_IPV6_DEVCONF_DISABLE_POLICY,
+       NI_IPV6_DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN,
+       NI_IPV6_DEVCONF_NDISC_TCLASS,
+
+       NI_IPV6_DEVCONF_MAX
 };
 
 /*
@@ -102,7 +121,26 @@
        { "mldv1_unsolicited_report_interval",  
NI_IPV6_DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL},
        { "mldv2_unsolicited_report_interval",  
NI_IPV6_DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL},
        { "suppress_frag_ndisc",                
NI_IPV6_DEVCONF_SUPPRESS_FRAG_NDISC     },
-       { NULL,                                 __NI_IPV6_DEVCONF_MAX           
        },
+       { "accept_ra_from_local",               
NI_IPV6_DEVCONF_ACCEPT_RA_FROM_LOCAL    },
+       { "use_optimistic",                     NI_IPV6_DEVCONF_USE_OPTIMISTIC  
        },
+       { "accept_ra_mtu",                      NI_IPV6_DEVCONF_ACCEPT_RA_MTU   
        },
+       { "stable_secret",                      NI_IPV6_DEVCONF_STABLE_SECRET   
        },
+       { "use_oif_addrs_only",                 
NI_IPV6_DEVCONF_USE_OIF_ADDRS_ONLY      },
+       { "accept_ra_min_hop_limit",            
NI_IPV6_DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT },
+       { "ignore_routes_with_linkdown",        
NI_IPV6_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN},
+       { "drop_unicast_in_l2_multicast",       
NI_IPV6_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST},
+       { "drop_unsolicited_na",                
NI_IPV6_DEVCONF_DROP_UNSOLICITED_NA     },
+       { "keep_addr_on_down",                  
NI_IPV6_DEVCONF_KEEP_ADDR_ON_DOWN       },
+       { "router_solicitation_max_interval",   
NI_IPV6_DEVCONF_RTR_SOLICIT_MAX_INTERVAL},
+       { "seg6_enabled",                       NI_IPV6_DEVCONF_SEG6_ENABLED    
        },
+       { "seg6_require_hmac",                  
NI_IPV6_DEVCONF_SEG6_REQUIRE_HMAC       },
+       { "enhanced_dad",                       NI_IPV6_DEVCONF_ENHANCED_DAD    
        },
+       { "addr_gen_mode",                      NI_IPV6_DEVCONF_ADDR_GEN_MODE   
        },
+       { "disable_policy",                     NI_IPV6_DEVCONF_DISABLE_POLICY  
        },
+       { "accept_ra_rt_info_min_plen",         
NI_IPV6_DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN},
+       { "ndisc_tclass",                       NI_IPV6_DEVCONF_NDISC_TCLASS    
        },
+
+       { NULL,                                 NI_IPV6_DEVCONF_MAX             
        }
 };
 
 /*
@@ -128,6 +166,8 @@
        conf->accept_ra = NI_IPV6_ACCEPT_RA_DEFAULT;
        conf->accept_dad = NI_IPV6_ACCEPT_DAD_DEFAULT;
        conf->accept_redirects = NI_TRISTATE_DEFAULT;
+       conf->addr_gen_mode = NI_IPV6_ADDR_GEN_MODE_DEFAULT;
+       conf->stable_secret = in6addr_any;
 }
 
 /*
@@ -269,6 +309,11 @@
                if (ni_sysctl_ipv6_ifconfig_get_int(dev->name, 
"accept_redirects", &val) >= 0)
                        ni_tristate_set(&ipv6->conf.accept_redirects, !!val);
 
+               if (ni_sysctl_ipv6_ifconfig_get_int(dev->name, "addr_gen_mode", 
&val) >= 0)
+                       ipv6->conf.addr_gen_mode = val;
+
+               /* omit reading stable_secret, see ni_system_ipv6_devinfo_set */
+
        } else {
                ni_warn("%s: cannot get ipv6 device attributes", dev->name);
 
@@ -313,6 +358,7 @@
 int
 ni_system_ipv6_devinfo_set(ni_netdev_t *dev, const ni_ipv6_devconf_t *conf)
 {
+       struct in6_addr stable_secret = in6addr_any;
        ni_ipv6_devinfo_t *ipv6;
        int ret;
 
@@ -395,6 +441,27 @@
                        ipv6->conf.accept_redirects = conf->accept_redirects;
        }
 
+       if (__tristate_changed(conf->addr_gen_mode, ipv6->conf.addr_gen_mode)) {
+               ret = __change_int(dev->name, "addr_gen_mode", 
conf->addr_gen_mode);
+               if (ret < 0)
+                       return ret;
+               if (ret == 0)
+                       ipv6->conf.addr_gen_mode = conf->addr_gen_mode;
+       }
+
+       /* netlink omits stable_secret, but because it usually provides *
+        * other sysctls, our sysfs get function (above) isn't called.  *
+        * try avoid i/o errors due to not readable stable_secret.      */
+       if (ipv6->conf.addr_gen_mode == NI_IPV6_ADDR_GEN_MODE_STABLE_PRIVACY)
+               ni_sysctl_ipv6_ifconfig_get_ipv6(dev->name, "stable_secret", 
&stable_secret);
+       if (memcmp(&in6addr_any, &conf->stable_secret, sizeof(struct in6_addr)) 
||
+           (ipv6->conf.addr_gen_mode == NI_IPV6_ADDR_GEN_MODE_STABLE_PRIVACY &&
+            memcmp(&stable_secret, &conf->stable_secret, sizeof(struct 
in6_addr)))) {
+               ret = ni_sysctl_ipv6_ifconfig_set_ipv6(dev->name, 
"stable_secret",
+                               conf->stable_secret);
+               if (ret < 0)
+                       return ret;
+       }
        return 0;
 }
 
@@ -724,6 +791,19 @@
        return ni_format_uint_mapped(accept_dad, __accept_dad_names);
 }
 
+const char *
+ni_ipv6_devconf_addr_gen_mode_to_name(int addr_gen_mode)
+{
+       static const ni_intmap_t        addr_gen_mode_map[] = {
+               { "eui64",              NI_IPV6_ADDR_GEN_MODE_EUI64             
},
+               { "none",               NI_IPV6_ADDR_GEN_MODE_NONE              
},
+               { "stable-privacy",     NI_IPV6_ADDR_GEN_MODE_STABLE_PRIVACY    
},
+               { "random",             NI_IPV6_ADDR_GEN_MODE_RANDOM            
},
+               { NULL,                 NI_IPV6_ADDR_GEN_MODE_DEFAULT           
}
+       };
+       return ni_format_uint_mapped(addr_gen_mode, addr_gen_mode_map);
+}
+
 static inline const char *
 ni_ipv6_devconf_flag_to_sysctl_name(unsigned int flag)
 {
@@ -759,6 +839,13 @@
        case NI_IPV6_DEVCONF_USE_TEMPADDR:
                ipv6->conf.privacy = value < -1 ? -1 : value > 2 ? 2 : value;
                break;
+       case NI_IPV6_DEVCONF_ADDR_GEN_MODE:
+               ipv6->conf.addr_gen_mode = value < 0 ? 0 : value;
+               break;
+       case NI_IPV6_DEVCONF_STABLE_SECRET:
+               /* omitted via netlink using an int32_t array */
+               unused = 2;
+               break;
        default:
                /* TODO: handle more (all) of them */
                unused = 1;
@@ -766,7 +853,7 @@
        }
 
        level = NI_LOG_DEBUG1 + unused;
-       if (ni_debug_guard(level, NI_TRACE_EVENTS|NI_TRACE_IPV6)) {
+       if (unused < 2 && ni_debug_guard(level, NI_TRACE_EVENTS|NI_TRACE_IPV6)) 
{
                const char *name;
 
                name = ni_ipv6_devconf_flag_to_sysctl_name(flag);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/src/sysfs.c 
new/wicked-0.6.63/src/sysfs.c
--- old/wicked-0.6.62/src/sysfs.c       2015-10-05 19:14:29.000000000 +0200
+++ new/wicked-0.6.63/src/sysfs.c       2020-03-04 13:49:38.000000000 +0100
@@ -559,21 +559,27 @@
 }
 
 int
-ni_sysctl_ipv4_ifconfig_get_int(const char *ifname, const char *ctl_name, int 
*value)
+ni_sysctl_ipv4_ifconfig_get(const char *ifname, const char *ctl_name, char 
**result)
 {
        const char *pathname = __ni_sysctl_ipv4_ifconfig_path(ifname, ctl_name);
-       char *result = NULL;
-       int ret;
 
-       *value = 0;
-       if (__ni_sysfs_read_string(pathname, &result) < 0) {
+       if (!result || __ni_sysfs_read_string(pathname, result) < 0 || 
!*result) {
                ni_error("%s: unable to read file: %m", pathname);
                return -1;
        }
-       if (result == NULL) {
-               ni_error("%s: empty file", pathname);
+       return 0;
+}
+
+int
+ni_sysctl_ipv4_ifconfig_get_int(const char *ifname, const char *ctl_name, int 
*value)
+{
+       char *result = NULL;
+       int ret;
+
+       *value = 0;
+       if (ni_sysctl_ipv4_ifconfig_get(ifname, ctl_name, &result) < 0)
                return -1;
-       }
+
        ret = ni_parse_int(result, value, 0);
        ni_string_free(&result);
        return ret;
@@ -582,25 +588,25 @@
 int
 ni_sysctl_ipv4_ifconfig_get_uint(const char *ifname, const char *ctl_name, 
unsigned int *value)
 {
-       const char *pathname = __ni_sysctl_ipv4_ifconfig_path(ifname, ctl_name);
        char *result = NULL;
        int ret;
 
        *value = 0;
-       if (__ni_sysfs_read_string(pathname, &result) < 0) {
-               ni_error("%s: unable to read file: %m", pathname);
+       if (ni_sysctl_ipv4_ifconfig_get(ifname, ctl_name, &result) < 0)
                return -1;
-       }
-       if (result == NULL) {
-               ni_error("%s: empty file", pathname);
-               return -1;
-       }
+
        ret = ni_parse_uint(result, value, 0);
        ni_string_free(&result);
        return ret;
 }
 
 int
+ni_sysctl_ipv4_ifconfig_set(const char *ifname, const char *ctl_name, const 
char *newval)
+{
+       return __ni_sysfs_printf(__ni_sysctl_ipv4_ifconfig_path(ifname, 
ctl_name), "%s", newval ? newval : "");
+}
+
+int
 ni_sysctl_ipv4_ifconfig_set_int(const char *ifname, const char *ctl_name, int 
newval)
 {
        return __ni_sysfs_printf(__ni_sysctl_ipv4_ifconfig_path(ifname, 
ctl_name), "%d", newval);
@@ -636,21 +642,27 @@
 }
 
 int
-ni_sysctl_ipv6_ifconfig_get_int(const char *ifname, const char *ctl_name, int 
*value)
+ni_sysctl_ipv6_ifconfig_get(const char *ifname, const char *ctl_name, char 
**result)
 {
        const char *pathname = __ni_sysctl_ipv6_ifconfig_path(ifname, ctl_name);
-       char *result = NULL;
-       int ret;
 
-       *value = 0;
-       if (__ni_sysfs_read_string(pathname, &result) < 0) {
+       if (!result || __ni_sysfs_read_string(pathname, result) < 0 || 
!*result) {
                ni_error("%s: unable to read file: %m", pathname);
                return -1;
        }
-       if (result == NULL) {
-               ni_error("%s: empty file", pathname);
+       return 0;
+}
+
+int
+ni_sysctl_ipv6_ifconfig_get_int(const char *ifname, const char *ctl_name, int 
*value)
+{
+       char *result = NULL;
+       int ret;
+
+       *value = 0;
+       if (ni_sysctl_ipv6_ifconfig_get(ifname, ctl_name, &result) < 0)
                return -1;
-       }
+
        ret = ni_parse_int(result, value, 0);
        ni_string_free(&result);
        return ret;
@@ -659,25 +671,43 @@
 int
 ni_sysctl_ipv6_ifconfig_get_uint(const char *ifname, const char *ctl_name, 
unsigned int *value)
 {
-       const char *pathname = __ni_sysctl_ipv6_ifconfig_path(ifname, ctl_name);
        char *result = NULL;
        int ret;
 
        *value = 0;
-       if (__ni_sysfs_read_string(pathname, &result) < 0) {
-               ni_error("%s: unable to read file: %m", pathname);
-               return -1;
-       }
-       if (result == NULL) {
-               ni_error("%s: empty file", pathname);
+       if (ni_sysctl_ipv6_ifconfig_get(ifname, ctl_name, &result) < 0)
                return -1;
-       }
+
        ret = ni_parse_uint(result, value, 0);
        ni_string_free(&result);
        return ret;
 }
 
 int
+ni_sysctl_ipv6_ifconfig_get_ipv6(const char *ifname, const char *ctl_name, 
struct in6_addr *ipv6)
+{
+       char *result = NULL;
+       ni_sockaddr_t addr;
+       int ret;
+
+       *ipv6 = in6addr_any;
+       if (ni_sysctl_ipv6_ifconfig_get(ifname, ctl_name, &result) < 0)
+               return -1;
+
+       if ((ret = ni_sockaddr_parse(&addr, result, AF_INET6)) == 0)
+               *ipv6 = addr.six.sin6_addr;
+
+       ni_string_free(&result);
+       return ret;
+}
+
+int
+ni_sysctl_ipv6_ifconfig_set(const char *ifname, const char *ctl_name, const 
char *newval)
+{
+       return __ni_sysfs_printf(__ni_sysctl_ipv6_ifconfig_path(ifname, 
ctl_name), "%s", newval ? newval : "");
+}
+
+int
 ni_sysctl_ipv6_ifconfig_set_int(const char *ifname, const char *ctl_name, int 
newval)
 {
        return __ni_sysfs_printf(__ni_sysctl_ipv6_ifconfig_path(ifname, 
ctl_name), "%d", newval);
@@ -689,6 +719,19 @@
        return __ni_sysfs_printf(__ni_sysctl_ipv6_ifconfig_path(ifname, 
ctl_name), "%u", newval);
 }
 
+int
+ni_sysctl_ipv6_ifconfig_set_ipv6(const char *ifname, const char *ctl_name, 
const struct in6_addr newval)
+{
+       ni_sockaddr_t addr;
+       char abuf[128] = {'\0'};
+
+       ni_sockaddr_set_ipv6(&addr, newval, 0);
+       if (!ni_sockaddr_format(&addr, abuf, sizeof(abuf)))
+               return -1;
+
+       return ni_sysctl_ipv6_ifconfig_set(ifname, ctl_name, abuf);
+}
+
 /*
  * Print a value to a sysfs file
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/src/sysfs.h 
new/wicked-0.6.63/src/sysfs.h
--- old/wicked-0.6.62/src/sysfs.h       2015-10-05 19:14:29.000000000 +0200
+++ new/wicked-0.6.63/src/sysfs.h       2020-03-04 13:49:38.000000000 +0100
@@ -48,12 +48,18 @@
 extern ni_pci_dev_t *ni_sysfs_netdev_get_pci(const char *ifname);
 
 extern int     ni_sysctl_ipv6_ifconfig_is_present(const char *ifname);
+extern int     ni_sysctl_ipv6_ifconfig_get(const char *, const char *, char 
**);
+extern int     ni_sysctl_ipv6_ifconfig_set(const char *, const char *, const 
char *);
 extern int     ni_sysctl_ipv6_ifconfig_get_int(const char *, const char *, int 
*);
 extern int     ni_sysctl_ipv6_ifconfig_get_uint(const char *, const char *, 
unsigned int *);
 extern int     ni_sysctl_ipv6_ifconfig_set_int(const char *, const char *, 
int);
 extern int     ni_sysctl_ipv6_ifconfig_set_uint(const char *, const char *, 
unsigned int);
+extern int     ni_sysctl_ipv6_ifconfig_get_ipv6(const char *, const char *, 
struct in6_addr *);
+extern int     ni_sysctl_ipv6_ifconfig_set_ipv6(const char *, const char *, 
const struct in6_addr);
 
 extern int     ni_sysctl_ipv4_ifconfig_is_present(const char *ifname);
+extern int     ni_sysctl_ipv4_ifconfig_get(const char *, const char *, char 
**);
+extern int     ni_sysctl_ipv4_ifconfig_set(const char *, const char *, const 
char *);
 extern int     ni_sysctl_ipv4_ifconfig_get_int(const char *, const char *, int 
*);
 extern int     ni_sysctl_ipv4_ifconfig_get_uint(const char *, const char *, 
unsigned int *);
 extern int     ni_sysctl_ipv4_ifconfig_set_int(const char *, const char *, 
int);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/wicked.spec 
new/wicked-0.6.63/wicked.spec
--- old/wicked-0.6.62/wicked.spec       2020-02-26 21:47:22.000000000 +0100
+++ new/wicked-0.6.63/wicked.spec       2020-03-04 14:16:34.000000000 +0100
@@ -18,7 +18,7 @@
 
 %define                release_prefix  %{?snapshot:%{snapshot}}%{!?snapshot:0}
 Name:           wicked
-Version:        0.6.62
+Version:        0.6.63
 Release:        %{release_prefix}.0.0
 Summary:        Network configuration infrastructure
 License:        GPL-2.0-or-later
@@ -39,8 +39,13 @@
 BuildRequires:  automake
 BuildRequires:  libtool
 BuildRequires:  make
-Provides:       libwicked-0_6_62 = %{version}
-Obsoletes:      libwicked-0-6 <= %{version}
+%if %{with wicked_devel}
+# libwicked-%{version}.so shlib package compatible match for wicked-devel
+Provides:       libwicked-0_6_63 = %{version}-%{release}
+%endif
+# uninstall obsolete libwicked-0-6 (libwicked-0.so.6, wicked < 0.6.60)
+Provides:       libwicked-0-6 = %{version}
+Obsoletes:      libwicked-0-6 < %{version}
 
 %if 0%{?suse_version} >= 1500
 %bcond_without  rfc4361_cid
@@ -155,7 +160,7 @@
 Group:          Development/Libraries/C and C++
 Requires:       dbus-1-devel
 Requires:       libnl3-devel
-Requires:       libwicked-0_6_62 = %{version}
+Requires:       libwicked-0_6_63 = %{version}-%{release}
 
 %description devel
 Wicked is a network configuration infrastructure incorporating a number
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wicked-0.6.62/wicked.spec.in 
new/wicked-0.6.63/wicked.spec.in
--- old/wicked-0.6.62/wicked.spec.in    2020-02-26 21:44:57.000000000 +0100
+++ new/wicked-0.6.63/wicked.spec.in    2020-03-04 13:49:38.000000000 +0100
@@ -39,8 +39,13 @@
 BuildRequires:  automake
 BuildRequires:  libtool
 BuildRequires:  make
-Provides:       libwicked@LIBWICKED_PACKAGE_SUFFIX@ = %{version}
-Obsoletes:      libwicked-0-6 <= %{version}
+%if %{with wicked_devel}
+# libwicked-%{version}.so shlib package compatible match for wicked-devel
+Provides:       libwicked@LIBWICKED_PACKAGE_SUFFIX@ = %{version}-%{release}
+%endif
+# uninstall obsolete libwicked-0-6 (libwicked-0.so.6, wicked < 0.6.60)
+Provides:       libwicked-0-6 = %{version}
+Obsoletes:      libwicked-0-6 < %{version}
 
 %if 0%{?suse_version} >= 1500
 %bcond_without  rfc4361_cid
@@ -155,7 +160,7 @@
 Group:          Development/Libraries/C and C++
 Requires:       dbus-1-devel
 Requires:       libnl3-devel
-Requires:       libwicked@LIBWICKED_PACKAGE_SUFFIX@ = %{version}
+Requires:       libwicked@LIBWICKED_PACKAGE_SUFFIX@ = %{version}-%{release}
 
 %description devel
 Wicked is a network configuration infrastructure incorporating a number


Reply via email to