version 1.1.1.3, 2012/10/09 09:22:28
|
version 1.1.1.4, 2013/07/21 23:54:37
|
Line 187 static const struct message orf_type_str[] =
|
Line 187 static const struct message orf_type_str[] =
|
{ ORF_TYPE_PREFIX, "Prefixlist" }, |
{ ORF_TYPE_PREFIX, "Prefixlist" }, |
{ ORF_TYPE_PREFIX_OLD, "Prefixlist (old)" }, |
{ ORF_TYPE_PREFIX_OLD, "Prefixlist (old)" }, |
}; |
}; |
static const int orf_type_str_max | static const int orf_type_str_max = array_size(orf_type_str); |
= sizeof(orf_type_str)/sizeof(orf_type_str[0]); | |
|
|
static const struct message orf_mode_str[] = |
static const struct message orf_mode_str[] = |
{ |
{ |
Line 196 static const struct message orf_mode_str[] =
|
Line 195 static const struct message orf_mode_str[] =
|
{ ORF_MODE_SEND, "Send" }, |
{ ORF_MODE_SEND, "Send" }, |
{ ORF_MODE_BOTH, "Both" }, |
{ ORF_MODE_BOTH, "Both" }, |
}; |
}; |
static const int orf_mode_str_max | static const int orf_mode_str_max = array_size(orf_mode_str); |
= sizeof(orf_mode_str)/sizeof(orf_mode_str[0]); | |
|
|
static int |
static int |
bgp_capability_orf_entry (struct peer *peer, struct capability_header *hdr) |
bgp_capability_orf_entry (struct peer *peer, struct capability_header *hdr) |
Line 336 bgp_capability_orf_entry (struct peer *peer, struct ca
|
Line 334 bgp_capability_orf_entry (struct peer *peer, struct ca
|
} |
} |
|
|
static int |
static int |
bgp_capability_orf (struct peer *peer, struct capability_header *hdr) |
|
{ |
|
struct stream *s = BGP_INPUT (peer); |
|
size_t end = stream_get_getp (s) + hdr->length; |
|
|
|
assert (stream_get_getp(s) + sizeof(struct capability_orf_entry) <= end); |
|
|
|
/* We must have at least one ORF entry, as the caller has already done |
|
* minimum length validation for the capability code - for ORF there must |
|
* at least one ORF entry (header and unknown number of pairs of bytes). |
|
*/ |
|
do |
|
{ |
|
if (bgp_capability_orf_entry (peer, hdr) == -1) |
|
return -1; |
|
} |
|
while (stream_get_getp(s) + sizeof(struct capability_orf_entry) < end); |
|
|
|
return 0; |
|
} |
|
|
|
static int |
|
bgp_capability_restart (struct peer *peer, struct capability_header *caphdr) |
bgp_capability_restart (struct peer *peer, struct capability_header *caphdr) |
{ |
{ |
struct stream *s = BGP_INPUT (peer); |
struct stream *s = BGP_INPUT (peer); |
Line 449 static const struct message capcode_str[] =
|
Line 425 static const struct message capcode_str[] =
|
{ CAPABILITY_CODE_REFRESH_OLD, "Route Refresh (Old)" }, |
{ CAPABILITY_CODE_REFRESH_OLD, "Route Refresh (Old)" }, |
{ CAPABILITY_CODE_ORF_OLD, "ORF (Old)" }, |
{ CAPABILITY_CODE_ORF_OLD, "ORF (Old)" }, |
}; |
}; |
static const int capcode_str_max = sizeof(capcode_str)/sizeof(capcode_str[0]); | static const int capcode_str_max = array_size(capcode_str); |
|
|
/* Minimum sizes for length field of each cap (so not inc. the header) */ |
/* Minimum sizes for length field of each cap (so not inc. the header) */ |
static const size_t cap_minsizes[] = |
static const size_t cap_minsizes[] = |
Line 575 bgp_capability_parse (struct peer *peer, size_t length
|
Line 551 bgp_capability_parse (struct peer *peer, size_t length
|
break; |
break; |
case CAPABILITY_CODE_ORF: |
case CAPABILITY_CODE_ORF: |
case CAPABILITY_CODE_ORF_OLD: |
case CAPABILITY_CODE_ORF_OLD: |
if (bgp_capability_orf (peer, &caphdr)) | if (bgp_capability_orf_entry (peer, &caphdr)) |
return -1; |
return -1; |
break; |
break; |
case CAPABILITY_CODE_RESTART: |
case CAPABILITY_CODE_RESTART: |