Lines Matching refs:peer

377 	struct rde_peer		*peer;  in rde_dispatch_imsg_session()  local
399 if ((peer = peer_get(peerid)) == NULL) { in rde_dispatch_imsg_session()
404 if (peer_is_up(peer)) in rde_dispatch_imsg_session()
405 peer_imsg_push(peer, &imsg); in rde_dispatch_imsg_session()
410 peer = peer_add(peerid, &pconf, out_rules); in rde_dispatch_imsg_session()
412 if (peer->conf.flags & PEERFLAG_EVALUATE_ALL) in rde_dispatch_imsg_session()
416 if ((peer = peer_get(peerid)) == NULL) { in rde_dispatch_imsg_session()
423 peer_up(peer, &sup); in rde_dispatch_imsg_session()
425 if (peer_has_add_path(peer, AID_UNSPEC, CAPA_AP_SEND)) in rde_dispatch_imsg_session()
429 if ((peer = peer_get(peerid)) == NULL) { in rde_dispatch_imsg_session()
434 peer_down(peer); in rde_dispatch_imsg_session()
438 if ((peer = peer_get(peerid)) == NULL) in rde_dispatch_imsg_session()
440 peer_delete(peer); in rde_dispatch_imsg_session()
446 if ((peer = peer_get(peerid)) == NULL) { in rde_dispatch_imsg_session()
462 peer_stale(peer, aid, 0); in rde_dispatch_imsg_session()
465 peer_stale(peer, aid, 1); in rde_dispatch_imsg_session()
468 peer_flush(peer, aid, peer->staletime[aid]); in rde_dispatch_imsg_session()
471 if (peer->staletime[aid]) in rde_dispatch_imsg_session()
472 peer_flush(peer, aid, in rde_dispatch_imsg_session()
473 peer->staletime[aid]); in rde_dispatch_imsg_session()
698 peer = peer_get(peerid); in rde_dispatch_imsg_session()
699 if (peer != NULL) in rde_dispatch_imsg_session()
700 memcpy(&stats, &peer->stats, sizeof(stats)); in rde_dispatch_imsg_session()
783 peer = peer_get(peerid); in rde_dispatch_imsg_session()
784 if (peer) in rde_dispatch_imsg_session()
785 peer->throttled = 0; in rde_dispatch_imsg_session()
792 peer = peer_get(peerid); in rde_dispatch_imsg_session()
793 if (peer) in rde_dispatch_imsg_session()
794 peer->throttled = 1; in rde_dispatch_imsg_session()
1075 r->peer.ribid = rib->id; in rde_dispatch_imsg_parent()
1320 rde_dispatch_imsg_peer(struct rde_peer *peer, void *bula) in rde_dispatch_imsg_peer() argument
1326 if (!peer_is_up(peer)) { in rde_dispatch_imsg_peer()
1327 peer_imsg_flush(peer); in rde_dispatch_imsg_peer()
1331 if (!peer_imsg_pop(peer, &imsg)) in rde_dispatch_imsg_peer()
1339 rde_update_dispatch(peer, &ibuf); in rde_dispatch_imsg_peer()
1347 log_peer_warnx(&peer->conf, in rde_dispatch_imsg_peer()
1351 if (peer->capa.mp[rr.aid] == 0) { in rde_dispatch_imsg_peer()
1352 log_peer_warnx(&peer->conf, in rde_dispatch_imsg_peer()
1359 peer_blast(peer, rr.aid); in rde_dispatch_imsg_peer()
1363 if ((peer->recv_eor & (1 << rr.aid)) == 0) { in rde_dispatch_imsg_peer()
1364 log_peer_warnx(&peer->conf, in rde_dispatch_imsg_peer()
1369 peer_begin_rrefresh(peer, rr.aid); in rde_dispatch_imsg_peer()
1372 if ((peer->recv_eor & (1 << rr.aid)) != 0 && in rde_dispatch_imsg_peer()
1373 peer->staletime[rr.aid]) in rde_dispatch_imsg_peer()
1374 peer_flush(peer, rr.aid, in rde_dispatch_imsg_peer()
1375 peer->staletime[rr.aid]); in rde_dispatch_imsg_peer()
1377 log_peer_warnx(&peer->conf, in rde_dispatch_imsg_peer()
1382 log_peer_warnx(&peer->conf, in rde_dispatch_imsg_peer()
1398 rde_update_dispatch(struct rde_peer *peer, struct ibuf *buf) in rde_update_dispatch() argument
1412 rde_update_err(peer, ERR_UPDATE, ERR_UPD_ATTRLIST, NULL); in rde_update_dispatch()
1420 rde_update_err(peer, ERR_UPDATE, ERR_UPD_ATTRLIST, in rde_update_dispatch()
1426 rde_peer_recv_eor(peer, AID_INET); in rde_update_dispatch()
1437 if (rde_attr_parse(&attrbuf, peer, &state, &reachbuf, in rde_update_dispatch()
1443 if ((subtype = rde_attr_missing(&state.aspath, peer->conf.ebgp, in rde_update_dispatch()
1447 rde_update_err(peer, ERR_UPDATE, ERR_UPD_MISSNG_WK_ATTR, in rde_update_dispatch()
1452 rde_as4byte_fixup(peer, &state.aspath); in rde_update_dispatch()
1456 peer->conf.enforce_as == ENFORCE_AS_ON) { in rde_update_dispatch()
1458 if (peer->conf.remote_as != fas) { in rde_update_dispatch()
1459 log_peer_warnx(&peer->conf, "bad path, " in rde_update_dispatch()
1462 log_as(fas), peer->conf.remote_as); in rde_update_dispatch()
1463 rde_update_err(peer, ERR_UPDATE, ERR_UPD_ASPATH, in rde_update_dispatch()
1471 peer->conf.ebgp && in rde_update_dispatch()
1472 peer->conf.enforce_local_as == ENFORCE_AS_ON && in rde_update_dispatch()
1473 !aspath_loopfree(state.aspath.aspath, peer->conf.local_as)) in rde_update_dispatch()
1476 rde_reflector(peer, &state.aspath); in rde_update_dispatch()
1479 if (state.aspath.flags & F_ATTR_ASPATH && peer->conf.ebgp) { in rde_update_dispatch()
1488 if (peer->capa.mp[AID_INET] == 0) { in rde_update_dispatch()
1489 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1491 rde_update_err(peer, ERR_UPDATE, ERR_UPD_NETWORK, in rde_update_dispatch()
1497 if (peer_has_add_path(peer, AID_INET, CAPA_AP_RECV)) { in rde_update_dispatch()
1499 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1501 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1513 log_peer_warnx(&peer->conf, "bad withdraw prefix"); in rde_update_dispatch()
1514 rde_update_err(peer, ERR_UPDATE, ERR_UPD_NETWORK, in rde_update_dispatch()
1519 rde_update_withdraw(peer, pathid, &prefix, prefixlen); in rde_update_dispatch()
1527 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1529 rde_update_err(peer, ERR_UPDATE, ERR_UPD_OPTATTR, in rde_update_dispatch()
1534 if (peer->capa.mp[aid] == 0) { in rde_update_dispatch()
1535 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1537 rde_update_err(peer, ERR_UPDATE, ERR_UPD_OPTATTR, in rde_update_dispatch()
1545 rde_peer_recv_eor(peer, aid); in rde_update_dispatch()
1549 if (peer_has_add_path(peer, aid, CAPA_AP_RECV)) { in rde_update_dispatch()
1552 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1555 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1564 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1566 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1572 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1574 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1582 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1584 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1592 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1594 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1602 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1604 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1616 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1618 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1625 rde_update_withdraw(peer, pathid, &prefix, prefixlen); in rde_update_dispatch()
1634 if (peer->capa.mp[AID_INET] == 0) { in rde_update_dispatch()
1635 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1637 rde_update_err(peer, ERR_UPDATE, ERR_UPD_NETWORK, in rde_update_dispatch()
1645 switch (peer->role) { in rde_update_dispatch()
1649 tmp = htonl(peer->conf.remote_as); in rde_update_dispatch()
1653 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1665 if (peer_has_add_path(peer, AID_INET, CAPA_AP_RECV)) { in rde_update_dispatch()
1667 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1669 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1677 log_peer_warnx(&peer->conf, "bad nlri prefix"); in rde_update_dispatch()
1678 rde_update_err(peer, ERR_UPDATE, ERR_UPD_NETWORK, in rde_update_dispatch()
1683 if (rde_update_update(peer, pathid, &state, in rde_update_dispatch()
1693 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1695 rde_update_err(peer, ERR_UPDATE, ERR_UPD_OPTATTR, in rde_update_dispatch()
1700 if (peer->capa.mp[aid] == 0) { in rde_update_dispatch()
1701 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1703 rde_update_err(peer, ERR_UPDATE, ERR_UPD_OPTATTR, in rde_update_dispatch()
1712 switch (peer->role) { in rde_update_dispatch()
1716 tmp = htonl(peer->conf.remote_as); in rde_update_dispatch()
1721 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1739 if (rde_get_mp_nexthop(&reachbuf, aid, peer, &state) == -1) { in rde_update_dispatch()
1740 log_peer_warnx(&peer->conf, "bad nlri nexthop"); in rde_update_dispatch()
1741 rde_update_err(peer, ERR_UPDATE, ERR_UPD_OPTATTR, in rde_update_dispatch()
1747 if (peer_has_add_path(peer, aid, CAPA_AP_RECV)) { in rde_update_dispatch()
1749 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1751 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1766 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1768 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1776 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1778 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1786 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1788 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1796 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1798 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1806 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1808 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1820 log_peer_warnx(&peer->conf, in rde_update_dispatch()
1822 rde_update_err(peer, ERR_UPDATE, in rde_update_dispatch()
1829 if (rde_update_update(peer, pathid, &state, in rde_update_dispatch()
1860 pathid_assign(struct rde_peer *peer, uint32_t path_id, in pathid_assign() argument
1867 if (!peer_has_add_path(peer, prefix->aid, CAPA_AP_RECV)) in pathid_assign()
1868 return peer->path_id_tx; in pathid_assign()
1875 p = prefix_bypeer(re, peer, path_id); in pathid_assign()
1892 rde_update_update(struct rde_peer *peer, uint32_t path_id, in rde_update_update() argument
1902 peer->stats.prefix_rcvd_update++; in rde_update_update()
1906 aspa_state = rde_aspa_validity(peer, &in->aspath, prefix->aid); in rde_update_update()
1909 path_id_tx = pathid_assign(peer, path_id, prefix, prefixlen); in rde_update_update()
1911 if (prefix_update(rib_byid(RIB_ADJ_IN), peer, path_id, path_id_tx, in rde_update_update()
1913 peer->stats.prefix_cnt++; in rde_update_update()
1916 if (peer->conf.max_prefix && in rde_update_update()
1917 peer->stats.prefix_cnt > peer->conf.max_prefix) { in rde_update_update()
1918 log_peer_warnx(&peer->conf, "prefix limit reached (>%u/%u)", in rde_update_update()
1919 peer->stats.prefix_cnt, peer->conf.max_prefix); in rde_update_update()
1920 rde_update_err(peer, ERR_CEASE, ERR_CEASE_MAX_PREFIX, NULL); in rde_update_update()
1933 action = rde_filter(rib->in_rules, peer, peer, prefix, in rde_update_update()
1937 rde_update_log("update", i, peer, in rde_update_update()
1940 prefix_update(rib, peer, path_id, path_id_tx, &state, in rde_update_update()
1943 rde_update_log(wmsg, i, peer, NULL, prefix, prefixlen); in rde_update_update()
1944 prefix_update(rib, peer, path_id, path_id_tx, &state, in rde_update_update()
1947 if (prefix_withdraw(rib, peer, path_id, prefix, in rde_update_update()
1949 rde_update_log(wmsg, i, peer, in rde_update_update()
1959 rde_update_withdraw(struct rde_peer *peer, uint32_t path_id, in rde_update_withdraw() argument
1968 if (prefix_withdraw(rib, peer, path_id, prefix, prefixlen)) in rde_update_withdraw()
1969 rde_update_log("withdraw", i, peer, NULL, prefix, in rde_update_withdraw()
1974 if (prefix_withdraw(rib_byid(RIB_ADJ_IN), peer, path_id, in rde_update_withdraw()
1976 peer->stats.prefix_cnt--; in rde_update_withdraw()
1978 peer->stats.prefix_rcvd_withdraw++; in rde_update_withdraw()
1990 rde_attr_parse(struct ibuf *buf, struct rde_peer *peer, in rde_attr_parse() argument
2045 log_peer_warnx(&peer->conf, "bad ORIGIN %u, " in rde_attr_parse()
2057 error = aspath_verify(&attrbuf, peer_has_as4byte(peer), in rde_attr_parse()
2058 peer_permit_as_set(peer)); in rde_attr_parse()
2060 log_peer_warnx(&peer->conf, "bad ASPATH, %s", in rde_attr_parse()
2062 rde_update_err(peer, ERR_UPDATE, ERR_UPD_ASPATH, in rde_attr_parse()
2066 if (peer_has_as4byte(peer)) { in rde_attr_parse()
2084 log_peer_warnx(&peer->conf, "bad ASPATH %s, " in rde_attr_parse()
2112 rde_update_err(peer, ERR_UPDATE, ERR_UPD_NEXTHOP, in rde_attr_parse()
2135 if (peer->conf.ebgp) { in rde_attr_parse()
2155 if ((!peer_has_as4byte(peer) && ibuf_size(&attrbuf) != 6) || in rde_attr_parse()
2156 (peer_has_as4byte(peer) && ibuf_size(&attrbuf) != 8)) { in rde_attr_parse()
2161 log_peer_warnx(&peer->conf, "bad AGGREGATOR, " in rde_attr_parse()
2165 if (!peer_has_as4byte(peer)) { in rde_attr_parse()
2173 log_peer_warnx(&peer->conf, "bad AGGREGATOR, " in rde_attr_parse()
2187 char *pfmt = log_fmt_peer(&peer->conf); in rde_attr_parse()
2205 log_peer_warnx(&peer->conf, "bad COMMUNITIES, " in rde_attr_parse()
2220 log_peer_warnx(&peer->conf, "bad LARGE COMMUNITIES, " in rde_attr_parse()
2229 peer->conf.ebgp, &attrbuf) == -1) { in rde_attr_parse()
2235 log_peer_warnx(&peer->conf, "bad EXT_COMMUNITIES, " in rde_attr_parse()
2248 if (peer->conf.ebgp) { in rde_attr_parse()
2250 log_peer_warnx(&peer->conf, "bad CLUSTER_LIST, " in rde_attr_parse()
2260 log_peer_warnx(&peer->conf, "bad CLUSTER_LIST, " in rde_attr_parse()
2295 log_peer_warnx(&peer->conf, "bad AS4_AGGREGATOR, " in rde_attr_parse()
2304 log_peer_warnx(&peer->conf, "bad AS4_AGGREGATOR, " in rde_attr_parse()
2315 peer_permit_as_set(peer))) != 0) { in rde_attr_parse()
2317 log_peer_warnx(&peer->conf, "bad AS4_PATH, " in rde_attr_parse()
2330 log_peer_warnx(&peer->conf, "bad OTC, " in rde_attr_parse()
2334 switch (peer->role) { in rde_attr_parse()
2342 if (tmp32 != peer->conf.remote_as) in rde_attr_parse()
2352 rde_update_err(peer, ERR_UPDATE, ERR_UPD_UNKNWN_WK_ATTR, in rde_attr_parse()
2366 rde_update_err(peer, ERR_UPDATE, ERR_UPD_ATTRLEN, &attrbuf); in rde_attr_parse()
2369 rde_update_err(peer, ERR_UPDATE, ERR_UPD_ATTRFLAGS, &attrbuf); in rde_attr_parse()
2372 rde_update_err(peer, ERR_UPDATE, ERR_UPD_ATTRLIST, NULL); in rde_attr_parse()
2440 struct rde_peer *peer, struct filterstate *state) in rde_get_mp_nexthop() argument
2454 if (aid == AID_INET && peer_has_ext_nexthop(peer, AID_INET) && in rde_get_mp_nexthop()
2457 if (aid == AID_VPN_IPv4 && peer_has_ext_nexthop(peer, AID_VPN_IPv4) && in rde_get_mp_nexthop()
2464 log_peer_warnx(&peer->conf, "bad multiprotocol nexthop, " in rde_get_mp_nexthop()
2477 log_peer_warnx(&peer->conf, "bad %s nexthop, " in rde_get_mp_nexthop()
2485 if (peer->local_if_scope != 0) { in rde_get_mp_nexthop()
2486 nexthop.scope_id = peer->local_if_scope; in rde_get_mp_nexthop()
2488 log_peer_warnx(&peer->conf, in rde_get_mp_nexthop()
2510 log_peer_warnx(&peer->conf, "bad %s nexthop, " in rde_get_mp_nexthop()
2521 log_peer_warnx(&peer->conf, "bad %s nexthop, " in rde_get_mp_nexthop()
2530 if (peer->local_if_scope != 0) { in rde_get_mp_nexthop()
2531 nexthop.scope_id = peer->local_if_scope; in rde_get_mp_nexthop()
2533 log_peer_warnx(&peer->conf, in rde_get_mp_nexthop()
2554 if (peer->local_if_scope != 0) { in rde_get_mp_nexthop()
2555 nexthop.scope_id = peer->local_if_scope; in rde_get_mp_nexthop()
2557 log_peer_warnx(&peer->conf, in rde_get_mp_nexthop()
2565 log_peer_warnx(&peer->conf, "bad %s nexthop, " in rde_get_mp_nexthop()
2574 log_peer_warnx(&peer->conf, "bad %s nexthop, " in rde_get_mp_nexthop()
2580 log_peer_warnx(&peer->conf, "bad multiprotocol nexthop, " in rde_get_mp_nexthop()
2591 rde_update_err(struct rde_peer *peer, uint8_t error, uint8_t suberr, in rde_update_err() argument
2601 if ((wbuf = imsg_create(ibuf_se, IMSG_UPDATE_ERR, peer->conf.id, 0, in rde_update_err()
2611 peer->state = PEER_ERR; in rde_update_err()
2616 const struct rde_peer *peer, const struct bgpd_addr *next, in rde_update_log() argument
2624 (peer->flags & PEERFLAG_LOG_UPDATES))) in rde_update_log()
2632 l = log_fmt_peer(&peer->conf); in rde_update_log()
2634 l, log_as(peer->conf.remote_as), message, in rde_update_log()
2649 rde_as4byte_fixup(struct rde_peer *peer, struct rde_aspath *a) in rde_as4byte_fixup() argument
2666 if (peer_has_as4byte(peer)) { in rde_as4byte_fixup()
2669 log_peer_warnx(&peer->conf, "uses 4-byte ASN " in rde_as4byte_fixup()
2674 log_peer_warnx(&peer->conf, "uses 4-byte ASN " in rde_as4byte_fixup()
2711 rde_aspa_validity(struct rde_peer *peer, struct rde_aspath *asp, uint8_t aid) in rde_aspa_validity() argument
2713 if (!peer->conf.ebgp) /* ASPA is only performed on ebgp sessions */ in rde_aspa_validity()
2728 if (peer->role != ROLE_RS_CLIENT && in rde_aspa_validity()
2729 peer->conf.enforce_as != ENFORCE_AS_ON) { in rde_aspa_validity()
2733 if (peer->conf.remote_as != fas) in rde_aspa_validity()
2739 if (peer->role == ROLE_NONE) in rde_aspa_validity()
2742 if (peer->role == ROLE_CUSTOMER) in rde_aspa_validity()
2752 rde_reflector(struct rde_peer *peer, struct rde_aspath *asp) in rde_reflector() argument
2772 if (peer->conf.ebgp) in rde_reflector()
2775 id = htonl(peer->remote_bgpid); in rde_reflector()
2825 struct rde_peer *peer; in rde_dump_rib_as() local
2831 peer = prefix_peer(p); in rde_dump_rib_as()
2837 strlcpy(rib.descr, peer->conf.descr, sizeof(rib.descr)); in rde_dump_rib_as()
2838 memcpy(&rib.remote_addr, &peer->remote_addr, in rde_dump_rib_as()
2840 rib.remote_id = peer->remote_bgpid; in rde_dump_rib_as()
2880 if (!peer->conf.ebgp) in rde_dump_rib_as()
2893 staletime = peer->staletime[p->pt->aid]; in rde_dump_rib_as()
2897 if (peer_has_add_path(peer, p->pt->aid, CAPA_AP_RECV)) { in rde_dump_rib_as()
2902 if (peer_has_add_path(peer, p->pt->aid, CAPA_AP_SEND)) { in rde_dump_rib_as()
3042 struct rde_peer *peer; in rde_dump_done() local
3046 peer = peer_match(&ctx->req.neighbor, ctx->peerid); in rde_dump_done()
3047 if (peer == NULL) in rde_dump_done()
3049 ctx->peerid = peer->conf.id; in rde_dump_done()
3052 if (prefix_dump_new(peer, ctx->req.aid, in rde_dump_done()
3058 if (prefix_dump_subtree(peer, &ctx->req.prefix, in rde_dump_done()
3114 struct rde_peer *peer; in rde_dump_ctx_new() local
3116 peer = peer_match(&req->neighbor, 0); in rde_dump_ctx_new()
3117 if (peer == NULL) { in rde_dump_ctx_new()
3124 ctx->peerid = peer->conf.id; in rde_dump_ctx_new()
3127 if (prefix_dump_new(peer, ctx->req.aid, in rde_dump_ctx_new()
3134 if (prefix_dump_subtree(peer, &req->prefix, in rde_dump_ctx_new()
3158 p = prefix_adjout_lookup(peer, in rde_dump_ctx_new()
3165 peer, p); in rde_dump_ctx_new()
3170 p = prefix_adjout_match(peer, in rde_dump_ctx_new()
3173 p = prefix_adjout_lookup(peer, in rde_dump_ctx_new()
3179 p = prefix_adjout_next(peer, p); in rde_dump_ctx_new()
3181 } while ((peer = peer_match(&req->neighbor, in rde_dump_ctx_new()
3182 peer->conf.id))); in rde_dump_ctx_new()
3450 struct rde_peer *peer; in rde_update_queue_pending() local
3456 RB_FOREACH(peer, peer_tree, &peertable) { in rde_update_queue_pending()
3457 if (peer->conf.id == 0) in rde_update_queue_pending()
3459 if (!peer_is_up(peer)) in rde_update_queue_pending()
3461 if (peer->throttled) in rde_update_queue_pending()
3464 if (!RB_EMPTY(&peer->updates[aid]) || in rde_update_queue_pending()
3465 !RB_EMPTY(&peer->withdraws[aid])) in rde_update_queue_pending()
3475 struct rde_peer *peer; in rde_update_queue_runner() local
3482 RB_FOREACH(peer, peer_tree, &peertable) { in rde_update_queue_runner()
3483 if (peer->conf.id == 0) in rde_update_queue_runner()
3485 if (!peer_is_up(peer)) in rde_update_queue_runner()
3487 if (peer->throttled) in rde_update_queue_runner()
3489 if (RB_EMPTY(&peer->withdraws[aid])) in rde_update_queue_runner()
3492 if ((buf = up_dump_withdraws(peer, aid)) == NULL) { in rde_update_queue_runner()
3496 peer->conf.id, 0, buf) == -1) in rde_update_queue_runner()
3507 RB_FOREACH(peer, peer_tree, &peertable) { in rde_update_queue_runner()
3508 if (peer->conf.id == 0) in rde_update_queue_runner()
3510 if (!peer_is_up(peer)) in rde_update_queue_runner()
3512 if (peer->throttled) in rde_update_queue_runner()
3514 if (RB_EMPTY(&peer->updates[aid])) in rde_update_queue_runner()
3517 if (up_is_eor(peer, aid)) { in rde_update_queue_runner()
3518 int sent_eor = peer->sent_eor & (1 << aid); in rde_update_queue_runner()
3519 if (peer->capa.grestart.restart && !sent_eor) in rde_update_queue_runner()
3520 rde_peer_send_eor(peer, aid); in rde_update_queue_runner()
3521 if (peer->capa.enhanced_rr && sent_eor) in rde_update_queue_runner()
3522 rde_peer_send_rrefresh(peer, aid, in rde_update_queue_runner()
3527 if ((buf = up_dump_update(peer, aid)) == NULL) { in rde_update_queue_runner()
3531 peer->conf.id, 0, buf) == -1) in rde_update_queue_runner()
3679 struct rde_peer *peer; in rde_reload_done() local
3741 RB_FOREACH(peer, peer_tree, &peertable) { in rde_reload_done()
3742 if (peer->conf.id == 0) /* ignore peerself */ in rde_reload_done()
3744 peer->reconf_out = 0; in rde_reload_done()
3745 peer->reconf_rib = 0; in rde_reload_done()
3748 if (peer->conf.max_prefix && in rde_reload_done()
3749 peer->stats.prefix_cnt > peer->conf.max_prefix) { in rde_reload_done()
3750 log_peer_warnx(&peer->conf, in rde_reload_done()
3752 peer->stats.prefix_cnt, peer->conf.max_prefix); in rde_reload_done()
3753 rde_update_err(peer, ERR_CEASE, ERR_CEASE_MAX_PREFIX, in rde_reload_done()
3757 if (peer->conf.max_out_prefix && in rde_reload_done()
3758 peer->stats.prefix_out_cnt > peer->conf.max_out_prefix) { in rde_reload_done()
3759 log_peer_warnx(&peer->conf, in rde_reload_done()
3761 peer->stats.prefix_out_cnt, in rde_reload_done()
3762 peer->conf.max_out_prefix); in rde_reload_done()
3763 rde_update_err(peer, ERR_CEASE, in rde_reload_done()
3767 if (peer->export_type != peer->conf.export_type) { in rde_reload_done()
3768 log_peer_info(&peer->conf, "export type change, " in rde_reload_done()
3770 peer->reconf_rib = 1; in rde_reload_done()
3772 if ((peer->flags & PEERFLAG_EVALUATE_ALL) != in rde_reload_done()
3773 (peer->conf.flags & PEERFLAG_EVALUATE_ALL)) { in rde_reload_done()
3774 log_peer_info(&peer->conf, "rde evaluate change, " in rde_reload_done()
3776 peer->reconf_rib = 1; in rde_reload_done()
3778 if ((peer->flags & PEERFLAG_TRANS_AS) != in rde_reload_done()
3779 (peer->conf.flags & PEERFLAG_TRANS_AS)) { in rde_reload_done()
3780 log_peer_info(&peer->conf, "transparent-as change, " in rde_reload_done()
3782 peer->reconf_rib = 1; in rde_reload_done()
3784 if (peer->loc_rib_id != rib_find(peer->conf.rib)) { in rde_reload_done()
3785 log_peer_info(&peer->conf, "rib change, reloading"); in rde_reload_done()
3786 peer->loc_rib_id = rib_find(peer->conf.rib); in rde_reload_done()
3787 if (peer->loc_rib_id == RIB_NOTFOUND) in rde_reload_done()
3789 peer->reconf_rib = 1; in rde_reload_done()
3796 if (peer_has_add_path(peer, AID_UNSPEC, CAPA_AP_SEND)) { in rde_reload_done()
3797 if (peer->conf.eval.mode != ADDPATH_EVAL_NONE && in rde_reload_done()
3798 memcmp(&peer->eval, &peer->conf.eval, in rde_reload_done()
3799 sizeof(peer->eval)) != 0) { in rde_reload_done()
3800 log_peer_info(&peer->conf, in rde_reload_done()
3802 peer->reconf_out = 1; in rde_reload_done()
3803 peer->eval = peer->conf.eval; in rde_reload_done()
3808 if (peer->role != peer->conf.role) { in rde_reload_done()
3812 peer->role = peer->conf.role; in rde_reload_done()
3815 peer->export_type = peer->conf.export_type; in rde_reload_done()
3816 peer->flags = peer->conf.flags; in rde_reload_done()
3817 if (peer->flags & PEERFLAG_EVALUATE_ALL) in rde_reload_done()
3820 if (peer->reconf_rib) { in rde_reload_done()
3821 if (prefix_dump_new(peer, AID_UNSPEC, in rde_reload_done()
3825 log_peer_info(&peer->conf, "flushing Adj-RIB-Out"); in rde_reload_done()
3831 fh = peer_apply_out_filter(peer, out_rules); in rde_reload_done()
3833 if (!rde_filter_equal(peer->out_rules, fh)) { in rde_reload_done()
3834 char *p = log_fmt_peer(&peer->conf); in rde_reload_done()
3837 peer->reconf_out = 1; in rde_reload_done()
3860 RB_FOREACH(peer, peer_tree, &peertable) { in rde_reload_done()
3862 if (peer->conf.id == 0) in rde_reload_done()
3865 if (peer->loc_rib_id != rib->id) in rde_reload_done()
3868 if (peer->reconf_rib) in rde_reload_done()
3871 if (prefix_dump_new(peer, AID_UNSPEC, in rde_reload_done()
3879 log_peer_info(&peer->conf, in rde_reload_done()
3932 struct rde_peer *peer; in rde_softreconfig_in_done() local
3969 RB_FOREACH(peer, peer_tree, &peertable) { in rde_softreconfig_in_done()
3972 if (peer->reconf_out) { in rde_softreconfig_in_done()
3973 if (peer->export_type == EXPORT_NONE) { in rde_softreconfig_in_done()
3975 peer->reconf_out = 0; in rde_softreconfig_in_done()
3976 } else if (peer->export_type == EXPORT_DEFAULT_ROUTE) { in rde_softreconfig_in_done()
3979 if (peer->capa.mp[aid]) in rde_softreconfig_in_done()
3980 up_generate_default(peer, aid); in rde_softreconfig_in_done()
3982 peer->reconf_out = 0; in rde_softreconfig_in_done()
3984 rib_byid(peer->loc_rib_id)->state = in rde_softreconfig_in_done()
3986 } else if (peer->reconf_rib) { in rde_softreconfig_in_done()
3989 if (peer->capa.mp[aid]) in rde_softreconfig_in_done()
3990 peer_dump(peer, aid); in rde_softreconfig_in_done()
4052 struct rde_peer *peer; in rde_softreconfig_in() local
4063 peer = prefix_peer(p); in rde_softreconfig_in()
4069 aspa_vstate = rde_aspa_validity(peer, asp, pt->aid); in rde_softreconfig_in()
4085 action = rde_filter(rib->in_rules, peer, peer, &prefix, in rde_softreconfig_in()
4090 prefix_update(rib, peer, p->path_id, in rde_softreconfig_in()
4095 prefix_update(rib, peer, p->path_id, in rde_softreconfig_in()
4100 prefix_withdraw(rib, peer, p->path_id, &prefix, in rde_softreconfig_in()
4195 struct rde_peer *peer; in rde_rpki_softreload() local
4206 peer = prefix_peer(p); in rde_rpki_softreload()
4221 aspa_vstate = rde_aspa_validity(peer, asp, pt->aid); in rde_rpki_softreload()
4239 action = rde_filter(rib->in_rules, peer, peer, &prefix, in rde_rpki_softreload()
4244 prefix_update(rib, peer, p->path_id, in rde_rpki_softreload()
4249 prefix_update(rib, peer, p->path_id, in rde_rpki_softreload()
4254 prefix_withdraw(rib, peer, p->path_id, &prefix, in rde_rpki_softreload()
4361 rde_peer_recv_eor(struct rde_peer *peer, uint8_t aid) in rde_peer_recv_eor() argument
4363 peer->stats.prefix_rcvd_eor++; in rde_peer_recv_eor()
4364 peer->recv_eor |= 1 << aid; in rde_peer_recv_eor()
4374 if (imsg_compose(ibuf_se, IMSG_SESSION_RESTARTED, peer->conf.id, in rde_peer_recv_eor()
4378 log_peer_info(&peer->conf, "received %s EOR marker", in rde_peer_recv_eor()
4383 rde_peer_send_eor(struct rde_peer *peer, uint8_t aid) in rde_peer_send_eor() argument
4388 peer->stats.prefix_sent_eor++; in rde_peer_send_eor()
4389 peer->sent_eor |= 1 << aid; in rde_peer_send_eor()
4395 if (imsg_compose(ibuf_se, IMSG_UPDATE, peer->conf.id, in rde_peer_send_eor()
4416 if (imsg_compose(ibuf_se, IMSG_UPDATE, peer->conf.id, in rde_peer_send_eor()
4421 log_peer_info(&peer->conf, "sending %s EOR marker", in rde_peer_send_eor()
4426 rde_peer_send_rrefresh(struct rde_peer *peer, uint8_t aid, uint8_t subtype) in rde_peer_send_rrefresh() argument
4431 if (peer->capa.enhanced_rr == 0) in rde_peer_send_rrefresh()
4445 if (imsg_compose(ibuf_se, IMSG_REFRESH, peer->conf.id, 0, -1, in rde_peer_send_rrefresh()
4449 log_peer_info(&peer->conf, "sending %s %s marker", in rde_peer_send_rrefresh()