/* $Id: account.c,v 0.3 2000/12/20 14:29:45 kjc Exp $ */
/*
* Copyright (c) 1996-2000
* Sony Computer Science Laboratories, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms of parts of or the
* whole original or derived work are permitted provided that the above
* copyright notice is retained and the original work is properly
* attributed to the author. The name of the author may not be used to
* endorse or promote products derived from this software without
* specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
/* account.c -- a simple wrapper of the node module for network accounting. */
#include <sys/types.h>
#include "ttt.h"
#include "ttt_node.h"
#include "ttt_account.h"
static struct t_node *eth_root, *ip_root, *udp_root, *tcp_root, *host_root;
#ifdef IPV6
static struct t_node *ip6_root, *udp6_root, *tcp6_root, *host6_root;
#endif
void netacc_init(void)
{
node_init();
eth_root = node_createroot(TTTTYPE_ETHER);
ip_root = node_createroot(TTTTYPE_IP);
udp_root = node_createroot(TTTTYPE_UDP);
tcp_root = node_createroot(TTTTYPE_TCP);
host_root = node_createroot(TTTTYPE_IPHOST);
#ifdef IPV6
ip6_root = node_createroot(TTTTYPE_IPV6);
udp6_root = node_createroot(TTTTYPE_UDPV6);
tcp6_root = node_createroot(TTTTYPE_TCPV6);
host6_root = node_createroot(TTTTYPE_IPV6HOST);
#endif
}
void netacc_cleanup(void)
{
node_cleanup();
node_destroyroot(eth_root);
node_destroyroot(ip_root);
node_destroyroot(udp_root);
node_destroyroot(tcp_root);
node_destroyroot(host_root);
#ifdef IPV6
node_destroyroot(ip6_root);
node_destroyroot(udp6_root);
node_destroyroot(tcp6_root);
node_destroyroot(host6_root);
#endif
}
int eth_addsize(int etype, int pkt_len)
{
struct t_node *np;
long id[4];
id[0] = etype;
#ifdef IPV6
id[1] = id[2] = id[3] = 0;
#endif
np = node_findnode(eth_root, TTTTYPE_ETHER, id);
return node_addsize(np, pkt_len);
}
int ip_addsize(int proto, int pkt_len)
{
struct t_node *np;
long id[4];
id[0] = proto;
#ifdef IPV6
id[1] = id[2] = id[3] = 0;
#endif
np = node_findnode(ip_root, TTTTYPE_IP, id);
return node_addsize(np, pkt_len);
}
int udp_addsize(int port, int pkt_len)
{
struct t_node *np;
long id[4];
id[0] = port;
#ifdef IPV6
id[1] = id[2] = id[3] = 0;
#endif
np = node_findnode(udp_root, TTTTYPE_UDP, id);
return node_addsize(np, pkt_len);
}
int tcp_addsize(int port, int pkt_len)
{
struct t_node *np;
long id[4];
id[0] = port;
#ifdef IPV6
id[1] = id[2] = id[3] = 0;
#endif
np = node_findnode(tcp_root, TTTTYPE_TCP, id);
return node_addsize(np, pkt_len);
}
int host_addsize(u_long addr, int pkt_len)
{
struct t_node *np;
u_long id[4];
id[0] = addr;
#ifdef IPV6
id[1] = id[2] = id[3] = 0;
#endif
np = node_findnode(host_root, TTTTYPE_IPHOST, id);
return node_addsize(np, pkt_len);
}
#ifdef IPV6
int ipv6_addsize(int proto, int pkt_len)
{
struct t_node *np;
long id[4];
id[0] = proto;
id[1] = id[2] = id[3] = 0;
np = node_findnode(ip6_root, TTTTYPE_IPV6, id);
return node_addsize(np, pkt_len);
}
int udpv6_addsize(int port, int pkt_len)
{
struct t_node *np;
long id[4];
id[0] = port;
id[1] = id[2] = id[3] = 0;
np = node_findnode(udp6_root, TTTTYPE_UDPV6, id);
return node_addsize(np, pkt_len);
}
int tcpv6_addsize(int port, int pkt_len)
{
struct t_node *np;
long id[4];
id[0] = port;
id[1] = id[2] = id[3] = 0;
np = node_findnode(tcp6_root, TTTTYPE_TCPV6, id);
return node_addsize(np, pkt_len);
}
int hostv6_addsize(u_long *addr, int pkt_len)
{
struct t_node *np;
np = node_findnode(host6_root, TTTTYPE_IPV6HOST, addr);
return node_addsize(np, pkt_len);
}
#endif /* IPV6 */
syntax highlighted by Code2HTML, v. 0.9.1