<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ggsn/+/17861">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">sgsnemu: Fix build/run against linux < 4.11 (no sysctl addr_gen_mode support)<br><br>On older systems (like debian 8), the enum is not present in the header<br>file and build will fail (as saw in osmocom's OBS instance).<br>Furthermore, the sysctl to change the value was added at a later point<br>in time, which means compiling can go fine but running may fail due to<br>the sysctl not being available.<br><br>Change-Id: I208970d5b16ea7148444d414b0a6f68c8d9a086c<br>---<br>M configure.ac<br>M sgsnemu/sgsnemu.c<br>2 files changed, 20 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ggsn refs/changes/61/17861/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/configure.ac b/configure.ac</span><br><span>index c695958..0e61729 100644</span><br><span>--- a/configure.ac</span><br><span>+++ b/configure.ac</span><br><span>@@ -131,6 +131,15 @@</span><br><span>  AC_DEFINE([HAVE_IPHDR])],</span><br><span>  AC_MSG_RESULT(no))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# Address generation modes (enum) implemented in linux 3.17 (bc91b0f07ada5535427373a4e2050877bcc12218)</span><br><span style="color: hsl(120, 100%, 40%);">+# /proc/sys/net/ipv6/conf/${iface}/addr_gen_mode was added in linux 4.11 (d35a00b8e33dab7385f724e713ae71c8be0a49f4)</span><br><span style="color: hsl(120, 100%, 40%);">+AC_MSG_CHECKING(whether enum in6_addr_gen_mode.IN6_ADDR_GEN_MODE_NONE exists)</span><br><span style="color: hsl(120, 100%, 40%);">+AH_TEMPLATE(HAVE_IN6_ADDR_GEN_MODE_NONE)</span><br><span style="color: hsl(120, 100%, 40%);">+AC_EGREP_HEADER(IN6_ADDR_GEN_MODE_NONE, linux/if_link.h,</span><br><span style="color: hsl(120, 100%, 40%);">+[AC_MSG_RESULT(yes)</span><br><span style="color: hsl(120, 100%, 40%);">+ AC_DEFINE([HAVE_IN6_ADDR_GEN_MODE_NONE])],</span><br><span style="color: hsl(120, 100%, 40%);">+ AC_MSG_RESULT(no))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # Checks for library functions.</span><br><span> AC_PROG_GCC_TRADITIONAL</span><br><span> # AC_FUNC_MALLOC</span><br><span>diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c</span><br><span>index 1607102..4c51157 100644</span><br><span>--- a/sgsnemu/sgsnemu.c</span><br><span>+++ b/sgsnemu/sgsnemu.c</span><br><span>@@ -15,6 +15,8 @@</span><br><span>  *</span><br><span>  */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include "config.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #ifdef __linux__</span><br><span> #define _GNU_SOURCE 1             /* strdup() prototype, broken arpa/inet.h */</span><br><span> #endif</span><br><span>@@ -47,10 +49,11 @@</span><br><span> #include <time.h></span><br><span> </span><br><span> #if defined(__linux__)</span><br><span style="color: hsl(120, 100%, 40%);">+#if defined(HAVE_IN6_ADDR_GEN_MODE_NONE)</span><br><span> #include <linux/if_link.h></span><br><span style="color: hsl(120, 100%, 40%);">+#endif // HAVE_IN6_ADDR_GEN_MODE_NONE</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include "config.h"</span><br><span> #include "../lib/tun.h"</span><br><span> #include "../lib/ippool.h"</span><br><span> #include "../lib/syserr.h"</span><br><span>@@ -1920,13 +1923,16 @@</span><br><span>                         exit(1);</span><br><span>             }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#if defined(__linux__)</span><br><span style="color: hsl(0, 100%, 40%);">-             /* Avoid tunnel setting its own link-local addr automatically, we don't need it. */</span><br><span style="color: hsl(120, 100%, 40%);">+#if defined(__linux__) && defined(HAVE_IN6_ADDR_GEN_MODE_NONE)</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Avoid tunnel setting its own link-local addr automatically,</span><br><span style="color: hsl(120, 100%, 40%);">+                   we don't need it. Don't exit on error since this sysctl is</span><br><span style="color: hsl(120, 100%, 40%);">+            only available starting with linux 4.11. */</span><br><span>               snprintf(buf, sizeof(buf), "%u", IN6_ADDR_GEN_MODE_NONE);</span><br><span>          if (proc_ipv6_conf_write(options.tun_dev_name, "addr_gen_mode", buf) < 0) {</span><br><span>                     SYS_ERR(DSGSN, LOGL_ERROR, errno,</span><br><span style="color: hsl(0, 100%, 40%);">-                               "Failed to disable addr_gen_mode on %s\n", options.tun_dev_name);</span><br><span style="color: hsl(0, 100%, 40%);">-                     exit(1);</span><br><span style="color: hsl(120, 100%, 40%);">+                              "Failed to disable addr_gen_mode on %s, an extra link-local "</span><br><span style="color: hsl(120, 100%, 40%);">+                               "ip address will appear on the tun device.\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                              options.tun_dev_name);</span><br><span>               }</span><br><span> #endif</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ggsn/+/17861">change 17861</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ggsn/+/17861"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ggsn </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I208970d5b16ea7148444d414b0a6f68c8d9a086c </div>
<div style="display:none"> Gerrit-Change-Number: 17861 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>