Lines Matching defs:rib

831 	struct rib		*rib;
1009 if ((rib = rib_byid(rid)) == NULL)
1011 rib->state = RECONF_DELETE;
1012 rib->fibstate = RECONF_NONE;
1018 rib = rib_byid(rib_find(rr.name));
1019 if (rib == NULL) {
1020 rib = rib_new(rr.name, rr.rtableid, rr.flags);
1021 } else if (rib->flags == rr.flags &&
1022 rib->rtableid == rr.rtableid) {
1023 /* no change to rib apart from filters */
1024 rib->state = RECONF_KEEP;
1026 /* reload rib because something changed */
1027 rib->flags_tmp = rr.flags;
1028 rib->rtableid_tmp = rr.rtableid;
1029 rib->state = RECONF_RELOAD;
1068 if ((rib = rib_byid(rib_find(r->rib))) == NULL) {
1070 "for nonexistent rib %s", r->rib);
1075 r->peer.ribid = rib->id;
1077 nr = rib->in_rules_tmp;
1084 rib->in_rules_tmp = nr;
1830 TAILQ_FOREACH(p, &re->prefix_h, entry.list.rib)
1908 struct rib *rib = rib_byid(i);
1909 if (rib == NULL)
1913 action = rde_filter(rib->in_rules, peer, peer, prefix,
1920 prefix_update(rib, peer, path_id, path_id_tx, &state,
1924 prefix_update(rib, peer, path_id, path_id_tx, &state,
1927 if (prefix_withdraw(rib, peer, path_id, prefix,
1945 struct rib *rib = rib_byid(i);
1946 if (rib == NULL)
1948 if (prefix_withdraw(rib, peer, path_id, prefix, prefixlen))
2769 struct ctl_show_rib rib;
2782 memset(&rib, 0, sizeof(rib));
2783 rib.age = getmonotime() - p->lastchange;
2784 rib.local_pref = asp->lpref;
2785 rib.med = asp->med;
2786 rib.weight = asp->weight;
2787 strlcpy(rib.descr, peer->conf.descr, sizeof(rib.descr));
2788 memcpy(&rib.remote_addr, &peer->remote_addr,
2789 sizeof(rib.remote_addr));
2790 rib.remote_id = peer->remote_bgpid;
2792 rib.exit_nexthop = nexthop->exit_nexthop;
2793 rib.true_nexthop = nexthop->true_nexthop;
2796 rib.exit_nexthop.aid = p->pt->aid;
2797 rib.true_nexthop.aid = p->pt->aid;
2799 pt_getaddr(p->pt, &rib.prefix);
2800 rib.prefixlen = p->pt->prefixlen;
2801 rib.origin = asp->origin;
2802 rib.roa_validation_state = prefix_roa_vstate(p);
2803 rib.aspa_validation_state = prefix_aspa_vstate(p);
2804 rib.dmetric = p->dmetric;
2805 rib.flags = 0;
2808 TAILQ_FOREACH(xp, &re->prefix_h, entry.list.rib) {
2812 rib.flags |= F_PREF_BEST;
2816 rib.flags |= F_PREF_ECMP;
2820 rib.flags |= F_PREF_AS_WIDE;
2831 rib.flags |= F_PREF_INTERNAL;
2833 rib.flags |= F_PREF_ANNOUNCE;
2835 rib.flags |= F_PREF_ELIGIBLE;
2837 rib.flags |= F_PREF_FILTERED;
2840 rib.flags |= F_PREF_OTC_LEAK;
2842 rib.flags |= F_PREF_INVALID;
2845 rib.flags |= F_PREF_STALE;
2848 rib.path_id = p->path_id;
2849 rib.flags |= F_PREF_PATH_ID;
2853 rib.path_id = p->path_id_tx;
2854 rib.flags |= F_PREF_PATH_ID;
2860 sizeof(rib) + aslen)) == NULL)
2862 if (imsg_add(wbuf, &rib, sizeof(rib)) == -1 ||
2964 TAILQ_FOREACH(p, &re->prefix_h, entry.list.rib)
3054 if (strcmp(req->rib, "Adj-RIB-Out") == 0)
3144 } else if ((rid = rib_find(req->rib)) == RIB_NOTFOUND) {
3145 log_warnx("%s: no such rib %s", __func__, req->rib);
3268 rid = rib_find(ctx->mrt.rib);
3270 log_warnx("non existing RIB %s for mrt dump", ctx->mrt.rib);
3302 rde_send_kroute_flush(struct rib *rib)
3304 if (imsg_compose(ibuf_main, IMSG_KROUTE_FLUSH, rib->rtableid, 0, -1,
3310 rde_send_kroute(struct rib *rib, struct prefix *new, struct prefix *old)
3353 if (!(rib->flags & F_RIB_LOCAL))
3374 if (imsg_compose(ibuf_main, type, rib->rtableid, 0, -1,
3734 if (peer->loc_rib_id != rib_find(peer->conf.rib)) {
3735 log_peer_info(&peer->conf, "rib change, reloading");
3736 peer->loc_rib_id = rib_find(peer->conf.rib);
3794 struct rib *rib = rib_byid(rid);
3795 if (rib == NULL)
3797 rde_filter_calc_skip_steps(rib->in_rules_tmp);
3800 fh = rib->in_rules;
3801 rib->in_rules = rib->in_rules_tmp;
3802 rib->in_rules_tmp = fh;
3804 switch (rib->state) {
3806 rib_free(rib);
3809 if (rib_update(rib)) {
3814 /* skip peers using a different rib */
3815 if (peer->loc_rib_id != rib->id)
3817 /* peer rib is already being flushed */
3836 rib->state = RECONF_KEEP;
3840 rde_filter_equal(rib->in_rules, rib->in_rules_tmp))
3841 /* rib is in sync */
3844 rib->name);
3845 rib->state = RECONF_RELOAD;
3849 /* new rib */
3850 rib->state = RECONF_RELOAD;
3856 filterlist_free(rib->in_rules_tmp);
3857 rib->in_rules_tmp = NULL;
3896 struct rib *rib = rib_byid(i);
3897 if (rib == NULL)
3899 rib->state = RECONF_NONE;
3900 if (rib->fibstate == RECONF_RELOAD) {
3902 rib, rde_softreconfig_sync_fib,
3906 log_info("starting fib sync for rib %s",
3907 rib->name);
3908 } else if (rib->fibstate == RECONF_REINIT) {
3910 rib, rde_softreconfig_sync_reeval,
3914 log_info("starting re-evaluation of rib %s",
3915 rib->name);
3937 /* dump the full table to neighbors that changed rib */
3946 struct rib *rib = rib_byid(i);
3947 if (rib == NULL)
3949 if (rib->state == RECONF_RELOAD) {
3951 rib, rde_softreconfig_out,
3955 log_info("starting softreconfig out for rib %s",
3956 rib->name);
3968 struct rib *rib = arg;
3971 log_info("softreconfig out done for %s", rib->name);
3984 struct rib *rib = rib_byid(i);
3985 if (rib == NULL)
3987 rib->state = RECONF_NONE;
3999 struct rib *rib;
4011 TAILQ_FOREACH(p, &re->prefix_h, entry.list.rib) {
4027 rib = rib_byid(i);
4028 if (rib == NULL)
4031 if (rib->state != RECONF_RELOAD)
4035 action = rde_filter(rib->in_rules, peer, peer, &prefix,
4040 prefix_update(rib, peer, p->path_id,
4045 prefix_update(rib, peer, p->path_id,
4050 prefix_withdraw(rib, peer, p->path_id, &prefix,
4074 struct rib *rib = arg;
4076 if (rib->flags & F_RIB_NOEVALUATE) {
4079 * all dependent adj-rib-out were already flushed
4082 TAILQ_FOREACH(p, &re->prefix_h, entry.list.rib) {
4091 TAILQ_CONCAT(&prefixes, &re->prefix_h, entry.list.rib);
4099 TAILQ_FOREACH_SAFE(p, &prefixes, entry.list.rib, next) {
4101 TAILQ_REMOVE(&prefixes, p, entry.list.rib);
4120 struct rib *rib = arg;
4123 if (rib->fibstate == RECONF_RELOAD)
4124 log_info("fib sync done for %s", rib->name);
4126 log_info("re-evaluation done for %s", rib->name);
4127 rib->fibstate = RECONF_NONE;
4142 struct rib *rib;
4154 TAILQ_FOREACH(p, &re->prefix_h, entry.list.rib) {
4184 rib = rib_byid(i);
4185 if (rib == NULL)
4189 action = rde_filter(rib->in_rules, peer, peer, &prefix,
4194 prefix_update(rib, peer, p->path_id,
4199 prefix_update(rib, peer, p->path_id,
4204 prefix_withdraw(rib, peer, p->path_id, &prefix,
4484 struct rib *rib = rib_byid(i);
4485 if (rib == NULL)
4490 prefix_update(rib, peerself, 0, path_id_tx, state, 0,
4547 struct rib *rib = rib_byid(i);
4548 if (rib == NULL)
4550 if (prefix_withdraw(rib, peerself, 0, &nc->prefix,
4569 TAILQ_FOREACH(p, &re->prefix_h, entry.list.rib) {
4608 struct rib *rib = rib_byid(i);
4609 if (rib == NULL)
4611 if (prefix_withdraw(rib, peerself, 0, &addr, prefixlen) == 1)
4682 TAILQ_FOREACH(p, &re->prefix_h, entry.list.rib) {