]> git.ipfire.org Git - thirdparty/dhcp.git/blobdiff - omapip/omapi.3
Merge changes between 3.0rc7 and 3.0rc8pl2.
[thirdparty/dhcp.git] / omapip / omapi.3
index eacb9da337b4168559db4094206a161c953932a3..112621df3fd17f3f70ad959e0c9ab5d3b95a53db 100644 (file)
@@ -1,59 +1,93 @@
-NAME 
-       OMAPI - Object Management Application Programming Interface
-
-DESCRIPTION
-
-Overview
-
-       OMAPI is an programming layer designed for controlling remote
-       applications, and for querying them for their state. It is currently
-       used by the ISC DHCP server and this outline addresses the parts of
-       OMAPI appropriate to the clients of DHCP server. It does this by also
-       describing the use of a thin API layered on top of OMAPI called
-       'dhcpctl'
-
-       OMAPI uses TCP/IP as the transport for server communication, and
-       security can be imposed by having the client and server
-       cryptographically sign messages using a shared secret.
-
-       dhcpctl works by presenting the client with handles to objects that
-       act as surrogates for the real objects in the server. For example a
-       client will create a handle for a lease object, and will request the
-       server to fill the lease handle's state. The client application can
-       then pull details such as the lease expiration time from the lease
-       handle. 
-
-       Modifications can be made to the server state by creating handles to
-       new objects, or by modifying attributes of handles to existing
-       objects, and then instructing the server to update itself according to
-       the changes made.
-
-Usage
-
-       The client application must always call dhcpctl_initialize() before
-       making calls to any other dhcpctl functions. This initializes 
-       various internal data structures. 
-
-       To create the connection to the server the client must use
-       dhcpctl_connect() function. As well as making the physical connection
-       it will also set up the connection data structures to do
-       authentication on each message, if that is required.
-
-       All the dhcpctl functions return an integer value of type
-       isc_result_t. A successful call will yield a result of
-       ISC_R_SUCCESS. If the call fails for a reason local to the client
-       (e.g. insufficient local memory, or invalid arguments to the call)
-       then the return value of the dhcpctl function will show that. If the
-       call succeeds but the server couldn't process the request the error
-       value from the server is returned through another way, shown below.
-
-       The easiest way to understand dhcpctl is to see it in action. The
-       following program is fully functional, but almost all error checking
-       has been removed to make is shorter and easier to understand. This
-       program will query the server running on the localhost for the details
-       of the lease for IP address 10.0.0.101. It will then print out the time
-       the lease ends.
-
+.\"    omapi.3
+.\"
+.\" Copyright (c) 2000-2001 Internet Software Consortium.
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\"
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of The Internet Software Consortium nor the names
+.\"    of its contributors may be used to endorse or promote products derived
+.\"    from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND
+.\" CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+.\" DISCLAIMED.  IN NO EVENT SHALL THE INTERNET SOFTWARE CONSORTIUM OR
+.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" This software has been written for the Internet Software Consortium
+.\" by Ted Lemon in cooperation with Vixie Enterprises and Nominum, Inc.
+.\" To learn more about the Internet Software Consortium, see
+.\" ``http://www.isc.org/''.  To learn more about Vixie Enterprises,
+.\" see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
+.\" ``http://www.nominum.com''.
+.TH omapi 3
+.SH NAME
+OMAPI - Object Management Application Programming Interface
+.SH DESCRIPTION
+.PP
+OMAPI is an programming layer designed for controlling remote
+applications, and for querying them for their state. It is currently
+used by the ISC DHCP server and this outline addresses the parts of
+OMAPI appropriate to the clients of DHCP server. It does this by also
+describing the use of a thin API layered on top of OMAPI called
+'dhcpctl'
+.PP
+OMAPI uses TCP/IP as the transport for server communication, and
+security can be imposed by having the client and server
+cryptographically sign messages using a shared secret.
+.PP
+dhcpctl works by presenting the client with handles to objects that
+act as surrogates for the real objects in the server. For example a
+client will create a handle for a lease object, and will request the
+server to fill the lease handle's state. The client application can
+then pull details such as the lease expiration time from the lease
+handle. 
+.PP
+Modifications can be made to the server state by creating handles to
+new objects, or by modifying attributes of handles to existing
+objects, and then instructing the server to update itself according to
+the changes made.
+.SH USAGE
+.PP
+The client application must always call dhcpctl_initialize() before
+making calls to any other dhcpctl functions. This initializes 
+various internal data structures. 
+.PP
+To create the connection to the server the client must use
+dhcpctl_connect() function. As well as making the physical connection
+it will also set up the connection data structures to do
+authentication on each message, if that is required.
+.PP
+All the dhcpctl functions return an integer value of type
+isc_result_t. A successful call will yield a result of
+ISC_R_SUCCESS. If the call fails for a reason local to the client
+(e.g. insufficient local memory, or invalid arguments to the call)
+then the return value of the dhcpctl function will show that. If the
+call succeeds but the server couldn't process the request the error
+value from the server is returned through another way, shown below.
+.PP
+The easiest way to understand dhcpctl is to see it in action. The
+following program is fully functional, but almost all error checking
+has been removed to make is shorter and easier to understand. This
+program will query the server running on the localhost for the details
+of the lease for IP address 10.0.0.101. It will then print out the time
+the lease ends.
+.PP
+.nf
                #include <stdarg.h>
                #include <sys/time.h>
                #include <sys/socket.h>
