You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
6.5 KiB
122 lines
6.5 KiB
/***************************************************************************/
|
|
/* */
|
|
/* Project: OpenSLP - OpenSource implementation of Service Location */
|
|
/* Protocol */
|
|
/* */
|
|
/* File: slp_dhcp.h */
|
|
/* */
|
|
/* Abstract: Common for DHCP Lookup routines for OpenSLP. */
|
|
/* */
|
|
/*-------------------------------------------------------------------------*/
|
|
/* */
|
|
/* Please submit patches to http://www.openslp.org */
|
|
/* */
|
|
/*-------------------------------------------------------------------------*/
|
|
/* */
|
|
/* Copyright (C) 2000 Caldera Systems, Inc */
|
|
/* All rights reserved. */
|
|
/* */
|
|
/* Redistribution and use in source and binary forms, with or without */
|
|
/* modification, are permitted provided that the following conditions are */
|
|
/* met: */
|
|
/* */
|
|
/* Redistributions of source code must retain the above copyright */
|
|
/* notice, this list of conditions and the following disclaimer. */
|
|
/* */
|
|
/* 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. */
|
|
/* */
|
|
/* Neither the name of Caldera Systems 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 COPYRIGHT HOLDERS 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 CALDERA */
|
|
/* SYSTEMS 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. */
|
|
/***************************************************************************/
|
|
|
|
#ifndef SLP_DHCP_H_INCLUDED
|
|
#define SLP_DHCP_H_INCLUDED
|
|
|
|
#include <stddef.h>
|
|
|
|
/* Applicable IANA BOOTP/DHCP option tag values */
|
|
#define TAG_PAD 0 /* Fixed size, 1 byte (0), no length */
|
|
|
|
#define TAG_DHCP_MSG_TYPE 53
|
|
|
|
#define TAG_DHCP_PARAM_REQ 55
|
|
|
|
#define TAG_CLIENT_IDENTIFIER 61
|
|
|
|
#define TAG_SLP_DA 78
|
|
#define TAG_SLP_SCOPE 79
|
|
|
|
#define TAG_END 255
|
|
|
|
/* The Novell (pre-rfc2610 or draft 3) format for the DHCP TAG_SLP_DA option
|
|
has the 'mandatory' flag containing other bits besides simply 'mandatory'.
|
|
These flags are important because if the DA_NAME_PRESENT flag is set, then
|
|
we know we are parsing this format, otherwise it's the rfc2610 format. */
|
|
|
|
#define DA_NAME_PRESENT 0x80 /* DA name present in option */
|
|
#define DA_NAME_IS_DNS 0x40 /* DA name is host name or DNS name */
|
|
#define DISABLE_DA_MCAST 0x20 /* Multicast for DA's is disabled */
|
|
#define SCOPE_PRESENT 0x10 /* Scope is present in option */
|
|
|
|
/* Character type encodings that we expect to be supported. */
|
|
#define CT_ASCII 3 /* standard 7 or 8 bit ASCII */
|
|
#define CT_UTF8 106 /* UTF-8 */
|
|
#define CT_UNICODE 1000 /* normal Unicode */
|
|
|
|
/*=========================================================================*/
|
|
typedef int DHCPInfoCallBack(int tag, void *optdata,
|
|
size_t optdatasz, void *context);
|
|
/* Callback routine used by DHCPGetOptionInfo - called once for each */
|
|
/* option specified in the option array passed to that routine. If this */
|
|
/* routine returns a non-zero value, that value will be immediately */
|
|
/* returned to the caller of DHCPGetOptionInfo. */
|
|
/* */
|
|
/* Returns - zero on success, non-zero on 'stop processing options'. */
|
|
/*=========================================================================*/
|
|
|
|
/*=========================================================================*/
|
|
int DHCPGetOptionInfo(unsigned char *dhcpOptCodes, int dhcpOptCodeCnt,
|
|
DHCPInfoCallBack *dhcpInfoCB, void *context);
|
|
/* Calls dhcpInfoCB once for each requested option in dhcpOptCodes. */
|
|
/* */
|
|
/* Returns - zero on success, non-zero on failure */
|
|
/*=========================================================================*/
|
|
|
|
/*=========================================================================*/
|
|
int DHCPParseSLPTags(int tag, void *optdata, size_t optdatasz, void *context);
|
|
/* Callback routined tests each DA discovered from DHCP and add it to the */
|
|
/* DA cache. */
|
|
/* */
|
|
/* Returns: 0 on success, or nonzero to stop being called. */
|
|
/* This type definition is used as the context block by this callback. */
|
|
|
|
typedef struct _DHCPContext
|
|
{
|
|
int addrlistlen;
|
|
int scopelistlen;
|
|
char scopelist[256];
|
|
unsigned char addrlist[256];
|
|
} DHCPContext;
|
|
|
|
/*=========================================================================*/
|
|
|
|
#endif
|
|
|
|
|