aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/osmo_server_main.c4
-rw-r--r--src/osmo_server_network.c20
2 files changed, 24 insertions, 0 deletions
diff --git a/src/osmo_server_main.c b/src/osmo_server_main.c
index 5c1ad58..4e67163 100644
--- a/src/osmo_server_main.c
+++ b/src/osmo_server_main.c
@@ -140,6 +140,9 @@ static void signal_handler(int signal)
talloc_report(tall_vty_ctx, stderr);
talloc_report_full(tall_bsc_ctx, stderr);
break;
+ case SIGHUP:
+ osmo_pcap_server_reopen(pcap_server);
+ break;
default:
break;
}
@@ -175,6 +178,7 @@ int main(int argc, char **argv)
signal(SIGABRT, &signal_handler);
signal(SIGUSR1, &signal_handler);
osmo_init_ignore_signals();
+ signal(SIGHUP, &signal_handler);
telnet_init(tall_bsc_ctx, NULL, 4241);
diff --git a/src/osmo_server_network.c b/src/osmo_server_network.c
index be61d03..513ca1f 100644
--- a/src/osmo_server_network.c
+++ b/src/osmo_server_network.c
@@ -253,6 +253,11 @@ static int read_cb(struct osmo_fd *fd, unsigned int what)
conn = fd->data;
if (conn->state == STATE_INITIAL) {
+ if (conn->reopen) {
+ LOGP(DSERVER, LOGL_INFO, "Reopening log for %s now.\n", conn->name);
+ restart_pcap(conn);
+ conn->reopen = 0;
+ }
return read_cb_initial(fd, conn);
} else if (conn->state == STATE_DATA) {
return read_cb_data(fd, conn);
@@ -336,3 +341,18 @@ int osmo_pcap_server_listen(struct osmo_pcap_server *server)
return 0;
}
+
+void osmo_pcap_server_reopen(struct osmo_pcap_server *server)
+{
+ struct osmo_pcap_conn *conn;
+ LOGP(DSERVER, LOGL_INFO, "Reopening all logfiles.\n");
+ llist_for_each_entry(conn, &server->conn, entry) {
+ /* Write the complete packet out first */
+ if (conn->state == STATE_INITIAL) {
+ restart_pcap(conn);
+ } else {
+ LOGP(DSERVER, LOGL_INFO, "Delaying %s until current packet is complete.\n", conn->name);
+ conn->reopen = 1;
+ }
+ }
+}