#ifndef MEMCOUNT_H
#define MEMCOUNT_H
/*
* memcount.h - Memory usage/accounting
* Copyright (C) 2005 Trevor Talbot and
* the DALnet coding team
*
* See file AUTHORS in IRC package for additional names of
* the programmers.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 1, or (at your option)
* any later version.
*
* 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.
*/
/* $Id: memcount.h,v 1.4 2005/07/09 03:09:11 sheik Exp $ */
#include "struct.h"
#include "h.h"
#include "blalloc.h"
#include "throttle.h"
typedef struct {
int c;
u_long m;
} MemCount;
#ifdef MEMTRACE
typedef struct {
int dummy; /* fucking gcc */
MemCount allocated;
MemCount management;
} TracedCount;
#endif
/* BlockHeap */
typedef struct {
const char *file;
MemCount blocks;
MemCount objects;
MemCount pool;
MemCount management;
MemCount total;
u_long objsize;
int knownobjs; /* used during reporting */
} MCBlockHeap;
/* GenericHash */
typedef struct {
const char *file;
MemCount hashtable;
MemCount buckets;
MemCount total;
int e_hashents;
} MCGenericHash;
/* blalloc.c */
typedef struct {
const char *file;
/* MEMTRACE: block heap allocator */
} MCblalloc;
/* channel.c */
typedef struct {
const char *file;
/* file local */
MemCount bans;
#ifdef EXEMPT_LISTS
MemCount exempts;
#endif
#ifdef INVITE_LISTS
MemCount invites;
#endif
MemCount lopts;
MemCount total;
/* static resources */
MemCount s_scratch;
/* external resources */
int e_channels;
int e_chanmembers;
int e_inv_links;
int e_lopt_links;
int e_dlinks;
#ifdef FLUD
int e_fludbots;
#endif
} MCchannel;
/* clientlist.c */
typedef struct {
const char *file;
/* external resources */
int e_server_dlinks;
int e_oper_dlinks;
int e_recvq_dlinks;
} MCclientlist;
/* clones.c */
typedef struct {
const char *file;
/* external resources */
int e_cloneents;
BlockHeap *e_heap;
void *e_hash;
} MCclones;
#ifdef HAVE_ENCRYPTION_ON
/* dh.c */
typedef struct {
const char *file;
/* referenced externally */
u_long m_dhsession_size;
} MCdh;
#endif
/* fds.c */
typedef struct {
const char *file;
/* static resources */
MemCount s_fdlist;
} MCfds;
/* hash.c */
typedef struct {
const char *file;
/* file local */
MemCount watches;
MemCount total;
/* static resources */
MemCount s_clienthash;
MemCount s_channelhash;
MemCount s_watchhash;
/* external resources */
int e_links;
} MChash;
/* hide.c */
typedef struct {
const char *file;
/* file local */
MemCount fakelinks;
MemCount total;
/* external resources */
int e_links;
} MChide;
/* ircd.c */
typedef struct {
const char *file;
/* static resources */
MemCount s_confbuf;
} MCircd;
/* list.c */
typedef struct {
const char *file;
/* external resources */
BlockHeap *e_localclients_heap;
BlockHeap *e_remoteclients_heap;
BlockHeap *e_links_heap;
BlockHeap *e_dlinks_heap;
BlockHeap *e_chanmembers_heap;
BlockHeap *e_users_heap;
BlockHeap *e_channels_heap;
#ifdef FLUD
BlockHeap *e_fludbots_heap;
#endif
/* MEMTRACE: allocates servers, classes, opers, connects, allows, ports,
and conf_me */
} MClist;
/* m_services.c */
typedef struct {
const char *file;
/* MEMTRACE: allocates simban reasons */
} MCm_services;
/* modules.c */
typedef struct {
const char *file;
#ifdef USE_HOOKMODULES
MemCount modules;
MemCount hooks;
MemCount total;
int e_dlinks;
/* MEMTRACE: module allocator interface */
#endif
} MCmodules;
/* parse.c */
typedef struct {
const char *file;
/* file local */
MemCount msgnodes;
MemCount total;
/* static resources */
MemCount s_bufs;
MemCount s_msgtab;
} MCparse;
#ifdef RWHO_PROBABILITY
/* probability.c */
typedef struct {
const char *file;
/* static resources */
MemCount s_prob;
} MCprobability;
#endif
#ifdef HAVE_ENCRYPTION_ON
/* rc4.c */
typedef struct {
const char *file;
/* referenced externally */
u_long m_rc4state_size;
} MCrc4;
#endif
/* res.c */
typedef struct {
const char *file;
/* file local */
MemCount cached;
MemCount requests;
MemCount total;
/* static resources */
MemCount s_cachehash;
MemCount s_requesthash;
} MCres;
/* s_bsd.c */
typedef struct {
const char *file;
/* file local */
MemCount listeners;
MemCount total;
/* static resources */
MemCount s_readbuf;
MemCount s_local;
} MCs_bsd;
/* s_conf.c */
typedef struct {
const char *file;
/* file local */
MemCount connects;
MemCount allows;
MemCount me;
MemCount opers;
MemCount ports;
MemCount classes;
MemCount uservers;
MemCount modules;
MemCount total;
/* MEMTRACE: subtract resources from list.c
allocates simban/userban reasons */
} MCs_conf;
/* s_serv.c */
typedef struct {
const char *file;
/* file local */
MemCount motd;
MemCount shortmotd;
MemCount help;
MemCount total;
/* MEMTRACE: allocates simban and userban reasons */
} MCs_serv;
/* s_user.c */
typedef struct {
const char *file;
/* file local */
MemCount aways;
MemCount silences;
#if (RIDICULOUS_PARANOIA_LEVEL>=1)
MemCount opermasks;
#endif
MemCount servers;
MemCount total;
/* external resources */
int e_local_clients;
int e_remote_clients;
int e_users;
#ifdef FLUD
int e_fludbots;
int e_flud_links;
#endif
int e_channel_links;
int e_watch_links;
int e_invite_links;
int e_silence_links;
int e_dccallow_links;
#ifdef HAVE_ENCRYPTION_ON
int e_dh_sessions;
int e_rc4states;
#endif
int e_zipin_sessions;
int e_zipout_sessions;
/* MEMTRACE: subtract resources from list.c */
} MCs_user;
/* sbuf.c */
typedef struct {
const char *file;
/* file local */
MemCount smallbufpool;
MemCount smallbufs;
MemCount largebufpool;
MemCount largebufs;
MemCount userpool;
MemCount users;
MemCount bufblocks;
MemCount userblocks;
MemCount bufheaders;
MemCount management;
MemCount total;
} MCsbuf;
/* scache.c */
typedef struct {
const char *file;
/* file local */
MemCount cached;
MemCount total;
/* static resources */
MemCount s_hash;
} MCscache;
/* send.c */
typedef struct {
const char *file;
/* local resources */
MemCount s_bufs;
} MCsend;
/* throttle.c */
typedef struct {
const char *file;
/* external resources */
BlockHeap *e_hashent_heap;
#ifdef THROTTLE_ENABLE
BlockHeap *e_throttle_heap;
void *e_throttle_hash;
int e_throttles;
#endif
/* MEMTRACE: generic hash allocator */
} MCthrottle;
/* userban.c */
typedef struct {
const char *file;
/* local resources */
MemCount lists;
MemCount entries;
MemCount cidr4big_userbans;
MemCount cidr4_userbans;
MemCount hosthash_userbans;
MemCount hostwild_userbans;
MemCount iphash_userbans;
MemCount ipwild_userbans;
MemCount userbans;
MemCount nickhash_simbans;
MemCount nickwild_simbans;
MemCount chanhash_simbans;
MemCount chanwild_simbans;
MemCount gcoshash_simbans;
MemCount gcoswild_simbans;
MemCount simbans;
MemCount total;
} MCuserban;
/* whowas.c */
typedef struct {
const char *file;
/* static resources */
MemCount s_whowas;
MemCount s_hash;
} MCwhowas;
/* zlink.c */
typedef struct {
const char *file;
/* static resources */
MemCount s_bufs;
/* referenced externally */
u_long m_insession_size;
u_long m_outsession_size;
} MCzlink;
#ifdef MEMTRACE
/* implemented in support.c */
u_long memtrace_count(TracedCount *, const char *);
void memtrace_report(aClient *, const char *);
void memtrace_reset(void);
#endif
void report_memory_usage(aClient *, int);
int mc_links(Link *);
int mc_dlinks(DLink *);
u_long memcount_BlockHeap(BlockHeap *, MCBlockHeap *);
u_long memcount_GenericHash(hash_table *, MCGenericHash *);
u_long memcount_blalloc(MCblalloc *);
u_long memcount_channel(MCchannel *);
u_long memcount_clientlist(MCclientlist *);
u_long memcount_clones(MCclones *);
#ifdef HAVE_ENCRYPTION_ON
u_long memcount_dh(MCdh *);
#endif
u_long memcount_fds(MCfds *);
u_long memcount_hash(MChash *);
u_long memcount_hide(MChide *);
u_long memcount_ircd(MCircd *);
u_long memcount_list(MClist *);
u_long memcount_m_services(MCm_services *);
u_long memcount_modules(MCmodules *);
u_long memcount_parse(MCparse *);
#ifdef RWHO_PROBABILITY
u_long memcount_probability(MCprobability *);
#endif
#ifdef HAVE_ENCRYPTION_ON
u_long memcount_rc4(MCrc4 *);
#endif
u_long memcount_res(MCres *);
u_long memcount_s_bsd(MCs_bsd *);
u_long memcount_s_conf(MCs_conf *);
u_long memcount_s_serv(MCs_serv *);
u_long memcount_s_user(MCs_user *);
u_long memcount_sbuf(MCsbuf *);
u_long memcount_scache(MCscache *);
u_long memcount_send(MCsend *);
u_long memcount_throttle(MCthrottle *);
u_long memcount_userban(MCuserban *);
u_long memcount_whowas(MCwhowas *);
u_long memcount_zlink(MCzlink *);
#endif /* MEMCOUNT_H */
syntax highlighted by Code2HTML, v. 0.9.1