* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
#define LWRES_LWPACKET_H 1
#include <lwres/lwbuffer.h>
#include <lwres/result.h>
typedef struct lwres_lwpacket lwres_lwpacket_t;
/*% lwres_lwpacket structure */
/*! The overall packet length, including the
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
/*! Specifies the header format. Currently,
* there is only one format, #LWRES_LWPACKETVERSION_0.
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
/*! Specifies library-defined flags for this packet, such as
* whether the packet is a request or a reply. None of
* these are definable by the caller, but library-defined values
* can be set by the caller. For example, one bit in this field
* indicates if the packet is a request or a response.
* This field is filled in by
* the application wits the exception of the
* #LWRES_LWPACKETFLAG_RESPONSE bit, which is set by the library
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
/*! Set by the requestor and is returned in all replies.
* If two packets from the same source have the same serial
* number and are from the same source, they are assumed to
* be duplicates and the latter ones may be dropped.
* (The library does not do this by default on replies, but
/*! Opcodes between 0x04000000 and 0xffffffff
* are application defined. Opcodes between
* 0x00000000 and 0x03ffffff are
* reserved for library use.
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
/*! Only valid for results.
* Results between 0x04000000 and 0xffffffff are application
* Results between 0x00000000 and 0x03ffffff are reserved for
* (This is the same reserved range defined in <isc/resultclass.h>,
* would be trivial to map ISC_R_* result codes into packet result
* codes when appropriate.)
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
/*! Set to the maximum buffer size that the receiver can
* handle on requests, and the size of the buffer needed to
* when the buffer is too large for replies.
* This field is supplied by the application.
/*! The packet level auth type used.
* Authtypes between 0x1000 and 0xffff are application defined.
* between 0x0000 and 0x0fff are reserved for library use.
* unused and MUST be set to zero.
/*! The length of the authentication data.
* authtypes for more information on what is contained
* in this field. This is currently unused, and
#define LWRES_LWPACKET_LENGTH (4 * 5 + 2 * 4) /*%< Overall length. */
#define LWRES_LWPACKETFLAG_RESPONSE 0x0001U /*%< If set, pkt is a response. */
#define LWRES_LWPACKETVERSION_0 0 /*%< Header format. */
/*! \file lwres/lwpacket.h
* The remainder of the packet consists of two regions, one described by
* "authlen" and one of "length - authlen - sizeof(lwres_lwpacket_t)".
* authlen bytes of auth information
* Currently defined opcodes:
*\li #LWRES_OPCODE_NOOP. Success is always returned, with the packet contents echoed.
*\li #LWRES_OPCODE_GETADDRSBYNAME. Return all known addresses for a given name.
* This may return NIS or /etc/hosts info as well as DNS
* information. Flags will be provided to indicate ip4/ip6
*\li #LWRES_OPCODE_GETNAMEBYADDR. Return the hostname for the given address. Once
* again, it will return data from multiple sources.
lwres_lwpacket_renderheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt);
lwres_lwpacket_parseheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt);
#endif /* LWRES_LWPACKET_H */