@@ -66,10 +100,12 @@ Usage
                int main (int argc, char **argv) {
                        dhcpctl_data_string ipaddrstring = NULL;
                        dhcpctl_data_string value = NULL;
-
-       All modifications of handles and all accesses of handle data happen
-       via dhcpctl_data_string objects.
-
+.fi
+.PP
+All modifications of handles and all accesses of handle data happen
+via dhcpctl_data_string objects.
+.PP
+.nf
                        dhcpctl_handle connection = NULL;
                        dhcpctl_handle lease = NULL;
                        isc_result_t waitstatus;
@@ -77,22 +113,28 @@ Usage
                        time_t thetime;
 
                        dhcpctl_initialize ();
-
-       Required fist step.
-
+.fi
+.PP
+Required first step.
+.PP
+.nf
                        dhcpctl_connect (&connection, "127.0.0.1",
                                         7911, 0);
-
-       Sets up the connection to the server. The server normally listens on
-       port 7911 unless configured to do otherwise.
-
+.fi
+.PP
+Sets up the connection to the server. The server normally listens on
+port 7911 unless configured to do otherwise.
+.PP
+.nf
                        dhcpctl_new_object (&lease, connection,
                                            "lease");
-
-       Here we create a handle to a lease. This call just sets up local data
-       structure. The server hasn't yet made any association between the
-       client's data structure and any lease it has.
-
+.fi
+.PP
+Here we create a handle to a lease. This call just sets up local data
+structure. The server hasn't yet made any association between the
+client's data structure and any lease it has.
+.PP
+.nf
                        memset (&ipaddrstring, 0, sizeof
                                ipaddrstring);
 
@@ -101,35 +143,43 @@ Usage
 
                        omapi_data_string_new (&ipaddrstring,
                                               4, MDL);
-
-       Create a new data string to storing in the handle.
-
+.fi
+.PP
+Create a new data string to storing in the handle.
+.PP
+.nf
                        memcpy(ipaddrstring->value, &convaddr.s_addr, 4);
 
                        dhcpctl_set_value (lease, ipaddrstring,
                                           "ip-address");
-
-       We're setting the ip-address attribute of the lease handle to the
-       given address. We've not set any other attributes so when the server
-       makes the association the ip address will be all it uses to look up
-       the lease in its tables.
-
+.fi
+.PP
+We're setting the ip-address attribute of the lease handle to the
+given address. We've not set any other attributes so when the server
+makes the association the ip address will be all it uses to look up
+the lease in its tables.
+.PP
+.nf
                        dhcpctl_open_object (lease, connection, 0);
-
-       Here we prime the connection with the request to look up the lease in
-       the server and fill up the local handle with the attributes the server
-       will send over in its answer.
-
+.fi
+.PP
+Here we prime the connection with the request to look up the lease in
+the server and fill up the local handle with the attributes the server
+will send over in its answer.
+.PP
+.nf
                        dhcpctl_wait_for_completion (lease,
                                                     &waitstatus);
-
-       This call causes the message to get sent to the server (the message to
-       look up the lease and send back the attribute values in the
-       answer). The value in the variable waitstatus when the function
-       returns will be the result from the server. If the message could
-       not be processed properly by the server then the error will be
-       reflected here.
-
+.fi
+.PP
+This call causes the message to get sent to the server (the message to
+look up the lease and send back the attribute values in the
+answer). The value in the variable waitstatus when the function
+returns will be the result from the server. If the message could
+not be processed properly by the server then the error will be
+reflected here.
+.PP
+.nf
                        if (waitstatus != ISC_R_SUCCESS) {
                                /* server not authoritative */
                                exit (0);
@@ -137,14 +187,19 @@ Usage
 
                        dhcpctl_data_string_dereference(&ipaddrstring,
                                                        MDL);
-
-       Clean-up memory we no longer need.
-
+.fi
+.PP
+Clean-up memory we no longer need.
+.PP
+.nf
                        dhcpctl_get_value (&value, lease, "ends");
-
-       Get the attribute named ``ends'' from the lease handle. This is a
-       4-byte integer of the time (in unix epoch seconds) that the lease
-       will expire.
+.fi
+.PP
+Get the attribute named ``ends'' from the lease handle. This is a
+4-byte integer of the time (in unix epoch seconds) that the lease
+will expire.
+.PP
+.nf
        
                        memcpy(&thetime, value->value, value->len);
                        dhcpctl_data_string_dereference(&value, MDL);
@@ -153,12 +208,12 @@ Usage
                                 ctime(&thetime));
                }
 
