#ifndef NETDUMPCLIENT_H
#define NETDUMPCLIENT_H
#include <glib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "netconsole.h"
typedef struct _NetdumpClient NetdumpClient;
#define MAGIC_SIZE 8
#define IP_ADDR_SIZE 16 /* "255:255:255:255\0" */
typedef struct {
guint32 page_nr;
char *data;
guint32 sections_received;
guint32 request_nr;
guint n_timeouts;
guint timeout_tag;
guint timeout_delay;
} OutstandingPage;
struct _NetdumpClient {
guint32 ip;
gboolean just_reboot;
guint32 outstanding_request;
guint timeout_tag;
guint n_timeouts;
guint n_handshakes;
guint timeout_delay;
gboolean got_log_packet;
unsigned char magic_value[MAGIC_SIZE];
/* Host data */
guint32 nr_pages; /* max page frame number */
guint32 page_size;
guint64 page_offset;
/* Version 5 additions */
u32 effective_version;
u32 machine_type;
u32 totalram_pages;
u32 next_avail_page;
u64 task_struct;
u64 netdump_magic;
unsigned char ip_addr[IP_ADDR_SIZE]; /* for syslog strings only */
gchar *regs;
guint regs_len;
guint32 current_page;
OutstandingPage *outstanding;
int n_outstanding;
void (*timeout) (NetdumpClient *client,
guint32 request_nr);
void (*process_packet) (NetdumpClient *client,
struct sockaddr_in *addr,
unsigned char *buffer,
int buf_len);
/* Coredump data: */
int dump_fd;
size_t data_offset;
char *dump_dir;
};
NetdumpClient *netdump_client_new (guint32 ip,
const char *dir,
const char magic[MAGIC_SIZE],
gboolean just_reboot,
reply_t *reply,
char *msg);
void netdump_client_destroy (NetdumpClient *client,
int reboot);
guint netdump_client_hash (gconstpointer key);
gint netdump_client_compare (gconstpointer a,
gconstpointer b);
#endif
syntax highlighted by Code2HTML, v. 0.9.1