mirror of https://gerrit.osmocom.org/osmo-pcap
server: Register signal handler to reopen logfiles on SIGHUP
This commit is contained in:
parent
de77386d84
commit
c7401c6c23
|
@ -63,6 +63,7 @@ struct osmo_pcap_conn {
|
||||||
/* read buffering */
|
/* read buffering */
|
||||||
int state;
|
int state;
|
||||||
int pend;
|
int pend;
|
||||||
|
int reopen;
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
struct osmo_pcap_data *data;
|
struct osmo_pcap_data *data;
|
||||||
};
|
};
|
||||||
|
@ -80,6 +81,7 @@ struct osmo_pcap_server {
|
||||||
|
|
||||||
extern struct osmo_pcap_server *pcap_server;
|
extern struct osmo_pcap_server *pcap_server;
|
||||||
|
|
||||||
|
void osmo_pcap_server_reopen(struct osmo_pcap_server *server);
|
||||||
int osmo_pcap_server_listen(struct osmo_pcap_server *server);
|
int osmo_pcap_server_listen(struct osmo_pcap_server *server);
|
||||||
struct osmo_pcap_conn *osmo_pcap_server_find(struct osmo_pcap_server *ser,
|
struct osmo_pcap_conn *osmo_pcap_server_find(struct osmo_pcap_server *ser,
|
||||||
const char *name);
|
const char *name);
|
||||||
|
|
|
@ -140,6 +140,9 @@ static void signal_handler(int signal)
|
||||||
talloc_report(tall_vty_ctx, stderr);
|
talloc_report(tall_vty_ctx, stderr);
|
||||||
talloc_report_full(tall_bsc_ctx, stderr);
|
talloc_report_full(tall_bsc_ctx, stderr);
|
||||||
break;
|
break;
|
||||||
|
case SIGHUP:
|
||||||
|
osmo_pcap_server_reopen(pcap_server);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -175,6 +178,7 @@ int main(int argc, char **argv)
|
||||||
signal(SIGABRT, &signal_handler);
|
signal(SIGABRT, &signal_handler);
|
||||||
signal(SIGUSR1, &signal_handler);
|
signal(SIGUSR1, &signal_handler);
|
||||||
osmo_init_ignore_signals();
|
osmo_init_ignore_signals();
|
||||||
|
signal(SIGHUP, &signal_handler);
|
||||||
|
|
||||||
telnet_init(tall_bsc_ctx, NULL, 4241);
|
telnet_init(tall_bsc_ctx, NULL, 4241);
|
||||||
|
|
||||||
|
|
|
@ -253,6 +253,11 @@ static int read_cb(struct osmo_fd *fd, unsigned int what)
|
||||||
conn = fd->data;
|
conn = fd->data;
|
||||||
|
|
||||||
if (conn->state == STATE_INITIAL) {
|
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);
|
return read_cb_initial(fd, conn);
|
||||||
} else if (conn->state == STATE_DATA) {
|
} else if (conn->state == STATE_DATA) {
|
||||||
return read_cb_data(fd, conn);
|
return read_cb_data(fd, conn);
|
||||||
|
@ -336,3 +341,18 @@ int osmo_pcap_server_listen(struct osmo_pcap_server *server)
|
||||||
|
|
||||||
return 0;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue