/* mtr -- a network diagnostic tool Copyright (C) 2016 Matt Kimball This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef CMDPIPE_H #define CMDPIPE_H #include "mtr.h" #define COMMAND_BUFFER_SIZE 4096 #define PACKET_REPLY_BUFFER_SIZE 4096 /* We use a pipe to the mtr-packet subprocess to generate probes */ struct packet_command_pipe_t { /* the process id of mtr-packet */ pid_t pid; /* the end of the pipe we read for replies */ int read_fd; /* the end of the pipe we write for commands */ int write_fd; /* storage for incoming replies */ char reply_buffer[PACKET_REPLY_BUFFER_SIZE]; /* the number of bytes currently used in reply_buffer */ size_t reply_buffer_used; }; typedef void ( *probe_reply_func_t) ( struct mtr_ctl * ctl, int sequence, struct mplslen * mpls, ip_t * addr, int round_trip_time); int open_command_pipe( struct mtr_ctl *ctl, struct packet_command_pipe_t *cmdpipe); void close_command_pipe( struct packet_command_pipe_t *cmdpipe); void send_probe_command( struct mtr_ctl *ctl, struct packet_command_pipe_t *cmdpipe, ip_t * address, ip_t * localaddress, int packet_size, int sequence, int time_to_live); void handle_command_replies( struct mtr_ctl *ctl, struct packet_command_pipe_t *cmdpipe, probe_reply_func_t reply_func); #endif