-
-Authentication
-
-       If the server demands authenticated connections then before opening
-       the connection the user must call dhcpctl_new_authenticator.
-
+.fi
+.SH AUTHENTICATION
+If the server demands authenticated connections then before opening
+the connection the user must call dhcpctl_new_authenticator.
+.PP
+.nf
                dhcpctl_handle authenticator = NULL;
                const char *keyname = "a-key-name";
                const char *algorithm = "hmac-md5";
@@ -169,10 +224,12 @@ Authentication
                                            algorithm,
                                            secret,
                                           strlen(secret) + 1);
-
-       The keyname, algorithm and secret must all match what is specified in
-       the server's dhcpd.conf file:
-
+.fi
+.PP
+The keyname, algorithm and secret must all match what is specified in
+the server's dhcpd.conf file:
+.PP
+.nf
                key "a-key-name" {
                        algorithm hmac-md5;
                        secret "a-shared-secret";
@@ -181,12 +238,17 @@ Authentication
                # Set the omapi-key value to use
                # authenticated connections
                omapi-key "a-key-name";
-
-       The authenticator handle that is created by the call to
-       dhcpctl_new_authenticator must be given as the last (the 4th) argument
-       to the call to dhcpctl_connect(). All messages will then be signed
-       with the given secret string using the specified algorithm.
-       
-SEE ALSO
-
-       dhcpctl(3)
+.fi
+.PP
+The authenticator handle that is created by the call to
+dhcpctl_new_authenticator must be given as the last (the 4th) argument
+to the call to dhcpctl_connect(). All messages will then be signed
+with the given secret string using the specified algorithm.
+.SH SEE ALSO
+dhcpctl(3), omapi(3), dhcpd(8), dhclient(8), dhcpd.conf(5), dhclient.conf(5).
+.SH AUTHOR
+.B omapi
+was created by Ted Lemon of Nominum, Inc.  Information about Nominum
+and support contracts for DHCP and BIND can be found at
+.B http://www.nominum.com.   This documentation was written by James
+Brister of Nominum, Inc.