<p>Max has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12989">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">OpenVPN: track interface disconnect<br><br>Setup disconnection callback and use it to properly track management<br>interface availability.<br><br>Change-Id: I11b8bc71c1e9cbbf992ee3b7c1c9aae6e6f697e0<br>Requires: libosmo-netif I905adb2d6191216551a3bcdcd1aec1f96f01612a<br>Related: SYS#2655<br>---<br>M src/client.h<br>M src/osysmon_openvpn.c<br>2 files changed, 17 insertions(+), 3 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-sysmon refs/changes/89/12989/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/client.h b/src/client.h</span><br><span>index d878450..a14019e 100644</span><br><span>--- a/src/client.h</span><br><span>+++ b/src/client.h</span><br><span>@@ -15,7 +15,7 @@</span><br><span>    /* name of this client */</span><br><span>    const char *name;</span><br><span>    /* remote host/IP */</span><br><span style="color: hsl(0, 100%, 40%);">-    const char *remote_host;</span><br><span style="color: hsl(120, 100%, 40%);">+      char *remote_host;</span><br><span>   /* remote port */</span><br><span>    uint16_t remote_port;</span><br><span> };</span><br><span>diff --git a/src/osysmon_openvpn.c b/src/osysmon_openvpn.c</span><br><span>index 135a532..148e3b8 100644</span><br><span>--- a/src/osysmon_openvpn.c</span><br><span>+++ b/src/osysmon_openvpn.c</span><br><span>@@ -113,12 +113,26 @@</span><br><span>         return NULL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static int disconnect_cb(struct osmo_stream_cli *conn)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      struct openvpn_client *vpn = osmo_stream_cli_get_data(conn);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        update_name(vpn->rem_cfg, "management interface unavailable");</span><br><span style="color: hsl(120, 100%, 40%);">+   vpn->connected = false;</span><br><span style="color: hsl(120, 100%, 40%);">+    talloc_free(vpn->tun_ip);</span><br><span style="color: hsl(120, 100%, 40%);">+  talloc_free(vpn->rem_cfg->remote_host);</span><br><span style="color: hsl(120, 100%, 40%);">+ vpn->tun_ip = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+        vpn->rem_cfg->remote_host = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static int connect_cb(struct osmo_stream_cli *conn)</span><br><span> {</span><br><span>   struct openvpn_client *vpn = osmo_stream_cli_get_data(conn);</span><br><span> </span><br><span>     update_name(vpn->rem_cfg, "management interface incompatible");</span><br><span style="color: hsl(0, 100%, 40%);">-    vpn->connected = true; /* FIXME: there's no callback for lost connection to drop this flag */</span><br><span style="color: hsl(120, 100%, 40%);">+  vpn->connected = true;</span><br><span> </span><br><span>        return 0;</span><br><span> }</span><br><span>@@ -174,6 +188,7 @@</span><br><span>         osmo_stream_cli_set_reconnect_timeout(vpn->mgmt, 60);</span><br><span>     osmo_stream_cli_set_read_cb(vpn->mgmt, read_cb);</span><br><span>  osmo_stream_cli_set_connect_cb(vpn->mgmt, connect_cb);</span><br><span style="color: hsl(120, 100%, 40%);">+     osmo_stream_cli_set_disconnect_cb(vpn->mgmt, disconnect_cb);</span><br><span> </span><br><span>  if (osmo_stream_cli_open(vpn->mgmt) < 0) {</span><br><span>             OVPN_LOG(vpn->rem_cfg, vpn, "failed to connect to management interface\n");</span><br><span>@@ -261,7 +276,6 @@</span><br><span>       if (remote)</span><br><span>          value_node_add(vn_host, "remote", remote);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* FIXME: there's no way to check client state so this might be triggered even while it's reconnecting */</span><br><span>    if (vpn->connected) { /* re-trigger state command */</span><br><span>              msgb_printf(msg, "state\n");</span><br><span>               osmo_stream_cli_send(vpn->mgmt, msg);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12989">change 12989</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/12989"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-sysmon </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I11b8bc71c1e9cbbf992ee3b7c1c9aae6e6f697e0 </div>
<div style="display:none"> Gerrit-Change-Number: 12989 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>