From: Selva Nair <selva.n...@gmail.com>

Signed-off-by: Selva Nair <selva.n...@gmail.com>
---
Tested on Windows which is the only platform that currently 
supports stats from DCO in client mode.

 src/openvpn/init.c    | 11 +++++++++++
 src/openvpn/init.h    |  2 ++
 src/openvpn/manage.c  |  9 +++++++++
 src/openvpn/manage.h  |  3 +++
 src/openvpn/openvpn.c |  2 ++
 5 files changed, 27 insertions(+)

diff --git a/src/openvpn/init.c b/src/openvpn/init.c
index 74b38032..e0b42e1e 100644
--- a/src/openvpn/init.c
+++ b/src/openvpn/init.c
@@ -4164,6 +4164,17 @@ uninit_management_callback(void)
 #endif
 }
 
+void
+persist_client_stats(struct context *c)
+{
+#ifdef ENABLE_MANAGEMENT
+    if (management)
+    {
+        man_persist_client_stats(management, c);
+    }
+#endif
+}
+
 /*
  * Initialize a tunnel instance, handle pre and post-init
  * signal settings.
diff --git a/src/openvpn/init.h b/src/openvpn/init.h
index f53b65ee..d0fb6ea1 100644
--- a/src/openvpn/init.h
+++ b/src/openvpn/init.h
@@ -147,4 +147,6 @@ void write_pid_file(const char *filename, const char 
*chroot_dir);
 
 void remove_pid_file(void);
 
+void persist_client_stats(struct context *c);
+
 #endif /* ifndef INIT_H */
diff --git a/src/openvpn/manage.c b/src/openvpn/manage.c
index 9349b62a..82832436 100644
--- a/src/openvpn/manage.c
+++ b/src/openvpn/manage.c
@@ -4068,6 +4068,15 @@ management_check_bytecount(struct context *c, struct 
management *man, struct tim
     }
 }
 
+void
+man_persist_client_stats(struct management *man, struct context *c)
+{
+    if (dco_enabled(&c->options) && (dco_get_peer_stats(c) == 0))
+    {
+        management_bytes_client(man, c->c2.dco_read_bytes, 
c->c2.dco_write_bytes);
+    }
+}
+
 #else  /* ifdef ENABLE_MANAGEMENT */
 
 void
diff --git a/src/openvpn/manage.h b/src/openvpn/manage.h
index 700b15cf..30291e42 100644
--- a/src/openvpn/manage.h
+++ b/src/openvpn/manage.h
@@ -548,6 +548,9 @@ management_bytes_server(struct management *man,
     }
 }
 
+void
+man_persist_client_stats(struct management *man, struct context *c);
+
 #endif /* ifdef ENABLE_MANAGEMENT */
 
 /**
diff --git a/src/openvpn/openvpn.c b/src/openvpn/openvpn.c
index 15e21452..413a750b 100644
--- a/src/openvpn/openvpn.c
+++ b/src/openvpn/openvpn.c
@@ -97,6 +97,8 @@ tunnel_point_to_point(struct context *c)
         perf_pop();
     }
 
+    persist_client_stats(c);
+
     uninit_management_callback();
 
     /* tear down tunnel instance (unless --persist-tun) */
-- 
2.34.1



_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to