Added Ashok's fix for RSVP and support for RSVP+.
svn path=/trunk/; revision=475
This commit is contained in:
parent
0b424dc9b9
commit
f5d36ff3cd
3
NEWS
3
NEWS
|
@ -1,3 +1,6 @@
|
|||
Overview of changes in Ethereal 0.7.3:
|
||||
* Fixed bug in RSVP, added RSVP+ support (Ashok)
|
||||
|
||||
Overview of changes in Ethereal 0.7.2:
|
||||
* Another memory leak fix (Jochen)
|
||||
* Allow compilation from different directory (Laurent)
|
||||
|
|
300
packet-rsvp.c
300
packet-rsvp.c
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* (c) Copyright Ashok Narayanan <ashokn@cisco.com>
|
||||
*
|
||||
* $Id: packet-rsvp.c,v 1.4 1999/07/29 05:47:02 gram Exp $
|
||||
* $Id: packet-rsvp.c,v 1.5 1999/08/12 05:19:05 gram Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -569,8 +569,13 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
|
|||
break;
|
||||
|
||||
case RSVP_CLASS_SENDER_TSPEC : {
|
||||
IS_tspec *tspec = (IS_tspec *)obj;
|
||||
rsvp_tspec *tspec = (rsvp_tspec *)obj;
|
||||
IS_tspec *ist;
|
||||
QUAL_tspec *qt;
|
||||
service_hdr *sh;
|
||||
char *str;
|
||||
|
||||
mylen = obj_length;
|
||||
rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_SENDER_TSPEC);
|
||||
proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
|
||||
obj_length);
|
||||
|
@ -584,64 +589,111 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
|
|||
proto_tree_add_text(rsvp_object_tree, offset2+2, 2,
|
||||
"Data length: %d words, not including header",
|
||||
pntohs(pd+offset2+2));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+4, 1,
|
||||
"Service header: %d - %s",
|
||||
tspec->service_header,
|
||||
tspec->service_header==1 ?
|
||||
"Default/global information (INTSRV_GENERAL)" :
|
||||
"Unknown");
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+6, 2,
|
||||
|
||||
mylen -=4;
|
||||
offset2 +=4;
|
||||
while (mylen > 4) {
|
||||
sh = (service_hdr *)(pd+offset2);
|
||||
str = match_strval(sh->service_num, qos_vals);
|
||||
if (!str) str = "Unknown";
|
||||
|
||||
proto_tree_add_text(rsvp_object_tree, offset2, 1,
|
||||
"Service header: %d - %s",
|
||||
sh->service_num, str);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+2, 2,
|
||||
"Length of service %d data: %d words, "
|
||||
"not including header",
|
||||
tspec->service_header,
|
||||
pntohs(pd+offset2+6)>>12);
|
||||
sh->service_num,
|
||||
ntohs(sh->length));
|
||||
|
||||
/* Token bucket TSPEC */
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+8, 1,
|
||||
"Parameter ID: %d - %s",
|
||||
tspec->param_id,
|
||||
tspec->param_id==127 ? "Token Bucket TSpec" :
|
||||
"Unknown");
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+9, 1,
|
||||
"Parameter %d flags: %d",
|
||||
tspec->param_id, tspec->flags_tspec);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+10, 2,
|
||||
"Length of parameter %d data: %d words, "
|
||||
"not including header",
|
||||
tspec->param_id,
|
||||
pntohs(pd+offset2+10));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+12, 4,
|
||||
"Token bucket rate: %ld",
|
||||
ieee_to_long(pd+offset2+12));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+16, 4,
|
||||
"Token bucket size: %ld",
|
||||
ieee_to_long(pd+offset2+16));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+20, 4,
|
||||
"Peak data rate: %ld",
|
||||
ieee_to_long(pd+offset2+20));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+24, 4,
|
||||
"Minimum policed unit: %d",
|
||||
pntohl(pd+offset2+24));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+28, 4,
|
||||
"Maximum policed unit: %d",
|
||||
pntohl(pd+offset2+28));
|
||||
offset2+=4; mylen -=4;
|
||||
|
||||
switch(sh->service_num) {
|
||||
|
||||
case QOS_TSPEC :
|
||||
ist = (IS_tspec *)sh;
|
||||
|
||||
/* Token bucket TSPEC */
|
||||
str = match_strval(ist->param_id, svc_vals);
|
||||
if (!str) str = "Unknown";
|
||||
proto_tree_add_text(rsvp_object_tree, offset2, 1,
|
||||
"Parameter %d - %s",
|
||||
ist->param_id, str);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+1, 1,
|
||||
"Parameter %d flags: %d",
|
||||
ist->param_id, ist->flags_tspec);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+2, 2,
|
||||
"Parameter %d data length: %d words, "
|
||||
"not including header",
|
||||
ist->param_id,
|
||||
/* pntohs(pd+offset2+10)); */
|
||||
ntohs(ist->parameter_length));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+4, 4,
|
||||
"Token bucket rate: %ld",
|
||||
ieee_to_long(pd+offset2+4));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+8, 4,
|
||||
"Token bucket size: %ld",
|
||||
ieee_to_long(pd+offset2+8));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+12, 4,
|
||||
"Peak data rate: %ld",
|
||||
ieee_to_long(pd+offset2+12));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+16, 4,
|
||||
"Minimum policed unit: %d",
|
||||
pntohl(pd+offset2+16));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+20, 4,
|
||||
"Maximum policed unit: %d",
|
||||
pntohl(pd+offset2+20));
|
||||
|
||||
break;
|
||||
|
||||
case QOS_QUALITATIVE :
|
||||
qt = (QUAL_tspec *)sh;
|
||||
|
||||
/* Token bucket TSPEC */
|
||||
str = match_strval(qt->param_id, svc_vals);
|
||||
if (!str) str = "Unknown";
|
||||
proto_tree_add_text(rsvp_object_tree, offset2, 1,
|
||||
"Parameter %d - %s",
|
||||
qt->param_id, str);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+1, 1,
|
||||
"Parameter %d flags: %d",
|
||||
qt->param_id, qt->flags_tspec);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+2, 2,
|
||||
"Parameter %d data length: %d words, "
|
||||
"not including header",
|
||||
qt->param_id,
|
||||
/* pntohs(pd+offset2+10)); */
|
||||
ntohs(qt->parameter_length));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+4, 4,
|
||||
"Maximum policed unit: %d",
|
||||
pntohl(pd+offset2+4));
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
offset2 += ntohs(sh->length)*4;
|
||||
mylen -= ntohs(sh->length)*4;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case RSVP_CLASS_FLOWSPEC : {
|
||||
IS_flowspec *flowspec = (IS_flowspec *)obj;
|
||||
char *qos_str = match_strval(flowspec->service_header, qos_vals);
|
||||
char *is_param_str = match_strval(flowspec->param_id, svc_vals);
|
||||
rsvp_flowspec *flowspec = (rsvp_flowspec *)obj;
|
||||
IS_flowspec *isf;
|
||||
QUAL_flowspec *qf;
|
||||
service_hdr *sh;
|
||||
int mylen;
|
||||
|
||||
char *str;
|
||||
|
||||
mylen = obj_length;
|
||||
rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_FLOWSPEC);
|
||||
proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
|
||||
obj_length);
|
||||
proto_tree_add_text(rsvp_object_tree, offset+2, 1,
|
||||
"Class number: %d - %s",
|
||||
obj->class, object_type);
|
||||
if (!qos_str) qos_str = "Unknown";
|
||||
if (!is_param_str) is_param_str="Unknown";
|
||||
|
||||
proto_tree_add_text(rsvp_object_tree, offset2, 1,
|
||||
"Message format version: %d",
|
||||
|
@ -649,63 +701,111 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
|
|||
proto_tree_add_text(rsvp_object_tree, offset2+2, 2,
|
||||
"Data length: %d words, not including header",
|
||||
pntohs(pd+offset2+2));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+4, 1,
|
||||
"Service header: %d - %s",
|
||||
flowspec->service_header, qos_str);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+6, 2,
|
||||
|
||||
mylen -=4;
|
||||
offset2+=4;
|
||||
while (mylen > 4) {
|
||||
sh = (service_hdr *)(pd+offset2);
|
||||
str = match_strval(sh->service_num, intsrv_services_str);
|
||||
if (!str) str = "Unknown";
|
||||
|
||||
proto_tree_add_text(rsvp_object_tree, offset2, 1,
|
||||
"Service header: %d - %s",
|
||||
sh->service_num, str);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+2, 2,
|
||||
"Length of service %d data: %d words, "
|
||||
"not including header",
|
||||
flowspec->service_header,
|
||||
pntohs(pd+offset2+6)>>12);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+8, 1,
|
||||
"Parameter ID: %d - %s",
|
||||
flowspec->param_id, is_param_str);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+9, 1,
|
||||
"Parameter %d flags: %d",
|
||||
flowspec->param_id, flowspec->flags_tspec);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+10, 2,
|
||||
"Length of parameter %d data: %d words, "
|
||||
"not including header",
|
||||
flowspec->param_id,
|
||||
pntohs(pd+offset2+10));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+12, 4,
|
||||
"Token bucket rate: %ld",
|
||||
ieee_to_long(pd+offset2+12));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+16, 4,
|
||||
"Token bucket size: %ld",
|
||||
ieee_to_long(pd+offset2+16));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+20, 4,
|
||||
"Peak data rate: %ld",
|
||||
ieee_to_long(pd+offset2+20));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+24, 4,
|
||||
"Minimum policed unit: %d",
|
||||
pntohl(pd+offset2+24));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+28, 4,
|
||||
"Maximum policed unit: %d",
|
||||
pntohl(pd+offset2+28));
|
||||
if (flowspec->service_header!=QOS_GUARANTEED)
|
||||
break;
|
||||
sh->service_num,
|
||||
ntohs(sh->length));
|
||||
|
||||
/* Guaranteed-rate RSpec */
|
||||
is_param_str = match_strval(flowspec->param_id_rspec, svc_vals);
|
||||
if (!is_param_str) is_param_str="Unknown";
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+32, 1,
|
||||
"Parameter ID: %d - %s",
|
||||
flowspec->param_id, is_param_str);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+33, 1,
|
||||
"Parameter %d flags: %d",
|
||||
flowspec->param_id, flowspec->flags_rspec);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+34, 2,
|
||||
"Length of parameter %d data: %d words, "
|
||||
"not including header",
|
||||
flowspec->param_id,
|
||||
pntohs(pd+offset2+34));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+36, 4,
|
||||
"Rate: %ld",
|
||||
ieee_to_long(pd+offset2+36));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+40, 4,
|
||||
"Slack term: %d",
|
||||
pntohl(pd+offset2+40));
|
||||
offset2+=4; mylen -=4;
|
||||
|
||||
switch(sh->service_num) {
|
||||
|
||||
case QOS_CONTROLLED_LOAD :
|
||||
case QOS_GUARANTEED :
|
||||
/* Treat both these the same for now */
|
||||
isf = (IS_flowspec *)sh;
|
||||
|
||||
str = match_strval(isf->tspec.param_id, svc_vals);
|
||||
if (!str) str = "Unknown";
|
||||
proto_tree_add_text(rsvp_object_tree, offset2, 1,
|
||||
"Parameter %d - %s",
|
||||
isf->tspec.param_id, str);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+1, 1,
|
||||
"Parameter %d flags: %d",
|
||||
isf->tspec.param_id, isf->tspec.flags_tspec);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+2, 2,
|
||||
"Parameter %d data length: %d words, "
|
||||
"not including header",
|
||||
isf->tspec.param_id,
|
||||
ntohs(isf->tspec.parameter_length));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+4, 4,
|
||||
"Token bucket rate: %ld",
|
||||
ieee_to_long(pd+offset2+4));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+8, 4,
|
||||
"Token bucket size: %ld",
|
||||
ieee_to_long(pd+offset2+8));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+12, 4,
|
||||
"Peak data rate: %ld",
|
||||
ieee_to_long(pd+offset2+12));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+16, 4,
|
||||
"Minimum policed unit: %d",
|
||||
pntohl(pd+offset2+16));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+20, 4,
|
||||
"Maximum policed unit: %d",
|
||||
pntohl(pd+offset2+20));
|
||||
if (sh->service_num!=QOS_GUARANTEED)
|
||||
break;
|
||||
|
||||
/* Guaranteed-rate RSpec */
|
||||
str = match_strval(isf->rspec.param_id, svc_vals);
|
||||
if (!str) str="Unknown";
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+24, 1,
|
||||
"Parameter %d - %s",
|
||||
isf->rspec.param_id, str);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+25, 1,
|
||||
"Parameter %d flags: %d",
|
||||
isf->rspec.param_id, isf->rspec.flags_rspec);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+26, 2,
|
||||
"Parameter %d data length: %d words, "
|
||||
"not including header",
|
||||
isf->rspec.param_id,
|
||||
ntohs(isf->rspec.param2_length));
|
||||
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+28, 4,
|
||||
"Rate: %ld",
|
||||
ieee_to_long(pd+offset2+28));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+32, 4,
|
||||
"Slack term: %d",
|
||||
pntohl(pd+offset2+32));
|
||||
break;
|
||||
|
||||
case QOS_QUALITATIVE :
|
||||
qf = (QUAL_flowspec *)sh;
|
||||
|
||||
str = match_strval(qf->param_id, svc_vals);
|
||||
if (!str) str = "Unknown";
|
||||
proto_tree_add_text(rsvp_object_tree, offset2, 1,
|
||||
"Parameter %d - %s",
|
||||
qf->param_id, str);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+1, 1,
|
||||
"Parameter %d flags: %d",
|
||||
qf->param_id, qf->flags_tspec);
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+2, 2,
|
||||
"Parameter %d data length: %d words, "
|
||||
"not including header",
|
||||
qf->param_id,
|
||||
ntohs(qf->parameter_length));
|
||||
proto_tree_add_text(rsvp_object_tree, offset2+4, 4,
|
||||
"Maximum policed unit: %ld",
|
||||
pntohl(pd+offset2+4));
|
||||
|
||||
break;
|
||||
}
|
||||
offset2 += ntohs(sh->length)*4;
|
||||
mylen -= ntohs(sh->length)*4;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -737,7 +837,7 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
|
|||
mylen -= 4;
|
||||
while (mylen > 4) {
|
||||
shdr = (service_hdr *)(pd + offset2);
|
||||
str = match_strval(shdr->service_num, adspec_services);
|
||||
str = match_strval(shdr->service_num, intsrv_services_str);
|
||||
|
||||
ti = proto_tree_add_text(rsvp_object_tree, offset2,
|
||||
(pntohs(&shdr->length)+1)<<2,
|
||||
|
|
196
packet-rsvp.h
196
packet-rsvp.h
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* (C) Ashok Narayanan <ashokn@cisco.com>
|
||||
*
|
||||
* $Id: packet-rsvp.h,v 1.2 1999/07/13 02:52:55 gram Exp $
|
||||
* $Id: packet-rsvp.h,v 1.3 1999/08/12 05:19:06 gram Exp $
|
||||
*
|
||||
* For license details, see the COPYING file with this distribution
|
||||
*
|
||||
|
@ -134,56 +134,6 @@ static value_string style_vals[] = {
|
|||
{ RSVP_SE, "Shared-Explicit" }
|
||||
};
|
||||
|
||||
/*
|
||||
* Defines a desired QoS, in a RESV message.
|
||||
*/
|
||||
enum qos_service_type {
|
||||
QOS_CONTROLLED_LOAD= 5, /* Controlled Load Service */
|
||||
QOS_GUARANTEED = 2, /* Guaranteed service */
|
||||
QOS_DEFAULT = 1, /* Default general parameters */
|
||||
QOS_TSPEC = 0, /* Traffic specification */
|
||||
QOS_UNSPECIFIED = -1 /* unspecified */
|
||||
};
|
||||
|
||||
static value_string qos_vals[] = {
|
||||
{ QOS_CONTROLLED_LOAD, "Controlled-load QoS" },
|
||||
{ QOS_GUARANTEED, "Guaranteed rate QoS" },
|
||||
{ QOS_DEFAULT, "Default general parameters" },
|
||||
{ QOS_UNSPECIFIED, "Unspecified QoS" },
|
||||
{ QOS_TSPEC, "Traffic specification" },
|
||||
};
|
||||
|
||||
static value_string svc_vals[] = {
|
||||
{ 127, "Token bucket TSpec" },
|
||||
{ 130, "Guaranteed-rate RSpec" }
|
||||
};
|
||||
|
||||
enum rsvp_spec_types { INTSRV = 2 };
|
||||
|
||||
enum intsrv_services {
|
||||
INTSRV_GENERAL = 1,
|
||||
INTSRV_GTD = 2,
|
||||
INTSRV_CLOAD = 5
|
||||
};
|
||||
|
||||
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_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 */
|
||||
};
|
||||
|
||||
/*------------------------------*
|
||||
* Object definitions
|
||||
*------------------------------*/
|
||||
|
@ -195,7 +145,7 @@ typedef struct {
|
|||
unsigned short length;
|
||||
unsigned char class;
|
||||
unsigned char type;
|
||||
unsigned char *data;
|
||||
unsigned char data[0]; /* Don't change this to a pointer */
|
||||
} rsvp_object;
|
||||
|
||||
/*
|
||||
|
@ -209,7 +159,7 @@ typedef struct {
|
|||
unsigned char sending_ttl; /* ttl of message */
|
||||
unsigned char reserved_byte; /* reserved */
|
||||
unsigned short rsvp_length; /* length of RSVP data */
|
||||
rsvp_object *rsvp_first_object;
|
||||
rsvp_object rsvp_first_object[0]; /* Don't change this to a pointer */
|
||||
} rsvp_header;
|
||||
|
||||
/*
|
||||
|
@ -299,7 +249,7 @@ typedef struct {
|
|||
*/
|
||||
typedef struct {
|
||||
rsvp_object base;
|
||||
unsigned long *source;
|
||||
unsigned long source[0]; /* Don't change this to a pointer */
|
||||
} rsvp_scope;
|
||||
|
||||
/*
|
||||
|
@ -340,19 +290,77 @@ typedef struct {
|
|||
unsigned short 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 {
|
||||
rsvp_object base;
|
||||
unsigned char version;
|
||||
unsigned char __reserved_;
|
||||
unsigned short length_in_words;
|
||||
|
||||
unsigned char service_header;
|
||||
unsigned char _reserved;
|
||||
unsigned short service_length;
|
||||
unsigned char service_num;
|
||||
unsigned char break_bit;
|
||||
unsigned short length;
|
||||
} service_hdr;
|
||||
|
||||
typedef struct {
|
||||
service_hdr svchdr;
|
||||
|
||||
unsigned char param_id;
|
||||
unsigned char flags_tspec;
|
||||
unsigned short parameter_length;
|
||||
|
@ -365,45 +373,57 @@ typedef struct {
|
|||
} IS_tspec; /* RFC2210 */
|
||||
|
||||
typedef struct {
|
||||
rsvp_object base;
|
||||
unsigned char version;
|
||||
unsigned char __reserved_;
|
||||
unsigned short length_in_words;
|
||||
|
||||
unsigned char service_header;
|
||||
unsigned char _reserved;
|
||||
unsigned short service_length;
|
||||
service_hdr svchdr;
|
||||
|
||||
unsigned char param_id;
|
||||
unsigned char flags_tspec;
|
||||
unsigned short parameter_length;
|
||||
|
||||
unsigned long rate;
|
||||
unsigned long depth;
|
||||
unsigned long peak;
|
||||
unsigned long min_unit;
|
||||
unsigned long max_unit;
|
||||
} QUAL_tspec; /* Qualitative */
|
||||
|
||||
unsigned char param_id_rspec;
|
||||
typedef struct {
|
||||
rsvp_object base;
|
||||
unsigned char version;
|
||||
unsigned char __reserved_;
|
||||
unsigned short length_in_words;
|
||||
|
||||
unsigned char data[0]; /* Don't change this to a pointer */
|
||||
} rsvp_tspec;
|
||||
|
||||
typedef struct {
|
||||
unsigned char param_id;
|
||||
unsigned char flags_rspec;
|
||||
unsigned short param2_length;
|
||||
unsigned long requested_rate;
|
||||
unsigned long slack;
|
||||
} IS_flowspec; /* RFC 2210 */
|
||||
|
||||
/*
|
||||
* ADSPEC objects */
|
||||
} IS_rspec;
|
||||
|
||||
typedef struct {
|
||||
unsigned char service_num;
|
||||
unsigned char break_bit;
|
||||
unsigned short length;
|
||||
} service_hdr;
|
||||
IS_tspec tspec;
|
||||
IS_rspec rspec;
|
||||
} IS_flowspec; /* RFC 2210 */
|
||||
|
||||
static value_string adspec_services[] = {
|
||||
{1, "Default General Parameters"},
|
||||
{2, "Guaranteed"},
|
||||
{5, "Controlled Load"},
|
||||
};
|
||||
typedef struct {
|
||||
service_hdr svchdr;
|
||||
|
||||
unsigned char param_id;
|
||||
unsigned char flags_tspec;
|
||||
unsigned short parameter_length;
|
||||
|
||||
unsigned long max_unit;
|
||||
} QUAL_flowspec; /* Qualitative */
|
||||
|
||||
|
||||
typedef struct {
|
||||
rsvp_object base;
|
||||
unsigned char version;
|
||||
unsigned char __reserved_;
|
||||
unsigned short length_in_words;
|
||||
|
||||
unsigned char data[0]; /* Don't change this to a pointer */
|
||||
} rsvp_flowspec;
|
||||
|
||||
|
||||
typedef struct {
|
||||
unsigned char id;
|
||||
|
|
Loading…
Reference in New Issue