mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-29 06:10:37 +00:00
Revert "*: reindent pt. 2"
This reverts commit c14777c6bf
.
clang 5 is not widely available enough for people to indent with. This
is particularly problematic when rebasing/adjusting branches.
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
dceb5f8ac7
commit
9d303b37d7
@ -878,9 +878,8 @@ size_t aspath_put(struct stream *s, struct aspath *as, int use32bit)
|
||||
* The general assumption here is that many things tested will
|
||||
* never happen. And, in real live, up to now, they have not.
|
||||
*/
|
||||
while (seg
|
||||
&& (ASSEGMENT_LEN(seg, use32bit)
|
||||
<= STREAM_WRITEABLE(s))) {
|
||||
while (seg && (ASSEGMENT_LEN(seg, use32bit)
|
||||
<= STREAM_WRITEABLE(s))) {
|
||||
struct assegment *next = seg->next;
|
||||
int written = 0;
|
||||
int asns_packed = 0;
|
||||
@ -1585,14 +1584,12 @@ int aspath_cmp_left(const struct aspath *aspath1, const struct aspath *aspath2)
|
||||
return 1;
|
||||
|
||||
/* find first non-confed segments for each */
|
||||
while (seg1
|
||||
&& ((seg1->type == AS_CONFED_SEQUENCE)
|
||||
|| (seg1->type == AS_CONFED_SET)))
|
||||
while (seg1 && ((seg1->type == AS_CONFED_SEQUENCE)
|
||||
|| (seg1->type == AS_CONFED_SET)))
|
||||
seg1 = seg1->next;
|
||||
|
||||
while (seg2
|
||||
&& ((seg2->type == AS_CONFED_SEQUENCE)
|
||||
|| (seg2->type == AS_CONFED_SET)))
|
||||
while (seg2 && ((seg2->type == AS_CONFED_SEQUENCE)
|
||||
|| (seg2->type == AS_CONFED_SET)))
|
||||
seg2 = seg2->next;
|
||||
|
||||
/* Check as1's */
|
||||
@ -2069,8 +2066,7 @@ static void aspath_show_all_iterator(struct hash_backet *backet,
|
||||
`show [ip] bgp paths' command. */
|
||||
void aspath_print_all_vty(struct vty *vty)
|
||||
{
|
||||
hash_iterate(ashash,
|
||||
(void (*)(struct hash_backet *,
|
||||
void *))aspath_show_all_iterator,
|
||||
hash_iterate(ashash, (void (*)(struct hash_backet *,
|
||||
void *))aspath_show_all_iterator,
|
||||
vty);
|
||||
}
|
||||
|
153
bgpd/bgp_attr.c
153
bgpd/bgp_attr.c
@ -82,14 +82,15 @@ static const struct message attr_str[] = {
|
||||
{BGP_ATTR_PREFIX_SID, "PREFIX_SID"},
|
||||
{0}};
|
||||
|
||||
static const struct message attr_flag_str[] = {
|
||||
{BGP_ATTR_FLAG_OPTIONAL, "Optional"},
|
||||
{BGP_ATTR_FLAG_TRANS, "Transitive"},
|
||||
{BGP_ATTR_FLAG_PARTIAL, "Partial"},
|
||||
/* bgp_attr_flags_diagnose() relies on this bit being last in
|
||||
this list */
|
||||
{BGP_ATTR_FLAG_EXTLEN, "Extended Length"},
|
||||
{0}};
|
||||
static const struct message attr_flag_str[] =
|
||||
{
|
||||
{BGP_ATTR_FLAG_OPTIONAL, "Optional"},
|
||||
{BGP_ATTR_FLAG_TRANS, "Transitive"},
|
||||
{BGP_ATTR_FLAG_PARTIAL, "Partial"},
|
||||
/* bgp_attr_flags_diagnose() relies on this bit being last in
|
||||
this list */
|
||||
{BGP_ATTR_FLAG_EXTLEN, "Extended Length"},
|
||||
{0}};
|
||||
|
||||
static struct hash *cluster_hash;
|
||||
|
||||
@ -679,10 +680,9 @@ static void attr_show_all_iterator(struct hash_backet *backet, struct vty *vty)
|
||||
|
||||
void attr_show_all(struct vty *vty)
|
||||
{
|
||||
hash_iterate(
|
||||
attrhash,
|
||||
(void (*)(struct hash_backet *, void *))attr_show_all_iterator,
|
||||
vty);
|
||||
hash_iterate(attrhash, (void (*)(struct hash_backet *,
|
||||
void *))attr_show_all_iterator,
|
||||
vty);
|
||||
}
|
||||
|
||||
static void *bgp_attr_hash_alloc(void *p)
|
||||
@ -1055,7 +1055,7 @@ bgp_attr_malformed(struct bgp_attr_parser_args *args, u_char subcode,
|
||||
static void
|
||||
bgp_attr_flags_diagnose(struct bgp_attr_parser_args *args,
|
||||
u_int8_t desired_flags /* how RFC says it must be */
|
||||
)
|
||||
)
|
||||
{
|
||||
u_char seen = 0, i;
|
||||
u_char real_flags = args->flags;
|
||||
@ -1087,26 +1087,30 @@ bgp_attr_flags_diagnose(struct bgp_attr_parser_args *args,
|
||||
* as will PARTIAL for optional+transitive attributes.
|
||||
*/
|
||||
const u_int8_t attr_flags_values[] = {
|
||||
[BGP_ATTR_ORIGIN] = BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_AS_PATH] = BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_NEXT_HOP] = BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_MULTI_EXIT_DISC] = BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_LOCAL_PREF] = BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_ATOMIC_AGGREGATE] = BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_AGGREGATOR] = BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_COMMUNITIES] = BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_ORIGINATOR_ID] = BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_CLUSTER_LIST] = BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_MP_REACH_NLRI] = BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_MP_UNREACH_NLRI] = BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_EXT_COMMUNITIES] =
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_AS4_PATH] = BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_AS4_AGGREGATOR] =
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_LARGE_COMMUNITIES] =
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_PREFIX_SID] = BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_ORIGIN] = BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_AS_PATH] = BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_NEXT_HOP] = BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_MULTI_EXIT_DISC] = BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_LOCAL_PREF] = BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_ATOMIC_AGGREGATE] = BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_AGGREGATOR] =
|
||||
BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_COMMUNITIES] =
|
||||
BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_ORIGINATOR_ID] = BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_CLUSTER_LIST] = BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_MP_REACH_NLRI] = BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_MP_UNREACH_NLRI] = BGP_ATTR_FLAG_OPTIONAL,
|
||||
[BGP_ATTR_EXT_COMMUNITIES] =
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_AS4_PATH] =
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_AS4_AGGREGATOR] =
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_LARGE_COMMUNITIES] =
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
|
||||
[BGP_ATTR_PREFIX_SID] =
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS,
|
||||
};
|
||||
static const size_t attr_flags_values_max = array_size(attr_flags_values) - 1;
|
||||
|
||||
@ -2751,10 +2755,9 @@ static void bgp_packet_mpattr_tea(struct bgp *bgp, struct peer *peer,
|
||||
struct bgp_attr_encap_subtlv *st;
|
||||
const char *attrname;
|
||||
|
||||
if (!attr
|
||||
|| (attrtype == BGP_ATTR_ENCAP
|
||||
&& (!attr->encap_tunneltype
|
||||
|| attr->encap_tunneltype == BGP_ENCAP_TYPE_MPLS)))
|
||||
if (!attr || (attrtype == BGP_ATTR_ENCAP
|
||||
&& (!attr->encap_tunneltype
|
||||
|| attr->encap_tunneltype == BGP_ENCAP_TYPE_MPLS)))
|
||||
return;
|
||||
|
||||
switch (attrtype) {
|
||||
@ -2801,8 +2804,9 @@ static void bgp_packet_mpattr_tea(struct bgp *bgp, struct peer *peer,
|
||||
|
||||
if (attrlenfield > 0xff) {
|
||||
/* 2-octet length field */
|
||||
stream_putc(s, BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s, attrtype);
|
||||
stream_putw(s, attrlenfield & 0xffff);
|
||||
} else {
|
||||
@ -3040,14 +3044,15 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,
|
||||
if (CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_SEND_COMMUNITY)
|
||||
&& (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_COMMUNITIES))) {
|
||||
if (attr->community->size * 4 > 255) {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s, BGP_ATTR_COMMUNITIES);
|
||||
stream_putw(s, attr->community->size * 4);
|
||||
} else {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s, BGP_ATTR_COMMUNITIES);
|
||||
stream_putc(s, attr->community->size * 4);
|
||||
}
|
||||
@ -3061,14 +3066,15 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,
|
||||
PEER_FLAG_SEND_LARGE_COMMUNITY)
|
||||
&& (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_LARGE_COMMUNITIES))) {
|
||||
if (attr->lcommunity->size * 12 > 255) {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES);
|
||||
stream_putw(s, attr->lcommunity->size * 12);
|
||||
} else {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES);
|
||||
stream_putc(s, attr->lcommunity->size * 12);
|
||||
}
|
||||
@ -3120,14 +3126,16 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,
|
||||
if (peer->sort == BGP_PEER_IBGP
|
||||
|| peer->sort == BGP_PEER_CONFED) {
|
||||
if (attr->ecommunity->size * 8 > 255) {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s, BGP_ATTR_EXT_COMMUNITIES);
|
||||
stream_putw(s, attr->ecommunity->size * 8);
|
||||
} else {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s, BGP_ATTR_EXT_COMMUNITIES);
|
||||
stream_putc(s, attr->ecommunity->size * 8);
|
||||
}
|
||||
@ -3193,8 +3201,9 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,
|
||||
label_index = attr->label_index;
|
||||
|
||||
if (label_index != BGP_INVALID_LABEL_INDEX) {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s, BGP_ATTR_PREFIX_SID);
|
||||
stream_putc(s, 10);
|
||||
stream_putc(s, BGP_PREFIX_SID_LABEL_INDEX);
|
||||
@ -3222,8 +3231,9 @@ bgp_size_t bgp_packet_attribute(struct bgp *bgp, struct peer *peer,
|
||||
*/
|
||||
aspath = aspath_delete_confed_seq(aspath);
|
||||
|
||||
stream_putc(s, BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_TRANS | BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s, BGP_ATTR_AS4_PATH);
|
||||
aspath_sizep = stream_get_endp(s);
|
||||
stream_putw(s, 0);
|
||||
@ -3408,14 +3418,15 @@ void bgp_dump_routes_attr(struct stream *s, struct attr *attr,
|
||||
/* Community attribute. */
|
||||
if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_COMMUNITIES)) {
|
||||
if (attr->community->size * 4 > 255) {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s, BGP_ATTR_COMMUNITIES);
|
||||
stream_putw(s, attr->community->size * 4);
|
||||
} else {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s, BGP_ATTR_COMMUNITIES);
|
||||
stream_putc(s, attr->community->size * 4);
|
||||
}
|
||||
@ -3425,14 +3436,15 @@ void bgp_dump_routes_attr(struct stream *s, struct attr *attr,
|
||||
/* Large Community attribute. */
|
||||
if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_LARGE_COMMUNITIES)) {
|
||||
if (attr->lcommunity->size * 12 > 255) {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL | BGP_ATTR_FLAG_TRANS
|
||||
| BGP_ATTR_FLAG_EXTLEN);
|
||||
stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES);
|
||||
stream_putw(s, attr->lcommunity->size * 12);
|
||||
} else {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s, BGP_ATTR_LARGE_COMMUNITIES);
|
||||
stream_putc(s, attr->lcommunity->size * 12);
|
||||
}
|
||||
@ -3477,8 +3489,9 @@ void bgp_dump_routes_attr(struct stream *s, struct attr *attr,
|
||||
/* Prefix SID */
|
||||
if (attr->flag & ATTR_FLAG_BIT(BGP_ATTR_PREFIX_SID)) {
|
||||
if (attr->label_index != BGP_INVALID_LABEL_INDEX) {
|
||||
stream_putc(s, BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s,
|
||||
BGP_ATTR_FLAG_OPTIONAL
|
||||
| BGP_ATTR_FLAG_TRANS);
|
||||
stream_putc(s, BGP_ATTR_PREFIX_SID);
|
||||
stream_putc(s, 10);
|
||||
stream_putc(s, BGP_PREFIX_SID_LABEL_INDEX);
|
||||
|
@ -220,7 +220,7 @@ typedef enum {
|
||||
BGP_ATTR_PARSE_WITHDRAW = -2,
|
||||
|
||||
/* only used internally, send notify + convert to BGP_ATTR_PARSE_ERROR
|
||||
*/
|
||||
*/
|
||||
BGP_ATTR_PARSE_ERROR_NOTIFYPLS = -3,
|
||||
} bgp_attr_parse_ret_t;
|
||||
|
||||
|
@ -212,9 +212,8 @@ static void bgp_bfd_update_type(struct peer *peer)
|
||||
if ((multihop
|
||||
&& !CHECK_FLAG(bfd_info->flags,
|
||||
BFD_FLAG_BFD_TYPE_MULTIHOP))
|
||||
|| (!multihop
|
||||
&& CHECK_FLAG(bfd_info->flags,
|
||||
BFD_FLAG_BFD_TYPE_MULTIHOP))) {
|
||||
|| (!multihop && CHECK_FLAG(bfd_info->flags,
|
||||
BFD_FLAG_BFD_TYPE_MULTIHOP))) {
|
||||
bgp_bfd_peer_sendmsg(peer, ZEBRA_BFD_DEST_DEREGISTER);
|
||||
bgp_bfd_peer_sendmsg(peer, ZEBRA_BFD_DEST_REGISTER);
|
||||
}
|
||||
|
@ -36,9 +36,7 @@
|
||||
|
||||
/* privileges */
|
||||
static zebra_capabilities_t _caps_p[] = {
|
||||
ZCAP_BIND,
|
||||
ZCAP_NET_RAW,
|
||||
ZCAP_NET_ADMIN,
|
||||
ZCAP_BIND, ZCAP_NET_RAW, ZCAP_NET_ADMIN,
|
||||
};
|
||||
|
||||
struct zebra_privs_t bgpd_privs = {
|
||||
|
@ -369,9 +369,10 @@ static void bgp_damp_parameter_set(int hlife, int reuse, int sup, int maxsup)
|
||||
/* Initialize params per bgp_damp_config. */
|
||||
damp->reuse_index_size = REUSE_ARRAY_SIZE;
|
||||
|
||||
damp->ceiling = (int)(damp->reuse_limit
|
||||
* (pow(2, (double)damp->max_suppress_time
|
||||
/ damp->half_life)));
|
||||
damp->ceiling =
|
||||
(int)(damp->reuse_limit * (pow(2,
|
||||
(double)damp->max_suppress_time
|
||||
/ damp->half_life)));
|
||||
|
||||
/* Decay-array computations */
|
||||
damp->decay_array_size =
|
||||
@ -413,11 +414,9 @@ static void bgp_damp_parameter_set(int hlife, int reuse, int sup, int maxsup)
|
||||
for (i = 0; i < damp->reuse_index_size; i++) {
|
||||
damp->reuse_index[i] =
|
||||
(int)(((double)damp->half_life / DELTA_REUSE)
|
||||
* log10(1.0
|
||||
/ (damp->reuse_limit
|
||||
* (1.0
|
||||
+ ((double)i
|
||||
/ damp->scale_factor))))
|
||||
* log10(1.0 / (damp->reuse_limit
|
||||
* (1.0 + ((double)i
|
||||
/ damp->scale_factor))))
|
||||
/ log10(0.5));
|
||||
}
|
||||
}
|
||||
|
@ -244,8 +244,9 @@ static void bgp_dump_routes_index_table(struct bgp *bgp)
|
||||
|
||||
/* Populate fake peer at index 0, for locally originated routes */
|
||||
/* Peer type (IPv4) */
|
||||
stream_putc(obuf, TABLE_DUMP_V2_PEER_INDEX_TABLE_AS4
|
||||
+ TABLE_DUMP_V2_PEER_INDEX_TABLE_IP);
|
||||
stream_putc(obuf,
|
||||
TABLE_DUMP_V2_PEER_INDEX_TABLE_AS4
|
||||
+ TABLE_DUMP_V2_PEER_INDEX_TABLE_IP);
|
||||
/* Peer BGP ID (0.0.0.0) */
|
||||
stream_putl(obuf, 0);
|
||||
/* Peer IP address (0.0.0.0) */
|
||||
|
@ -2718,10 +2718,9 @@ int bgp_evpn_local_vni_add(struct bgp *bgp, vni_t vni,
|
||||
*/
|
||||
void bgp_evpn_cleanup_on_disable(struct bgp *bgp)
|
||||
{
|
||||
hash_iterate(
|
||||
bgp->vnihash,
|
||||
(void (*)(struct hash_backet *, void *))cleanup_vni_on_disable,
|
||||
bgp);
|
||||
hash_iterate(bgp->vnihash, (void (*)(struct hash_backet *,
|
||||
void *))cleanup_vni_on_disable,
|
||||
bgp);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2731,10 +2730,9 @@ void bgp_evpn_cleanup_on_disable(struct bgp *bgp)
|
||||
void bgp_evpn_cleanup(struct bgp *bgp)
|
||||
{
|
||||
if (bgp->vnihash)
|
||||
hash_iterate(
|
||||
bgp->vnihash,
|
||||
(void (*)(struct hash_backet *, void *))free_vni_entry,
|
||||
bgp);
|
||||
hash_iterate(bgp->vnihash, (void (*)(struct hash_backet *,
|
||||
void *))free_vni_entry,
|
||||
bgp);
|
||||
if (bgp->import_rt_hash)
|
||||
hash_free(bgp->import_rt_hash);
|
||||
bgp->import_rt_hash = NULL;
|
||||
|
@ -1301,10 +1301,9 @@ static void evpn_show_routes_vni_all(struct vty *vty, struct bgp *bgp,
|
||||
wctx.bgp = bgp;
|
||||
wctx.vty = vty;
|
||||
wctx.vtep_ip = vtep_ip;
|
||||
hash_iterate(
|
||||
bgp->vnihash,
|
||||
(void (*)(struct hash_backet *, void *))show_vni_routes_hash,
|
||||
&wctx);
|
||||
hash_iterate(bgp->vnihash, (void (*)(struct hash_backet *,
|
||||
void *))show_vni_routes_hash,
|
||||
&wctx);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1394,8 +1394,9 @@ static int bgp_establish(struct peer *peer)
|
||||
}
|
||||
|
||||
if (other == peer)
|
||||
ret = 1; /* bgp_establish specific code when xfer_conn
|
||||
happens. */
|
||||
ret =
|
||||
1; /* bgp_establish specific code when xfer_conn
|
||||
happens. */
|
||||
|
||||
/* Reset capability open status flag. */
|
||||
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_CAPABILITY_OPEN))
|
||||
|
@ -283,7 +283,7 @@ int bgp_nlri_parse_label(struct peer *peer, struct attr *attr,
|
||||
* an error SHOULD
|
||||
* be logged locally, and the prefix SHOULD be
|
||||
* ignored.
|
||||
*/
|
||||
*/
|
||||
zlog_err(
|
||||
"%s: IPv4 labeled-unicast NLRI is multicast address %s, ignoring",
|
||||
peer->host, inet_ntoa(p.u.prefix4));
|
||||
|
@ -101,9 +101,7 @@ static int retain_mode = 0;
|
||||
|
||||
/* privileges */
|
||||
static zebra_capabilities_t _caps_p[] = {
|
||||
ZCAP_BIND,
|
||||
ZCAP_NET_RAW,
|
||||
ZCAP_NET_ADMIN,
|
||||
ZCAP_BIND, ZCAP_NET_RAW, ZCAP_NET_ADMIN,
|
||||
};
|
||||
|
||||
struct zebra_privs_t bgpd_privs = {
|
||||
|
@ -675,9 +675,8 @@ void bgp_info_mpath_aggregate_update(struct bgp_info *new_best,
|
||||
|
||||
bgp_attr_dup(&attr, new_best->attr);
|
||||
|
||||
if (new_best->peer
|
||||
&& bgp_flag_check(new_best->peer->bgp,
|
||||
BGP_FLAG_MULTIPATH_RELAX_AS_SET)) {
|
||||
if (new_best->peer && bgp_flag_check(new_best->peer->bgp,
|
||||
BGP_FLAG_MULTIPATH_RELAX_AS_SET)) {
|
||||
|
||||
/* aggregate attribute from multipath constituents */
|
||||
aspath = aspath_dup(attr.aspath);
|
||||
|
@ -612,9 +612,8 @@ int bgp_show_mpls_vpn(struct vty *vty, afi_t afi, struct prefix_rd *prd,
|
||||
|
||||
if (use_json) {
|
||||
json_object_object_add(json, "routes", json_nroute);
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
if (output_count == 0)
|
||||
|
@ -158,9 +158,8 @@ int bgp_set_socket_ttl(struct peer *peer, int bgp_sock)
|
||||
if (ret) {
|
||||
zlog_err(
|
||||
"%s: Can't set TxTTL on peer (rtrid %s) socket, err = %d",
|
||||
__func__,
|
||||
inet_ntop(AF_INET, &peer->remote_id, buf,
|
||||
sizeof(buf)),
|
||||
__func__, inet_ntop(AF_INET, &peer->remote_id,
|
||||
buf, sizeof(buf)),
|
||||
errno);
|
||||
return ret;
|
||||
}
|
||||
@ -173,9 +172,8 @@ int bgp_set_socket_ttl(struct peer *peer, int bgp_sock)
|
||||
if (ret) {
|
||||
zlog_err(
|
||||
"%s: Can't set TxTTL on peer (rtrid %s) socket, err = %d",
|
||||
__func__,
|
||||
inet_ntop(AF_INET, &peer->remote_id, buf,
|
||||
sizeof(buf)),
|
||||
__func__, inet_ntop(AF_INET, &peer->remote_id,
|
||||
buf, sizeof(buf)),
|
||||
errno);
|
||||
return ret;
|
||||
}
|
||||
@ -184,9 +182,8 @@ int bgp_set_socket_ttl(struct peer *peer, int bgp_sock)
|
||||
if (ret) {
|
||||
zlog_err(
|
||||
"%s: Can't set MinTTL on peer (rtrid %s) socket, err = %d",
|
||||
__func__,
|
||||
inet_ntop(AF_INET, &peer->remote_id, buf,
|
||||
sizeof(buf)),
|
||||
__func__, inet_ntop(AF_INET, &peer->remote_id,
|
||||
buf, sizeof(buf)),
|
||||
errno);
|
||||
return ret;
|
||||
}
|
||||
|
@ -744,18 +744,18 @@ static const struct message capcode_str[] = {
|
||||
|
||||
/* Minimum sizes for length field of each cap (so not inc. the header) */
|
||||
static const size_t cap_minsizes[] = {
|
||||
[CAPABILITY_CODE_MP] = CAPABILITY_CODE_MP_LEN,
|
||||
[CAPABILITY_CODE_REFRESH] = CAPABILITY_CODE_REFRESH_LEN,
|
||||
[CAPABILITY_CODE_ORF] = CAPABILITY_CODE_ORF_LEN,
|
||||
[CAPABILITY_CODE_RESTART] = CAPABILITY_CODE_RESTART_LEN,
|
||||
[CAPABILITY_CODE_AS4] = CAPABILITY_CODE_AS4_LEN,
|
||||
[CAPABILITY_CODE_ADDPATH] = CAPABILITY_CODE_ADDPATH_LEN,
|
||||
[CAPABILITY_CODE_DYNAMIC] = CAPABILITY_CODE_DYNAMIC_LEN,
|
||||
[CAPABILITY_CODE_DYNAMIC_OLD] = CAPABILITY_CODE_DYNAMIC_LEN,
|
||||
[CAPABILITY_CODE_ENHE] = CAPABILITY_CODE_ENHE_LEN,
|
||||
[CAPABILITY_CODE_REFRESH_OLD] = CAPABILITY_CODE_REFRESH_LEN,
|
||||
[CAPABILITY_CODE_ORF_OLD] = CAPABILITY_CODE_ORF_LEN,
|
||||
[CAPABILITY_CODE_FQDN] = CAPABILITY_CODE_MIN_FQDN_LEN,
|
||||
[CAPABILITY_CODE_MP] = CAPABILITY_CODE_MP_LEN,
|
||||
[CAPABILITY_CODE_REFRESH] = CAPABILITY_CODE_REFRESH_LEN,
|
||||
[CAPABILITY_CODE_ORF] = CAPABILITY_CODE_ORF_LEN,
|
||||
[CAPABILITY_CODE_RESTART] = CAPABILITY_CODE_RESTART_LEN,
|
||||
[CAPABILITY_CODE_AS4] = CAPABILITY_CODE_AS4_LEN,
|
||||
[CAPABILITY_CODE_ADDPATH] = CAPABILITY_CODE_ADDPATH_LEN,
|
||||
[CAPABILITY_CODE_DYNAMIC] = CAPABILITY_CODE_DYNAMIC_LEN,
|
||||
[CAPABILITY_CODE_DYNAMIC_OLD] = CAPABILITY_CODE_DYNAMIC_LEN,
|
||||
[CAPABILITY_CODE_ENHE] = CAPABILITY_CODE_ENHE_LEN,
|
||||
[CAPABILITY_CODE_REFRESH_OLD] = CAPABILITY_CODE_REFRESH_LEN,
|
||||
[CAPABILITY_CODE_ORF_OLD] = CAPABILITY_CODE_ORF_LEN,
|
||||
[CAPABILITY_CODE_FQDN] = CAPABILITY_CODE_MIN_FQDN_LEN,
|
||||
};
|
||||
|
||||
/* value the capability must be a multiple of.
|
||||
@ -764,12 +764,18 @@ static const size_t cap_minsizes[] = {
|
||||
* table should be set to 1.
|
||||
*/
|
||||
static const size_t cap_modsizes[] = {
|
||||
[CAPABILITY_CODE_MP] = 4, [CAPABILITY_CODE_REFRESH] = 1,
|
||||
[CAPABILITY_CODE_ORF] = 1, [CAPABILITY_CODE_RESTART] = 1,
|
||||
[CAPABILITY_CODE_AS4] = 4, [CAPABILITY_CODE_ADDPATH] = 4,
|
||||
[CAPABILITY_CODE_DYNAMIC] = 1, [CAPABILITY_CODE_DYNAMIC_OLD] = 1,
|
||||
[CAPABILITY_CODE_ENHE] = 6, [CAPABILITY_CODE_REFRESH_OLD] = 1,
|
||||
[CAPABILITY_CODE_ORF_OLD] = 1, [CAPABILITY_CODE_FQDN] = 1,
|
||||
[CAPABILITY_CODE_MP] = 4,
|
||||
[CAPABILITY_CODE_REFRESH] = 1,
|
||||
[CAPABILITY_CODE_ORF] = 1,
|
||||
[CAPABILITY_CODE_RESTART] = 1,
|
||||
[CAPABILITY_CODE_AS4] = 4,
|
||||
[CAPABILITY_CODE_ADDPATH] = 4,
|
||||
[CAPABILITY_CODE_DYNAMIC] = 1,
|
||||
[CAPABILITY_CODE_DYNAMIC_OLD] = 1,
|
||||
[CAPABILITY_CODE_ENHE] = 6,
|
||||
[CAPABILITY_CODE_REFRESH_OLD] = 1,
|
||||
[CAPABILITY_CODE_ORF_OLD] = 1,
|
||||
[CAPABILITY_CODE_FQDN] = 1,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -1309,8 +1315,9 @@ void bgp_open_capability(struct stream *s, struct peer *peer)
|
||||
*/
|
||||
SET_FLAG(peer->cap, PEER_CAP_ENHE_ADV);
|
||||
stream_putc(s, BGP_OPEN_OPT_CAP);
|
||||
stream_putc(s, CAPABILITY_CODE_ENHE_LEN
|
||||
+ 2);
|
||||
stream_putc(s,
|
||||
CAPABILITY_CODE_ENHE_LEN
|
||||
+ 2);
|
||||
stream_putc(s, CAPABILITY_CODE_ENHE);
|
||||
stream_putc(s,
|
||||
CAPABILITY_CODE_ENHE_LEN);
|
||||
|
@ -547,8 +547,9 @@ void bgp_open_send(struct peer *peer)
|
||||
|
||||
/* Set open packet values. */
|
||||
stream_putc(s, BGP_VERSION_4); /* BGP version */
|
||||
stream_putw(s, (local_as <= BGP_AS_MAX) ? (u_int16_t)local_as
|
||||
: BGP_AS_TRANS);
|
||||
stream_putw(s,
|
||||
(local_as <= BGP_AS_MAX) ? (u_int16_t)local_as
|
||||
: BGP_AS_TRANS);
|
||||
stream_putw(s, send_holdtime); /* Hold Time */
|
||||
stream_put_in_addr(s, &peer->local_id); /* BGP Identifier */
|
||||
|
||||
|
100
bgpd/bgp_route.c
100
bgpd/bgp_route.c
@ -1916,9 +1916,8 @@ int subgroup_process_announce_selected(struct update_subgroup *subgrp,
|
||||
: NULL);
|
||||
|
||||
/* First update is deferred until ORF or ROUTE-REFRESH is received */
|
||||
if (onlypeer
|
||||
&& CHECK_FLAG(onlypeer->af_sflags[afi][safi],
|
||||
PEER_STATUS_ORF_WAIT_REFRESH))
|
||||
if (onlypeer && CHECK_FLAG(onlypeer->af_sflags[afi][safi],
|
||||
PEER_STATUS_ORF_WAIT_REFRESH))
|
||||
return 0;
|
||||
|
||||
memset(&attr, 0, sizeof(struct attr));
|
||||
@ -3869,7 +3868,7 @@ int bgp_nlri_parse_ip(struct peer *peer, struct attr *attr,
|
||||
* an error SHOULD
|
||||
* be logged locally, and the prefix SHOULD be
|
||||
* ignored.
|
||||
*/
|
||||
*/
|
||||
zlog_err(
|
||||
"%s: IPv4 unicast NLRI is multicast address %s, ignoring",
|
||||
peer->host, inet_ntoa(p.u.prefix4));
|
||||
@ -5210,16 +5209,14 @@ DEFUN (no_bgp_network_mask_natural,
|
||||
}
|
||||
|
||||
ALIAS(no_bgp_network, no_bgp_network_label_index_cmd,
|
||||
"no network A.B.C.D/M label-index (0-1048560)",
|
||||
NO_STR
|
||||
"no network A.B.C.D/M label-index (0-1048560)", NO_STR
|
||||
"Specify a network to announce via BGP\n"
|
||||
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
|
||||
"Label index to associate with the prefix\n"
|
||||
"Label index value\n")
|
||||
|
||||
ALIAS(no_bgp_network, no_bgp_network_label_index_route_map_cmd,
|
||||
"no network A.B.C.D/M label-index (0-1048560) route-map WORD",
|
||||
NO_STR
|
||||
"no network A.B.C.D/M label-index (0-1048560) route-map WORD", NO_STR
|
||||
"Specify a network to announce via BGP\n"
|
||||
"IP prefix\n"
|
||||
"Label index to associate with the prefix\n"
|
||||
@ -5301,16 +5298,14 @@ DEFUN (no_ipv6_bgp_network,
|
||||
}
|
||||
|
||||
ALIAS(no_ipv6_bgp_network, no_ipv6_bgp_network_label_index_cmd,
|
||||
"no network X:X::X:X/M label-index (0-1048560)",
|
||||
NO_STR
|
||||
"no network X:X::X:X/M label-index (0-1048560)", NO_STR
|
||||
"Specify a network to announce via BGP\n"
|
||||
"IPv6 prefix <network>/<length>\n"
|
||||
"Label index to associate with the prefix\n"
|
||||
"Label index value\n")
|
||||
|
||||
ALIAS(no_ipv6_bgp_network, no_ipv6_bgp_network_label_index_route_map_cmd,
|
||||
"no network X:X::X:X/M label-index (0-1048560) route-map WORD",
|
||||
NO_STR
|
||||
"no network X:X::X:X/M label-index (0-1048560) route-map WORD", NO_STR
|
||||
"Specify a network to announce via BGP\n"
|
||||
"IPv6 prefix\n"
|
||||
"Label index to associate with the prefix\n"
|
||||
@ -6510,10 +6505,11 @@ void route_vty_out(struct vty *vty, struct prefix *p, struct bgp_info *binfo,
|
||||
len = vty_out(
|
||||
vty, "%s",
|
||||
binfo->peer->conf_if);
|
||||
len = 7 - len; /* len of IPv6
|
||||
addr + max
|
||||
len of def
|
||||
ifname */
|
||||
len =
|
||||
7 - len; /* len of IPv6
|
||||
addr + max
|
||||
len of def
|
||||
ifname */
|
||||
|
||||
if (len < 1)
|
||||
vty_out(vty, "\n%*s",
|
||||
@ -7000,10 +6996,9 @@ static void damp_route_vty_out(struct vty *vty, struct prefix *p,
|
||||
bgp_damp_reuse_time_vty(vty, binfo, timebuf, BGP_UPTIME_LEN,
|
||||
use_json, json);
|
||||
else
|
||||
vty_out(vty, "%s ",
|
||||
bgp_damp_reuse_time_vty(vty, binfo, timebuf,
|
||||
BGP_UPTIME_LEN, use_json,
|
||||
json));
|
||||
vty_out(vty, "%s ", bgp_damp_reuse_time_vty(vty, binfo, timebuf,
|
||||
BGP_UPTIME_LEN,
|
||||
use_json, json));
|
||||
|
||||
/* Print attribute */
|
||||
attr = binfo->attr;
|
||||
@ -7082,9 +7077,8 @@ static void flap_route_vty_out(struct vty *vty, struct prefix *p,
|
||||
peer_uptime(bdi->start_time, timebuf, BGP_UPTIME_LEN, use_json,
|
||||
json);
|
||||
else
|
||||
vty_out(vty, "%s ",
|
||||
peer_uptime(bdi->start_time, timebuf, BGP_UPTIME_LEN, 0,
|
||||
NULL));
|
||||
vty_out(vty, "%s ", peer_uptime(bdi->start_time, timebuf,
|
||||
BGP_UPTIME_LEN, 0, NULL));
|
||||
|
||||
if (CHECK_FLAG(binfo->flags, BGP_INFO_DAMPED)
|
||||
&& !CHECK_FLAG(binfo->flags, BGP_INFO_HISTORY)) {
|
||||
@ -8604,9 +8598,8 @@ static int bgp_show_route_in_table(struct vty *vty, struct bgp *bgp,
|
||||
if (display)
|
||||
json_object_object_add(json, "paths", json_paths);
|
||||
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
if (!display) {
|
||||
@ -9276,20 +9269,21 @@ enum bgp_stats {
|
||||
};
|
||||
|
||||
static const char *table_stats_strs[] = {
|
||||
[BGP_STATS_PREFIXES] = "Total Prefixes",
|
||||
[BGP_STATS_TOTPLEN] = "Average prefix length",
|
||||
[BGP_STATS_RIB] = "Total Advertisements",
|
||||
[BGP_STATS_UNAGGREGATEABLE] = "Unaggregateable prefixes",
|
||||
[BGP_STATS_MAX_AGGREGATEABLE] = "Maximum aggregateable prefixes",
|
||||
[BGP_STATS_AGGREGATES] = "BGP Aggregate advertisements",
|
||||
[BGP_STATS_SPACE] = "Address space advertised",
|
||||
[BGP_STATS_ASPATH_COUNT] = "Advertisements with paths",
|
||||
[BGP_STATS_ASPATH_MAXHOPS] = "Longest AS-Path (hops)",
|
||||
[BGP_STATS_ASPATH_MAXSIZE] = "Largest AS-Path (bytes)",
|
||||
[BGP_STATS_ASPATH_TOTHOPS] = "Average AS-Path length (hops)",
|
||||
[BGP_STATS_ASPATH_TOTSIZE] = "Average AS-Path size (bytes)",
|
||||
[BGP_STATS_ASN_HIGHEST] = "Highest public ASN",
|
||||
[BGP_STATS_MAX] = NULL,
|
||||
[BGP_STATS_PREFIXES] = "Total Prefixes",
|
||||
[BGP_STATS_TOTPLEN] = "Average prefix length",
|
||||
[BGP_STATS_RIB] = "Total Advertisements",
|
||||
[BGP_STATS_UNAGGREGATEABLE] = "Unaggregateable prefixes",
|
||||
[BGP_STATS_MAX_AGGREGATEABLE] =
|
||||
"Maximum aggregateable prefixes",
|
||||
[BGP_STATS_AGGREGATES] = "BGP Aggregate advertisements",
|
||||
[BGP_STATS_SPACE] = "Address space advertised",
|
||||
[BGP_STATS_ASPATH_COUNT] = "Advertisements with paths",
|
||||
[BGP_STATS_ASPATH_MAXHOPS] = "Longest AS-Path (hops)",
|
||||
[BGP_STATS_ASPATH_MAXSIZE] = "Largest AS-Path (bytes)",
|
||||
[BGP_STATS_ASPATH_TOTHOPS] = "Average AS-Path length (hops)",
|
||||
[BGP_STATS_ASPATH_TOTSIZE] = "Average AS-Path size (bytes)",
|
||||
[BGP_STATS_ASN_HIGHEST] = "Highest public ASN",
|
||||
[BGP_STATS_MAX] = NULL,
|
||||
};
|
||||
|
||||
struct bgp_table_stats {
|
||||
@ -9524,11 +9518,16 @@ enum bgp_pcounts {
|
||||
};
|
||||
|
||||
static const char *pcount_strs[] = {
|
||||
[PCOUNT_ADJ_IN] = "Adj-in", [PCOUNT_DAMPED] = "Damped",
|
||||
[PCOUNT_REMOVED] = "Removed", [PCOUNT_HISTORY] = "History",
|
||||
[PCOUNT_STALE] = "Stale", [PCOUNT_VALID] = "Valid",
|
||||
[PCOUNT_ALL] = "All RIB", [PCOUNT_COUNTED] = "PfxCt counted",
|
||||
[PCOUNT_PFCNT] = "Useable", [PCOUNT_MAX] = NULL,
|
||||
[PCOUNT_ADJ_IN] = "Adj-in",
|
||||
[PCOUNT_DAMPED] = "Damped",
|
||||
[PCOUNT_REMOVED] = "Removed",
|
||||
[PCOUNT_HISTORY] = "History",
|
||||
[PCOUNT_STALE] = "Stale",
|
||||
[PCOUNT_VALID] = "Valid",
|
||||
[PCOUNT_ALL] = "All RIB",
|
||||
[PCOUNT_COUNTED] = "PfxCt counted",
|
||||
[PCOUNT_PFCNT] = "Useable",
|
||||
[PCOUNT_MAX] = NULL,
|
||||
};
|
||||
|
||||
struct peer_pcounts {
|
||||
@ -9629,9 +9628,9 @@ static int bgp_peer_counts(struct vty *vty, struct peer *peer, afi_t afi,
|
||||
pcounts.table = peer->bgp->rib[afi][safi];
|
||||
|
||||
/* in-place call via thread subsystem so as to record execution time
|
||||
* * stats for the thread-walk (i.e. ensure this can't be blamed on
|
||||
* * on just vty_read()).
|
||||
* */
|
||||
* * stats for the thread-walk (i.e. ensure this can't be blamed on
|
||||
* * on just vty_read()).
|
||||
* */
|
||||
thread_execute(bm->master, bgp_peer_count_walker, &pcounts, 0);
|
||||
|
||||
if (use_json) {
|
||||
@ -9888,9 +9887,8 @@ static void show_adj_route(struct vty *vty, struct peer *peer, afi_t afi,
|
||||
"bgpOriginatingDefaultNetwork",
|
||||
"0.0.0.0");
|
||||
} else {
|
||||
vty_out(vty,
|
||||
"BGP table version is %" PRIu64
|
||||
", local router ID is %s\n",
|
||||
vty_out(vty, "BGP table version is %" PRIu64
|
||||
", local router ID is %s\n",
|
||||
table->version, inet_ntoa(bgp->router_id));
|
||||
vty_out(vty, BGP_SHOW_SCODE_HEADER);
|
||||
vty_out(vty, BGP_SHOW_OCODE_HEADER);
|
||||
|
@ -97,8 +97,10 @@ struct bgp_info_extra {
|
||||
struct in6_addr addr6;
|
||||
} un; /* cached un address */
|
||||
time_t create_time;
|
||||
struct prefix aux_prefix; /* AFI_L2VPN: the IP addr,
|
||||
if family set */
|
||||
struct
|
||||
prefix
|
||||
aux_prefix; /* AFI_L2VPN: the IP addr,
|
||||
if family set */
|
||||
} import;
|
||||
|
||||
} vnc;
|
||||
|
@ -652,10 +652,7 @@ static route_map_result_t route_match_metric(void *rule, struct prefix *prefix,
|
||||
|
||||
/* Route map commands for metric matching. */
|
||||
struct route_map_rule_cmd route_match_metric_cmd = {
|
||||
"metric",
|
||||
route_match_metric,
|
||||
route_value_compile,
|
||||
route_value_free,
|
||||
"metric", route_match_metric, route_value_compile, route_value_free,
|
||||
};
|
||||
|
||||
/* `match as-path ASPATH' */
|
||||
@ -1050,9 +1047,7 @@ static route_map_result_t route_match_tag(void *rule, struct prefix *prefix,
|
||||
|
||||
/* Route map commands for tag matching. */
|
||||
static struct route_map_rule_cmd route_match_tag_cmd = {
|
||||
"tag",
|
||||
route_match_tag,
|
||||
route_map_rule_tag_compile,
|
||||
"tag", route_match_tag, route_map_rule_tag_compile,
|
||||
route_map_rule_tag_free,
|
||||
};
|
||||
|
||||
@ -1197,9 +1192,7 @@ static route_map_result_t route_set_local_pref(void *rule,
|
||||
|
||||
/* Set local preference rule structure. */
|
||||
struct route_map_rule_cmd route_set_local_pref_cmd = {
|
||||
"local-preference",
|
||||
route_set_local_pref,
|
||||
route_value_compile,
|
||||
"local-preference", route_set_local_pref, route_value_compile,
|
||||
route_value_free,
|
||||
};
|
||||
|
||||
@ -1228,10 +1221,7 @@ static route_map_result_t route_set_weight(void *rule, struct prefix *prefix,
|
||||
|
||||
/* Set local preference rule structure. */
|
||||
struct route_map_rule_cmd route_set_weight_cmd = {
|
||||
"weight",
|
||||
route_set_weight,
|
||||
route_value_compile,
|
||||
route_value_free,
|
||||
"weight", route_set_weight, route_value_compile, route_value_free,
|
||||
};
|
||||
|
||||
/* `set metric METRIC' */
|
||||
@ -1263,10 +1253,7 @@ static route_map_result_t route_set_metric(void *rule, struct prefix *prefix,
|
||||
|
||||
/* Set metric rule structure. */
|
||||
struct route_map_rule_cmd route_set_metric_cmd = {
|
||||
"metric",
|
||||
route_set_metric,
|
||||
route_value_compile,
|
||||
route_value_free,
|
||||
"metric", route_set_metric, route_value_compile, route_value_free,
|
||||
};
|
||||
|
||||
/* `set as-path prepend ASPATH' */
|
||||
@ -1324,10 +1311,8 @@ static void route_set_aspath_prepend_free(void *rule)
|
||||
|
||||
/* Set as-path prepend rule structure. */
|
||||
struct route_map_rule_cmd route_set_aspath_prepend_cmd = {
|
||||
"as-path prepend",
|
||||
route_set_aspath_prepend,
|
||||
route_set_aspath_prepend_compile,
|
||||
route_set_aspath_prepend_free,
|
||||
"as-path prepend", route_set_aspath_prepend,
|
||||
route_set_aspath_prepend_compile, route_set_aspath_prepend_free,
|
||||
};
|
||||
|
||||
/* `set as-path exclude ASn' */
|
||||
@ -1360,9 +1345,7 @@ static route_map_result_t route_set_aspath_exclude(void *rule,
|
||||
|
||||
/* Set ASn exlude rule structure. */
|
||||
struct route_map_rule_cmd route_set_aspath_exclude_cmd = {
|
||||
"as-path exclude",
|
||||
route_set_aspath_exclude,
|
||||
route_aspath_compile,
|
||||
"as-path exclude", route_set_aspath_exclude, route_aspath_compile,
|
||||
route_aspath_free,
|
||||
};
|
||||
|
||||
@ -1475,9 +1458,7 @@ static void route_set_community_free(void *rule)
|
||||
|
||||
/* Set community rule structure. */
|
||||
struct route_map_rule_cmd route_set_community_cmd = {
|
||||
"community",
|
||||
route_set_community,
|
||||
route_set_community_compile,
|
||||
"community", route_set_community, route_set_community_compile,
|
||||
route_set_community_free,
|
||||
};
|
||||
|
||||
@ -1595,9 +1576,7 @@ static void route_set_lcommunity_free(void *rule)
|
||||
|
||||
/* Set community rule structure. */
|
||||
struct route_map_rule_cmd route_set_lcommunity_cmd = {
|
||||
"large-community",
|
||||
route_set_lcommunity,
|
||||
route_set_lcommunity_compile,
|
||||
"large-community", route_set_lcommunity, route_set_lcommunity_compile,
|
||||
route_set_lcommunity_free,
|
||||
};
|
||||
|
||||
@ -1680,10 +1659,8 @@ static void route_set_lcommunity_delete_free(void *rule)
|
||||
|
||||
/* Set lcommunity rule structure. */
|
||||
struct route_map_rule_cmd route_set_lcommunity_delete_cmd = {
|
||||
"large-comm-list",
|
||||
route_set_lcommunity_delete,
|
||||
route_set_lcommunity_delete_compile,
|
||||
route_set_lcommunity_delete_free,
|
||||
"large-comm-list", route_set_lcommunity_delete,
|
||||
route_set_lcommunity_delete_compile, route_set_lcommunity_delete_free,
|
||||
};
|
||||
|
||||
|
||||
@ -1766,10 +1743,8 @@ static void route_set_community_delete_free(void *rule)
|
||||
|
||||
/* Set community rule structure. */
|
||||
struct route_map_rule_cmd route_set_community_delete_cmd = {
|
||||
"comm-list",
|
||||
route_set_community_delete,
|
||||
route_set_community_delete_compile,
|
||||
route_set_community_delete_free,
|
||||
"comm-list", route_set_community_delete,
|
||||
route_set_community_delete_compile, route_set_community_delete_free,
|
||||
};
|
||||
|
||||
/* `set extcommunity rt COMMUNITY' */
|
||||
@ -1836,10 +1811,8 @@ static void route_set_ecommunity_free(void *rule)
|
||||
|
||||
/* Set community rule structure. */
|
||||
struct route_map_rule_cmd route_set_ecommunity_rt_cmd = {
|
||||
"extcommunity rt",
|
||||
route_set_ecommunity,
|
||||
route_set_ecommunity_rt_compile,
|
||||
route_set_ecommunity_free,
|
||||
"extcommunity rt", route_set_ecommunity,
|
||||
route_set_ecommunity_rt_compile, route_set_ecommunity_free,
|
||||
};
|
||||
|
||||
/* `set extcommunity soo COMMUNITY' */
|
||||
@ -1858,10 +1831,8 @@ static void *route_set_ecommunity_soo_compile(const char *arg)
|
||||
|
||||
/* Set community rule structure. */
|
||||
struct route_map_rule_cmd route_set_ecommunity_soo_cmd = {
|
||||
"extcommunity soo",
|
||||
route_set_ecommunity,
|
||||
route_set_ecommunity_soo_compile,
|
||||
route_set_ecommunity_free,
|
||||
"extcommunity soo", route_set_ecommunity,
|
||||
route_set_ecommunity_soo_compile, route_set_ecommunity_free,
|
||||
};
|
||||
|
||||
/* `set origin ORIGIN' */
|
||||
@ -1909,9 +1880,7 @@ static void route_set_origin_free(void *rule)
|
||||
|
||||
/* Set origin rule structure. */
|
||||
struct route_map_rule_cmd route_set_origin_cmd = {
|
||||
"origin",
|
||||
route_set_origin,
|
||||
route_set_origin_compile,
|
||||
"origin", route_set_origin, route_set_origin_compile,
|
||||
route_set_origin_free,
|
||||
};
|
||||
|
||||
@ -1948,10 +1917,8 @@ static void route_set_atomic_aggregate_free(void *rule)
|
||||
|
||||
/* Set atomic aggregate rule structure. */
|
||||
struct route_map_rule_cmd route_set_atomic_aggregate_cmd = {
|
||||
"atomic-aggregate",
|
||||
route_set_atomic_aggregate,
|
||||
route_set_atomic_aggregate_compile,
|
||||
route_set_atomic_aggregate_free,
|
||||
"atomic-aggregate", route_set_atomic_aggregate,
|
||||
route_set_atomic_aggregate_compile, route_set_atomic_aggregate_free,
|
||||
};
|
||||
|
||||
/* `set aggregator as AS A.B.C.D' */
|
||||
@ -2006,10 +1973,8 @@ static void route_set_aggregator_as_free(void *rule)
|
||||
}
|
||||
|
||||
struct route_map_rule_cmd route_set_aggregator_as_cmd = {
|
||||
"aggregator as",
|
||||
route_set_aggregator_as,
|
||||
route_set_aggregator_as_compile,
|
||||
route_set_aggregator_as_free,
|
||||
"aggregator as", route_set_aggregator_as,
|
||||
route_set_aggregator_as_compile, route_set_aggregator_as_free,
|
||||
};
|
||||
|
||||
/* Set tag to object. object must be pointer to struct bgp_info */
|
||||
@ -2032,9 +1997,7 @@ static route_map_result_t route_set_tag(void *rule, struct prefix *prefix,
|
||||
|
||||
/* Route map commands for tag set. */
|
||||
static struct route_map_rule_cmd route_set_tag_cmd = {
|
||||
"tag",
|
||||
route_set_tag,
|
||||
route_map_rule_tag_compile,
|
||||
"tag", route_set_tag, route_map_rule_tag_compile,
|
||||
route_map_rule_tag_free,
|
||||
};
|
||||
|
||||
@ -2067,9 +2030,7 @@ static route_map_result_t route_set_label_index(void *rule,
|
||||
|
||||
/* Route map commands for label-index set. */
|
||||
static struct route_map_rule_cmd route_set_label_index_cmd = {
|
||||
"label-index",
|
||||
route_set_label_index,
|
||||
route_value_compile,
|
||||
"label-index", route_set_label_index, route_value_compile,
|
||||
route_value_free,
|
||||
};
|
||||
|
||||
@ -2596,10 +2557,8 @@ static void route_set_originator_id_free(void *rule)
|
||||
|
||||
/* Set originator-id rule structure. */
|
||||
struct route_map_rule_cmd route_set_originator_id_cmd = {
|
||||
"originator-id",
|
||||
route_set_originator_id,
|
||||
route_set_originator_id_compile,
|
||||
route_set_originator_id_free,
|
||||
"originator-id", route_set_originator_id,
|
||||
route_set_originator_id_compile, route_set_originator_id_free,
|
||||
};
|
||||
|
||||
/* Add bgp route map rule. */
|
||||
|
@ -864,6 +864,8 @@ static u_char *bgp4PathAttrTable(struct variable *v, oid name[], size_t *length,
|
||||
return SNMP_INTEGER(-1);
|
||||
break;
|
||||
case BGP4PATHATTRBEST: /* 13 */
|
||||
/* $FRR indent$ */
|
||||
/* clang-format off */
|
||||
#define BGP4_PathAttrBest_false 1
|
||||
#define BGP4_PathAttrBest_true 2
|
||||
if (CHECK_FLAG(binfo->flags, BGP_INFO_SELECTED))
|
||||
|
@ -1121,8 +1121,8 @@ int update_subgroup_check_merge(struct update_subgroup *subgrp,
|
||||
}
|
||||
|
||||
/*
|
||||
* update_subgroup_merge_check_thread_cb
|
||||
*/
|
||||
* update_subgroup_merge_check_thread_cb
|
||||
*/
|
||||
static int update_subgroup_merge_check_thread_cb(struct thread *thread)
|
||||
{
|
||||
struct update_subgroup *subgrp;
|
||||
|
@ -267,6 +267,7 @@ struct update_subgroup {
|
||||
*/
|
||||
#define SUBGRP_DECR_STAT(subgrp, stat) SUBGRP_INCR_STAT_BY(subgrp, stat, -1)
|
||||
|
||||
|
||||
typedef int (*updgrp_walkcb)(struct update_group *updgrp, void *ctx);
|
||||
|
||||
/* really a private structure */
|
||||
|
@ -646,10 +646,9 @@ void subgroup_announce_route(struct update_subgroup *subgrp)
|
||||
*/
|
||||
onlypeer = ((SUBGRP_PCOUNT(subgrp) == 1) ? (SUBGRP_PFIRST(subgrp))->peer
|
||||
: NULL);
|
||||
if (onlypeer
|
||||
&& CHECK_FLAG(onlypeer->af_sflags[SUBGRP_AFI(subgrp)]
|
||||
[SUBGRP_SAFI(subgrp)],
|
||||
PEER_STATUS_ORF_WAIT_REFRESH))
|
||||
if (onlypeer && CHECK_FLAG(onlypeer->af_sflags[SUBGRP_AFI(subgrp)]
|
||||
[SUBGRP_SAFI(subgrp)],
|
||||
PEER_STATUS_ORF_WAIT_REFRESH))
|
||||
return;
|
||||
|
||||
if (SUBGRP_SAFI(subgrp) != SAFI_MPLS_VPN
|
||||
|
@ -732,9 +732,8 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
|
||||
|
||||
space_remaining = STREAM_CONCAT_REMAIN(s, snlri, STREAM_SIZE(s))
|
||||
- BGP_MAX_PACKET_SIZE_OVERFLOW;
|
||||
space_needed =
|
||||
BGP_NLRI_LENGTH
|
||||
+ bgp_packet_mpattr_prefix_size(afi, safi, &rn->p);
|
||||
space_needed = BGP_NLRI_LENGTH + bgp_packet_mpattr_prefix_size(
|
||||
afi, safi, &rn->p);
|
||||
|
||||
/* When remaining space can't include NLRI and it's length. */
|
||||
if (space_remaining < space_needed)
|
||||
@ -778,9 +777,9 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
|
||||
space_remaining =
|
||||
STREAM_CONCAT_REMAIN(s, snlri, STREAM_SIZE(s))
|
||||
- BGP_MAX_PACKET_SIZE_OVERFLOW;
|
||||
space_needed = BGP_NLRI_LENGTH
|
||||
+ bgp_packet_mpattr_prefix_size(
|
||||
afi, safi, &rn->p);
|
||||
space_needed =
|
||||
BGP_NLRI_LENGTH + bgp_packet_mpattr_prefix_size(
|
||||
afi, safi, &rn->p);
|
||||
|
||||
/* If the attributes alone do not leave any room for
|
||||
* NLRI then
|
||||
|
@ -242,9 +242,8 @@ int show_adj_route_vpn(struct vty *vty, struct peer *peer,
|
||||
}
|
||||
if (use_json) {
|
||||
json_object_object_add(json, "routes", json_routes);
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
return CMD_SUCCESS;
|
||||
|
108
bgpd/bgp_vty.c
108
bgpd/bgp_vty.c
@ -1470,8 +1470,7 @@ DEFUN (no_bgp_maxpaths,
|
||||
}
|
||||
|
||||
ALIAS_HIDDEN(no_bgp_maxpaths, no_bgp_maxpaths_hidden_cmd,
|
||||
"no maximum-paths [" CMD_RANGE_STR(1, MULTIPATH_NUM) "]",
|
||||
NO_STR
|
||||
"no maximum-paths [" CMD_RANGE_STR(1, MULTIPATH_NUM) "]", NO_STR
|
||||
"Forward packets over multiple paths\n"
|
||||
"Number of paths\n")
|
||||
|
||||
@ -6377,9 +6376,8 @@ DEFUN (show_bgp_vrfs,
|
||||
|
||||
json_object_int_add(json, "totalVrfs", count);
|
||||
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
if (count)
|
||||
@ -6473,20 +6471,17 @@ DEFUN (show_bgp_memory,
|
||||
/* Other attributes */
|
||||
if ((count = community_count()))
|
||||
vty_out(vty, "%ld BGP community entries, using %s of memory\n",
|
||||
count,
|
||||
mtype_memstr(memstrbuf, sizeof(memstrbuf),
|
||||
count * sizeof(struct community)));
|
||||
count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
|
||||
count * sizeof(struct community)));
|
||||
if ((count = mtype_stats_alloc(MTYPE_ECOMMUNITY)))
|
||||
vty_out(vty, "%ld BGP community entries, using %s of memory\n",
|
||||
count,
|
||||
mtype_memstr(memstrbuf, sizeof(memstrbuf),
|
||||
count * sizeof(struct ecommunity)));
|
||||
count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
|
||||
count * sizeof(struct ecommunity)));
|
||||
if ((count = mtype_stats_alloc(MTYPE_LCOMMUNITY)))
|
||||
vty_out(vty,
|
||||
"%ld BGP large-community entries, using %s of memory\n",
|
||||
count,
|
||||
mtype_memstr(memstrbuf, sizeof(memstrbuf),
|
||||
count * sizeof(struct lcommunity)));
|
||||
count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
|
||||
count * sizeof(struct lcommunity)));
|
||||
|
||||
if ((count = mtype_stats_alloc(MTYPE_CLUSTER)))
|
||||
vty_out(vty, "%ld Cluster lists, using %s of memory\n", count,
|
||||
@ -6515,9 +6510,8 @@ DEFUN (show_bgp_memory,
|
||||
count * sizeof(struct hash_backet)));
|
||||
if ((count = mtype_stats_alloc(MTYPE_BGP_REGEXP)))
|
||||
vty_out(vty, "%ld compiled regexes, using %s of memory\n",
|
||||
count,
|
||||
mtype_memstr(memstrbuf, sizeof(memstrbuf),
|
||||
count * sizeof(regex_t)));
|
||||
count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
|
||||
count * sizeof(regex_t)));
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
@ -6742,9 +6736,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
|
||||
ents);
|
||||
json_object_int_add(
|
||||
json, "peerGroupMemory",
|
||||
ents
|
||||
* sizeof(struct
|
||||
peer_group));
|
||||
ents * sizeof(struct
|
||||
peer_group));
|
||||
}
|
||||
|
||||
if (CHECK_FLAG(bgp->af_flags[afi][safi],
|
||||
@ -6775,9 +6768,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
|
||||
mtype_memstr(
|
||||
memstrbuf,
|
||||
sizeof(memstrbuf),
|
||||
ents
|
||||
* sizeof(struct
|
||||
bgp_node)));
|
||||
ents * sizeof(struct
|
||||
bgp_node)));
|
||||
|
||||
/* Peer related usage */
|
||||
ents = listcount(bgp->peer);
|
||||
@ -6787,9 +6779,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
|
||||
mtype_memstr(
|
||||
memstrbuf,
|
||||
sizeof(memstrbuf),
|
||||
ents
|
||||
* sizeof(struct
|
||||
peer)));
|
||||
ents * sizeof(struct
|
||||
peer)));
|
||||
|
||||
if ((ents = listcount(bgp->group)))
|
||||
vty_out(vty,
|
||||
@ -6798,9 +6789,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
|
||||
mtype_memstr(
|
||||
memstrbuf,
|
||||
sizeof(memstrbuf),
|
||||
ents
|
||||
* sizeof(struct
|
||||
peer_group)));
|
||||
ents * sizeof(struct
|
||||
peer_group)));
|
||||
|
||||
if (CHECK_FLAG(bgp->af_flags[afi][safi],
|
||||
BGP_CONFIG_DAMPENING))
|
||||
@ -6918,9 +6908,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
|
||||
vty_out(vty, "%*s",
|
||||
max_neighbor_width - len, " ");
|
||||
|
||||
vty_out(vty,
|
||||
"4 %10u %7d %7d %8" PRIu64
|
||||
" %4d %4zd %8s",
|
||||
vty_out(vty, "4 %10u %7d %7d %8" PRIu64
|
||||
" %4d %4zd %8s",
|
||||
peer->as,
|
||||
peer->open_in + peer->update_in
|
||||
+ peer->keepalive_in
|
||||
@ -6968,9 +6957,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
|
||||
json_object_int_add(json, "totalPeers", count);
|
||||
json_object_int_add(json, "dynamicPeers", dn_count);
|
||||
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
if (count)
|
||||
@ -7065,9 +7053,10 @@ static void bgp_show_summary_afi_safi(struct vty *vty, struct bgp *bgp, int afi,
|
||||
}
|
||||
safi++;
|
||||
if (safi == SAFI_RESERVED_4
|
||||
|| safi == SAFI_RESERVED_5) /* handle special
|
||||
cases to match
|
||||
zebra.h */
|
||||
|| safi
|
||||
== SAFI_RESERVED_5) /* handle special
|
||||
cases to match
|
||||
zebra.h */
|
||||
safi++;
|
||||
if (!safi_wildcard)
|
||||
safi = SAFI_MAX;
|
||||
@ -7626,9 +7615,8 @@ static void bgp_show_peer_afi(struct vty *vty, struct peer *p, afi_t afi,
|
||||
|
||||
paf = peer_af_find(p, afi, safi);
|
||||
if (paf && PAF_SUBGRP(paf)) {
|
||||
vty_out(vty,
|
||||
" Update group %" PRIu64 ", subgroup %" PRIu64
|
||||
"\n",
|
||||
vty_out(vty, " Update group %" PRIu64
|
||||
", subgroup %" PRIu64 "\n",
|
||||
PAF_UPDGRP(paf)->id, PAF_SUBGRP(paf)->id);
|
||||
vty_out(vty, " Packet Queue length %d\n",
|
||||
bpacket_queue_virtual_length(paf));
|
||||
@ -9394,9 +9382,8 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
|
||||
} else
|
||||
vty_out(vty,
|
||||
" Reduce the no. of prefix from %s, will restart in %ld seconds\n",
|
||||
p->host,
|
||||
thread_timer_remain_second(
|
||||
p->t_pmax_restart));
|
||||
p->host, thread_timer_remain_second(
|
||||
p->t_pmax_restart));
|
||||
} else {
|
||||
if (use_json)
|
||||
json_object_boolean_true_add(
|
||||
@ -9636,9 +9623,8 @@ static int bgp_show_neighbor(struct vty *vty, struct bgp *bgp,
|
||||
}
|
||||
|
||||
if (use_json) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
vty_out(vty, "\n");
|
||||
@ -11093,45 +11079,31 @@ int bgp_config_write_redistribute(struct vty *vty, struct bgp *bgp, afi_t afi,
|
||||
|
||||
/* BGP node structure. */
|
||||
static struct cmd_node bgp_node = {
|
||||
BGP_NODE,
|
||||
"%s(config-router)# ",
|
||||
1,
|
||||
BGP_NODE, "%s(config-router)# ", 1,
|
||||
};
|
||||
|
||||
static struct cmd_node bgp_ipv4_unicast_node = {
|
||||
BGP_IPV4_NODE,
|
||||
"%s(config-router-af)# ",
|
||||
1,
|
||||
BGP_IPV4_NODE, "%s(config-router-af)# ", 1,
|
||||
};
|
||||
|
||||
static struct cmd_node bgp_ipv4_multicast_node = {
|
||||
BGP_IPV4M_NODE,
|
||||
"%s(config-router-af)# ",
|
||||
1,
|
||||
BGP_IPV4M_NODE, "%s(config-router-af)# ", 1,
|
||||
};
|
||||
|
||||
static struct cmd_node bgp_ipv4_labeled_unicast_node = {
|
||||
BGP_IPV4L_NODE,
|
||||
"%s(config-router-af)# ",
|
||||
1,
|
||||
BGP_IPV4L_NODE, "%s(config-router-af)# ", 1,
|
||||
};
|
||||
|
||||
static struct cmd_node bgp_ipv6_unicast_node = {
|
||||
BGP_IPV6_NODE,
|
||||
"%s(config-router-af)# ",
|
||||
1,
|
||||
BGP_IPV6_NODE, "%s(config-router-af)# ", 1,
|
||||
};
|
||||
|
||||
static struct cmd_node bgp_ipv6_multicast_node = {
|
||||
BGP_IPV6M_NODE,
|
||||
"%s(config-router-af)# ",
|
||||
1,
|
||||
BGP_IPV6M_NODE, "%s(config-router-af)# ", 1,
|
||||
};
|
||||
|
||||
static struct cmd_node bgp_ipv6_labeled_unicast_node = {
|
||||
BGP_IPV6L_NODE,
|
||||
"%s(config-router-af)# ",
|
||||
1,
|
||||
BGP_IPV6L_NODE, "%s(config-router-af)# ", 1,
|
||||
};
|
||||
|
||||
static struct cmd_node bgp_vpnv4_node = {BGP_VPNV4_NODE,
|
||||
|
@ -621,12 +621,10 @@ static int zebra_read_ipv4(int command, struct zclient *zclient,
|
||||
zlog_debug(
|
||||
"Rx IPv4 route add VRF %u %s[%d] %s/%d nexthop %s metric %u tag %" ROUTE_TAG_PRI,
|
||||
vrf_id, zebra_route_string(api.type),
|
||||
api.instance,
|
||||
inet_ntop(AF_INET, &p.prefix, buf[0],
|
||||
sizeof(buf[0])),
|
||||
p.prefixlen,
|
||||
inet_ntop(AF_INET, &nexthop, buf[1],
|
||||
sizeof(buf[1])),
|
||||
api.instance, inet_ntop(AF_INET, &p.prefix,
|
||||
buf[0], sizeof(buf[0])),
|
||||
p.prefixlen, inet_ntop(AF_INET, &nexthop,
|
||||
buf[1], sizeof(buf[1])),
|
||||
api.metric, api.tag);
|
||||
}
|
||||
|
||||
@ -657,12 +655,10 @@ static int zebra_read_ipv4(int command, struct zclient *zclient,
|
||||
"Rx IPv4 route delete VRF %u %s[%d] %s/%d "
|
||||
"nexthop %s metric %u tag %" ROUTE_TAG_PRI,
|
||||
vrf_id, zebra_route_string(api.type),
|
||||
api.instance,
|
||||
inet_ntop(AF_INET, &p.prefix, buf[0],
|
||||
sizeof(buf[0])),
|
||||
p.prefixlen,
|
||||
inet_ntop(AF_INET, &nexthop, buf[1],
|
||||
sizeof(buf[1])),
|
||||
api.instance, inet_ntop(AF_INET, &p.prefix,
|
||||
buf[0], sizeof(buf[0])),
|
||||
p.prefixlen, inet_ntop(AF_INET, &nexthop,
|
||||
buf[1], sizeof(buf[1])),
|
||||
api.metric, api.tag);
|
||||
}
|
||||
bgp_redistribute_delete(bgp, (struct prefix *)&p, api.type,
|
||||
@ -752,12 +748,10 @@ static int zebra_read_ipv6(int command, struct zclient *zclient,
|
||||
zlog_debug(
|
||||
"Rx IPv6 route add VRF %u %s[%d] %s/%d nexthop %s metric %u tag %" ROUTE_TAG_PRI,
|
||||
vrf_id, zebra_route_string(api.type),
|
||||
api.instance,
|
||||
inet_ntop(AF_INET6, &p.prefix, buf[0],
|
||||
sizeof(buf[0])),
|
||||
p.prefixlen,
|
||||
inet_ntop(AF_INET, &nexthop, buf[1],
|
||||
sizeof(buf[1])),
|
||||
api.instance, inet_ntop(AF_INET6, &p.prefix,
|
||||
buf[0], sizeof(buf[0])),
|
||||
p.prefixlen, inet_ntop(AF_INET, &nexthop,
|
||||
buf[1], sizeof(buf[1])),
|
||||
api.metric, api.tag);
|
||||
}
|
||||
|
||||
@ -787,12 +781,10 @@ static int zebra_read_ipv6(int command, struct zclient *zclient,
|
||||
"Rx IPv6 route delete VRF %u %s[%d] %s/%d "
|
||||
"nexthop %s metric %u tag %" ROUTE_TAG_PRI,
|
||||
vrf_id, zebra_route_string(api.type),
|
||||
api.instance,
|
||||
inet_ntop(AF_INET6, &p.prefix, buf[0],
|
||||
sizeof(buf[0])),
|
||||
p.prefixlen,
|
||||
inet_ntop(AF_INET6, &nexthop, buf[1],
|
||||
sizeof(buf[1])),
|
||||
api.instance, inet_ntop(AF_INET6, &p.prefix,
|
||||
buf[0], sizeof(buf[0])),
|
||||
p.prefixlen, inet_ntop(AF_INET6, &nexthop,
|
||||
buf[1], sizeof(buf[1])),
|
||||
api.metric, api.tag);
|
||||
}
|
||||
bgp_redistribute_delete(bgp, (struct prefix *)&p, api.type,
|
||||
@ -1324,9 +1316,8 @@ void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p,
|
||||
"Tx IPv4 route %s VRF %u %s/%d metric %u tag %" ROUTE_TAG_PRI
|
||||
" count %d",
|
||||
(valid_nh_count ? "add" : "delete"),
|
||||
bgp->vrf_id,
|
||||
inet_ntop(AF_INET, &p->u.prefix4, buf[0],
|
||||
sizeof(buf[0])),
|
||||
bgp->vrf_id, inet_ntop(AF_INET, &p->u.prefix4,
|
||||
buf[0], sizeof(buf[0])),
|
||||
p->prefixlen, api.metric, api.tag,
|
||||
api.nexthop_num);
|
||||
for (i = 0; i < api.nexthop_num; i++) {
|
||||
|
24
bgpd/bgpd.c
24
bgpd/bgpd.c
@ -3886,9 +3886,8 @@ static int peer_af_flag_modify(struct peer *peer, afi_t afi, safi_t safi,
|
||||
}
|
||||
|
||||
/* Track if addpath TX is in use */
|
||||
if (flag
|
||||
& (PEER_FLAG_ADDPATH_TX_ALL_PATHS
|
||||
| PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS)) {
|
||||
if (flag & (PEER_FLAG_ADDPATH_TX_ALL_PATHS
|
||||
| PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS)) {
|
||||
bgp = peer->bgp;
|
||||
addpath_tx_used = 0;
|
||||
|
||||
@ -6758,9 +6757,8 @@ static void bgp_config_write_peer_af(struct vty *vty, struct bgp *bgp,
|
||||
} else {
|
||||
if (!peer_af_flag_check(peer, afi, safi,
|
||||
PEER_FLAG_SEND_COMMUNITY)
|
||||
&& (!g_peer
|
||||
|| peer_af_flag_check(g_peer, afi, safi,
|
||||
PEER_FLAG_SEND_COMMUNITY))
|
||||
&& (!g_peer || peer_af_flag_check(g_peer, afi, safi,
|
||||
PEER_FLAG_SEND_COMMUNITY))
|
||||
&& !peer_af_flag_check(peer, afi, safi,
|
||||
PEER_FLAG_SEND_EXT_COMMUNITY)
|
||||
&& (!g_peer
|
||||
@ -6768,10 +6766,9 @@ static void bgp_config_write_peer_af(struct vty *vty, struct bgp *bgp,
|
||||
PEER_FLAG_SEND_EXT_COMMUNITY))
|
||||
&& !peer_af_flag_check(peer, afi, safi,
|
||||
PEER_FLAG_SEND_LARGE_COMMUNITY)
|
||||
&& (!g_peer
|
||||
|| peer_af_flag_check(
|
||||
g_peer, afi, safi,
|
||||
PEER_FLAG_SEND_LARGE_COMMUNITY))) {
|
||||
&& (!g_peer || peer_af_flag_check(
|
||||
g_peer, afi, safi,
|
||||
PEER_FLAG_SEND_LARGE_COMMUNITY))) {
|
||||
afi_header_vty_out(
|
||||
vty, afi, safi, write,
|
||||
" no neighbor %s send-community all\n", addr);
|
||||
@ -6802,10 +6799,9 @@ static void bgp_config_write_peer_af(struct vty *vty, struct bgp *bgp,
|
||||
|
||||
if (!peer_af_flag_check(peer, afi, safi,
|
||||
PEER_FLAG_SEND_COMMUNITY)
|
||||
&& (!g_peer
|
||||
|| peer_af_flag_check(
|
||||
g_peer, afi, safi,
|
||||
PEER_FLAG_SEND_COMMUNITY))) {
|
||||
&& (!g_peer || peer_af_flag_check(
|
||||
g_peer, afi, safi,
|
||||
PEER_FLAG_SEND_COMMUNITY))) {
|
||||
afi_header_vty_out(
|
||||
vty, afi, safi, write,
|
||||
" no neighbor %s send-community\n",
|
||||
|
@ -251,14 +251,13 @@ struct bgp {
|
||||
/* $FRR indent$ */
|
||||
/* clang-format off */
|
||||
#define BGP_MAXMED_ADMIN_UNCONFIGURED 0 /* Off by default */
|
||||
u_int32_t maxmed_admin_value; /* Max-med value when administrative in on
|
||||
u_int32_t
|
||||
maxmed_admin_value; /* Max-med value when administrative in on
|
||||
*/
|
||||
/* $FRR indent$ */
|
||||
/* clang-format off */
|
||||
#define BGP_MAXMED_VALUE_DEFAULT 4294967294 /* Maximum by default */
|
||||
|
||||
u_char maxmed_active; /* 1/0 if max-med is active or not */
|
||||
u_int32_t maxmed_value; /* Max-med value when its active */
|
||||
u_char maxmed_active; /* 1/0 if max-med is active or not */
|
||||
u_int32_t maxmed_value; /* Max-med value when its active */
|
||||
|
||||
/* BGP update delay on startup */
|
||||
struct thread *t_update_delay;
|
||||
|
@ -503,8 +503,9 @@ DEFUN (vnc_defaults_responselifetime,
|
||||
} else {
|
||||
rspint = strtoul(argv[1]->arg, NULL, 10);
|
||||
if (rspint > INT32_MAX)
|
||||
rspint = INT32_MAX; /* is really an int, not an unsigned
|
||||
int */
|
||||
rspint =
|
||||
INT32_MAX; /* is really an int, not an unsigned
|
||||
int */
|
||||
}
|
||||
|
||||
bgp->rfapi_cfg->default_response_lifetime = rspint;
|
||||
@ -1673,9 +1674,8 @@ DEFUN (vnc_nve_group_export_no_prefixlist,
|
||||
}
|
||||
|
||||
if (argv[2]->arg[0] == 'b') {
|
||||
if (((argc > 5)
|
||||
&& strmatch(argv[5]->text,
|
||||
rfg->plist_export_bgp_name[afi]))
|
||||
if (((argc > 5) && strmatch(argv[5]->text,
|
||||
rfg->plist_export_bgp_name[afi]))
|
||||
|| (argc <= 5)) {
|
||||
|
||||
if (rfg->plist_export_bgp_name[afi])
|
||||
@ -1686,9 +1686,8 @@ DEFUN (vnc_nve_group_export_no_prefixlist,
|
||||
vnc_direct_bgp_reexport_group_afi(bgp, rfg, afi);
|
||||
}
|
||||
} else {
|
||||
if (((argc > 5)
|
||||
&& strmatch(argv[5]->text,
|
||||
rfg->plist_export_zebra_name[afi]))
|
||||
if (((argc > 5) && strmatch(argv[5]->text,
|
||||
rfg->plist_export_zebra_name[afi]))
|
||||
|| (argc <= 5)) {
|
||||
if (rfg->plist_export_zebra_name[afi])
|
||||
free(rfg->plist_export_zebra_name[afi]);
|
||||
@ -1792,9 +1791,8 @@ DEFUN (vnc_nve_group_export_no_routemap,
|
||||
vnc_direct_bgp_reexport_group_afi(bgp, rfg, AFI_IP6);
|
||||
}
|
||||
} else {
|
||||
if (((argc > 4)
|
||||
&& strmatch(argv[4]->text,
|
||||
rfg->routemap_export_zebra_name))
|
||||
if (((argc > 4) && strmatch(argv[4]->text,
|
||||
rfg->routemap_export_zebra_name))
|
||||
|| (argc <= 4)) {
|
||||
if (rfg->routemap_export_zebra_name)
|
||||
free(rfg->routemap_export_zebra_name);
|
||||
@ -2447,9 +2445,8 @@ bgp_rfapi_delete_named_nve_group(struct vty *vty, /* NULL = no output */
|
||||
*/
|
||||
for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_direct_bgp_l, node,
|
||||
rfgn)) {
|
||||
if (rfg_name == NULL
|
||||
|| (type == RFAPI_GROUP_CFG_NVE
|
||||
&& !strcmp(rfgn->name, rfg_name))) {
|
||||
if (rfg_name == NULL || (type == RFAPI_GROUP_CFG_NVE
|
||||
&& !strcmp(rfgn->name, rfg_name))) {
|
||||
rfgn->rfg = NULL;
|
||||
/* remove exported routes from this group */
|
||||
vnc_direct_bgp_del_group(bgp, rfg);
|
||||
@ -2463,9 +2460,8 @@ bgp_rfapi_delete_named_nve_group(struct vty *vty, /* NULL = no output */
|
||||
for (ALL_LIST_ELEMENTS_RO(bgp->rfapi_cfg->rfg_export_zebra_l, node,
|
||||
rfgn)) {
|
||||
|
||||
if (rfg_name == NULL
|
||||
|| (type == RFAPI_GROUP_CFG_NVE
|
||||
&& !strcmp(rfgn->name, rfg_name))) {
|
||||
if (rfg_name == NULL || (type == RFAPI_GROUP_CFG_NVE
|
||||
&& !strcmp(rfgn->name, rfg_name))) {
|
||||
rfgn->rfg = NULL;
|
||||
/* remove exported routes from this group */
|
||||
vnc_zebra_del_group(bgp, rfg);
|
||||
|
@ -2603,9 +2603,8 @@ int rfapi_register(void *handle, struct rfapi_ip_prefix *prefix,
|
||||
ZEBRA_ROUTE_BGP, BGP_ROUTE_RFP, NULL,
|
||||
action == RFAPI_REGISTER_KILL);
|
||||
|
||||
if (0
|
||||
== rfapiApDelete(bgp, rfd, &p, pfx_mac, &prd,
|
||||
&adv_tunnel)) {
|
||||
if (0 == rfapiApDelete(bgp, rfd, &p, pfx_mac, &prd,
|
||||
&adv_tunnel)) {
|
||||
if (adv_tunnel)
|
||||
rfapiTunnelRouteAnnounce(
|
||||
bgp, rfd, &rfd->max_prefix_lifetime);
|
||||
|
@ -1,22 +1,22 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2009-2016, LabN Consulting, L.L.C.
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; see the file COPYING; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
*
|
||||
* Copyright 2009-2016, LabN Consulting, L.L.C.
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; see the file COPYING; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* File: rfapi_import.c
|
||||
@ -1086,8 +1086,9 @@ int rfapiEcommunityGetEthernetTag(struct ecommunity *ecom, uint16_t *tag_id)
|
||||
} else if (encode == ECOMMUNITY_ENCODE_AS) {
|
||||
as = (*p++ << 8);
|
||||
as |= (*p++);
|
||||
p += 2; /* skip next two, tag/vid
|
||||
always in lowest bytes */
|
||||
p +=
|
||||
2; /* skip next two, tag/vid
|
||||
always in lowest bytes */
|
||||
}
|
||||
if (as == bgp->as) {
|
||||
*tag_id = *p++ << 8;
|
||||
@ -2010,9 +2011,8 @@ static void rfapiBgpInfoAttachSorted(struct route_node *rn,
|
||||
|
||||
for (prev = NULL, next = rn->info; next;
|
||||
prev = next, next = next->next) {
|
||||
if (!bgp
|
||||
|| (!CHECK_FLAG(info_new->flags, BGP_INFO_REMOVED)
|
||||
&& CHECK_FLAG(next->flags, BGP_INFO_REMOVED))
|
||||
if (!bgp || (!CHECK_FLAG(info_new->flags, BGP_INFO_REMOVED)
|
||||
&& CHECK_FLAG(next->flags, BGP_INFO_REMOVED))
|
||||
|| bgp_info_cmp_compatible(bgp, info_new, next, pfx_buf,
|
||||
afi, safi)
|
||||
== -1) { /* -1 if 1st is better */
|
||||
@ -3554,10 +3554,9 @@ void rfapiBgpInfoFilteredImportVPN(
|
||||
|
||||
vnc_zlog_debug_verbose(
|
||||
"%s: withdrawing at prefix %s/%d%s",
|
||||
__func__,
|
||||
rfapi_ntop(rn->p.family,
|
||||
&rn->p.u.prefix, buf,
|
||||
BUFSIZ),
|
||||
__func__, rfapi_ntop(rn->p.family,
|
||||
&rn->p.u.prefix,
|
||||
buf, BUFSIZ),
|
||||
rn->p.prefixlen,
|
||||
(washolddown
|
||||
? " (already being withdrawn)"
|
||||
@ -4024,7 +4023,7 @@ void rfapiProcessWithdraw(struct peer *peer, void *rfd, struct prefix *p,
|
||||
p, /* aux_prefix: IP */
|
||||
AFI_L2VPN, prd, attr, type, 0,
|
||||
NULL); /* sub_type & label unused for withdraw
|
||||
*/
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
@ -4311,8 +4310,9 @@ void bgp_rfapi_destroy(struct bgp *bgp, struct rfapi *h)
|
||||
void *cursor;
|
||||
int rc;
|
||||
|
||||
for (cursor = NULL, rc = skiplist_next(h->import_mac, NULL,
|
||||
(void **)&it, &cursor);
|
||||
for (cursor = NULL,
|
||||
rc = skiplist_next(h->import_mac, NULL, (void **)&it,
|
||||
&cursor);
|
||||
!rc; rc = skiplist_next(h->import_mac, NULL, (void **)&it,
|
||||
&cursor)) {
|
||||
|
||||
@ -4711,8 +4711,9 @@ void rfapiDeleteRemotePrefixes(struct prefix *un, struct prefix *vn,
|
||||
void *cursor = NULL;
|
||||
int rc;
|
||||
|
||||
for (cursor = NULL, rc = skiplist_next(h->import_mac, NULL,
|
||||
(void **)&it, &cursor);
|
||||
for (cursor = NULL,
|
||||
rc = skiplist_next(h->import_mac, NULL, (void **)&it,
|
||||
&cursor);
|
||||
!rc; rc = skiplist_next(h->import_mac, NULL, (void **)&it,
|
||||
&cursor)) {
|
||||
|
||||
@ -4805,8 +4806,9 @@ void rfapiCountAllItRoutes(int *pALRcount, /* active local routes */
|
||||
int rc;
|
||||
|
||||
if (h->import_mac) {
|
||||
for (cursor = NULL, rc = skiplist_next(h->import_mac, NULL,
|
||||
(void **)&it, &cursor);
|
||||
for (cursor = NULL,
|
||||
rc = skiplist_next(h->import_mac, NULL, (void **)&it,
|
||||
&cursor);
|
||||
!rc; rc = skiplist_next(h->import_mac, NULL, (void **)&it,
|
||||
&cursor)) {
|
||||
|
||||
|
@ -1339,11 +1339,10 @@ struct route_node *rfapiMonitorEthAdd(struct bgp *bgp,
|
||||
{
|
||||
char buf[BUFSIZ];
|
||||
|
||||
vnc_zlog_debug_verbose("%s: LNI=%d: rfd=%p, pfx=%s", __func__,
|
||||
logical_net_id, rfd,
|
||||
rfapi_ntop(pfx_mac_buf.family,
|
||||
pfx_mac_buf.u.val, buf,
|
||||
BUFSIZ));
|
||||
vnc_zlog_debug_verbose(
|
||||
"%s: LNI=%d: rfd=%p, pfx=%s", __func__, logical_net_id,
|
||||
rfd, rfapi_ntop(pfx_mac_buf.family, pfx_mac_buf.u.val,
|
||||
buf, BUFSIZ));
|
||||
}
|
||||
|
||||
|
||||
|
@ -527,11 +527,11 @@ void rfapiRibClear(struct rfapi_descriptor *rfd)
|
||||
|
||||
struct rfapi_info *ri;
|
||||
|
||||
while (0
|
||||
== skiplist_first(
|
||||
(struct skiplist *)
|
||||
rn->info,
|
||||
NULL, (void **)&ri)) {
|
||||
while (0 == skiplist_first(
|
||||
(struct skiplist *)
|
||||
rn->info,
|
||||
NULL,
|
||||
(void **)&ri)) {
|
||||
|
||||
rfapi_info_free(ri);
|
||||
skiplist_delete_first(
|
||||
@ -2449,7 +2449,7 @@ void rfapiRibShowResponses(void *stream, struct prefix *pfx_match,
|
||||
#else
|
||||
"Remaining"
|
||||
#endif
|
||||
);
|
||||
);
|
||||
}
|
||||
if (!printednve) {
|
||||
char str_vn[BUFSIZ];
|
||||
|
@ -2009,7 +2009,7 @@ void vnc_import_bgp_exterior_del_route(
|
||||
bgp_info_unlock(info);
|
||||
route_unlock_node(
|
||||
rn); /* sl entry
|
||||
*/
|
||||
*/
|
||||
}
|
||||
if (skiplist_empty(
|
||||
RFAPI_MONITOR_EXTERIOR(
|
||||
|
@ -375,9 +375,8 @@ static int vnc_zebra_read_ipv4(int command, struct zclient *zclient,
|
||||
__func__, zebra_route_string(api.type),
|
||||
inet_ntop(AF_INET, &p.prefix, buf[0],
|
||||
sizeof(buf[0])),
|
||||
p.prefixlen,
|
||||
inet_ntop(AF_INET, &nexthop, buf[1],
|
||||
sizeof(buf[1])),
|
||||
p.prefixlen, inet_ntop(AF_INET, &nexthop,
|
||||
buf[1], sizeof(buf[1])),
|
||||
api.metric);
|
||||
}
|
||||
vnc_redistribute_add((struct prefix *)&p, &nexthop, api.metric,
|
||||
@ -391,9 +390,8 @@ static int vnc_zebra_read_ipv4(int command, struct zclient *zclient,
|
||||
__func__, zebra_route_string(api.type),
|
||||
inet_ntop(AF_INET, &p.prefix, buf[0],
|
||||
sizeof(buf[0])),
|
||||
p.prefixlen,
|
||||
inet_ntop(AF_INET, &nexthop, buf[1],
|
||||
sizeof(buf[1])),
|
||||
p.prefixlen, inet_ntop(AF_INET, &nexthop,
|
||||
buf[1], sizeof(buf[1])),
|
||||
api.metric);
|
||||
}
|
||||
vnc_redistribute_delete((struct prefix *)&p, api.type);
|
||||
|
@ -552,9 +552,8 @@ struct eigrp_interface *eigrp_if_lookup_recv_if(struct eigrp *eigrp,
|
||||
|
||||
if (prefix_match(CONNECTED_PREFIX(ei->connected),
|
||||
(struct prefix *)&addr)) {
|
||||
if ((match == NULL)
|
||||
|| (match->address->prefixlen
|
||||
< ei->address->prefixlen))
|
||||
if ((match == NULL) || (match->address->prefixlen
|
||||
< ei->address->prefixlen))
|
||||
match = ei;
|
||||
}
|
||||
}
|
||||
|
@ -68,9 +68,7 @@
|
||||
|
||||
/* eigprd privileges */
|
||||
zebra_capabilities_t _caps_p[] = {
|
||||
ZCAP_NET_RAW,
|
||||
ZCAP_BIND,
|
||||
ZCAP_NET_ADMIN,
|
||||
ZCAP_NET_RAW, ZCAP_BIND, ZCAP_NET_ADMIN,
|
||||
};
|
||||
|
||||
struct zebra_privs_t eigrpd_privs = {
|
||||
|
@ -134,9 +134,8 @@ int eigrp_make_md5_digest(struct eigrp_interface *ei, struct stream *s,
|
||||
MD5Update(&ctx, zeropad, 16 - strlen(key->string));
|
||||
if (backup_end > (EIGRP_HEADER_LEN + EIGRP_AUTH_MD5_TLV_SIZE)) {
|
||||
MD5Update(&ctx,
|
||||
ibuf
|
||||
+ (EIGRP_HEADER_LEN
|
||||
+ EIGRP_AUTH_MD5_TLV_SIZE),
|
||||
ibuf + (EIGRP_HEADER_LEN
|
||||
+ EIGRP_AUTH_MD5_TLV_SIZE),
|
||||
backup_end - 20
|
||||
- (EIGRP_HEADER_LEN
|
||||
+ EIGRP_AUTH_MD5_TLV_SIZE));
|
||||
@ -209,9 +208,8 @@ int eigrp_check_md5_digest(struct stream *s,
|
||||
MD5Update(&ctx, zeropad, 16 - strlen(key->string));
|
||||
if (backup_end > (EIGRP_HEADER_LEN + EIGRP_AUTH_MD5_TLV_SIZE)) {
|
||||
MD5Update(&ctx,
|
||||
ibuf
|
||||
+ (EIGRP_HEADER_LEN
|
||||
+ EIGRP_AUTH_MD5_TLV_SIZE),
|
||||
ibuf + (EIGRP_HEADER_LEN
|
||||
+ EIGRP_AUTH_MD5_TLV_SIZE),
|
||||
backup_end - 20
|
||||
- (EIGRP_HEADER_LEN
|
||||
+ EIGRP_AUTH_MD5_TLV_SIZE));
|
||||
@ -328,9 +326,9 @@ int eigrp_write(struct thread *thread)
|
||||
struct listnode *node;
|
||||
#ifdef WANT_EIGRP_WRITE_FRAGMENT
|
||||
static u_int16_t ipid = 0;
|
||||
#endif /* WANT_EIGRP_WRITE_FRAGMENT */
|
||||
/* $FRR indent$ */
|
||||
/* clang-format off */
|
||||
#endif /* WANT_EIGRP_WRITE_FRAGMENT */
|
||||
/* $FRR indent$ */
|
||||
/* clang-format off */
|
||||
#define EIGRP_WRITE_IPHL_SHIFT 2
|
||||
|
||||
eigrp->t_write = NULL;
|
||||
|
@ -644,9 +644,7 @@ static void route_set_metric_free(void *rule)
|
||||
|
||||
/* Set metric rule structure. */
|
||||
static struct route_map_rule_cmd route_set_metric_cmd = {
|
||||
"metric",
|
||||
route_set_metric,
|
||||
route_set_metric_compile,
|
||||
"metric", route_set_metric, route_set_metric_compile,
|
||||
route_set_metric_free,
|
||||
};
|
||||
|
||||
@ -778,8 +776,7 @@ DEFUN (no_match_metric,
|
||||
}
|
||||
|
||||
ALIAS(no_match_metric, no_match_metric_val_cmd,
|
||||
"no match metric <0-4294967295>",
|
||||
NO_STR MATCH_STR
|
||||
"no match metric <0-4294967295>", NO_STR MATCH_STR
|
||||
"Match metric of route\n"
|
||||
"Metric value\n")
|
||||
|
||||
@ -842,8 +839,7 @@ DEFUN (no_match_ip_next_hop,
|
||||
}
|
||||
|
||||
ALIAS(no_match_ip_next_hop, no_match_ip_next_hop_val_cmd,
|
||||
"no match ip next-hop (<1-199>|<1300-2699>|WORD)",
|
||||
NO_STR MATCH_STR IP_STR
|
||||
"no match ip next-hop (<1-199>|<1300-2699>|WORD)", NO_STR MATCH_STR IP_STR
|
||||
"Match next-hop address of route\n"
|
||||
"IP access-list number\n"
|
||||
"IP access-list number (expanded range)\n"
|
||||
@ -881,8 +877,7 @@ DEFUN (no_match_ip_next_hop_prefix_list,
|
||||
|
||||
ALIAS(no_match_ip_next_hop_prefix_list,
|
||||
no_match_ip_next_hop_prefix_list_val_cmd,
|
||||
"no match ip next-hop prefix-list WORD",
|
||||
NO_STR MATCH_STR IP_STR
|
||||
"no match ip next-hop prefix-list WORD", NO_STR MATCH_STR IP_STR
|
||||
"Match next-hop address of route\n"
|
||||
"Match entries of prefix-lists\n"
|
||||
"IP prefix-list name\n")
|
||||
@ -916,8 +911,7 @@ DEFUN (no_match_ip_address,
|
||||
}
|
||||
|
||||
ALIAS(no_match_ip_address, no_match_ip_address_val_cmd,
|
||||
"no match ip address (<1-199>|<1300-2699>|WORD)",
|
||||
NO_STR MATCH_STR IP_STR
|
||||
"no match ip address (<1-199>|<1300-2699>|WORD)", NO_STR MATCH_STR IP_STR
|
||||
"Match address of route\n"
|
||||
"IP access-list number\n"
|
||||
"IP access-list number (expanded range)\n"
|
||||
@ -954,8 +948,7 @@ DEFUN (no_match_ip_address_prefix_list,
|
||||
}
|
||||
|
||||
ALIAS(no_match_ip_address_prefix_list, no_match_ip_address_prefix_list_val_cmd,
|
||||
"no match ip address prefix-list WORD",
|
||||
NO_STR MATCH_STR IP_STR
|
||||
"no match ip address prefix-list WORD", NO_STR MATCH_STR IP_STR
|
||||
"Match address of route\n"
|
||||
"Match entries of prefix-lists\n"
|
||||
"IP prefix-list name\n")
|
||||
@ -1000,8 +993,7 @@ DEFUN (set_metric,
|
||||
return eigrp_route_set_add(vty, vty->index, "metric", argv[0]);
|
||||
}
|
||||
|
||||
ALIAS(set_metric, set_metric_addsub_cmd, "set metric <+/-metric>",
|
||||
SET_STR
|
||||
ALIAS(set_metric, set_metric_addsub_cmd, "set metric <+/-metric>", SET_STR
|
||||
"Metric value for destination routing protocol\n"
|
||||
"Add or subtract metric\n")
|
||||
|
||||
@ -1019,8 +1011,7 @@ DEFUN (no_set_metric,
|
||||
}
|
||||
|
||||
ALIAS(no_set_metric, no_set_metric_val_cmd,
|
||||
"no set metric (<0-4294967295>|<+/-metric>)",
|
||||
NO_STR SET_STR
|
||||
"no set metric (<0-4294967295>|<+/-metric>)", NO_STR SET_STR
|
||||
"Metric value for destination routing protocol\n"
|
||||
"Metric value\n"
|
||||
"Add or subtract metric\n")
|
||||
@ -1061,8 +1052,7 @@ DEFUN (no_set_ip_nexthop,
|
||||
}
|
||||
|
||||
ALIAS(no_set_ip_nexthop, no_set_ip_nexthop_val_cmd,
|
||||
"no set ip next-hop A.B.C.D",
|
||||
NO_STR SET_STR IP_STR
|
||||
"no set ip next-hop A.B.C.D", NO_STR SET_STR IP_STR
|
||||
"Next hop address\n"
|
||||
"IP address of next hop\n")
|
||||
|
||||
@ -1089,8 +1079,7 @@ DEFUN (no_set_tag,
|
||||
return eigrp_route_set_delete(vty, vty->index, "tag", argv[0]);
|
||||
}
|
||||
|
||||
ALIAS(no_set_tag, no_set_tag_val_cmd, "no set tag <0-65535>",
|
||||
NO_STR SET_STR
|
||||
ALIAS(no_set_tag, no_set_tag_val_cmd, "no set tag <0-65535>", NO_STR SET_STR
|
||||
"Tag value for routing protocol\n"
|
||||
"Tag value\n")
|
||||
|
||||
|
@ -104,8 +104,9 @@ struct eigrp {
|
||||
|
||||
uint64_t serno; /* Global serial number counter for topology entry
|
||||
changes*/
|
||||
uint64_t serno_last_update; /* Highest serial number of information send
|
||||
by last update*/
|
||||
uint64_t
|
||||
serno_last_update; /* Highest serial number of information send
|
||||
by last update*/
|
||||
struct list *topology_changes_internalIPV4;
|
||||
struct list *topology_changes_externalIPV4;
|
||||
|
||||
|
@ -771,8 +771,8 @@ void eigrp_update_send_all(struct eigrp *eigrp,
|
||||
/**
|
||||
* @fn eigrp_update_send_GR_part
|
||||
*
|
||||
* @param[in] nbr contains neighbor who would receive
|
||||
* Graceful restart
|
||||
* @param[in] nbr contains neighbor who would receive Graceful
|
||||
* restart
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
@ -1034,8 +1034,8 @@ int eigrp_update_send_GR_thread(struct thread *thread)
|
||||
/**
|
||||
* @fn eigrp_update_send_GR
|
||||
*
|
||||
* @param[in] nbr Neighbor who would receive
|
||||
* Graceful restart
|
||||
* @param[in] nbr Neighbor who would receive Graceful
|
||||
* restart
|
||||
* @param[in] gr_type Who executed Graceful restart
|
||||
* @param[in] vty Virtual terminal for log output
|
||||
*
|
||||
@ -1094,8 +1094,8 @@ void eigrp_update_send_GR(struct eigrp_neighbor *nbr, enum GR_type gr_type,
|
||||
/**
|
||||
* @fn eigrp_update_send_interface_GR
|
||||
*
|
||||
* @param[in] ei Interface to neighbors of which the
|
||||
* GR is sent
|
||||
* @param[in] ei Interface to neighbors of which the GR
|
||||
* is sent
|
||||
* @param[in] gr_type Who executed Graceful restart
|
||||
* @param[in] vty Virtual terminal for log output
|
||||
*
|
||||
|
@ -441,7 +441,7 @@ dnode_t *dict_lookup(dict_t *dict, const void *key)
|
||||
root = root->right;
|
||||
else {
|
||||
if (!dict->dupes) { /* no duplicates, return match
|
||||
*/
|
||||
*/
|
||||
return root;
|
||||
} else { /* could be dupes, find leftmost one */
|
||||
do {
|
||||
|
@ -446,10 +446,9 @@ void isis_adj_print_vty(struct isis_adjacency *adj, struct vty *vty,
|
||||
adj->dis_record[ISIS_LEVELS + level - 1]
|
||||
.dis),
|
||||
adj->dischanges[level - 1],
|
||||
time2string(now
|
||||
- (adj->dis_record[ISIS_LEVELS
|
||||
+ level - 1]
|
||||
.last_dis_change)));
|
||||
time2string(now - (adj->dis_record[ISIS_LEVELS
|
||||
+ level - 1]
|
||||
.last_dis_change)));
|
||||
}
|
||||
vty_out(vty, "\n");
|
||||
|
||||
|
@ -1270,9 +1270,7 @@ int isis_circuit_passwd_hmac_md5_set(struct isis_circuit *circuit,
|
||||
passwd);
|
||||
}
|
||||
struct cmd_node interface_node = {
|
||||
INTERFACE_NODE,
|
||||
"%s(config-if)# ",
|
||||
1,
|
||||
INTERFACE_NODE, "%s(config-if)# ", 1,
|
||||
};
|
||||
|
||||
int isis_circuit_circ_type_set(struct isis_circuit *circuit, int circ_type)
|
||||
|
@ -838,30 +838,26 @@ static void lsp_print_mt_ipv6_reach(struct list *list, struct vty *vty,
|
||||
if (mtid == ISIS_MT_IPV4_UNICAST) {
|
||||
if ((ipv6_reach->control_info & CTRL_INFO_DISTRIBUTION)
|
||||
== DISTRIBUTION_INTERNAL)
|
||||
vty_out(vty,
|
||||
" Metric : %-8" PRIu32
|
||||
" IPv6-Internal : %s/%d\n",
|
||||
vty_out(vty, " Metric : %-8" PRIu32
|
||||
" IPv6-Internal : %s/%d\n",
|
||||
ntohl(ipv6_reach->metric), buff,
|
||||
ipv6_reach->prefix_len);
|
||||
else
|
||||
vty_out(vty,
|
||||
" Metric : %-8" PRIu32
|
||||
" IPv6-External : %s/%d\n",
|
||||
vty_out(vty, " Metric : %-8" PRIu32
|
||||
" IPv6-External : %s/%d\n",
|
||||
ntohl(ipv6_reach->metric), buff,
|
||||
ipv6_reach->prefix_len);
|
||||
} else {
|
||||
if ((ipv6_reach->control_info & CTRL_INFO_DISTRIBUTION)
|
||||
== DISTRIBUTION_INTERNAL)
|
||||
vty_out(vty,
|
||||
" Metric : %-8" PRIu32
|
||||
" IPv6-MT-Int : %s/%d %s\n",
|
||||
vty_out(vty, " Metric : %-8" PRIu32
|
||||
" IPv6-MT-Int : %s/%d %s\n",
|
||||
ntohl(ipv6_reach->metric), buff,
|
||||
ipv6_reach->prefix_len,
|
||||
isis_mtid2str(mtid));
|
||||
else
|
||||
vty_out(vty,
|
||||
" Metric : %-8" PRIu32
|
||||
" IPv6-MT-Ext : %s/%d %s\n",
|
||||
vty_out(vty, " Metric : %-8" PRIu32
|
||||
" IPv6-MT-Ext : %s/%d %s\n",
|
||||
ntohl(ipv6_reach->metric), buff,
|
||||
ipv6_reach->prefix_len,
|
||||
isis_mtid2str(mtid));
|
||||
@ -879,9 +875,8 @@ static void lsp_print_mt_ipv4_reach(struct list *list, struct vty *vty,
|
||||
if (mtid == ISIS_MT_IPV4_UNICAST) {
|
||||
/* FIXME: There should be better way to output this
|
||||
* stuff. */
|
||||
vty_out(vty,
|
||||
" Metric : %-8" PRIu32
|
||||
" IPv4-Extended : %s/%d\n",
|
||||
vty_out(vty, " Metric : %-8" PRIu32
|
||||
" IPv4-Extended : %s/%d\n",
|
||||
ntohl(te_ipv4_reach->te_metric),
|
||||
inet_ntoa(newprefix2inaddr(
|
||||
&te_ipv4_reach->prefix_start,
|
||||
@ -890,9 +885,8 @@ static void lsp_print_mt_ipv4_reach(struct list *list, struct vty *vty,
|
||||
} else {
|
||||
/* FIXME: There should be better way to output this
|
||||
* stuff. */
|
||||
vty_out(vty,
|
||||
" Metric : %-8" PRIu32
|
||||
" IPv4-MT : %s/%d %s\n",
|
||||
vty_out(vty, " Metric : %-8" PRIu32
|
||||
" IPv4-MT : %s/%d %s\n",
|
||||
ntohl(te_ipv4_reach->te_metric),
|
||||
inet_ntoa(newprefix2inaddr(
|
||||
&te_ipv4_reach->prefix_start,
|
||||
@ -993,9 +987,8 @@ void lsp_print_detail(struct isis_lsp *lsp, struct vty *vty, char dynhost)
|
||||
for (ALL_LIST_ELEMENTS_RO(lsp->tlv_data.is_neighs, lnode,
|
||||
is_neigh)) {
|
||||
lspid_print(is_neigh->neigh_id, LSPid, dynhost, 0);
|
||||
vty_out(vty,
|
||||
" Metric : %-8" PRIu8
|
||||
" IS : %s\n",
|
||||
vty_out(vty, " Metric : %-8" PRIu8
|
||||
" IS : %s\n",
|
||||
is_neigh->metrics.metric_default, LSPid);
|
||||
}
|
||||
|
||||
@ -1007,9 +1000,8 @@ void lsp_print_detail(struct isis_lsp *lsp, struct vty *vty, char dynhost)
|
||||
sizeof(ipv4_reach_prefix));
|
||||
memcpy(ipv4_reach_mask, inet_ntoa(ipv4_reach->mask),
|
||||
sizeof(ipv4_reach_mask));
|
||||
vty_out(vty,
|
||||
" Metric : %-8" PRIu8
|
||||
" IPv4-Internal : %s %s\n",
|
||||
vty_out(vty, " Metric : %-8" PRIu8
|
||||
" IPv4-Internal : %s %s\n",
|
||||
ipv4_reach->metrics.metric_default,
|
||||
ipv4_reach_prefix, ipv4_reach_mask);
|
||||
}
|
||||
@ -1022,9 +1014,8 @@ void lsp_print_detail(struct isis_lsp *lsp, struct vty *vty, char dynhost)
|
||||
sizeof(ipv4_reach_prefix));
|
||||
memcpy(ipv4_reach_mask, inet_ntoa(ipv4_reach->mask),
|
||||
sizeof(ipv4_reach_mask));
|
||||
vty_out(vty,
|
||||
" Metric : %-8" PRIu8
|
||||
" IPv4-External : %s %s\n",
|
||||
vty_out(vty, " Metric : %-8" PRIu8
|
||||
" IPv4-External : %s %s\n",
|
||||
ipv4_reach->metrics.metric_default,
|
||||
ipv4_reach_prefix, ipv4_reach_mask);
|
||||
}
|
||||
@ -2763,9 +2754,9 @@ int lsp_regenerate_schedule_pseudo(struct isis_circuit *circuit, int level)
|
||||
THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[lvl - 1]);
|
||||
diff = now - lsp->last_generated;
|
||||
if (diff < circuit->area->lsp_gen_interval[lvl - 1]) {
|
||||
timeout = 1000
|
||||
* (circuit->area->lsp_gen_interval[lvl - 1]
|
||||
- diff);
|
||||
timeout =
|
||||
1000 * (circuit->area->lsp_gen_interval[lvl - 1]
|
||||
- diff);
|
||||
sched_debug(
|
||||
"ISIS (%s): Sechduling in %ld ms to match configured lsp_gen_interval",
|
||||
area->area_tag, timeout);
|
||||
@ -2990,9 +2981,9 @@ void lsp_purge_non_exist(int level, struct isis_link_state_hdr *lsp_hdr,
|
||||
lsp->level = level;
|
||||
lsp->pdu = stream_new(LLC_LEN + area->lsp_mtu);
|
||||
lsp->isis_header = (struct isis_fixed_hdr *)STREAM_DATA(lsp->pdu);
|
||||
fill_fixed_hdr(lsp->isis_header, (lsp->level == IS_LEVEL_1)
|
||||
? L1_LINK_STATE
|
||||
: L2_LINK_STATE);
|
||||
fill_fixed_hdr(lsp->isis_header,
|
||||
(lsp->level == IS_LEVEL_1) ? L1_LINK_STATE
|
||||
: L2_LINK_STATE);
|
||||
lsp->lsp_header = (struct isis_link_state_hdr *)(STREAM_DATA(lsp->pdu)
|
||||
+ ISIS_FIXED_HDR_LEN);
|
||||
memcpy(lsp->lsp_header, lsp_hdr, ISIS_LSP_HDR_LEN);
|
||||
|
@ -1391,10 +1391,11 @@ dontcheckadj:
|
||||
lsp_set_all_srmflags(lsp);
|
||||
/* v */
|
||||
ISIS_FLAGS_CLEAR_ALL(
|
||||
lsp->SSNflags); /* FIXME:
|
||||
OTHER
|
||||
than c
|
||||
*/
|
||||
lsp
|
||||
->SSNflags); /* FIXME:
|
||||
OTHER
|
||||
than c
|
||||
*/
|
||||
|
||||
/* For the case of lsp confusion, flood
|
||||
* the purge back to its
|
||||
|
@ -47,16 +47,17 @@
|
||||
extern struct zebra_privs_t isisd_privs;
|
||||
|
||||
/* tcpdump -i eth0 'isis' -dd */
|
||||
static struct sock_filter isisfilter[] = {
|
||||
/* NB: we're in SOCK_DGRAM, so src/dst mac + length are stripped
|
||||
* off!
|
||||
* (OTOH it's a bit more lower-layer agnostic and might work
|
||||
* over GRE?) */
|
||||
/* { 0x28, 0, 0, 0x0000000c - 14 }, */
|
||||
/* { 0x25, 5, 0, 0x000005dc }, */
|
||||
{0x28, 0, 0, 0x0000000e - 14}, {0x15, 0, 3, 0x0000fefe},
|
||||
{0x30, 0, 0, 0x00000011 - 14}, {0x15, 0, 1, 0x00000083},
|
||||
{0x6, 0, 0, 0x00040000}, {0x6, 0, 0, 0x00000000},
|
||||
static struct sock_filter isisfilter[] =
|
||||
{
|
||||
/* NB: we're in SOCK_DGRAM, so src/dst mac + length are stripped
|
||||
* off!
|
||||
* (OTOH it's a bit more lower-layer agnostic and might work
|
||||
* over GRE?) */
|
||||
/* { 0x28, 0, 0, 0x0000000c - 14 }, */
|
||||
/* { 0x25, 5, 0, 0x000005dc }, */
|
||||
{0x28, 0, 0, 0x0000000e - 14}, {0x15, 0, 3, 0x0000fefe},
|
||||
{0x30, 0, 0, 0x00000011 - 14}, {0x15, 0, 1, 0x00000083},
|
||||
{0x6, 0, 0, 0x00040000}, {0x6, 0, 0, 0x00000000},
|
||||
};
|
||||
|
||||
static struct sock_fprog bpf = {
|
||||
|
@ -389,9 +389,9 @@ static void isis_redist_update_zebra_subscriptions(struct isis *isis)
|
||||
for (protocol = 0; protocol < REDIST_PROTOCOL_COUNT; protocol++)
|
||||
for (type = 0; type < ZEBRA_ROUTE_MAX + 1; type++)
|
||||
for (level = 0; level < ISIS_LEVELS; level++)
|
||||
if (area->redist_settings
|
||||
[protocol][type][level]
|
||||
.redist)
|
||||
if (area->redist_settings[protocol]
|
||||
[type]
|
||||
[level].redist)
|
||||
do_subscribe[protocol][type] =
|
||||
1;
|
||||
|
||||
|
@ -366,9 +366,10 @@ static struct isis_vertex *isis_spf_add_root(struct isis_spftree *spftree,
|
||||
zlog_warn("ISIS-Spf: could not find own l%d LSP!",
|
||||
spftree->level);
|
||||
|
||||
vertex = isis_vertex_new(id, spftree->area->oldmetric
|
||||
? VTYPE_NONPSEUDO_IS
|
||||
: VTYPE_NONPSEUDO_TE_IS);
|
||||
vertex = isis_vertex_new(id,
|
||||
spftree->area->oldmetric
|
||||
? VTYPE_NONPSEUDO_IS
|
||||
: VTYPE_NONPSEUDO_TE_IS);
|
||||
listnode_add(spftree->paths, vertex);
|
||||
|
||||
#ifdef EXTREME_DEBUG
|
||||
@ -507,13 +508,11 @@ static void isis_spf_add_local(struct isis_spftree *spftree,
|
||||
/* d) */
|
||||
if (listcount(vertex->Adj_N) > ISIS_MAX_PATH_SPLITS)
|
||||
remove_excess_adjs(vertex->Adj_N);
|
||||
if (parent
|
||||
&& (listnode_lookup(vertex->parents, parent)
|
||||
== NULL))
|
||||
if (parent && (listnode_lookup(vertex->parents, parent)
|
||||
== NULL))
|
||||
listnode_add(vertex->parents, parent);
|
||||
if (parent
|
||||
&& (listnode_lookup(parent->children, vertex)
|
||||
== NULL))
|
||||
if (parent && (listnode_lookup(parent->children, vertex)
|
||||
== NULL))
|
||||
listnode_add(parent->children, vertex);
|
||||
return;
|
||||
} else if (vertex->d_N < cost) {
|
||||
@ -650,9 +649,8 @@ static int isis_spf_process_lsp(struct isis_spftree *spftree,
|
||||
mt_router_info = tlvs_lookup_mt_router_info(&lsp->tlv_data,
|
||||
spftree->mtid);
|
||||
|
||||
if (!pseudo_lsp
|
||||
&& (spftree->mtid == ISIS_MT_IPV4_UNICAST
|
||||
&& !speaks(lsp->tlv_data.nlpids, spftree->family))
|
||||
if (!pseudo_lsp && (spftree->mtid == ISIS_MT_IPV4_UNICAST
|
||||
&& !speaks(lsp->tlv_data.nlpids, spftree->family))
|
||||
&& !mt_router_info)
|
||||
return ISIS_OK;
|
||||
|
||||
@ -669,9 +667,8 @@ lspfragloop:
|
||||
#endif /* EXTREME_DEBUG */
|
||||
|
||||
/* RFC3787 section 4 SHOULD ignore overload bit in pseudo LSPs */
|
||||
if (pseudo_lsp
|
||||
|| (spftree->mtid == ISIS_MT_IPV4_UNICAST
|
||||
&& !ISIS_MASK_LSP_OL_BIT(lsp->lsp_header->lsp_bits))
|
||||
if (pseudo_lsp || (spftree->mtid == ISIS_MT_IPV4_UNICAST
|
||||
&& !ISIS_MASK_LSP_OL_BIT(lsp->lsp_header->lsp_bits))
|
||||
|| (mt_router_info && !mt_router_info->overload))
|
||||
|
||||
{
|
||||
|
@ -217,7 +217,7 @@ struct te_ipv4_reachability {
|
||||
u_int32_t te_metric;
|
||||
u_char control;
|
||||
u_char prefix_start; /* since this is variable length by nature it only
|
||||
*/
|
||||
*/
|
||||
}; /* points to an approximate location */
|
||||
|
||||
#define TE_IPV4_HAS_SUBTLV (0x40)
|
||||
|
@ -70,7 +70,7 @@ struct isis_area {
|
||||
struct isis_spftree *spftree6[ISIS_LEVELS]; /* The v6 SPTs */
|
||||
struct route_table *route_table6[ISIS_LEVELS]; /* IPv6 routes */
|
||||
/* $FRR indent$ */
|
||||
/* clang-format off */
|
||||
/* clang-format off */
|
||||
#define DEFAULT_LSP_MTU 1497
|
||||
unsigned int lsp_mtu; /* Size of LSPs to generate */
|
||||
struct list *circuit_list; /* IS-IS circuits */
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "checksum.h"
|
||||
|
||||
int /* return checksum in low-order 16 bits */
|
||||
in_cksum(void *parg, int nbytes)
|
||||
in_cksum(void *parg, int nbytes)
|
||||
{
|
||||
u_short *ptr = parg;
|
||||
register long sum; /* assumes long == 32 bits */
|
||||
|
@ -56,23 +56,19 @@ struct host host;
|
||||
|
||||
/* Standard command node structures. */
|
||||
static struct cmd_node auth_node = {
|
||||
AUTH_NODE,
|
||||
"Password: ",
|
||||
AUTH_NODE, "Password: ",
|
||||
};
|
||||
|
||||
static struct cmd_node view_node = {
|
||||
VIEW_NODE,
|
||||
"%s> ",
|
||||
VIEW_NODE, "%s> ",
|
||||
};
|
||||
|
||||
static struct cmd_node auth_enable_node = {
|
||||
AUTH_ENABLE_NODE,
|
||||
"Password: ",
|
||||
AUTH_ENABLE_NODE, "Password: ",
|
||||
};
|
||||
|
||||
static struct cmd_node enable_node = {
|
||||
ENABLE_NODE,
|
||||
"%s# ",
|
||||
ENABLE_NODE, "%s# ",
|
||||
};
|
||||
|
||||
static struct cmd_node config_node = {CONFIG_NODE, "%s(config)# ", 1};
|
||||
@ -653,9 +649,8 @@ void cmd_variable_complete(struct cmd_token *token, const char *arg,
|
||||
for (ALL_LIST_ELEMENTS_RO(varhandlers, ln, cvh)) {
|
||||
if (cvh->tokenname && strcmp(cvh->tokenname, token->text))
|
||||
continue;
|
||||
if (cvh->varname
|
||||
&& (!token->varname
|
||||
|| strcmp(cvh->varname, token->varname)))
|
||||
if (cvh->varname && (!token->varname
|
||||
|| strcmp(cvh->varname, token->varname)))
|
||||
continue;
|
||||
cvh->completions(tmpcomps, token);
|
||||
break;
|
||||
@ -1500,9 +1495,8 @@ DEFUN (config_write,
|
||||
struct stat conf_stat;
|
||||
|
||||
// if command was 'write terminal' or 'show running-config'
|
||||
if (argc == 2
|
||||
&& (strmatch(argv[idx_type]->text, "terminal")
|
||||
|| strmatch(argv[0]->text, "show"))) {
|
||||
if (argc == 2 && (strmatch(argv[idx_type]->text, "terminal")
|
||||
|| strmatch(argv[0]->text, "show"))) {
|
||||
vty_write_config(vty);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
@ -203,7 +203,7 @@ static PyObject *graph_to_pyobj(struct wrap_graph *wgraph,
|
||||
/* plumbing types */
|
||||
item(FORK_TKN) item(JOIN_TKN) item(START_TKN)
|
||||
item(END_TKN) default
|
||||
: wrap->type = "???";
|
||||
: wrap->type = "???";
|
||||
}
|
||||
|
||||
wrap->deprecated = (tok->attr == CMD_ATTR_DEPRECATED);
|
||||
|
@ -619,9 +619,8 @@ int long_only;
|
||||
|
||||
if (longopts != NULL
|
||||
&& (argv[optind][1] == '-'
|
||||
|| (long_only
|
||||
&& (argv[optind][2]
|
||||
|| !my_index(optstring, argv[optind][1]))))) {
|
||||
|| (long_only && (argv[optind][2]
|
||||
|| !my_index(optstring, argv[optind][1]))))) {
|
||||
char *nameend;
|
||||
const struct option *p;
|
||||
const struct option *pfound = NULL;
|
||||
|
@ -161,8 +161,7 @@ extern void _hook_unregister(struct hook *hook, void *funcptr, void *arg,
|
||||
*/
|
||||
#define DEFINE_HOOK(hookname, arglist, passlist) \
|
||||
struct hook _hook_##hookname = { \
|
||||
.name = #hookname, \
|
||||
.entries = NULL, \
|
||||
.name = #hookname, .entries = NULL, \
|
||||
}; \
|
||||
static int hook_call_##hookname arglist \
|
||||
{ \
|
||||
|
2
lib/if.h
2
lib/if.h
@ -236,7 +236,7 @@ struct interface {
|
||||
unsigned int mtu; /* IPv4 MTU */
|
||||
unsigned int
|
||||
mtu6; /* IPv6 MTU - probably, but not neccessarily same as mtu
|
||||
*/
|
||||
*/
|
||||
|
||||
/* Link-layer information and hardware address */
|
||||
enum zebra_link_type ll_type;
|
||||
|
11
lib/log.c
11
lib/log.c
@ -411,7 +411,7 @@ void zlog_signal(int signo, const char *action
|
||||
,
|
||||
siginfo_t *siginfo, void *program_counter
|
||||
#endif
|
||||
)
|
||||
)
|
||||
{
|
||||
time_t now;
|
||||
char buf[sizeof("DEFAULT: Received signal S at T (si_addr 0xP, PC 0xP); aborting...")
|
||||
@ -474,7 +474,7 @@ void zlog_signal(int signo, const char *action
|
||||
#else
|
||||
NULL
|
||||
#endif
|
||||
);
|
||||
);
|
||||
|
||||
s = buf;
|
||||
struct thread *tc;
|
||||
@ -1063,9 +1063,10 @@ void zlog_hexdump(const void *mem, unsigned int len)
|
||||
printing */
|
||||
s += sprintf(s, " ");
|
||||
|
||||
else if (isprint((int)((const char *)mem)
|
||||
[j])) /* printable char
|
||||
*/
|
||||
else if (
|
||||
isprint((int)((const char *)mem)
|
||||
[j])) /* printable char
|
||||
*/
|
||||
s += sprintf(
|
||||
s, "%c",
|
||||
0xFF & ((const char *)mem)[j]);
|
||||
|
@ -109,7 +109,7 @@ extern void zlog_signal(int signo, const char *action
|
||||
,
|
||||
siginfo_t *siginfo, void *program_counter
|
||||
#endif
|
||||
);
|
||||
);
|
||||
|
||||
/* Log a backtrace. */
|
||||
extern void zlog_backtrace(int priority);
|
||||
@ -143,7 +143,7 @@ struct timestamp_control {
|
||||
int precision; /* configuration parameter */
|
||||
int already_rendered; /* should be initialized to 0 */
|
||||
char buf[QUAGGA_TIMESTAMP_LEN]; /* will contain the rendered timestamp
|
||||
*/
|
||||
*/
|
||||
};
|
||||
|
||||
/* Defines for use in command construction: */
|
||||
|
@ -389,11 +389,11 @@ uint8_t *digest; /* caller digest to be filled in */
|
||||
{
|
||||
MD5_CTX context;
|
||||
unsigned char k_ipad[65]; /* inner padding -
|
||||
* key XORd with ipad
|
||||
*/
|
||||
* key XORd with ipad
|
||||
*/
|
||||
unsigned char k_opad[65]; /* outer padding -
|
||||
* key XORd with opad
|
||||
*/
|
||||
* key XORd with opad
|
||||
*/
|
||||
unsigned char tk[16];
|
||||
int i;
|
||||
/* if key is longer than 64 bytes reset it to key=MD5(key) */
|
||||
|
@ -173,7 +173,7 @@ static inline char *label2str(mpls_label_t label, char *buf, size_t len)
|
||||
#define MPLS_LABEL_RTALERT 1 /* Router Alert Label */
|
||||
#define MPLS_LABEL_IPV6NULL 2 /* IPv6 Explicit NULL Label */
|
||||
#define MPLS_LABEL_IMPLNULL 3 /* Implicit NULL Label */
|
||||
/* MPLS_LABEL_RESERVED 4-15 */ /* Values 4-15 are reserved */
|
||||
/* MPLS_LABEL_RESERVED 4-15 */ /* Values 4-15 are reserved */
|
||||
#define MPLS_LABEL_RESERVED_MAX 15
|
||||
#define MPLS_LABEL_MAX ((1 << 20) - 1)
|
||||
|
||||
|
@ -509,9 +509,7 @@ int _rb_check(const struct rb_type *, void *, unsigned long);
|
||||
return _cmp(l, r); \
|
||||
} \
|
||||
static const struct rb_type _name##_RB_INFO = { \
|
||||
_name##_RB_COMPARE, \
|
||||
_aug, \
|
||||
offsetof(struct _type, _field), \
|
||||
_name##_RB_COMPARE, _aug, offsetof(struct _type, _field), \
|
||||
}; \
|
||||
const struct rb_type *const _name##_RB_TYPE = &_name##_RB_INFO;
|
||||
|
||||
|
@ -1918,9 +1918,8 @@ int prefix_bgp_show_prefix_list(struct vty *vty, afi_t afi, char *name,
|
||||
json_object_object_add(json, "ipv6PrefixList",
|
||||
json_prefix);
|
||||
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
vty_out(vty, "ip%s prefix-list %s: %d entries\n",
|
||||
|
@ -1151,9 +1151,8 @@ const char *prefix2str(union prefixconstptr pu, char *str, int size)
|
||||
switch (p->family) {
|
||||
case AF_INET:
|
||||
case AF_INET6:
|
||||
snprintf(str, size, "%s/%d",
|
||||
inet_ntop(p->family, &p->u.prefix, buf,
|
||||
PREFIX2STR_BUFFER),
|
||||
snprintf(str, size, "%s/%d", inet_ntop(p->family, &p->u.prefix,
|
||||
buf, PREFIX2STR_BUFFER),
|
||||
p->prefixlen);
|
||||
break;
|
||||
|
||||
|
@ -53,9 +53,9 @@ struct ethaddr {
|
||||
|
||||
|
||||
/* length is the number of valuable bits of prefix structure
|
||||
* 18 bytes is current length in structure, if address is ipv4
|
||||
* 30 bytes is in case of ipv6
|
||||
*/
|
||||
* 18 bytes is current length in structure, if address is ipv4
|
||||
* 30 bytes is in case of ipv6
|
||||
*/
|
||||
#define PREFIX_LEN_ROUTE_TYPE_5_IPV4 (18*8)
|
||||
#define PREFIX_LEN_ROUTE_TYPE_5_IPV6 (30*8)
|
||||
|
||||
|
222
lib/privs.c
222
lib/privs.c
@ -99,131 +99,113 @@ static struct {
|
||||
pvalue_t *system_caps;
|
||||
} cap_map[ZCAP_MAX] = {
|
||||
#ifdef HAVE_LCAPS /* Quagga -> Linux capabilities mappings */
|
||||
[ZCAP_SETID] =
|
||||
{
|
||||
2,
|
||||
(pvalue_t[]){CAP_SETGID, CAP_SETUID},
|
||||
},
|
||||
[ZCAP_BIND] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){CAP_NET_BIND_SERVICE},
|
||||
},
|
||||
[ZCAP_NET_ADMIN] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){CAP_NET_ADMIN},
|
||||
},
|
||||
[ZCAP_NET_RAW] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){CAP_NET_RAW},
|
||||
},
|
||||
[ZCAP_CHROOT] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){
|
||||
CAP_SYS_CHROOT,
|
||||
[ZCAP_SETID] =
|
||||
{
|
||||
2, (pvalue_t[]){CAP_SETGID, CAP_SETUID},
|
||||
},
|
||||
[ZCAP_BIND] =
|
||||
{
|
||||
1, (pvalue_t[]){CAP_NET_BIND_SERVICE},
|
||||
},
|
||||
[ZCAP_NET_ADMIN] =
|
||||
{
|
||||
1, (pvalue_t[]){CAP_NET_ADMIN},
|
||||
},
|
||||
[ZCAP_NET_RAW] =
|
||||
{
|
||||
1, (pvalue_t[]){CAP_NET_RAW},
|
||||
},
|
||||
[ZCAP_CHROOT] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){
|
||||
CAP_SYS_CHROOT,
|
||||
},
|
||||
},
|
||||
[ZCAP_NICE] =
|
||||
{
|
||||
1, (pvalue_t[]){CAP_SYS_NICE},
|
||||
},
|
||||
[ZCAP_PTRACE] =
|
||||
{
|
||||
1, (pvalue_t[]){CAP_SYS_PTRACE},
|
||||
},
|
||||
[ZCAP_DAC_OVERRIDE] =
|
||||
{
|
||||
1, (pvalue_t[]){CAP_DAC_OVERRIDE},
|
||||
},
|
||||
[ZCAP_READ_SEARCH] =
|
||||
{
|
||||
1, (pvalue_t[]){CAP_DAC_READ_SEARCH},
|
||||
},
|
||||
[ZCAP_SYS_ADMIN] =
|
||||
{
|
||||
1, (pvalue_t[]){CAP_SYS_ADMIN},
|
||||
},
|
||||
[ZCAP_FOWNER] =
|
||||
{
|
||||
1, (pvalue_t[]){CAP_FOWNER},
|
||||
},
|
||||
},
|
||||
[ZCAP_NICE] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){CAP_SYS_NICE},
|
||||
},
|
||||
[ZCAP_PTRACE] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){CAP_SYS_PTRACE},
|
||||
},
|
||||
[ZCAP_DAC_OVERRIDE] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){CAP_DAC_OVERRIDE},
|
||||
},
|
||||
[ZCAP_READ_SEARCH] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){CAP_DAC_READ_SEARCH},
|
||||
},
|
||||
[ZCAP_SYS_ADMIN] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){CAP_SYS_ADMIN},
|
||||
},
|
||||
[ZCAP_FOWNER] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){CAP_FOWNER},
|
||||
},
|
||||
#elif defined(HAVE_SOLARIS_CAPABILITIES) /* HAVE_LCAPS */
|
||||
/* Quagga -> Solaris privilege mappings */
|
||||
[ZCAP_SETID] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){PRIV_PROC_SETID},
|
||||
},
|
||||
[ZCAP_BIND] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){PRIV_NET_PRIVADDR},
|
||||
},
|
||||
/* Quagga -> Solaris privilege mappings */
|
||||
[ZCAP_SETID] =
|
||||
{
|
||||
1, (pvalue_t[]){PRIV_PROC_SETID},
|
||||
},
|
||||
[ZCAP_BIND] =
|
||||
{
|
||||
1, (pvalue_t[]){PRIV_NET_PRIVADDR},
|
||||
},
|
||||
/* IP_CONFIG is a subset of NET_CONFIG and is allowed in zones */
|
||||
#ifdef PRIV_SYS_IP_CONFIG
|
||||
[ZCAP_NET_ADMIN] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){PRIV_SYS_IP_CONFIG},
|
||||
},
|
||||
[ZCAP_NET_ADMIN] =
|
||||
{
|
||||
1, (pvalue_t[]){PRIV_SYS_IP_CONFIG},
|
||||
},
|
||||
#else
|
||||
[ZCAP_NET_ADMIN] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){PRIV_SYS_NET_CONFIG},
|
||||
},
|
||||
[ZCAP_NET_ADMIN] =
|
||||
{
|
||||
1, (pvalue_t[]){PRIV_SYS_NET_CONFIG},
|
||||
},
|
||||
#endif
|
||||
[ZCAP_NET_RAW] =
|
||||
{
|
||||
2,
|
||||
(pvalue_t[]){PRIV_NET_RAWACCESS, PRIV_NET_ICMPACCESS},
|
||||
},
|
||||
[ZCAP_CHROOT] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){PRIV_PROC_CHROOT},
|
||||
},
|
||||
[ZCAP_NICE] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){PRIV_PROC_PRIOCNTL},
|
||||
},
|
||||
[ZCAP_PTRACE] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){PRIV_PROC_SESSION},
|
||||
},
|
||||
[ZCAP_DAC_OVERRIDE] =
|
||||
{
|
||||
5,
|
||||
(pvalue_t[]){PRIV_FILE_DAC_EXECUTE, PRIV_FILE_DAC_READ,
|
||||
PRIV_FILE_DAC_SEARCH, PRIV_FILE_DAC_WRITE,
|
||||
PRIV_FILE_DAC_SEARCH},
|
||||
},
|
||||
[ZCAP_READ_SEARCH] =
|
||||
{
|
||||
2,
|
||||
(pvalue_t[]){PRIV_FILE_DAC_SEARCH, PRIV_FILE_DAC_READ},
|
||||
},
|
||||
[ZCAP_SYS_ADMIN] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){PRIV_SYS_ADMIN},
|
||||
},
|
||||
[ZCAP_FOWNER] =
|
||||
{
|
||||
1,
|
||||
(pvalue_t[]){PRIV_FILE_OWNER},
|
||||
},
|
||||
[ZCAP_NET_RAW] =
|
||||
{
|
||||
2, (pvalue_t[]){PRIV_NET_RAWACCESS,
|
||||
PRIV_NET_ICMPACCESS},
|
||||
},
|
||||
[ZCAP_CHROOT] =
|
||||
{
|
||||
1, (pvalue_t[]){PRIV_PROC_CHROOT},
|
||||
},
|
||||
[ZCAP_NICE] =
|
||||
{
|
||||
1, (pvalue_t[]){PRIV_PROC_PRIOCNTL},
|
||||
},
|
||||
[ZCAP_PTRACE] =
|
||||
{
|
||||
1, (pvalue_t[]){PRIV_PROC_SESSION},
|
||||
},
|
||||
[ZCAP_DAC_OVERRIDE] =
|
||||
{
|
||||
5, (pvalue_t[]){PRIV_FILE_DAC_EXECUTE,
|
||||
PRIV_FILE_DAC_READ,
|
||||
PRIV_FILE_DAC_SEARCH,
|
||||
PRIV_FILE_DAC_WRITE,
|
||||
PRIV_FILE_DAC_SEARCH},
|
||||
},
|
||||
[ZCAP_READ_SEARCH] =
|
||||
{
|
||||
2, (pvalue_t[]){PRIV_FILE_DAC_SEARCH,
|
||||
PRIV_FILE_DAC_READ},
|
||||
},
|
||||
[ZCAP_SYS_ADMIN] =
|
||||
{
|
||||
1, (pvalue_t[]){PRIV_SYS_ADMIN},
|
||||
},
|
||||
[ZCAP_FOWNER] =
|
||||
{
|
||||
1, (pvalue_t[]){PRIV_FILE_OWNER},
|
||||
},
|
||||
#endif /* HAVE_SOLARIS_CAPABILITIES */
|
||||
};
|
||||
|
||||
@ -785,7 +767,7 @@ void zprivs_init(struct zebra_privs_t *zprivs)
|
||||
|
||||
if (zprivs->vty_group)
|
||||
/* Add the vty_group to the supplementary groups so it can be chowned to
|
||||
*/
|
||||
*/
|
||||
{
|
||||
if (zprivs_state.vtygrp == (gid_t)-1) {
|
||||
fprintf(stderr,
|
||||
|
@ -1232,9 +1232,8 @@ int route_map_delete_match(struct route_map_index *index,
|
||||
return 1;
|
||||
|
||||
for (rule = index->match_list.head; rule; rule = rule->next)
|
||||
if (rule->cmd == cmd
|
||||
&& (rulecmp(rule->rule_str, match_arg) == 0
|
||||
|| match_arg == NULL)) {
|
||||
if (rule->cmd == cmd && (rulecmp(rule->rule_str, match_arg) == 0
|
||||
|| match_arg == NULL)) {
|
||||
route_map_rule_delete(&index->match_list, rule);
|
||||
/* Execute event hook. */
|
||||
if (route_map_master.event_hook) {
|
||||
@ -1320,9 +1319,8 @@ int route_map_delete_set(struct route_map_index *index, const char *set_name,
|
||||
return 1;
|
||||
|
||||
for (rule = index->set_list.head; rule; rule = rule->next)
|
||||
if ((rule->cmd == cmd)
|
||||
&& (rulecmp(rule->rule_str, set_arg) == 0
|
||||
|| set_arg == NULL)) {
|
||||
if ((rule->cmd == cmd) && (rulecmp(rule->rule_str, set_arg) == 0
|
||||
|| set_arg == NULL)) {
|
||||
route_map_rule_delete(&index->set_list, rule);
|
||||
/* Execute event hook. */
|
||||
if (route_map_master.event_hook) {
|
||||
|
@ -207,14 +207,14 @@ exit_handler(int signo
|
||||
,
|
||||
siginfo_t *siginfo, void *context
|
||||
#endif
|
||||
)
|
||||
)
|
||||
{
|
||||
zlog_signal(signo, "exiting..."
|
||||
#ifdef SA_SIGINFO
|
||||
,
|
||||
siginfo, program_counter(context)
|
||||
#endif
|
||||
);
|
||||
);
|
||||
_exit(128 + signo);
|
||||
}
|
||||
|
||||
@ -224,7 +224,7 @@ core_handler(int signo
|
||||
,
|
||||
siginfo_t *siginfo, void *context
|
||||
#endif
|
||||
)
|
||||
)
|
||||
{
|
||||
/* make sure we don't hang in here. default for SIGALRM is terminate.
|
||||
* - if we're in backtrace for more than a second, abort. */
|
||||
@ -243,7 +243,7 @@ core_handler(int signo
|
||||
,
|
||||
siginfo, program_counter(context)
|
||||
#endif
|
||||
);
|
||||
);
|
||||
/* dump memory stats on core */
|
||||
log_memstats_stderr("core_handler");
|
||||
abort();
|
||||
@ -290,7 +290,7 @@ static void trap_default_signals(void)
|
||||
,
|
||||
siginfo_t *info, void *context
|
||||
#endif
|
||||
);
|
||||
);
|
||||
} sigmap[] = {
|
||||
{core_signals, array_size(core_signals), core_handler},
|
||||
{exit_signals, array_size(exit_signals), exit_handler},
|
||||
|
77
lib/smux.c
77
lib/smux.c
@ -210,25 +210,22 @@ static void smux_getresp_send(oid objid[], size_t objid_len, long reqid,
|
||||
ptr = asn_build_sequence(ptr, &len, (u_char)SMUX_GETRSP, 0);
|
||||
h1e = ptr;
|
||||
|
||||
ptr = asn_build_int(
|
||||
ptr, &len,
|
||||
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), &reqid,
|
||||
sizeof(reqid));
|
||||
ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
|
||||
| ASN_INTEGER),
|
||||
&reqid, sizeof(reqid));
|
||||
|
||||
if (debug_smux)
|
||||
zlog_debug("SMUX GETRSP errstat: %ld", errstat);
|
||||
|
||||
ptr = asn_build_int(
|
||||
ptr, &len,
|
||||
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), &errstat,
|
||||
sizeof(errstat));
|
||||
ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
|
||||
| ASN_INTEGER),
|
||||
&errstat, sizeof(errstat));
|
||||
if (debug_smux)
|
||||
zlog_debug("SMUX GETRSP errindex: %ld", errindex);
|
||||
|
||||
ptr = asn_build_int(
|
||||
ptr, &len,
|
||||
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
|
||||
&errindex, sizeof(errindex));
|
||||
ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
|
||||
| ASN_INTEGER),
|
||||
&errindex, sizeof(errindex));
|
||||
|
||||
h2 = ptr;
|
||||
/* Place holder h2 for one variable */
|
||||
@ -887,28 +884,24 @@ static int smux_open(int sock)
|
||||
|
||||
/* SMUX Open. */
|
||||
version = 0;
|
||||
ptr = asn_build_int(
|
||||
ptr, &len,
|
||||
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER), &version,
|
||||
sizeof(version));
|
||||
ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
|
||||
| ASN_INTEGER),
|
||||
&version, sizeof(version));
|
||||
|
||||
/* SMUX connection oid. */
|
||||
ptr = asn_build_objid(
|
||||
ptr, &len,
|
||||
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID),
|
||||
smux_oid, smux_oid_len);
|
||||
ptr = asn_build_objid(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
|
||||
| ASN_OBJECT_ID),
|
||||
smux_oid, smux_oid_len);
|
||||
|
||||
/* SMUX connection description. */
|
||||
ptr = asn_build_string(
|
||||
ptr, &len,
|
||||
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR),
|
||||
(const u_char *)progname, strlen(progname));
|
||||
ptr = asn_build_string(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
|
||||
| ASN_OCTET_STR),
|
||||
(const u_char *)progname, strlen(progname));
|
||||
|
||||
/* SMUX connection password. */
|
||||
ptr = asn_build_string(
|
||||
ptr, &len,
|
||||
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OCTET_STR),
|
||||
(u_char *)smux_passwd, strlen(smux_passwd));
|
||||
ptr = asn_build_string(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
|
||||
| ASN_OCTET_STR),
|
||||
(u_char *)smux_passwd, strlen(smux_passwd));
|
||||
|
||||
/* Fill in real SMUX header. We exclude ASN header size (2). */
|
||||
len = BUFSIZ;
|
||||
@ -948,31 +941,27 @@ int smux_trap(struct variable *vp, size_t vp_len, const oid *ename,
|
||||
ptr = asn_build_header(ptr, &len, (u_char)SMUX_TRAP, 0);
|
||||
|
||||
/* Sub agent enterprise oid. */
|
||||
ptr = asn_build_objid(
|
||||
ptr, &len,
|
||||
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_OBJECT_ID),
|
||||
smux_oid, smux_oid_len);
|
||||
ptr = asn_build_objid(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
|
||||
| ASN_OBJECT_ID),
|
||||
smux_oid, smux_oid_len);
|
||||
|
||||
/* IP address. */
|
||||
addr.s_addr = 0;
|
||||
ptr = asn_build_string(
|
||||
ptr, &len,
|
||||
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_IPADDRESS),
|
||||
(u_char *)&addr, sizeof(addr));
|
||||
ptr = asn_build_string(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
|
||||
| ASN_IPADDRESS),
|
||||
(u_char *)&addr, sizeof(addr));
|
||||
|
||||
/* Generic trap integer. */
|
||||
val = SNMP_TRAP_ENTERPRISESPECIFIC;
|
||||
ptr = asn_build_int(
|
||||
ptr, &len,
|
||||
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
|
||||
(long *)&val, sizeof(val));
|
||||
ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
|
||||
| ASN_INTEGER),
|
||||
(long *)&val, sizeof(val));
|
||||
|
||||
/* Specific trap integer. */
|
||||
val = sptrap;
|
||||
ptr = asn_build_int(
|
||||
ptr, &len,
|
||||
(u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE | ASN_INTEGER),
|
||||
(long *)&val, sizeof(val));
|
||||
ptr = asn_build_int(ptr, &len, (u_char)(ASN_UNIVERSAL | ASN_PRIMITIVE
|
||||
| ASN_INTEGER),
|
||||
(long *)&val, sizeof(val));
|
||||
|
||||
/* Timeticks timestamp. */
|
||||
val = 0;
|
||||
|
@ -261,9 +261,8 @@ int setsockopt_ipv4_multicast(int sock, int optname, struct in_addr if_addr,
|
||||
zlog_info(
|
||||
"setsockopt_ipv4_multicast attempting to drop and "
|
||||
"re-add (fd %d, mcast %s, ifindex %u)",
|
||||
sock,
|
||||
inet_ntop(AF_INET, &mreqn.imr_multiaddr, buf[0],
|
||||
sizeof(buf[0])),
|
||||
sock, inet_ntop(AF_INET, &mreqn.imr_multiaddr, buf[0],
|
||||
sizeof(buf[0])),
|
||||
ifindex);
|
||||
setsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP, (void *)&mreqn,
|
||||
sizeof(mreqn));
|
||||
@ -304,9 +303,8 @@ int setsockopt_ipv4_multicast(int sock, int optname, struct in_addr if_addr,
|
||||
zlog_info(
|
||||
"setsockopt_ipv4_multicast attempting to drop and "
|
||||
"re-add (fd %d, mcast %s, ifindex %u)",
|
||||
sock,
|
||||
inet_ntop(AF_INET, &mreq.imr_multiaddr, buf[0],
|
||||
sizeof(buf[0])),
|
||||
sock, inet_ntop(AF_INET, &mreq.imr_multiaddr, buf[0],
|
||||
sizeof(buf[0])),
|
||||
ifindex);
|
||||
setsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP, (void *)&mreq,
|
||||
sizeof(mreq));
|
||||
|
@ -2822,9 +2822,7 @@ static int vty_config_write(struct vty *vty)
|
||||
}
|
||||
|
||||
struct cmd_node vty_node = {
|
||||
VTY_NODE,
|
||||
"%s(config-line)# ",
|
||||
1,
|
||||
VTY_NODE, "%s(config-line)# ", 1,
|
||||
};
|
||||
|
||||
/* Reset all VTY status. */
|
||||
|
@ -34,10 +34,9 @@ extern void _zlog_assert_failed(const char *assertion, const char *file,
|
||||
#endif
|
||||
|
||||
#define zassert(EX) \
|
||||
((void)((EX) ? 0 \
|
||||
: (_zlog_assert_failed(#EX, __FILE__, __LINE__, \
|
||||
__ASSERT_FUNCTION), \
|
||||
0)))
|
||||
((void)((EX) ? 0 : (_zlog_assert_failed(#EX, __FILE__, __LINE__, \
|
||||
__ASSERT_FUNCTION), \
|
||||
0)))
|
||||
|
||||
#undef assert
|
||||
#define assert(EX) zassert(EX)
|
||||
|
@ -1480,9 +1480,8 @@ struct connected *zebra_interface_address_read(int type, struct stream *s,
|
||||
zlog_warn(
|
||||
"warning: interface %s address %s "
|
||||
"with peer flag set, but no peer address!",
|
||||
ifp->name,
|
||||
prefix2str(ifc->address, buf,
|
||||
sizeof buf));
|
||||
ifp->name, prefix2str(ifc->address, buf,
|
||||
sizeof buf));
|
||||
UNSET_FLAG(ifc->flags, ZEBRA_IFA_PEER);
|
||||
}
|
||||
}
|
||||
|
@ -848,9 +848,7 @@ static route_map_result_t ospf6_routemap_rule_match_tag(void *rule,
|
||||
}
|
||||
|
||||
static struct route_map_rule_cmd ospf6_routemap_rule_match_tag_cmd = {
|
||||
"tag",
|
||||
ospf6_routemap_rule_match_tag,
|
||||
route_map_rule_tag_compile,
|
||||
"tag", ospf6_routemap_rule_match_tag, route_map_rule_tag_compile,
|
||||
route_map_rule_tag_free,
|
||||
};
|
||||
|
||||
@ -885,8 +883,7 @@ static void ospf6_routemap_rule_set_metric_type_free(void *rule)
|
||||
}
|
||||
|
||||
struct route_map_rule_cmd ospf6_routemap_rule_set_metric_type_cmd = {
|
||||
"metric-type",
|
||||
ospf6_routemap_rule_set_metric_type,
|
||||
"metric-type", ospf6_routemap_rule_set_metric_type,
|
||||
ospf6_routemap_rule_set_metric_type_compile,
|
||||
ospf6_routemap_rule_set_metric_type_free,
|
||||
};
|
||||
@ -921,8 +918,7 @@ static void ospf6_routemap_rule_set_metric_free(void *rule)
|
||||
}
|
||||
|
||||
struct route_map_rule_cmd ospf6_routemap_rule_set_metric_cmd = {
|
||||
"metric",
|
||||
ospf6_routemap_rule_set_metric,
|
||||
"metric", ospf6_routemap_rule_set_metric,
|
||||
ospf6_routemap_rule_set_metric_compile,
|
||||
ospf6_routemap_rule_set_metric_free,
|
||||
};
|
||||
@ -960,8 +956,7 @@ static void ospf6_routemap_rule_set_forwarding_free(void *rule)
|
||||
}
|
||||
|
||||
struct route_map_rule_cmd ospf6_routemap_rule_set_forwarding_cmd = {
|
||||
"forwarding-address",
|
||||
ospf6_routemap_rule_set_forwarding,
|
||||
"forwarding-address", ospf6_routemap_rule_set_forwarding,
|
||||
ospf6_routemap_rule_set_forwarding_compile,
|
||||
ospf6_routemap_rule_set_forwarding_free,
|
||||
};
|
||||
@ -983,9 +978,7 @@ static route_map_result_t ospf6_routemap_rule_set_tag(void *rule,
|
||||
}
|
||||
|
||||
static struct route_map_rule_cmd ospf6_routemap_rule_set_tag_cmd = {
|
||||
"tag",
|
||||
ospf6_routemap_rule_set_tag,
|
||||
route_map_rule_tag_compile,
|
||||
"tag", ospf6_routemap_rule_set_tag, route_map_rule_tag_compile,
|
||||
route_map_rule_tag_free,
|
||||
};
|
||||
|
||||
|
@ -1402,10 +1402,9 @@ DEFUN (ipv6_ospf6_priority,
|
||||
|
||||
oi->priority = strtol(argv[idx_number]->arg, NULL, 10);
|
||||
|
||||
if (oi->area
|
||||
&& (oi->state == OSPF6_INTERFACE_DROTHER
|
||||
|| oi->state == OSPF6_INTERFACE_BDR
|
||||
|| oi->state == OSPF6_INTERFACE_DR))
|
||||
if (oi->area && (oi->state == OSPF6_INTERFACE_DROTHER
|
||||
|| oi->state == OSPF6_INTERFACE_BDR
|
||||
|| oi->state == OSPF6_INTERFACE_DR))
|
||||
ospf6_interface_state_change(dr_election(oi), oi);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
|
@ -73,9 +73,8 @@ static char *ospf6_router_lsa_get_nbr_id(struct ospf6_lsa *lsa, char *buf,
|
||||
|
||||
lsdesc = (struct ospf6_router_lsdesc
|
||||
*)(start
|
||||
+ pos
|
||||
* (sizeof(struct
|
||||
ospf6_router_lsdesc)));
|
||||
+ pos * (sizeof(struct
|
||||
ospf6_router_lsdesc)));
|
||||
if ((char *)lsdesc < end) {
|
||||
if (buf && (buflen > INET_ADDRSTRLEN * 2)) {
|
||||
inet_ntop(AF_INET,
|
||||
|
@ -869,7 +869,7 @@ static unsigned ospf6_prefixes_examin(
|
||||
unsigned length,
|
||||
const u_int32_t req_num_pfxs /* always compared with the actual number
|
||||
of prefixes */
|
||||
)
|
||||
)
|
||||
{
|
||||
u_char requested_pfx_bytes;
|
||||
u_int32_t real_num_pfxs = 0;
|
||||
@ -1066,7 +1066,7 @@ static unsigned ospf6_lsa_examin(struct ospf6_lsa_header *lsah,
|
||||
lsalen - OSPF6_LSA_HEADER_SIZE
|
||||
- OSPF6_LINK_LSA_MIN_SIZE,
|
||||
ntohl(link_lsa->prefix_num) /* 32 bits */
|
||||
);
|
||||
);
|
||||
case OSPF6_LSTYPE_INTRA_PREFIX:
|
||||
/* RFC5340 A.4.10, LSA header + OSPF6_INTRA_PREFIX_LSA_MIN_SIZE
|
||||
bytes
|
||||
@ -1084,7 +1084,7 @@ static unsigned ospf6_lsa_examin(struct ospf6_lsa_header *lsah,
|
||||
lsalen - OSPF6_LSA_HEADER_SIZE
|
||||
- OSPF6_INTRA_PREFIX_LSA_MIN_SIZE,
|
||||
ntohs(intra_prefix_lsa->prefix_num) /* 16 bits */
|
||||
);
|
||||
);
|
||||
}
|
||||
/* No additional validation is possible for unknown LSA types, which are
|
||||
themselves valid in OPSFv3, hence the default decision is to accept.
|
||||
@ -1270,7 +1270,7 @@ static unsigned ospf6_packet_examin(struct ospf6_header *oh,
|
||||
+ OSPF6_LS_UPD_MIN_SIZE),
|
||||
bytesonwire - OSPF6_HEADER_SIZE - OSPF6_LS_UPD_MIN_SIZE,
|
||||
0, ntohl(lsupd->lsa_number) /* 32 bits */
|
||||
);
|
||||
);
|
||||
break;
|
||||
case OSPF6_MESSAGE_TYPE_LSACK:
|
||||
/* RFC5340 A.3.6, packet header + N>=0 header-only LSAs. */
|
||||
|
@ -347,8 +347,7 @@ static int config_write_ospf6_zebra(struct vty *vty)
|
||||
|
||||
/* Zebra node structure. */
|
||||
static struct cmd_node zebra_node = {
|
||||
ZEBRA_NODE,
|
||||
"%s(config-zebra)# ",
|
||||
ZEBRA_NODE, "%s(config-zebra)# ",
|
||||
};
|
||||
|
||||
#define ADD 0
|
||||
|
@ -1034,20 +1034,22 @@ static void ospf_abr_process_network_rt(struct ospf *ospf,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (or->path_type == OSPF_PATH_INTRA_AREA
|
||||
&& !ospf_abr_should_announce(
|
||||
ospf, (struct prefix_ipv4 *)&rn->p,
|
||||
or)) {
|
||||
if (
|
||||
or->path_type == OSPF_PATH_INTRA_AREA
|
||||
&& !ospf_abr_should_announce(
|
||||
ospf, (struct prefix_ipv4 *)&rn->p,
|
||||
or)) {
|
||||
if (IS_DEBUG_OSPF_EVENT)
|
||||
zlog_debug(
|
||||
"ospf_abr_process_network_rt(): denied by export-list");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (or->path_type == OSPF_PATH_INTRA_AREA
|
||||
&& !ospf_abr_plist_out_check(
|
||||
area, or,
|
||||
(struct prefix_ipv4 *)&rn->p)) {
|
||||
if (
|
||||
or->path_type == OSPF_PATH_INTRA_AREA
|
||||
&& !ospf_abr_plist_out_check(
|
||||
area, or,
|
||||
(struct prefix_ipv4 *)&rn->p)) {
|
||||
if (IS_DEBUG_OSPF_EVENT)
|
||||
zlog_debug(
|
||||
"ospf_abr_process_network_rt(): denied by prefix-list");
|
||||
@ -1269,9 +1271,10 @@ static void ospf_abr_process_router_rt(struct ospf *ospf,
|
||||
continue;
|
||||
}
|
||||
|
||||
if (or->path_type == OSPF_PATH_INTER_AREA
|
||||
&& !OSPF_IS_AREA_ID_BACKBONE(
|
||||
or->u.std.area_id)) {
|
||||
if (
|
||||
or->path_type == OSPF_PATH_INTER_AREA
|
||||
&& !OSPF_IS_AREA_ID_BACKBONE(
|
||||
or->u.std.area_id)) {
|
||||
if (IS_DEBUG_OSPF_EVENT)
|
||||
zlog_debug(
|
||||
"ospf_abr_process_router_rt(): "
|
||||
|
@ -131,60 +131,46 @@ const char *ospf_api_typename(int msgtype)
|
||||
{
|
||||
struct nametab NameTab[] = {
|
||||
{
|
||||
MSG_REGISTER_OPAQUETYPE,
|
||||
"Register opaque-type",
|
||||
MSG_REGISTER_OPAQUETYPE, "Register opaque-type",
|
||||
},
|
||||
{
|
||||
MSG_UNREGISTER_OPAQUETYPE,
|
||||
"Unregister opaque-type",
|
||||
MSG_UNREGISTER_OPAQUETYPE, "Unregister opaque-type",
|
||||
},
|
||||
{
|
||||
MSG_REGISTER_EVENT,
|
||||
"Register event",
|
||||
MSG_REGISTER_EVENT, "Register event",
|
||||
},
|
||||
{
|
||||
MSG_SYNC_LSDB,
|
||||
"Sync LSDB",
|
||||
MSG_SYNC_LSDB, "Sync LSDB",
|
||||
},
|
||||
{
|
||||
MSG_ORIGINATE_REQUEST,
|
||||
"Originate request",
|
||||
MSG_ORIGINATE_REQUEST, "Originate request",
|
||||
},
|
||||
{
|
||||
MSG_DELETE_REQUEST,
|
||||
"Delete request",
|
||||
MSG_DELETE_REQUEST, "Delete request",
|
||||
},
|
||||
{
|
||||
MSG_REPLY,
|
||||
"Reply",
|
||||
MSG_REPLY, "Reply",
|
||||
},
|
||||
{
|
||||
MSG_READY_NOTIFY,
|
||||
"Ready notify",
|
||||
MSG_READY_NOTIFY, "Ready notify",
|
||||
},
|
||||
{
|
||||
MSG_LSA_UPDATE_NOTIFY,
|
||||
"LSA update notify",
|
||||
MSG_LSA_UPDATE_NOTIFY, "LSA update notify",
|
||||
},
|
||||
{
|
||||
MSG_LSA_DELETE_NOTIFY,
|
||||
"LSA delete notify",
|
||||
MSG_LSA_DELETE_NOTIFY, "LSA delete notify",
|
||||
},
|
||||
{
|
||||
MSG_NEW_IF,
|
||||
"New interface",
|
||||
MSG_NEW_IF, "New interface",
|
||||
},
|
||||
{
|
||||
MSG_DEL_IF,
|
||||
"Del interface",
|
||||
MSG_DEL_IF, "Del interface",
|
||||
},
|
||||
{
|
||||
MSG_ISM_CHANGE,
|
||||
"ISM change",
|
||||
MSG_ISM_CHANGE, "ISM change",
|
||||
},
|
||||
{
|
||||
MSG_NSM_CHANGE,
|
||||
"NSM change",
|
||||
MSG_NSM_CHANGE, "NSM change",
|
||||
},
|
||||
};
|
||||
|
||||
@ -205,48 +191,38 @@ const char *ospf_api_errname(int errcode)
|
||||
{
|
||||
struct nametab NameTab[] = {
|
||||
{
|
||||
OSPF_API_OK,
|
||||
"OK",
|
||||
OSPF_API_OK, "OK",
|
||||
},
|
||||
{
|
||||
OSPF_API_NOSUCHINTERFACE,
|
||||
"No such interface",
|
||||
OSPF_API_NOSUCHINTERFACE, "No such interface",
|
||||
},
|
||||
{
|
||||
OSPF_API_NOSUCHAREA,
|
||||
"No such area",
|
||||
OSPF_API_NOSUCHAREA, "No such area",
|
||||
},
|
||||
{
|
||||
OSPF_API_NOSUCHLSA,
|
||||
"No such LSA",
|
||||
OSPF_API_NOSUCHLSA, "No such LSA",
|
||||
},
|
||||
{
|
||||
OSPF_API_ILLEGALLSATYPE,
|
||||
"Illegal LSA type",
|
||||
OSPF_API_ILLEGALLSATYPE, "Illegal LSA type",
|
||||
},
|
||||
{
|
||||
OSPF_API_OPAQUETYPEINUSE,
|
||||
"Opaque type in use",
|
||||
OSPF_API_OPAQUETYPEINUSE, "Opaque type in use",
|
||||
},
|
||||
{
|
||||
OSPF_API_OPAQUETYPENOTREGISTERED,
|
||||
"Opaque type not registered",
|
||||
},
|
||||
{
|
||||
OSPF_API_NOTREADY,
|
||||
"Not ready",
|
||||
OSPF_API_NOTREADY, "Not ready",
|
||||
},
|
||||
{
|
||||
OSPF_API_NOMEMORY,
|
||||
"No memory",
|
||||
OSPF_API_NOMEMORY, "No memory",
|
||||
},
|
||||
{
|
||||
OSPF_API_ERROR,
|
||||
"Other error",
|
||||
OSPF_API_ERROR, "Other error",
|
||||
},
|
||||
{
|
||||
OSPF_API_UNDEF,
|
||||
"Undefined",
|
||||
OSPF_API_UNDEF, "Undefined",
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -1236,10 +1236,10 @@ static int apiserver_sync_callback(struct ospf_lsa *lsa, void *p_arg,
|
||||
zlog_warn(
|
||||
"apiserver_sync_callback: new_msg_update failed");
|
||||
#ifdef NOTYET
|
||||
/* Cannot allocate new message. What should we do? */
|
||||
/* ospf_apiserver_free (apiserv);*/ /* Do nothing
|
||||
here XXX
|
||||
*/
|
||||
/* Cannot allocate new message. What should we do? */
|
||||
/* ospf_apiserver_free (apiserv);*/ /* Do nothing
|
||||
here XXX
|
||||
*/
|
||||
#endif
|
||||
goto out;
|
||||
}
|
||||
|
@ -217,7 +217,7 @@ static void ospf_process_self_originated_lsa(struct ospf *ospf,
|
||||
break;
|
||||
case OSPF_OPAQUE_AS_LSA:
|
||||
ospf_opaque_lsa_refresh(new);
|
||||
/* Reconsideration may needed. */ /* XXX */
|
||||
/* Reconsideration may needed. */ /* XXX */
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -281,7 +281,7 @@ int ospf_flood(struct ospf *ospf, struct ospf_neighbor *nbr,
|
||||
"LSA[Flooding]: Got a self-originated LSA, "
|
||||
"while local one is initial instance.");
|
||||
; /* Accept this LSA for quick LSDB resynchronization.
|
||||
*/
|
||||
*/
|
||||
} else if (monotime_since(¤t->tv_recv, NULL)
|
||||
< ospf->min_ls_arrival * 1000LL) {
|
||||
if (IS_DEBUG_OSPF_EVENT)
|
||||
|
@ -361,8 +361,10 @@ static void ospf_update_network_route(struct ospf *ospf, struct route_table *rt,
|
||||
}
|
||||
|
||||
if (ospf->abr_type == OSPF_ABR_SHORTCUT) {
|
||||
if (or->path_type == OSPF_PATH_INTRA_AREA
|
||||
&& !OSPF_IS_AREA_ID_BACKBONE(or->u.std.area_id)) {
|
||||
if (
|
||||
or->path_type == OSPF_PATH_INTRA_AREA
|
||||
&& !OSPF_IS_AREA_ID_BACKBONE(
|
||||
or->u.std.area_id)) {
|
||||
if (IS_DEBUG_OSPF_EVENT)
|
||||
zlog_debug(
|
||||
"ospf_update_network_route(): Shortcut: "
|
||||
@ -648,7 +650,7 @@ void ospf_ia_routing(struct ospf *ospf, struct route_table *rt,
|
||||
OSPF_EXAMINE_TRANSIT_SUMMARIES_ALL(
|
||||
area, rt, rtrs);
|
||||
} else { /* No active BB connection--consider all areas
|
||||
*/
|
||||
*/
|
||||
if (IS_DEBUG_OSPF_EVENT)
|
||||
zlog_debug(
|
||||
"ospf_ia_routing(): "
|
||||
|
@ -428,9 +428,8 @@ struct ospf_interface *ospf_if_lookup_recv_if(struct ospf *ospf,
|
||||
match = oi;
|
||||
else if (prefix_match(CONNECTED_PREFIX(oi->connected),
|
||||
(struct prefix *)&addr)) {
|
||||
if ((match == NULL)
|
||||
|| (match->address->prefixlen
|
||||
< oi->address->prefixlen))
|
||||
if ((match == NULL) || (match->address->prefixlen
|
||||
< oi->address->prefixlen))
|
||||
match = oi;
|
||||
}
|
||||
}
|
||||
|
@ -429,8 +429,8 @@ static char link_info_set(struct stream *s, struct in_addr id,
|
||||
*
|
||||
* Simpler just to subtract OSPF_MAX_LSA_SIZE though.
|
||||
*/
|
||||
ret = stream_resize(s, OSPF_MAX_PACKET_SIZE
|
||||
- OSPF_MAX_LSA_SIZE);
|
||||
ret = stream_resize(
|
||||
s, OSPF_MAX_PACKET_SIZE - OSPF_MAX_LSA_SIZE);
|
||||
}
|
||||
|
||||
if (ret == OSPF_MAX_LSA_SIZE) {
|
||||
@ -519,9 +519,8 @@ static int lsa_link_broadcast_set(struct stream *s, struct ospf_interface *oi)
|
||||
|
||||
dr = ospf_nbr_lookup_by_addr(oi->nbrs, &DR(oi));
|
||||
/* Describe Type 2 link. */
|
||||
if (dr
|
||||
&& (dr->state == NSM_Full
|
||||
|| IPV4_ADDR_SAME(&oi->address->u.prefix4, &DR(oi)))
|
||||
if (dr && (dr->state == NSM_Full
|
||||
|| IPV4_ADDR_SAME(&oi->address->u.prefix4, &DR(oi)))
|
||||
&& ospf_nbr_count(oi, NSM_Full) > 0) {
|
||||
if (IS_DEBUG_OSPF(lsa, LSA_GENERATE))
|
||||
zlog_debug(
|
||||
@ -3418,7 +3417,7 @@ struct in_addr ospf_lsa_unique_id(struct ospf *ospf, struct ospf_lsdb *lsdb,
|
||||
return id;
|
||||
}
|
||||
/* Masklen differs, then apply wildcard mask to Link State ID.
|
||||
*/
|
||||
*/
|
||||
else {
|
||||
masklen2ip(p->prefixlen, &mask);
|
||||
|
||||
|
@ -55,9 +55,7 @@
|
||||
|
||||
/* ospfd privileges */
|
||||
zebra_capabilities_t _caps_p[] = {
|
||||
ZCAP_NET_RAW,
|
||||
ZCAP_BIND,
|
||||
ZCAP_NET_ADMIN,
|
||||
ZCAP_NET_RAW, ZCAP_BIND, ZCAP_NET_ADMIN,
|
||||
};
|
||||
|
||||
struct zebra_privs_t ospfd_privs = {
|
||||
|
@ -460,8 +460,9 @@ struct ospf_neighbor *ospf_nbr_get(struct ospf_interface *oi,
|
||||
|
||||
if (oi->type == OSPF_IFTYPE_VIRTUALLINK
|
||||
|| oi->type == OSPF_IFTYPE_POINTOPOINT)
|
||||
key.u.prefix4 = ospfh->router_id; /* index vlink and ptp nbrs by
|
||||
router-id */
|
||||
key.u.prefix4 =
|
||||
ospfh->router_id; /* index vlink and ptp nbrs by
|
||||
router-id */
|
||||
else
|
||||
key.u.prefix4 = iph->ip_src;
|
||||
|
||||
|
@ -1358,11 +1358,12 @@ void ospf_opaque_lsa_originate_schedule(struct ospf_interface *oi, int *delay0)
|
||||
* list_isempty (oipt->id_list)
|
||||
* not being empty.
|
||||
*/
|
||||
if (oipt->t_opaque_lsa_self
|
||||
!= NULL /* Waiting for a thread call. */
|
||||
|| oipt->status == PROC_SUSPEND) /* Cannot
|
||||
originate
|
||||
now. */
|
||||
if (
|
||||
oipt->t_opaque_lsa_self
|
||||
!= NULL /* Waiting for a thread call. */
|
||||
|| oipt->status == PROC_SUSPEND) /* Cannot
|
||||
originate
|
||||
now. */
|
||||
continue;
|
||||
|
||||
ospf_opaque_lsa_reoriginate_schedule(
|
||||
@ -1383,11 +1384,12 @@ void ospf_opaque_lsa_originate_schedule(struct ospf_interface *oi, int *delay0)
|
||||
* list_isempty (oipt->id_list)
|
||||
* not being empty.
|
||||
*/
|
||||
if (oipt->t_opaque_lsa_self
|
||||
!= NULL /* Waiting for a thread call. */
|
||||
|| oipt->status == PROC_SUSPEND) /* Cannot
|
||||
originate
|
||||
now. */
|
||||
if (
|
||||
oipt->t_opaque_lsa_self
|
||||
!= NULL /* Waiting for a thread call. */
|
||||
|| oipt->status == PROC_SUSPEND) /* Cannot
|
||||
originate
|
||||
now. */
|
||||
continue;
|
||||
|
||||
ospf_opaque_lsa_reoriginate_schedule(
|
||||
@ -1408,11 +1410,12 @@ void ospf_opaque_lsa_originate_schedule(struct ospf_interface *oi, int *delay0)
|
||||
* list_isempty (oipt->id_list)
|
||||
* not being empty.
|
||||
*/
|
||||
if (oipt->t_opaque_lsa_self
|
||||
!= NULL /* Waiting for a thread call. */
|
||||
|| oipt->status == PROC_SUSPEND) /* Cannot
|
||||
originate
|
||||
now. */
|
||||
if (
|
||||
oipt->t_opaque_lsa_self
|
||||
!= NULL /* Waiting for a thread call. */
|
||||
|| oipt->status == PROC_SUSPEND) /* Cannot
|
||||
originate
|
||||
now. */
|
||||
continue;
|
||||
|
||||
ospf_opaque_lsa_reoriginate_schedule((void *)top,
|
||||
|
@ -643,9 +643,9 @@ static int ospf_write(struct thread *thread)
|
||||
#ifdef WANT_OSPF_WRITE_FRAGMENT
|
||||
static u_int16_t ipid = 0;
|
||||
u_int16_t maxdatasize;
|
||||
#endif /* WANT_OSPF_WRITE_FRAGMENT */
|
||||
/* $FRR indent$ */
|
||||
/* clang-format off */
|
||||
#endif /* WANT_OSPF_WRITE_FRAGMENT */
|
||||
/* $FRR indent$ */
|
||||
/* clang-format off */
|
||||
#define OSPF_WRITE_IPHL_SHIFT 2
|
||||
int pkt_count = 0;
|
||||
|
||||
@ -2436,15 +2436,15 @@ static int ospf_check_auth(struct ospf_interface *oi, struct ospf_header *ospfh)
|
||||
return 0;
|
||||
}
|
||||
/* only MD5 crypto method can pass ospf_packet_examin() */
|
||||
if (NULL
|
||||
== (ck = listgetdata(listtail(
|
||||
OSPF_IF_PARAM(oi, auth_crypt))))
|
||||
|| ospfh->u.crypt.key_id != ck->key_id ||
|
||||
/* Condition above uses the last key ID on the list,
|
||||
which is
|
||||
different from what ospf_crypt_key_lookup() does. A
|
||||
bug? */
|
||||
!ospf_check_md5_digest(oi, ospfh)) {
|
||||
if (
|
||||
NULL == (ck = listgetdata(listtail(
|
||||
OSPF_IF_PARAM(oi, auth_crypt))))
|
||||
|| ospfh->u.crypt.key_id != ck->key_id ||
|
||||
/* Condition above uses the last key ID on the list,
|
||||
which is
|
||||
different from what ospf_crypt_key_lookup() does. A
|
||||
bug? */
|
||||
!ospf_check_md5_digest(oi, ospfh)) {
|
||||
if (IS_DEBUG_OSPF_PACKET(ospfh->type - 1, RECV))
|
||||
zlog_warn("interface %s: MD5 auth failed",
|
||||
IF_NAME(oi));
|
||||
@ -2548,7 +2548,7 @@ static unsigned ospf_lsa_examin(struct lsa_header *lsah, const u_int16_t lsalen,
|
||||
header, "flags",
|
||||
0, "# links" */
|
||||
ntohs(rlsa->links) /* 16 bits */
|
||||
);
|
||||
);
|
||||
break;
|
||||
case OSPF_AS_EXTERNAL_LSA:
|
||||
/* RFC2328 A.4.5, LSA header + 4 bytes followed by N>=1 12-bytes long
|
||||
@ -2772,7 +2772,7 @@ static unsigned ospf_packet_examin(struct ospf_header *oh,
|
||||
bytesdeclared - OSPF_HEADER_SIZE - OSPF_LS_UPD_MIN_SIZE,
|
||||
0, /* full LSAs */
|
||||
ntohl(lsupd->num_lsas) /* 32 bits */
|
||||
);
|
||||
);
|
||||
break;
|
||||
case OSPF_MSG_LS_ACK:
|
||||
/* RFC2328 A.3.6, packet header followed by N>=0 header-only
|
||||
@ -2888,8 +2888,8 @@ int ospf_read(struct thread *thread)
|
||||
|
||||
ospfh = (struct ospf_header *)STREAM_PNT(ibuf);
|
||||
if (MSG_OK
|
||||
!= ospf_packet_examin(ospfh, stream_get_endp(ibuf)
|
||||
- stream_get_getp(ibuf)))
|
||||
!= ospf_packet_examin(
|
||||
ospfh, stream_get_endp(ibuf) - stream_get_getp(ibuf)))
|
||||
return -1;
|
||||
/* Now it is safe to access all fields of OSPF packet header. */
|
||||
|
||||
@ -2935,9 +2935,8 @@ int ospf_read(struct thread *thread)
|
||||
* or header area is backbone but ospf_interface is not
|
||||
* check for VLINK interface
|
||||
*/
|
||||
if ((oi == NULL)
|
||||
|| (OSPF_IS_AREA_ID_BACKBONE(ospfh->area_id)
|
||||
&& !OSPF_IS_AREA_ID_BACKBONE(oi->area->area_id))) {
|
||||
if ((oi == NULL) || (OSPF_IS_AREA_ID_BACKBONE(ospfh->area_id)
|
||||
&& !OSPF_IS_AREA_ID_BACKBONE(oi->area->area_id))) {
|
||||
if ((oi = ospf_associate_packet_vl(ospf, ifp, iph, ospfh))
|
||||
== NULL) {
|
||||
if (!ospf->instance && IS_DEBUG_OSPF_EVENT)
|
||||
|
@ -229,16 +229,18 @@ static void ospf_route_delete_uniq(struct route_table *rt,
|
||||
or->path_type == OSPF_PATH_INTER_AREA) {
|
||||
if (or->type == OSPF_DESTINATION_NETWORK) {
|
||||
if (!ospf_route_exist_new_table(
|
||||
cmprt, (struct prefix_ipv4
|
||||
*)&rn->p))
|
||||
cmprt,
|
||||
(struct prefix_ipv4 *)&rn
|
||||
->p))
|
||||
ospf_zebra_delete(
|
||||
(struct prefix_ipv4
|
||||
*)&rn->p,
|
||||
or);
|
||||
} else if (or->type == OSPF_DESTINATION_DISCARD)
|
||||
if (!ospf_route_exist_new_table(
|
||||
cmprt, (struct prefix_ipv4
|
||||
*)&rn->p))
|
||||
cmprt,
|
||||
(struct prefix_ipv4 *)&rn
|
||||
->p))
|
||||
ospf_zebra_delete_discard(
|
||||
(struct prefix_ipv4
|
||||
*)&rn->p);
|
||||
|
@ -332,9 +332,7 @@ static route_map_result_t route_match_tag(void *rule, struct prefix *prefix,
|
||||
|
||||
/* Route map commands for tag matching. */
|
||||
static struct route_map_rule_cmd route_match_tag_cmd = {
|
||||
"tag",
|
||||
route_match_tag,
|
||||
route_map_rule_tag_compile,
|
||||
"tag", route_match_tag, route_map_rule_tag_compile,
|
||||
route_map_rule_tag_free,
|
||||
};
|
||||
|
||||
@ -392,9 +390,7 @@ static void route_set_metric_free(void *rule)
|
||||
|
||||
/* Set metric rule structure. */
|
||||
struct route_map_rule_cmd route_set_metric_cmd = {
|
||||
"metric",
|
||||
route_set_metric,
|
||||
route_set_metric_compile,
|
||||
"metric", route_set_metric, route_set_metric_compile,
|
||||
route_set_metric_free,
|
||||
};
|
||||
|
||||
@ -446,9 +442,7 @@ static void route_set_metric_type_free(void *rule)
|
||||
|
||||
/* Set metric rule structure. */
|
||||
struct route_map_rule_cmd route_set_metric_type_cmd = {
|
||||
"metric-type",
|
||||
route_set_metric_type,
|
||||
route_set_metric_type_compile,
|
||||
"metric-type", route_set_metric_type, route_set_metric_type_compile,
|
||||
route_set_metric_type_free,
|
||||
};
|
||||
|
||||
@ -471,9 +465,7 @@ static route_map_result_t route_set_tag(void *rule, struct prefix *prefix,
|
||||
|
||||
/* Route map commands for tag set. */
|
||||
static struct route_map_rule_cmd route_set_tag_cmd = {
|
||||
"tag",
|
||||
route_set_tag,
|
||||
route_map_rule_tag_compile,
|
||||
"tag", route_set_tag, route_map_rule_tag_compile,
|
||||
route_map_rule_tag_free,
|
||||
};
|
||||
|
||||
|
@ -872,9 +872,7 @@ static u_char *ospfStubAreaEntry(struct variable *v, oid *name, size_t *length,
|
||||
return SNMP_INTEGER(SNMP_VALID);
|
||||
break;
|
||||
case OSPFSTUBMETRICTYPE: /* 5 */
|
||||
/* OSPF Metric type. */
|
||||
/* $FRR indent$ */
|
||||
/* clang-format off */
|
||||
/* OSPF Metric type. */
|
||||
#define OSPF_ospfMetric 1
|
||||
#define OSPF_comparableCost 2
|
||||
#define OSPF_nonComparable 3
|
||||
@ -2102,8 +2100,7 @@ static struct ospf_neighbor *ospf_snmp_nbr_lookup(struct ospf *ospf,
|
||||
|
||||
for (ALL_LIST_ELEMENTS(ospf->oiflist, node, nnode, oi)) {
|
||||
for (rn = route_top(oi->nbrs); rn; rn = route_next(rn))
|
||||
if ((nbr = rn->info) != NULL
|
||||
&& nbr != oi->nbr_self
|
||||
if ((nbr = rn->info) != NULL && nbr != oi->nbr_self
|
||||
/* If EXACT match is needed, provide ALL entry found
|
||||
&& nbr->state != NSM_Down
|
||||
*/
|
||||
|
@ -290,9 +290,8 @@ static void ospf_passive_interface_default(struct ospf *ospf, u_char newval)
|
||||
ospf->passive_interface_default = newval;
|
||||
|
||||
for (ALL_LIST_ELEMENTS_RO(om->iflist, ln, ifp)) {
|
||||
if (ifp
|
||||
&& OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(ifp),
|
||||
passive_interface))
|
||||
if (ifp && OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(ifp),
|
||||
passive_interface))
|
||||
UNSET_IF_PARAM(IF_DEF_PARAMS(ifp), passive_interface);
|
||||
}
|
||||
for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, ln, oi)) {
|
||||
@ -395,9 +394,8 @@ DEFUN (ospf_passive_interface,
|
||||
for (rn = route_top(IF_OIFS(ifp)); rn; rn = route_next(rn)) {
|
||||
struct ospf_interface *oi = rn->info;
|
||||
|
||||
if (oi
|
||||
&& (OSPF_IF_PARAM(oi, passive_interface)
|
||||
== OSPF_IF_PASSIVE))
|
||||
if (oi && (OSPF_IF_PARAM(oi, passive_interface)
|
||||
== OSPF_IF_PASSIVE))
|
||||
ospf_if_set_multicast(oi);
|
||||
}
|
||||
/*
|
||||
@ -2127,8 +2125,7 @@ ALIAS(ospf_compatible_rfc1583, ospf_rfc1583_flag_cmd,
|
||||
"Enable the RFC1583Compatibility flag\n")
|
||||
|
||||
ALIAS(no_ospf_compatible_rfc1583, no_ospf_rfc1583_flag_cmd,
|
||||
"no ospf rfc1583compatibility",
|
||||
NO_STR
|
||||
"no ospf rfc1583compatibility", NO_STR
|
||||
"OSPF specific commands\n"
|
||||
"Disable the RFC1583Compatibility flag\n")
|
||||
|
||||
@ -2582,8 +2579,7 @@ DEFUN (no_ospf_write_multiplier,
|
||||
}
|
||||
|
||||
ALIAS(no_ospf_write_multiplier, no_write_multiplier_cmd,
|
||||
"no write-multiplier (1-100)",
|
||||
NO_STR
|
||||
"no write-multiplier (1-100)", NO_STR
|
||||
"Write multiplier\n"
|
||||
"Maximum number of interface serviced per write\n")
|
||||
|
||||
@ -3181,9 +3177,8 @@ static int show_ip_ospf_common(struct vty *vty, struct ospf *ospf,
|
||||
|
||||
if (use_json) {
|
||||
json_object_object_add(json, "areas", json_areas);
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else
|
||||
vty_out(vty, "\n");
|
||||
@ -3327,10 +3322,10 @@ static void show_ip_ospf_interface_sub(struct vty *vty, struct ospf *ospf,
|
||||
dstr = "Broadcast";
|
||||
|
||||
/* For Vlinks, showing the peer address is
|
||||
* probably more
|
||||
* * * * * informative than
|
||||
* the local interface that is being used
|
||||
* * * * */
|
||||
* probably more
|
||||
* * * * * informative than the local
|
||||
* interface that is being used
|
||||
* * * * */
|
||||
if (oi->type == OSPF_IFTYPE_VIRTUALLINK)
|
||||
dest = &oi->vl_data->peer_addr;
|
||||
else
|
||||
@ -3611,9 +3606,8 @@ static int show_ip_ospf_interface_common(struct vty *vty, struct ospf *ospf,
|
||||
}
|
||||
|
||||
if (use_json) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else
|
||||
vty_out(vty, "\n");
|
||||
@ -3823,9 +3817,8 @@ static int show_ip_ospf_neighbor_common(struct vty *vty, struct ospf *ospf,
|
||||
show_ip_ospf_neighbor_sub(vty, oi, json, use_json);
|
||||
|
||||
if (use_json) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else
|
||||
vty_out(vty, "\n");
|
||||
@ -3944,9 +3937,8 @@ static int show_ip_ospf_neighbor_all_common(struct vty *vty, struct ospf *ospf,
|
||||
}
|
||||
|
||||
if (use_json) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else
|
||||
vty_out(vty, "\n");
|
||||
@ -4038,9 +4030,8 @@ static int show_ip_ospf_neighbor_int_common(struct vty *vty, struct ospf *ospf,
|
||||
}
|
||||
|
||||
if (use_json) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else
|
||||
vty_out(vty, "\n");
|
||||
@ -4422,9 +4413,8 @@ static int show_ip_ospf_neighbor_id_common(struct vty *vty, struct ospf *ospf,
|
||||
}
|
||||
|
||||
if (use_json) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else
|
||||
vty_out(vty, "\n");
|
||||
@ -4512,9 +4502,8 @@ static int show_ip_ospf_neighbor_detail_common(struct vty *vty,
|
||||
}
|
||||
|
||||
if (use_json) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else
|
||||
vty_out(vty, "\n");
|
||||
@ -4611,9 +4600,8 @@ static int show_ip_ospf_neighbor_detail_all_common(struct vty *vty,
|
||||
}
|
||||
|
||||
if (use_json) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
vty_out(vty, "\n");
|
||||
@ -4714,9 +4702,8 @@ static int show_ip_ospf_neighbor_int_detail_common(struct vty *vty,
|
||||
}
|
||||
|
||||
if (use_json) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else
|
||||
vty_out(vty, "\n");
|
||||
|
@ -404,9 +404,9 @@ int pim_assert_build_msg(uint8_t *pim_msg, int buf_size, struct interface *ifp,
|
||||
}
|
||||
|
||||
/* Metric preference */
|
||||
pim_write_uint32(pim_msg_curr, rpt_bit_flag
|
||||
? metric_preference | 0x80000000
|
||||
: metric_preference);
|
||||
pim_write_uint32(pim_msg_curr,
|
||||
rpt_bit_flag ? metric_preference | 0x80000000
|
||||
: metric_preference);
|
||||
pim_msg_curr += 4;
|
||||
|
||||
/* Route metric */
|
||||
|
148
pimd/pim_cmd.c
148
pimd/pim_cmd.c
@ -423,9 +423,8 @@ static void pim_show_membership(struct vty *vty, u_char uj)
|
||||
} /* scan interface channels */
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
} else {
|
||||
vty_out(vty,
|
||||
"Interface Address Source Group Membership\n");
|
||||
@ -589,9 +588,8 @@ static void igmp_show_interfaces(struct vty *vty, u_char uj)
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -786,9 +784,8 @@ static void igmp_show_interfaces_single(struct vty *vty, const char *ifname,
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
if (!found_ifname)
|
||||
@ -1168,8 +1165,9 @@ static void pim_show_interfaces_single(struct vty *vty, const char *ifname,
|
||||
print_header = 1;
|
||||
for (ALL_LIST_ELEMENTS_RO(pim_upstream_list, upnode,
|
||||
up)) {
|
||||
if (strcmp(ifp->name, up->rpf.source_nexthop
|
||||
.interface->name)
|
||||
if (strcmp(ifp->name,
|
||||
up->rpf.source_nexthop
|
||||
.interface->name)
|
||||
== 0) {
|
||||
if (up->flags
|
||||
& PIM_UPSTREAM_FLAG_MASK_FHR) {
|
||||
@ -1256,9 +1254,8 @@ static void pim_show_interfaces_single(struct vty *vty, const char *ifname,
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
if (!found_ifname)
|
||||
@ -1317,9 +1314,8 @@ static void pim_show_interfaces(struct vty *vty, u_char uj)
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
} else {
|
||||
vty_out(vty,
|
||||
"Interface State Address PIM Nbrs PIM DR FHR IfChannels\n");
|
||||
@ -1436,9 +1432,8 @@ static void pim_show_interface_traffic(struct vty *vty, u_char uj)
|
||||
}
|
||||
}
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -1523,9 +1518,8 @@ static void pim_show_interface_traffic_single(struct vty *vty,
|
||||
}
|
||||
}
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
if (!found_ifname)
|
||||
@ -1628,9 +1622,8 @@ static void pim_show_join(struct vty *vty, u_char uj)
|
||||
} /* scan interface channels */
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -1833,9 +1826,8 @@ static void pim_show_neighbors_single(struct vty *vty, const char *neighbor,
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
{
|
||||
@ -2039,9 +2031,8 @@ static void pim_show_state(struct vty *vty, const char *src_or_group,
|
||||
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else {
|
||||
vty_out(vty, "\n");
|
||||
@ -2124,9 +2115,8 @@ static void pim_show_neighbors(struct vty *vty, u_char uj)
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -2356,9 +2346,8 @@ static void pim_show_upstream(struct vty *vty, u_char uj)
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -2442,9 +2431,8 @@ static void pim_show_join_desired(struct vty *vty, u_char uj)
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -2481,10 +2469,7 @@ static void pim_show_upstream_rpf(struct vty *vty, u_char uj)
|
||||
pim_addr_dump("<rpf?>", &rpf->rpf_addr, rpf_addr_str,
|
||||
sizeof(rpf_addr_str));
|
||||
|
||||
rpf_ifname =
|
||||
rpf->source_nexthop.interface ? rpf->source_nexthop
|
||||
.interface->name
|
||||
: "<ifname?>";
|
||||
rpf_ifname = rpf->source_nexthop.interface ? rpf->source_nexthop.interface->name : "<ifname?>";
|
||||
|
||||
if (uj) {
|
||||
json_object_object_get_ex(json, grp_str, &json_group);
|
||||
@ -2514,9 +2499,8 @@ static void pim_show_upstream_rpf(struct vty *vty, u_char uj)
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -2620,10 +2604,7 @@ static void pim_show_rpf(struct vty *vty, u_char uj)
|
||||
&rpf->source_nexthop.mrib_nexthop_addr,
|
||||
rib_nexthop_str, sizeof(rib_nexthop_str));
|
||||
|
||||
rpf_ifname =
|
||||
rpf->source_nexthop.interface ? rpf->source_nexthop
|
||||
.interface->name
|
||||
: "<ifname?>";
|
||||
rpf_ifname = rpf->source_nexthop.interface ? rpf->source_nexthop.interface->name : "<ifname?>";
|
||||
|
||||
if (uj) {
|
||||
json_object_object_get_ex(json, grp_str, &json_group);
|
||||
@ -2661,9 +2642,8 @@ static void pim_show_rpf(struct vty *vty, u_char uj)
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -2822,9 +2802,8 @@ static void igmp_show_groups(struct vty *vty, u_char uj)
|
||||
} /* scan interfaces */
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -4060,9 +4039,8 @@ static void show_mroute(struct vty *vty, u_char uj)
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -4655,9 +4633,8 @@ static void ip_pim_ssm_show_group_range(struct vty *vty, u_char uj)
|
||||
json_object *json;
|
||||
json = json_object_new_object();
|
||||
json_object_string_add(json, "ssmGroups", range_str);
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else
|
||||
vty_out(vty, "SSM group range : %s\n", range_str);
|
||||
@ -4699,9 +4676,8 @@ static void ip_pim_ssm_show_group_type(struct vty *vty, u_char uj,
|
||||
json_object *json;
|
||||
json = json_object_new_object();
|
||||
json_object_string_add(json, "groupType", type_str);
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
} else
|
||||
vty_out(vty, "Group type : %s\n", type_str);
|
||||
@ -6453,8 +6429,7 @@ DEFUN (ip_pim_bfd_param,
|
||||
}
|
||||
|
||||
ALIAS(no_ip_pim_bfd, no_ip_pim_bfd_param_cmd,
|
||||
"no ip pim bfd (2-255) (50-60000) (50-60000)",
|
||||
NO_STR IP_STR PIM_STR
|
||||
"no ip pim bfd (2-255) (50-60000) (50-60000)", NO_STR IP_STR PIM_STR
|
||||
"Enables BFD support\n"
|
||||
"Detect Multiplier\n"
|
||||
"Required min receive interval\n"
|
||||
@ -6815,9 +6790,8 @@ static void ip_msdp_show_mesh_group(struct vty *vty, u_char uj)
|
||||
|
||||
if (uj) {
|
||||
json_object_object_add(json, mg->mesh_group_name, json_mg_row);
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -6884,9 +6858,8 @@ static void ip_msdp_show_peers(struct vty *vty, u_char uj)
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -6990,9 +6963,8 @@ static void ip_msdp_show_peers_detail(struct vty *vty, const char *peer,
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -7089,9 +7061,8 @@ static void ip_msdp_show_sa(struct vty *vty, u_char uj)
|
||||
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -7182,9 +7153,8 @@ static void ip_msdp_show_sa_detail(struct vty *vty, u_char uj)
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -7227,9 +7197,8 @@ static void ip_msdp_show_sa_addr(struct vty *vty, const char *addr, u_char uj)
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
@ -7257,9 +7226,8 @@ static void ip_msdp_show_sa_sg(struct vty *vty, const char *src,
|
||||
}
|
||||
|
||||
if (uj) {
|
||||
vty_out(vty, "%s\n",
|
||||
json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||
json, JSON_C_TO_STRING_PRETTY));
|
||||
json_object_free(json);
|
||||
}
|
||||
}
|
||||
|
@ -78,9 +78,10 @@ struct pim_interface {
|
||||
struct in_addr update_source; /* user can statically set the primary
|
||||
* address of the interface */
|
||||
|
||||
int igmp_version; /* IGMP version */
|
||||
int igmp_default_robustness_variable; /* IGMPv3 QRV */
|
||||
int igmp_default_query_interval; /* IGMPv3 secs between general
|
||||
int igmp_version; /* IGMP version */
|
||||
int igmp_default_robustness_variable; /* IGMPv3 QRV */
|
||||
int
|
||||
igmp_default_query_interval; /* IGMPv3 secs between general
|
||||
queries */
|
||||
int igmp_query_max_response_time_dsec; /* IGMPv3 Max Response Time in
|
||||
dsecs for general queries */
|
||||
|
@ -814,9 +814,8 @@ void pim_ifchannel_join_add(struct interface *ifp, struct in_addr neigh_addr,
|
||||
/*
|
||||
* If we are going to be a LHR, we need to note it
|
||||
*/
|
||||
if (ch->upstream->parent
|
||||
&& (ch->upstream->parent->flags
|
||||
& PIM_UPSTREAM_FLAG_MASK_SRC_IGMP)
|
||||
if (ch->upstream->parent && (ch->upstream->parent->flags
|
||||
& PIM_UPSTREAM_FLAG_MASK_SRC_IGMP)
|
||||
&& !(ch->upstream->flags
|
||||
& PIM_UPSTREAM_FLAG_MASK_SRC_LHR)) {
|
||||
pim_upstream_ref(ch->upstream,
|
||||
|
@ -53,10 +53,7 @@ struct option longopts[] = {{0}};
|
||||
|
||||
/* pimd privileges */
|
||||
zebra_capabilities_t _caps_p[] = {
|
||||
ZCAP_NET_ADMIN,
|
||||
ZCAP_SYS_ADMIN,
|
||||
ZCAP_NET_RAW,
|
||||
ZCAP_BIND,
|
||||
ZCAP_NET_ADMIN, ZCAP_SYS_ADMIN, ZCAP_NET_RAW, ZCAP_BIND,
|
||||
};
|
||||
|
||||
/* pimd privileges to run with */
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user