void log_notification(const struct peer *peer, u_int8_t errcode, u_int8_t subcode, u_char *data, u_int16_t datalen) { char *p; const char *suberrname = NULL; int uk = 0; p = log_fmt_peer(&peer->conf); switch (errcode) { case ERR_HEADER: if (subcode >= sizeof(suberr_header_names)/sizeof(char *)) uk = 1; else suberrname = suberr_header_names[subcode]; break; case ERR_OPEN: if (subcode >= sizeof(suberr_open_names)/sizeof(char *)) uk = 1; else suberrname = suberr_open_names[subcode]; break; case ERR_UPDATE: if (subcode >= sizeof(suberr_update_names)/sizeof(char *)) uk = 1; else suberrname = suberr_update_names[subcode]; break; case ERR_CEASE: if (subcode >= sizeof(suberr_cease_names)/sizeof(char *)) uk = 1; else suberrname = suberr_cease_names[subcode]; break; case ERR_HOLDTIMEREXPIRED: case ERR_FSM: uk = 1; break; default: logit(LOG_CRIT, "%s: received notification, unknown errcode " "%u, subcode %u", p, errcode, subcode); free(p); return; } if (uk) logit(LOG_CRIT, "%s: received notification: %s, unknown subcode %u", p, errnames[errcode], subcode); else { if (suberrname == NULL) logit(LOG_CRIT, "%s: received notification: %s", p, errnames[errcode]); else logit(LOG_CRIT, "%s: received notification: %s, %s", p, errnames[errcode], suberrname); } free(p); }
void log_peer_warnx(const struct peer_config *peer, const char *emsg, ...) { char *p, *nfmt; va_list ap; p = log_fmt_peer(peer); if (asprintf(&nfmt, "%s: %s", p, emsg) == -1) fatal(NULL); va_start(ap, emsg); vlog(LOG_CRIT, nfmt, ap); va_end(ap); free(p); free(nfmt); }
void log_conn_attempt(const struct peer *peer, struct sockaddr *sa) { char *p; const char *b; if (peer == NULL) { /* connection from non-peer, drop */ b = log_sockaddr(sa); logit(LOG_INFO, "connection from non-peer %s refused", b); } else { p = log_fmt_peer(&peer->conf); logit(LOG_INFO, "Connection attempt from %s while session is " "in state %s", p, statenames[peer->state]); free(p); } }
void log_conn_attempt(const struct peer *peer, struct sockaddr *sa) { char *p; const char *b; if (peer == NULL) { /* connection from non-peer, drop */ b = log_sockaddr(sa); logit(LOG_INFO, "connection from non-peer %s refused", b); } else { /* only log if there is a chance that the session may come up */ if (peer->conf.down && peer->state == STATE_IDLE) return; p = log_fmt_peer(&peer->conf); logit(LOG_INFO, "Connection attempt from %s while session is " "in state %s", p, statenames[peer->state]); free(p); } }
void log_statechange(struct peer *peer, enum session_state nstate, enum session_events event) { char *p; /* don't clutter the logs with constant Connect -> Active -> Connect */ if (nstate == STATE_CONNECT && peer->state == STATE_ACTIVE && peer->prev_state == STATE_CONNECT) return; if (nstate == STATE_ACTIVE && peer->state == STATE_CONNECT && peer->prev_state == STATE_ACTIVE) return; peer->lasterr = 0; p = log_fmt_peer(&peer->conf); logit(LOG_INFO, "%s: state change %s -> %s, reason: %s", p, statenames[peer->state], statenames[nstate], eventnames[event]); free(p); }