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