|
Listing 1.9 RDATA Address Records
NS_RDaddr.h
/* RDATA NB_FLAGS. */
#define GROUP_BIT 0x8000 /* Group indicator */
#define ONT_B 0x0000 /* Broadcast node */
#define ONT_P 0x2000 /* Point-to-point node */
#define ONT_M 0x4000 /* Mixed mode node */
#define ONT_H 0x6000 /* MS Hybrid mode node */
#define ONT_MASK 0x6000 /* Mask */
/* RDATA NAME_FLAGS. */
#define DRG 0x0100 /* Deregister. */
#define CNF 0x0800 /* Conflict. */
#define ACT 0x0400 /* Active. */
#define PRM 0x0200 /* Permanent. */
NS_RDaddr.c
#include <string.h> /* For memcpy() */
#include <netinet/in.h> /* htons(), ntohs(), etc. */
#include "NS_RDaddr.h"
int Put_RDLength( uchar *rrec,
int offset,
ushort rdlen )
/* ---------------------------------------------------- **
* Set the value of the RDLENGTH field.
* ---------------------------------------------------- **
*/
{
rdlen = htons( rdlen );
(void)memcpy( &(rrec[offset]), &rdlen, 2 );
return( 2 );
} /* Put_RDLength */
int Put_RD_Addr( uchar *rrec,
int offset,
ushort nb_flags,
struct in_addr nb_addr )
/* ---------------------------------------------------- **
* Write IP NB_FLAGS and NB_ADDRESS fields to the
* packet buffer.
*
* See inet(3) on any Linux/Unix/BSD system for more
* information on 'struct in_addr'.
* ---------------------------------------------------- **
*/
{
nb_flags = htons( nb_flags );
(void)memcpy( &(rrec[offset]), &nb_flags, 2 );
(void)memcpy( &(rrec[offset+2]), &nb_addr.s_addr, 4 );
return( 6 );
} /* Put_RD_Addr */
ushort Get_RDLength( const uchar *rrec, int offset )
/* ---------------------------------------------------- **
* Read the RDLENGTH field to find out how big the
* RDATA field is.
* ---------------------------------------------------- **
*/
{
ushort tmp;
(void)memcpy( &tmp, &(rrec[offset]), 2 );
return( ntohs( tmp ) );
} /* Get_RDLength */
ushort Get_RD_NB_Flags( const uchar *rrec, int offset )
/* ---------------------------------------------------- **
* Read the NB_FLAGS field from an RDATA record.
* ---------------------------------------------------- **
*/
{
ushort tmp;
(void)memcpy( &tmp, &(rrec[offset]), 2 );
return( ntohs( tmp ) );
} /* Get_RD_NB_Flags */
struct in_addr Get_RD_NB_Addr( const uchar *rrec, int offset )
/* ---------------------------------------------------- **
* Read the NB_ADDRESS field from an RDATA record.
* ---------------------------------------------------- **
*/
{
ulong tmp;
struct in_addr tmp_addr;
(void)memcpy( &tmp, &(rrec[offset]), 4 );
tmp_addr.s_addr = ntohl( tmp );
return( tmp_addr );
} /* Get_RD_NB_Addr */
$Revision: 1.11 $
$Date: 2003/02/18 21:43:58 $
|
Copyright © 1999-2003 Christopher R. Hertel
Released under the terms of the
LGPL
|
|