Lines Matching defs:peer
858 * Search for specified prefix of a peer. Returns NULL if not found.
861 prefix_get(struct rib *rib, struct rde_peer *peer, uint32_t path_id,
869 return (prefix_bypeer(re, peer, path_id));
873 * Search for specified prefix in the peer prefix_index.
877 prefix_adjout_get(struct rde_peer *peer, uint32_t path_id_tx,
886 return RB_FIND(prefix_index, &peer->adj_rib_out, &xp);
890 * Lookup a prefix without considering path_id in the peer prefix_index.
894 prefix_adjout_first(struct rde_peer *peer, struct pt_entry *pte)
901 np = RB_NFIND(prefix_index, &peer->adj_rib_out, &xp);
911 prefix_adjout_next(struct rde_peer *peer, struct prefix *p)
915 np = RB_NEXT(prefix_index, &peer->adj_rib_out, p);
922 * Lookup addr/prefixlen in the peer prefix_index. Returns first match.
926 prefix_adjout_lookup(struct rde_peer *peer, struct bgpd_addr *addr, int plen)
928 return prefix_adjout_first(peer, pt_fill(addr, plen));
932 * Lookup addr in the peer prefix_index. Returns first match.
936 prefix_adjout_match(struct rde_peer *peer, struct bgpd_addr *addr)
945 p = prefix_adjout_lookup(peer, addr, i);
953 p = prefix_adjout_lookup(peer, addr, i);
969 prefix_update(struct rib *rib, struct rde_peer *peer, uint32_t path_id,
980 if ((p = prefix_get(rib, peer, path_id, prefix, prefixlen)) != NULL) {
1016 return (prefix_move(p, peer, asp, comm, state->nexthop,
1019 return (prefix_add(prefix, prefixlen, rib, peer, path_id,
1029 struct rde_peer *peer, uint32_t path_id, uint32_t path_id_tx,
1045 prefix_link(p, re, re->prefix, peer, path_id, path_id_tx, asp, comm,
1063 prefix_move(struct prefix *p, struct rde_peer *peer,
1072 if (peer != prefix_peer(p))
1073 fatalx("prefix_move: cross peer move");
1077 prefix_link(np, prefix_re(p), p->pt, peer, p->path_id, p->path_id_tx,
1088 * no need to update the peer prefix count because we are only moving
1089 * the prefix without changing the peer.
1109 prefix_withdraw(struct rib *rib, struct rde_peer *peer, uint32_t path_id,
1115 p = prefix_get(rib, peer, path_id, prefix, prefixlen);
1137 prefix_flowspec_update(struct rde_peer *peer, struct filterstate *state,
1149 old = prefix_bypeer(re, peer, 0);
1164 prefix_link(new, re, re->prefix, peer, 0, path_id_tx, asp, comm,
1183 prefix_flowspec_withdraw(struct rde_peer *peer, struct pt_entry *pte)
1191 p = prefix_bypeer(re, peer, 0);
1223 prefix_add_eor(struct rde_peer *peer, uint8_t aid)
1229 if (RB_INSERT(prefix_tree, &peer->updates[aid], p) != NULL)
1239 prefix_adjout_update(struct prefix *p, struct rde_peer *peer,
1251 p->peer = peer;
1254 if (RB_INSERT(prefix_index, &peer->adj_rib_out, p) != NULL)
1282 RB_REMOVE(prefix_tree, &peer->updates[pte->aid], p);
1283 peer->stats.pending_update--;
1288 peer->stats.prefix_out_cnt--;
1291 RB_REMOVE(prefix_tree, &peer->withdraws[pte->aid], p);
1292 peer->stats.pending_withdraw--;
1301 RB_REMOVE(prefix_index, &peer->adj_rib_out, p);
1303 if (RB_INSERT(prefix_index, &peer->adj_rib_out, p) != NULL)
1318 prefix_link(p, NULL, p->pt, peer, 0, p->path_id_tx, asp, comm,
1320 peer->stats.prefix_out_cnt++;
1324 if (peer_is_up(peer)) {
1326 if (RB_INSERT(prefix_tree, &peer->updates[pte->aid], p) != NULL)
1328 peer->stats.pending_update++;
1334 * the prefix in the RIB linked to the peer withdraw list.
1339 struct rde_peer *peer = prefix_peer(p);
1352 RB_REMOVE(prefix_tree, &peer->updates[p->pt->aid], p);
1353 peer->stats.pending_update--;
1358 peer->stats.prefix_out_cnt--;
1365 if (peer_is_up(peer)) {
1367 if (RB_INSERT(prefix_tree, &peer->withdraws[p->pt->aid],
1370 peer->stats.pending_withdraw++;
1381 struct rde_peer *peer = prefix_peer(p);
1393 RB_REMOVE(prefix_tree, &peer->withdraws[p->pt->aid], p);
1394 peer->stats.pending_withdraw--;
1397 RB_REMOVE(prefix_tree, &peer->updates[p->pt->aid], p);
1398 peer->stats.pending_update--;
1403 peer->stats.prefix_out_cnt--;
1413 RB_REMOVE(prefix_index, &peer->adj_rib_out, p);
1421 prefix_adjout_flush_pending(struct rde_peer *peer)
1427 RB_FOREACH_SAFE(p, prefix_tree, &peer->withdraws[aid], np) {
1430 RB_FOREACH_SAFE(p, prefix_tree, &peer->updates[aid], np) {
1432 RB_REMOVE(prefix_tree, &peer->updates[aid], p);
1433 peer->stats.pending_update--;
1439 prefix_adjout_reaper(struct rde_peer *peer)
1444 RB_FOREACH_SAFE(p, prefix_index, &peer->adj_rib_out, np) {
1475 struct rde_peer *peer;
1478 if ((peer = peer_get(ctx->ctx_id)) == NULL)
1482 p = RB_MIN(prefix_index, &peer->adj_rib_out);
1518 prefix_dump_new(struct rde_peer *peer, uint8_t aid, unsigned int count,
1526 ctx->ctx_id = peer->conf.id;
1544 prefix_dump_subtree(struct rde_peer *peer, struct bgpd_addr *subtree,
1554 ctx->ctx_id = peer->conf.id;
1569 ctx->ctx_p = RB_NFIND(prefix_index, &peer->adj_rib_out, &xp);
1582 * belonging to the peer peer. Returns NULL if no match found.
1585 prefix_bypeer(struct rib_entry *re, struct rde_peer *peer, uint32_t path_id)
1590 if (prefix_peer(p) == peer && p->path_id == path_id)
1611 struct rde_peer *peer, uint32_t path_id, uint32_t path_id_tx,
1619 p->peer = peer;