windows-nt/Source/XPSP1/NT/net/ias/protocol/radius/radpkt.h
2020-09-26 16:20:57 +08:00

120 lines
2.7 KiB
C

//#--------------------------------------------------------------
//
// File: radpkt.h
//
// Synopsis: This file holds the declarations for the
// RADIUS protocol specific structs and macros
//
//
// History: 9/23/97 MKarki Created
//
// Copyright (C) 1997-98 Microsoft Corporation
// All rights reserved.
//
//----------------------------------------------------------------
#ifndef _RADPKT_H_
#define _RADPKT_H_
//
// here are the values for the RADIUS packet codes
//
typedef enum _packettype_
{
ACCESS_REQUEST = 1,
ACCESS_ACCEPT = 2,
ACCESS_REJECT = 3,
ACCOUNTING_REQUEST = 4,
ACCOUNTING_RESPONSE = 5,
ACCESS_CHALLENGE = 11
} PACKETTYPE, *PPACKETTYPE;
//
// RADIUS attribute types
//
#define PROXY_STATE_ATTRIB 33
#define USER_NAME_ATTRIB 1
#define USER_PASSWORD_ATTRIB 2
#define CHAP_PASSWORD_ATTRIB 3
#define NAS_IP_ADDRESS_ATTRIB 4
#define CLASS_ATTRIB 25
#define NAS_IDENTIFIER_ATTRIB 32
#define ACCT_STATUS_TYPE_ATTRIB 40
#define ACCT_SESSION_ID_ATTRIB 44
#define TUNNEL_PASSWORD_ATTRIB 69
#define EAP_MESSAGE_ATTRIB 79
#define SIGNATURE_ATTRIB 80
//
// these are the largest values that the attribute type
// packet type have
//
#define MAX_ATTRIBUTE_TYPE 255
#define MAX_PACKET_TYPE 11
//
// number of IAS attribute created by the
// RADIUS protocol component
// 1) IAS_ATTRIBUTE_CLIENT_IP_ADDRESS
// 2) IAS_ATTRIBUTE_CLIENT_UDP_PORT
// 3) IAS_ATTRIBUTE_CLIENT_PACKET_HEADER
// 4) IAS_ATTRIBUTE_SHARED_SECRET
// 5) IAS_ATTRIBUTE_CLIENT_VENDOR_TYPE
// 6) IAS_ATTRIBUTE_CLIENT_NAME
//
#define COMPONENT_SPECIFIC_ATTRIBUTE_COUNT 6
//
// these are the related constants
//
#define MIN_PACKET_SIZE 20
#define MAX_PACKET_SIZE 4096
#define AUTHENTICATOR_SIZE 16
#define SIGNATURE_SIZE 16
#define MAX_PASSWORD_SIZE 253
#define MAX_ATTRIBUTE_LENGTH 253
#define MAX_VSA_ATTRIBUTE_LENGTH 247
//
// using BYTE alignment here
//
#pragma pack(push,1)
//
// here we define an ATTRIBUTE type
// used to access the attribute fields of the RAIDUS packet
//
typedef struct _attribute_
{
BYTE byType;
BYTE byLength;
BYTE ValueStart[1];
} ATTRIBUTE, *PATTRIBUTE;
//
// we define the RADIUSPACKET struct
// for simpler access to the RADIUS packet
//
typedef struct _radiuspacket_
{
BYTE byCode;
BYTE byIdentifier;
WORD wLength;
BYTE Authenticator[AUTHENTICATOR_SIZE];
BYTE AttributeStart[1];
} RADIUSPACKET, *PRADIUSPACKET;
#pragma pack (pop)
#define ATTRIBUTE_HEADER_SIZE 2 //byType + byLength
#define PACKET_HEADER_SIZE 20 // byCode+byIdentifier+wLength+Authenticator
#endif // ifndef _RADPKT_H_