-// Copyright (C) 2013-2014 Internet Systems Consortium, Inc. ("ISC")
+// Copyright (C) 2013-2015 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
## User Registry Classes
At the heart of the library is a class hierarchy centered around the class,
-user_chk::UserRegistry. This class represents a maintainable, searchable
+@c user_chk::UserRegistry. This class represents a maintainable, searchable
registry of "known" users and their attributes. It provides services to load,
clear, and refresh the registry as well as to add, find, and remove users.
-Each entry in the registry is an instance of the class, user_chk::User. Users
-are uniquely identified by their user_chk::UserId. UserIds are comprised of
+Each entry in the registry is an instance of the class, @c user_chk::User. Users
+are uniquely identified by their @c user_chk::UserId. UserIds are comprised of
data taken from the DHCP request. IPv4 users have a type of "HW_ADDR" and
their id is the hardware address from the request. IPv6 users have a type of
"DUID" and their id is the DUID from the request.
The registry may be manually populated or loaded from a source of data which
-implements the UserDataSource interface. Currently, a single implementation has
-been implemented, user_chk::UserFile. UserFile supports reading the registry
+implements the @c UserDataSource interface. Currently, a single implementation has
+been implemented, @c user_chk::UserFile. UserFile supports reading the registry
from a text file in which each line is a user entry in JSON format. Each entry
contains the id type and user id along with optional attributes. Attributes are
essentially name/value pairs whose significance is left up to the calling layer.
send for both IPv4 and IPv6. Regardless of the protocol type, the process
flow upon receipt of an inbound request is the same and is as follows:
--# pkt_receive callout is invoked
+-# "pkt_receive" callout is invoked
-# Refresh the user registry
-# Extract user id from DHCP request and store it to context
-# Look up user id in registry and store resultant user pointer to context
user and push the result to the context making it available to subsequent
callouts.
--# subnet_select callout is invoked
+-# "subnet_select" callout is invoked
-# Retrieve the user pointer from context
-# If pointer is null (i.e. user is not registered), replace subnet
selection with restricted subnet
By convention, the last subnet in the collection of subnets available is
- assumed to be the "restricted access" subnet. A more sophisticated mechanism is likely to be needed.
+ assumed to be the "restricted access" subnet. A more sophisticated mechanism
+ is likely to be needed.
--# pkt_send callout is invoked:
+-# "pkt_send" callout is invoked:
-# Retrieve the user id and user pointer from context
-# If user is not null add the options based on user's attributes,
otherwise use default user's attributes
Currently, the library uses a hard coded pathname for the user registry defined
in load_unload.cc:
+@code
const char* registry_fname = "/tmp/user_chk_registry.txt";
+@endcode
Each line in the file is a self-contained JSON snippet which must have the
following two entries:
{ "type" : "DUID", "id" : "00:01:00:01:19:ef:e6:3b:00:0c:01:02:03:06", "tftp_server" : "tftp.v6.example.com" }
@endcode
-It is possible to specify additional attributes. They will be loaded and stored with the user's entry in the registry. This allows the library to be extended to perform additional actions based on these attributes.
+It is possible to specify additional attributes. They will be loaded and stored with the user's entry in the registry.
+This allows the library to be extended to perform additional actions based on these attributes.
Upon start up the library will attempt to load this file. If it does not exist
the library will unload.