int main(int argc, char *argv[])
{
struct ipt_ACCOUNT_context ctx;
- struct ipt_account_handle_ip *entry;
+ struct ipt_acc_handle_ip *entry;
int i;
- char optchar, doHandleUsage=0, doHandleFree=0, doTableNames=0, doFlush=0, doContinue=0;
+ char optchar, doHandleUsage=0, doHandleFree=0, doTableNames=0,
+ doFlush=0, doContinue=0;
+
char *table_name = NULL;
printf("\nipt_ACCOUNT userspace accounting tool v%s\n\n", VERSION);
printf("get_table_names failed: %s\n", ctx.error_str);
exit (-1);
}
- char *name;
- while ((name = ipt_ACCOUNT_get_next_name(&ctx)) != NULL)
+ const char *name;
+ while ((name = ipt_ACCOUNT_get_next_name(&ctx)) != 0)
printf("Found table: %s\n", name);
}
exit (-1);
}
- printf("Run #%d - %u %s found\n", i, ctx.handle.itemcount, ctx.handle.itemcount == 1 ? "item" : "items");
+ printf("Run #%d - %u %s found\n", i, ctx.handle.itemcount,
+ ctx.handle.itemcount == 1 ? "item" : "items");
// Output and free entries
while ((entry = ipt_ACCOUNT_get_next_entry(&ctx)) != NULL)
{
printf("IP: %s SRC packets: %u bytes: %u DST packets: %u bytes: %u\n",
- addr_to_dotted(entry->ip), entry->src_packets, entry->src_bytes, entry->dst_packets, entry->dst_bytes);
+ addr_to_dotted(entry->ip), entry->src_packets, entry->src_bytes,
+ entry->dst_packets, entry->dst_bytes);
}
if (doContinue)
memset (ctx, 0, sizeof(struct ipt_ACCOUNT_context));
ctx->sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
- if (ctx->sockfd < 0)
- {
+ if (ctx->sockfd < 0) {
ctx->sockfd = -1;
- ctx->error_str = "Can't open socket to kernel. Permission denied or ipt_ACCOUNT module not loaded";
+ ctx->error_str = "Can't open socket to kernel. "
+ "Permission denied or ipt_ACCOUNT module not loaded";
return -1;
}
// 4096 bytes default buffer should save us from reallocations
// as it fits 200 concurrent active clients
- if((ctx->data = (void *)malloc(IPT_ACCOUNT_MIN_BUFSIZE)) == NULL)
- {
+ if((ctx->data = (void *)malloc(IPT_ACCOUNT_MIN_BUFSIZE)) == NULL) {
close (ctx->sockfd);
ctx->sockfd = -1;
ctx->error_str = "Out of memory for data buffer";
void ipt_ACCOUNT_free_entries(struct ipt_ACCOUNT_context *ctx)
{
- if (ctx->handle.handle_nr != -1)
- {
- setsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_SET_ACCOUNT_HANDLE_FREE, &ctx->handle, sizeof (struct ipt_acc_handle_sockopt));
+ if (ctx->handle.handle_nr != -1) {
+ setsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_SET_ACCOUNT_HANDLE_FREE,
+ &ctx->handle, sizeof (struct ipt_acc_handle_sockopt));
ctx->handle.handle_nr = -1;
}
ctx->sockfd =-1;
}
-int ipt_ACCOUNT_read_entries(struct ipt_ACCOUNT_context *ctx, const char *table, char dont_flush)
+int ipt_ACCOUNT_read_entries(struct ipt_ACCOUNT_context *ctx,
+ const char *table, char dont_flush)
{
unsigned int s = sizeof (struct ipt_acc_handle_sockopt);
int rtn;
// Get table information
if (!dont_flush)
- rtn = getsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_GET_ACCOUNT_PREPARE_READ_FLUSH, &ctx->handle, &s);
+ rtn = getsockopt(ctx->sockfd, IPPROTO_IP,
+ IPT_SO_GET_ACCOUNT_PREPARE_READ_FLUSH, &ctx->handle, &s);
else
- rtn = getsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_GET_ACCOUNT_PREPARE_READ, &ctx->handle, &s);
+ rtn = getsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_GET_ACCOUNT_PREPARE_READ,
+ &ctx->handle, &s);
- if (rtn < 0)
- {
- ctx->error_str = "Can't get table information from kernel. Is the table existing?";
+ if (rtn < 0) {
+ ctx->error_str = "Can't get table information from kernel. "
+ "Is the table existing?";
return -1;
}
// Check data buffer size
ctx->pos = 0;
- unsigned int new_size = ctx->handle.itemcount * sizeof(struct ipt_acc_handle_ip);
+ unsigned int new_size;
+ new_size = ctx->handle.itemcount * sizeof(struct ipt_acc_handle_ip);
// We want to prevent reallocations all the time
if (new_size < IPT_ACCOUNT_MIN_BUFSIZE)
new_size = IPT_ACCOUNT_MIN_BUFSIZE;
// Reallocate if it's too small or twice as big
- if (ctx->data_size < new_size || ctx->data_size > new_size*2)
- {
+ if (ctx->data_size < new_size || ctx->data_size > new_size*2) {
// Free old buffer
free (ctx->data);
ctx->data_size = 0;
- if ((ctx->data = (void*)malloc(new_size)) == NULL)
- {
+ if ((ctx->data = (void*)malloc(new_size)) == NULL) {
ctx->error_str = "Out of memory for data buffer";
ipt_ACCOUNT_free_entries(ctx);
return -1;
// Copy data from kernel
memcpy(ctx->data, &ctx->handle, sizeof(struct ipt_acc_handle_sockopt));
- rtn = getsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_GET_ACCOUNT_GET_DATA, ctx->data, &ctx->data_size);
- if (rtn < 0)
- {
- ctx->error_str = "Can't get data from kernel. Check /var/log/messages for details.";
+ rtn = getsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_GET_ACCOUNT_GET_DATA,
+ ctx->data, &ctx->data_size);
+ if (rtn < 0) {
+ ctx->error_str = "Can't get data from kernel. "
+ "Check /var/log/messages for details.";
ipt_ACCOUNT_free_entries(ctx);
return -1;
}
// Free kernel handle but don't reset pos/itemcount
- setsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_SET_ACCOUNT_HANDLE_FREE, &ctx->handle, sizeof (struct ipt_acc_handle_sockopt));
+ setsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_SET_ACCOUNT_HANDLE_FREE,
+ &ctx->handle, sizeof (struct ipt_acc_handle_sockopt));
ctx->handle.handle_nr = -1;
return 0;
return NULL;
// Get next entry
- rtn = (struct ipt_acc_handle_ip *)(ctx->data + ctx->pos*sizeof(struct ipt_acc_handle_ip));
+ rtn = (struct ipt_acc_handle_ip *)(ctx->data + ctx->pos
+ * sizeof(struct ipt_acc_handle_ip));
ctx->pos++;
return rtn;
int ipt_ACCOUNT_get_handle_usage(struct ipt_ACCOUNT_context *ctx)
{
unsigned int s = sizeof (struct ipt_acc_handle_sockopt);
- if (getsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_GET_ACCOUNT_GET_HANDLE_USAGE, &ctx->handle, &s) < 0)
- {
+ if (getsockopt(ctx->sockfd, IPPROTO_IP,
+ IPT_SO_GET_ACCOUNT_GET_HANDLE_USAGE, &ctx->handle, &s) < 0) {
ctx->error_str = "Can't get handle usage information from kernel";
return -1;
}
int ipt_ACCOUNT_free_all_handles(struct ipt_ACCOUNT_context *ctx)
{
- if (setsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_SET_ACCOUNT_HANDLE_FREE_ALL, NULL, 0) < 0)
- {
+ if (setsockopt(ctx->sockfd, IPPROTO_IP,
+ IPT_SO_SET_ACCOUNT_HANDLE_FREE_ALL, NULL, 0) < 0) {
ctx->error_str = "Can't free all kernel handles";
return -1;
}
int ipt_ACCOUNT_get_table_names(struct ipt_ACCOUNT_context *ctx)
{
- int rtn = getsockopt(ctx->sockfd, IPPROTO_IP, IPT_SO_GET_ACCOUNT_GET_TABLE_NAMES, ctx->data, &ctx->data_size);
- if (rtn < 0)
- {
- ctx->error_str = "Can't get table names from kernel. Out of memory, MINBUFISZE too small?";
+ int rtn = getsockopt(ctx->sockfd, IPPROTO_IP,
+ IPT_SO_GET_ACCOUNT_GET_TABLE_NAMES,
+ ctx->data, &ctx->data_size);
+ if (rtn < 0) {
+ ctx->error_str = "Can't get table names from kernel. Out of memory, "
+ "MINBUFISZE too small?";
return -1;
}
ctx->pos = 0;