void l2tp_pkt_free(struct l2tp_packet *pkt) { int buf; L2TP_DEBUG(L2TP_DATA, "%s: pkt=%p, msg=%d tid=%hu sid=%hu ns=%hu nr=%hu", __func__, pkt, pkt->msg_type, pkt->tunnel_id, pkt->session_id, pkt->nr, pkt->ns); if (pkt->num_bufs > 0) { for (buf = 0; buf < pkt->num_bufs; buf++) { if (pkt->iov[buf].iov_base != NULL) { #ifdef DEBUG if (pkt->iov[buf].iov_len == 0) { l2tp_log(LOG_ERR, "Freeing zero length buffer %p, index %d?", pkt->iov[buf].iov_base, buf); } USL_POISON_MEMORY(pkt->iov[buf].iov_base, 0xe8, pkt->iov[buf].iov_len); #endif free(pkt->iov[buf].iov_base); } else { break; } } } USL_POISON_MEMORY(pkt, 0xe7, sizeof(*pkt)); free(pkt); }
bool_t l2tp_system_get_1_svc(struct l2tp_api_system_msg_data *msg, struct svc_req *req) { int type; struct l2tp_api_system_msg_stats *stat; memset(msg, 0, sizeof(*msg)); msg->config.trace_flags = l2tp_opt_trace_flags; msg->config.udp_port = l2tp_opt_udp_port; msg->config.flags = l2tp_opt_flags; /* catch uncopied data errors */ USL_POISON_MEMORY(&msg->status.stats, 0xaa, sizeof(msg->status.stats)); msg->status.stats.total_sent_control_frames = l2tp_stats.total_sent_control_frames; msg->status.stats.total_rcvd_control_frames = l2tp_stats.total_rcvd_control_frames; msg->status.stats.total_control_frame_send_fails = l2tp_stats.total_control_frame_send_fails; msg->status.stats.total_retransmitted_control_frames = l2tp_stats.total_retransmitted_control_frames; msg->status.stats.event_queue_full_errors = l2tp_stats.event_queue_full_errors; msg->status.stats.short_frames = l2tp_stats.short_frames; msg->status.stats.wrong_version_frames = l2tp_stats.wrong_version_frames; msg->status.stats.unexpected_data_frames = l2tp_stats.unexpected_data_frames; msg->status.stats.bad_rcvd_frames = l2tp_stats.bad_rcvd_frames; msg->status.stats.no_control_frame_resources = l2tp_stats.no_control_frame_resources; msg->status.stats.no_peer_resources = l2tp_stats.no_peer_resources; msg->status.stats.no_tunnel_resources = l2tp_stats.no_tunnel_resources; msg->status.stats.no_session_resources = l2tp_stats.no_session_resources; msg->status.stats.no_ppp_resources = l2tp_stats.no_ppp_resources; msg->status.stats.auth_fails = l2tp_stats.auth_fails; msg->status.stats.no_matching_tunnel_id_discards = l2tp_stats.no_matching_tunnel_id_discards; msg->status.stats.no_matching_session_id_discards = l2tp_stats.no_matching_session_id_discards; msg->status.stats.mismatched_tunnel_ids = l2tp_stats.mismatched_tunnel_ids; msg->status.stats.mismatched_session_ids = l2tp_stats.mismatched_session_ids; msg->status.stats.encode_message_fails = l2tp_stats.encode_message_fails; msg->status.stats.ignored_avps = l2tp_stats.ignored_avps; msg->status.stats.vendor_avps = l2tp_stats.vendor_avps; msg->status.stats.illegal_messages = l2tp_stats.illegal_messages; msg->status.stats.unsupported_messages = l2tp_stats.unsupported_messages; msg->status.stats.messages.messages_len = L2TP_API_MSG_TYPE_COUNT; msg->status.stats.messages.messages_val = calloc(L2TP_API_MSG_TYPE_COUNT, sizeof(*msg->status.stats.messages.messages_val)); if (msg->status.stats.messages.messages_val == NULL) { msg->status.stats.messages.messages_len = 0; } stat = msg->status.stats.messages.messages_val; for (type = 0; type < msg->status.stats.messages.messages_len; type++) { stat->rx = l2tp_stats.messages[type].rx; stat->tx = l2tp_stats.messages[type].tx; stat->rx_bad = l2tp_stats.messages[type].rx_bad; stat++; } msg->status.stats.too_many_tunnels = l2tp_stats.too_many_tunnels; msg->status.stats.too_many_sessions = l2tp_stats.too_many_sessions; msg->status.stats.tunnel_setup_failures = l2tp_stats.tunnel_setup_failures; msg->status.stats.session_setup_failures = l2tp_stats.session_setup_failures; l2tp_tunnel_globals_get(msg); l2tp_session_globals_get(msg); return TRUE; }