2#ifndef CLICK_NAMEINFO_HH
3#define CLICK_NAMEINFO_HH
4#include <click/args.hh>
86 size_t value_size,
bool create);
127 static bool query(uint32_t type,
const Element *context,
128 const String &name,
void *value_store,
size_t value_size);
148 const String &name, int32_t *value_store);
152 const String &name, uint32_t *value_store);
168 const void *value,
size_t value_size);
202 static inline bool define(uint32_t type,
const Element *context,
203 const String &name,
const void *value,
size_t value_size);
221 const String &name, int32_t value);
223#if CLICK_NAMEDB_CHECK
235 inline NameDB *install_dynamic_sentinel() {
return (
NameDB *)
this; }
238#if CLICK_NAMEDB_CHECK
239 uintptr_t _check_generation;
280 return _context_parent;
326#if CLICK_NAMEDB_CHECK
342#if CLICK_NAMEDB_CHECK
343 uintptr_t _check_generation;
370 const Entry *entry,
size_t nentry);
390#if CLICK_NAMEDB_CHECK
398 const Entry *_entries;
441#if CLICK_NAMEDB_CHECK
453 void *find(
const String &name,
bool create);
461 : _type(type), _context(context), _value_size(vsize),
462 _context_parent(0), _context_sibling(0), _context_child(0), _installed(0)
464#if CLICK_NAMEDB_CHECK
465 _check_generation = 0;
467 assert(_value_size > 0);
472 :
NameDB(type, context, sizeof(entry->value)), _entries(entry), _nentries(nentry)
478 :
NameDB(type, context, vsize), _sorted(0)
485 return revquery(type, e, &value,
sizeof(value));
492 return db->define(name, value, vsize);
500 if (
NameDB *db =
getdb(type, e,
sizeof(value),
true))
501 return db->define(name, &value,
sizeof(value));
509 return define(name, &value,
sizeof(value));
521 &value,
sizeof(value))
522 ||
IntArg().parse(str, value, args);
Argument context class.
Definition args.hh:31
const Element * context() const
Return the element context.
Definition args.hh:51
A modifiable database mapping names to arbitrary values.
Definition nameinfo.hh:403
DynamicNameDB(uint32_t type, const String &context, size_t value_size)
Construct a dynamic name database.
Definition nameinfo.hh:477
String revquery(const void *value, size_t value_size)
Query this database for a given value.
Definition nameinfo.cc:284
bool query(const String &name, void *value, size_t value_size)
Query this database for a given name.
Definition nameinfo.cc:261
bool define(const String &name, const void *value, size_t value_size)
Define a name in this database to a given value.
Definition nameinfo.cc:272
Base class for Click elements.
Definition element.hh:42
Error reporting class.
Definition error.hh:90
Parser class for integers.
Definition args.hh:1130
Superclass for databases mapping names to values.
Definition nameinfo.hh:245
bool define_int(const String &name, int32_t value)
Define a name in this database to a 32-bit integer value.
Definition nameinfo.hh:507
NameDB * context_parent() const
Return the contextual parent database, if any.
Definition nameinfo.hh:279
virtual bool query(const String &name, void *value, size_t value_size)=0
Query this database for a given name.
uint32_t type() const
Return the database type.
Definition nameinfo.hh:264
NameDB(uint32_t type, const String &context, size_t value_size)
Construct a database.
Definition nameinfo.hh:460
virtual String revquery(const void *value, size_t value_size)
Query this database for a given value.
Definition nameinfo.cc:150
size_t value_size() const
Return the database's value size.
Definition nameinfo.hh:284
virtual bool define(const String &name, const void *value, size_t value_size)
Define a name in this database to a given value.
Definition nameinfo.cc:144
virtual ~NameDB()
Destroy a database.
Definition nameinfo.hh:259
const String & context() const
Return the database's compound element context as a string.
Definition nameinfo.hh:269
Manages Click name databases.
Definition nameinfo.hh:11
static bool query_int(uint32_t type, const Element *context, const String &name, int32_t *value_store)
Query installed databases for name, returning a 32-bit integer value.
Definition nameinfo.cc:516
NameInfo()
Construct a NameInfo element.
Definition nameinfo.cc:294
static bool define(uint32_t type, const Element *context, const String &name, const void *value, size_t value_size)
Define name to equal value in the installed databases.
Definition nameinfo.hh:489
static bool define_int(uint32_t type, const Element *context, const String &name, int32_t value)
Define name to equal 32-bit integer value in the installed databases.
Definition nameinfo.hh:498
static NameDB * getdb(uint32_t type, const Element *context, size_t value_size, bool create)
Find or create a name database.
Definition nameinfo.cc:416
static void uninstalldb(NameDB *db)
Uninstall a name database.
Definition nameinfo.cc:456
static bool query(uint32_t type, const Element *context, const String &name, void *value_store, size_t value_size)
Query installed databases for name.
Definition nameinfo.cc:500
DBType
Known name database types.
Definition nameinfo.hh:38
@ T_SCHEDULEINFO
ScheduleInfo database.
Definition nameinfo.hh:40
@ T_ICMP_CODE
ICMP code names database.
Definition nameinfo.hh:53
@ T_TCP_OPT
TCP option names database.
Definition nameinfo.hh:50
@ T_SCRIPT_INSN
Script instruction names database.
Definition nameinfo.hh:42
@ T_UDP_FIELDNAME
UDP field names database.
Definition nameinfo.hh:60
@ T_IP_ADDR
IP address names database.
Definition nameinfo.hh:46
@ T_SIGNO
User-level signal names database.
Definition nameinfo.hh:43
@ T_IP_PREFIX
IP prefix names database.
Definition nameinfo.hh:47
@ T_IP_FIELDNAME
Starting point for IP per-protocol field names databases.
Definition nameinfo.hh:57
@ T_NONE
Nonexistent names database.
Definition nameinfo.hh:39
@ T_IP6_PREFIX
IPv6 prefix names database.
Definition nameinfo.hh:62
@ T_IP6_ADDR
IPv6 address names database.
Definition nameinfo.hh:61
@ T_TCP_FIELDNAME
TCP field names database.
Definition nameinfo.hh:59
@ T_ICMP_TYPE
ICMP type names database.
Definition nameinfo.hh:52
@ T_SPINLOCK
Spinlock names database.
Definition nameinfo.hh:44
@ T_IP_PROTO
IP protocol names database.
Definition nameinfo.hh:48
@ T_IPREWRITER_PATTERN
IPRewriterPattern database.
Definition nameinfo.hh:51
@ T_ETHERNET_ADDR
Ethernet address names database.
Definition nameinfo.hh:45
@ T_UDP_PORT
UDP port names database.
Definition nameinfo.hh:56
@ T_ANNOTATION
Packet annotation database.
Definition nameinfo.hh:41
@ T_IPFILTER_TYPE
IPFilter instruction names database.
Definition nameinfo.hh:49
@ T_ICMP_FIELDNAME
ICMP field names database.
Definition nameinfo.hh:58
@ T_IP_PORT
Starting point for IP per-protocol port names databases.
Definition nameinfo.hh:54
@ T_TCP_PORT
TCP port names database.
Definition nameinfo.hh:55
static void static_initialize()
Static initialization for NameInfo.
Definition nameinfo.cc:310
static void static_cleanup()
Static cleanup for NameInfo.
Definition nameinfo.cc:318
~NameInfo()
Destroy a NameInfo object.
Definition nameinfo.cc:301
static void installdb(NameDB *db, const Element *context)
Install a name database.
Definition nameinfo.cc:435
static String revquery(uint32_t type, const Element *context, const void *value, size_t value_size)
Query installed databases for value.
Definition nameinfo.cc:528
static String revquery_int(uint32_t type, const Element *context, int32_t value)
Query installed databases for a 32-bit integer value.
Definition nameinfo.hh:483
A fixed database mapping names to 4-byte integer values.
Definition nameinfo.hh:350
bool query(const String &name, void *value, size_t value_size)
Query this database for a given name.
Definition nameinfo.cc:156
String revquery(const void *value, size_t value_size)
Query this database for a given value.
Definition nameinfo.cc:179
StaticNameDB(uint32_t type, const String &context, const Entry *entry, size_t nentry)
Construct a static name database.
Definition nameinfo.hh:471
Efficiently build up Strings from pieces.
Definition straccum.hh:28
A string of characters.
Definition string.hh:22
Vector template.
Definition vector.hh:111
Click's StringAccum class, used to construct Strings efficiently from pieces.
Parser class for named integers.
Definition nameinfo.hh:515