gbproxy: Use monotonic system time instead of time-of-day

Currently time() is used for age calculations. This time source
may jump either forwards or backwards in time (NTP update, leap
seconds).

This patch replaces the use of time() by using
clock_gettime(CLOCK_MONOTONIC) instead.

Sponsored-by: On-Waves ehf
diff --git a/openbsc/src/gprs/gb_proxy_vty.c b/openbsc/src/gprs/gb_proxy_vty.c
index 5ba27cd..82d7d95 100644
--- a/openbsc/src/gprs/gb_proxy_vty.c
+++ b/openbsc/src/gprs/gb_proxy_vty.c
@@ -450,7 +450,11 @@
 {
 	struct gbproxy_peer *peer;
 	char mi_buf[200];
-	time_t now = time(NULL);
+	time_t now;
+	struct timespec ts = {0,};
+
+	clock_gettime(CLOCK_MONOTONIC, &ts);
+	now = ts.tv_sec;
 
 	llist_for_each_entry(peer, &g_cfg->bts_peers, list) {
 		struct gbproxy_link_info *link_info;
@@ -666,6 +670,9 @@
 	struct gbproxy_peer *peer = 0;
 	struct gbproxy_link_info *link_info, *nxt;
 	struct gbproxy_patch_state *state;
+	time_t now;
+	struct timespec ts = {0,};
+
 	int found = 0;
 
 	match = argv[1][0];
@@ -679,8 +686,11 @@
 
 	state = &peer->patch_state;
 
+	clock_gettime(CLOCK_MONOTONIC, &ts);
+	now = ts.tv_sec;
+
 	if (match == MATCH_STALE) {
-		found = gbproxy_remove_stale_link_infos(peer, time(NULL));
+		found = gbproxy_remove_stale_link_infos(peer, now);
 		if (found)
 			vty_out(vty, "Deleted %d stale logical link%s%s",
 				found, found == 1 ? "" : "s", VTY_NEWLINE);