wireshark/packet-rsvp.h

449 lines
11 KiB
C

/**********************************************************************
*
* packet-rsvp.h
*
* (C) Ashok Narayanan <ashokn@cisco.com>
*
* $Id: packet-rsvp.h,v 1.7 1999/11/18 01:45:02 guy Exp $
*
* For license details, see the COPYING file with this distribution
*
**********************************************************************/
#ifndef PACKET_RSVP_H
#define PACKET_RSVP_H
/*
* RSVP message types
*/
typedef enum {
RSVP_MSG_PATH=1, RSVP_MSG_RESV, RSVP_MSG_PERR, RSVP_MSG_RERR,
RSVP_MSG_PTEAR, RSVP_MSG_RTEAR, RSVP_MSG_CONFIRM,
RSVP_MSG_RTEAR_CONFIRM=10
} rsvp_message_types;
static value_string message_type_vals[] = {
{RSVP_MSG_PATH, "PATH Message"},
{RSVP_MSG_RESV, "RESV Message"},
{RSVP_MSG_PERR, "PATH ERROR Message"},
{RSVP_MSG_RERR, "RESV ERROR Message"},
{RSVP_MSG_PTEAR, "PATH TEAR Message"},
{RSVP_MSG_RTEAR, "RESV TEAR Message"},
{RSVP_MSG_CONFIRM, "CONFIRM Message"},
{RSVP_MSG_RTEAR_CONFIRM, "RESV TEAR CONFIRM Message"}
};
/*
* RSVP classes
*/
#define MAX_RSVP_CLASS 15
enum rsvp_classes {
RSVP_CLASS_NULL=0,
RSVP_CLASS_SESSION,
RSVP_CLASS_HOP=3,
RSVP_CLASS_INTEGRITY,
RSVP_CLASS_TIME_VALUES,
RSVP_CLASS_ERROR,
RSVP_CLASS_SCOPE,
RSVP_CLASS_STYLE,
RSVP_CLASS_FLOWSPEC,
RSVP_CLASS_FILTER_SPEC,
RSVP_CLASS_SENDER_TEMPLATE,
RSVP_CLASS_SENDER_TSPEC,
RSVP_CLASS_ADSPEC,
RSVP_CLASS_POLICY,
RSVP_CLASS_CONFIRM
};
static value_string rsvp_class_vals[] = {
{RSVP_CLASS_NULL, "NULL object"},
{RSVP_CLASS_SESSION, "SESSION object"},
{RSVP_CLASS_HOP, "HOP object"},
{RSVP_CLASS_INTEGRITY, "INTEGRITY object"},
{RSVP_CLASS_TIME_VALUES, "TIME VALUES object"},
{RSVP_CLASS_ERROR, "ERROR object"},
{RSVP_CLASS_SCOPE, "SCOPE object"},
{RSVP_CLASS_STYLE, "STYLE object"},
{RSVP_CLASS_FLOWSPEC, "FLOWSPEC object"},
{RSVP_CLASS_FILTER_SPEC, "FILTER SPEC object"},
{RSVP_CLASS_SENDER_TEMPLATE, "SENDER TEMPLATE object"},
{RSVP_CLASS_SENDER_TSPEC, "SENDER TSPEC object"},
{RSVP_CLASS_ADSPEC, "ADSPEC object"},
{RSVP_CLASS_POLICY, "POLICY object"},
{RSVP_CLASS_CONFIRM, "CONFIRM object"}
};
/*
* RSVP error values
*/
enum rsvp_error_types {
RSVP_ERROR_CONFIRM = 0,
RSVP_ERROR_ADMISSION,
RSVP_ERROR_POLICY,
RSVP_ERROR_NO_PATH,
RSVP_ERROR_NO_SENDER,
RSVP_ERROR_CONFLICT_RESV_STYLE,
RSVP_ERROR_UNKNOWN_RESV_STYLE,
RSVP_ERROR_CONFLICT_DEST_PORTS,
RSVP_ERROR_CONFLICT_SRC_PORTS,
RSVP_ERROR_PREEMPTED=12,
RSVP_ERROR_UNKNOWN_CLASS,
RSVP_ERROR_UNKNOWN_C_TYPE,
RSVP_ERROR_TRAFFIC = 21,
RSVP_ERROR_TRAFFIC_SYSTEM,
RSVP_ERROR_SYSTEM
};
static value_string rsvp_error_vals[] = {
{RSVP_ERROR_CONFIRM, "Confirmation"},
{RSVP_ERROR_ADMISSION, "Admission Control Failure "},
{RSVP_ERROR_POLICY, "Policy Control Failure"},
{RSVP_ERROR_NO_PATH, "No PATH information for this RESV message"},
{RSVP_ERROR_NO_SENDER, "No sender information for this RESV message"},
{RSVP_ERROR_CONFLICT_RESV_STYLE, "Conflicting reservation styles"},
{RSVP_ERROR_UNKNOWN_RESV_STYLE, "Unknown reservation style"},
{RSVP_ERROR_CONFLICT_DEST_PORTS, "Conflicting destination ports"},
{RSVP_ERROR_CONFLICT_SRC_PORTS, "Conflicting source ports"},
{RSVP_ERROR_PREEMPTED, "Service preempted"},
{RSVP_ERROR_UNKNOWN_CLASS, "Unknown object class"},
{RSVP_ERROR_UNKNOWN_C_TYPE, "Unknown object C-type"},
{RSVP_ERROR_TRAFFIC, "Traffic Control Error"},
{RSVP_ERROR_TRAFFIC_SYSTEM, "Traffic Control System Error"}
};
/*
* Defines the reservation style plus style-specific information that
* is not a FLOWSPEC or FILTER_SPEC object, in a RESV message.
*/
#define RSVP_DISTINCT (1 << 3)
#define RSVP_SHARED (2 << 3)
#define RSVP_SHARING_MASK (RSVP_DISTINCT | RSVP_SHARED)
#define RSVP_SCOPE_WILD 1
#define RSVP_SCOPE_EXPLICIT 2
#define RSVP_SCOPE_MASK 0x07
#define RSVP_WF (RSVP_SHARED | RSVP_SCOPE_WILD)
#define RSVP_FF (RSVP_DISTINCT | RSVP_SCOPE_EXPLICIT)
#define RSVP_SE (RSVP_SHARED | RSVP_SCOPE_EXPLICIT)
static value_string style_vals[] = {
{ RSVP_WF, "Wildcard Filter" },
{ RSVP_FF, "Fixed Filter" },
{ RSVP_SE, "Shared-Explicit" }
};
/*------------------------------*
* Object definitions
*------------------------------*/
/*
* Base RSVP object
*/
typedef struct {
guint16 length;
guint8 class;
guint8 type;
/* Data follows, as a sequence of bytes */
} rsvp_object;
/*
* RSVP message header
*/
typedef struct {
guint8 ver_flags; /* RSVP Version & flags */
guint8 message_type; /* type of message */
guint16 cksum; /* IP Checksum */
guint8 sending_ttl; /* ttl of message */
guint8 reserved_byte; /* reserved */
guint16 rsvp_length; /* length of RSVP data */
/* Objects follow, as a sequence of "rsvp_object"s */
} rsvp_header;
/*
* NULL object
*/
typedef struct {
rsvp_object base;
} rsvp_null;
/*
* SESSION object
*/
typedef struct {
rsvp_object base;
guint32 destination;
guint8 protocol;
guint8 flags;
guint16 port;
} rsvp_session_ipv4;
typedef struct {
rsvp_object base;
struct e_in6_addr destination;
guint8 protocol;
guint8 flags;
guint16 port;
} rsvp_session_ipv6;
/*
* HOP object
* Can be a PHOP or a NHOP
*/
typedef struct {
rsvp_object base;
guint32 neighbor;
guint32 lif_handle;
} rsvp_hop_ipv4;
typedef struct {
rsvp_object base;
struct e_in6_addr neighbor;
guint32 lif_handle;
} rsvp_hop_ipv6;
/*
* TIME_VALUES object
*/
typedef struct {
rsvp_object base;
gint32 refresh_ms;
} rsvp_time_values;
/*
* ERROR object
*/
typedef struct {
rsvp_object base;
guint32 error_node;
guint8 flags;
guint8 error_code;
guint16 error_value;
} rsvp_error_ipv4;
typedef struct {
rsvp_object base;
struct e_in6_addr error_node;
guint8 flags;
guint8 error_code;
guint16 error_value;
} rsvp_error_ipv6;
/*
* CONFIRM object
*/
typedef struct {
rsvp_object base;
guint32 receiver;
} rsvp_confirm_ipv4;
typedef struct {
rsvp_object base;
struct e_in6_addr receiver;
} rsvp_confirm_ipv6;
/*
* SCOPE object
*/
typedef struct {
rsvp_object base;
/* Source follows, as a sequence of 32-bit integers */
} rsvp_scope;
/*
* STYLE object
*/
typedef struct {
rsvp_object base;
guint32 reservation_type;
} rsvp_style;
/*
* Defines a subset of session data packets that should receive the
* desired QoS (specified by an FLOWSPEC object), in a RESV message.
*/
typedef struct {
rsvp_object base;
guint32 source; /* source sending data */
guint16 unused;
guint16 udp_source_port; /* port number */
} rsvp_filter_ipv4;
/*
* Contains a sender IP address and perhaps some additional
* demultiplexing information to identify a sender, in a PATH
* message.
*/
typedef struct {
rsvp_object base;
guint32 source; /* source sending data */
guint16 __reserved;
guint16 source_port; /* port number */
} rsvp_template_ipv4;
typedef struct {
rsvp_object base;
struct e_in6_addr source; /* source sending data */
guint16 __reserved;
guint16 source_port; /* port number */
} rsvp_template_ipv6;
/*
* Defines a desired QoS, in a RESV message.
*/
enum qos_service_type {
QOS_QUALITATIVE = 128, /* Qualitative service */
QOS_CONTROLLED_LOAD= 5, /* Controlled Load Service */
QOS_GUARANTEED = 2, /* Guaranteed service */
QOS_TSPEC = 1 /* Traffic specification */
};
static value_string qos_vals[] = {
{ QOS_QUALITATIVE, "Qualitative QoS" },
{ QOS_CONTROLLED_LOAD, "Controlled-load QoS" },
{ QOS_GUARANTEED, "Guaranteed rate QoS" },
{ QOS_TSPEC, "Traffic specification" },
};
static value_string svc_vals[] = {
{ 127, "Token bucket TSpec" },
{ 128, "Qualitative TSpec" },
{ 130, "Guaranteed-rate RSpec" }
};
enum rsvp_spec_types { INTSRV = 2 };
enum intsrv_services {
INTSRV_GENERAL = 1,
INTSRV_GTD = 2,
INTSRV_CLOAD = 5,
INTSRV_QUALITATIVE = 128
};
static value_string intsrv_services_str[] = {
{INTSRV_GENERAL, "Default General Parameters"},
{INTSRV_GTD, "Guaranteed"},
{INTSRV_CLOAD, "Controlled Load"},
{INTSRV_QUALITATIVE, "Qualitative"},
};
enum intsrv_field_name {
INTSRV_NON_IS_HOPS = 1, INTSRV_COMPOSED_NON_IS_HOPS,
INTSRV_IS_HOPS, INTSRV_COMPOSED_IS_HOPS,
INTSRV_PATH_BANDWIDTH, INTSRV_MIN_PATH_BANDWIDTH,
INTSRV_IF_LATENCY, INTSRV_PATH_LATENCY,
INTSRV_MTU, INTSRV_COMPOSED_MTU,
INTSRV_TOKEN_BUCKET_TSPEC = 127,
INTSRV_QUALITATIVE_TSPEC = 128,
INTSRV_GTD_RSPEC = 130,
INTSRV_DELAY = 131, /* Gtd Parameter C - Max Delay Bound - bytes */
INTSRV_MAX_JITTER, /* Gtd Parameter D - Max Jitter */
INTSRV_E2E_DELAY, /* Gtd Parameter Ctot */
INTSRV_E2E_MAX_JITTER, /* Gtd Parameter Dtot */
INTSRV_SHP_DELAY, /* Gtd Parameter Csum */
INTSRV_SHP_MAX_JITTER /* Gtd Parameter Dsum */
};
/*
* Subobjects for Integrated Services
*/
typedef struct {
guint8 service_num;
guint8 break_bit;
guint16 length;
} service_hdr;
typedef struct {
service_hdr svchdr;
guint8 param_id;
guint8 flags_tspec;
guint16 parameter_length;
guint32 rate;
guint32 depth;
guint32 peak;
guint32 min_unit;
guint32 max_unit;
} IS_tspec; /* RFC2210 */
typedef struct {
service_hdr svchdr;
guint8 param_id;
guint8 flags_tspec;
guint16 parameter_length;
guint32 max_unit;
} QUAL_tspec; /* Qualitative */
typedef struct {
rsvp_object base;
guint8 version;
guint8 __reserved_;
guint16 length_in_words;
/* Data follows, as a sequence of bytes */
} rsvp_tspec;
typedef struct {
guint8 param_id;
guint8 flags_rspec;
guint16 param2_length;
guint32 requested_rate;
guint32 slack;
} IS_rspec;
typedef struct {
IS_tspec tspec;
IS_rspec rspec;
} IS_flowspec; /* RFC 2210 */
typedef struct {
service_hdr svchdr;
guint8 param_id;
guint8 flags_tspec;
guint16 parameter_length;
guint32 max_unit;
} QUAL_flowspec; /* Qualitative */
typedef struct {
rsvp_object base;
guint8 version;
guint8 __reserved_;
guint16 length_in_words;
/* Data follows, as a sequence of bytes */
} rsvp_flowspec;
typedef struct {
guint8 id;
guint8 flags;
guint16 length;
guint32 dataval;
} param_hdr;
static value_string adspec_params[] = {
{4, "IS Hop Count"},
{6, "Path b/w estimate"},
{8, "Minimum path latency"},
{10, "Composed MTU"},
{133, "End-to-end composed value for C"},
{134, "End-to-end composed value for D"},
{135, "Since-last-reshaping point composed C"},
{136, "Since-last-reshaping point composed D"},
};
#endif