mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-10-18 08:26:02 +08:00
Update to FreeBSD head 2018-02-01
Git mirror commit d079ae0442af8fa3cfd6d7ede190d04e64a2c0d4. Update #3472.
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
* LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* Original code by Hannes Gredler (hannes@juniper.net)
|
||||
* Original code by Hannes Gredler (hannes@gredler.at)
|
||||
*/
|
||||
|
||||
/* \summary: Resource ReSerVation Protocol (RSVP) printer */
|
||||
@@ -1211,6 +1211,17 @@ rsvp_obj_print(netdissect_options *ndo,
|
||||
/* read variable length subobjects */
|
||||
total_subobj_len = obj_tlen;
|
||||
while(total_subobj_len > 0) {
|
||||
/* If RFC 3476 Section 3.1 defined that a sub-object of the
|
||||
* GENERALIZED_UNI RSVP object must have the Length field as
|
||||
* a multiple of 4, instead of the check below it would be
|
||||
* better to test total_subobj_len only once before the loop.
|
||||
* So long as it does not define it and this while loop does
|
||||
* not implement such a requirement, let's accept that within
|
||||
* each iteration subobj_len may happen to be a multiple of 1
|
||||
* and test it and total_subobj_len respectively.
|
||||
*/
|
||||
if (total_subobj_len < 4)
|
||||
goto invalid;
|
||||
subobj_len = EXTRACT_16BITS(obj_tptr);
|
||||
subobj_type = (EXTRACT_16BITS(obj_tptr+2))>>8;
|
||||
af = (EXTRACT_16BITS(obj_tptr+2))&0x00FF;
|
||||
@@ -1222,7 +1233,13 @@ rsvp_obj_print(netdissect_options *ndo,
|
||||
tok2str(af_values, "Unknown", af), af,
|
||||
subobj_len));
|
||||
|
||||
if(subobj_len == 0)
|
||||
/* In addition to what is explained above, the same spec does not
|
||||
* explicitly say that the same Length field includes the 4-octet
|
||||
* sub-object header, but as long as this while loop implements it
|
||||
* as it does include, let's keep the check below consistent with
|
||||
* the rest of the code.
|
||||
*/
|
||||
if(subobj_len < 4 || subobj_len > total_subobj_len)
|
||||
goto invalid;
|
||||
|
||||
switch(subobj_type) {
|
||||
@@ -1478,12 +1495,12 @@ rsvp_obj_print(netdissect_options *ndo,
|
||||
case RSVP_OBJ_FASTREROUTE:
|
||||
/* the differences between c-type 1 and 7 are minor */
|
||||
obj_ptr.rsvp_obj_frr = (const struct rsvp_obj_frr_t *)obj_tptr;
|
||||
bw.i = EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->bandwidth);
|
||||
|
||||
switch(rsvp_obj_ctype) {
|
||||
case RSVP_CTYPE_1: /* new style */
|
||||
if (obj_tlen < sizeof(struct rsvp_obj_frr_t))
|
||||
return-1;
|
||||
bw.i = EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->bandwidth);
|
||||
ND_PRINT((ndo, "%s Setup Priority: %u, Holding Priority: %u, Hop-limit: %u, Bandwidth: %.10g Mbps",
|
||||
ident,
|
||||
(int)obj_ptr.rsvp_obj_frr->setup_prio,
|
||||
@@ -1502,6 +1519,7 @@ rsvp_obj_print(netdissect_options *ndo,
|
||||
case RSVP_CTYPE_TUNNEL_IPV4: /* old style */
|
||||
if (obj_tlen < 16)
|
||||
return-1;
|
||||
bw.i = EXTRACT_32BITS(obj_ptr.rsvp_obj_frr->bandwidth);
|
||||
ND_PRINT((ndo, "%s Setup Priority: %u, Holding Priority: %u, Hop-limit: %u, Bandwidth: %.10g Mbps",
|
||||
ident,
|
||||
(int)obj_ptr.rsvp_obj_frr->setup_prio,
|
||||
|
Reference in New Issue
Block a user