}
}
-void
-l2vpn_sync_pws(int af, union ldpd_addr *addr)
-{
- struct l2vpn *l2vpn;
- struct l2vpn_pw *pw;
- struct fec fec;
- struct fec_node *fn;
- struct fec_nh *fnh;
-
- RB_FOREACH(l2vpn, l2vpn_head, &ldeconf->l2vpn_tree) {
- RB_FOREACH(pw, l2vpn_pw_head, &l2vpn->pw_tree) {
- if (af != pw->af || ldp_addrcmp(af, &pw->addr, addr))
- continue;
-
- l2vpn_pw_fec(pw, &fec);
- fn = (struct fec_node *)fec_find(&ft, &fec);
- if (fn == NULL)
- continue;
- fnh = fec_nh_find(fn, AF_INET, (union ldpd_addr *)
- &pw->lsr_id, 0, 0);
- if (fnh == NULL)
- continue;
-
- if (l2vpn_pw_ok(pw, fnh))
- lde_send_change_klabel(fn, fnh);
- else
- lde_send_delete_klabel(fn, fnh);
- }
- }
-}
-
void
l2vpn_pw_ctl(pid_t pid)
{
lde_imsg_compose_parent(IMSG_KLABEL_CHANGE, 0, &kr,
sizeof(kr));
-
- if (fn->fec.u.ipv4.prefixlen == 32)
- l2vpn_sync_pws(AF_INET, (union ldpd_addr *)
- &fn->fec.u.ipv4.prefix);
break;
case FEC_TYPE_IPV6:
memset(&kr, 0, sizeof(kr));
lde_imsg_compose_parent(IMSG_KLABEL_CHANGE, 0, &kr,
sizeof(kr));
-
- if (fn->fec.u.ipv6.prefixlen == 128)
- l2vpn_sync_pws(AF_INET6, (union ldpd_addr *)
- &fn->fec.u.ipv6.prefix);
break;
case FEC_TYPE_PWID:
if (fn->local_label == NO_LABEL ||
lde_imsg_compose_parent(IMSG_KLABEL_DELETE, 0, &kr,
sizeof(kr));
-
- if (fn->fec.u.ipv4.prefixlen == 32)
- l2vpn_sync_pws(AF_INET, (union ldpd_addr *)
- &fn->fec.u.ipv4.prefix);
break;
case FEC_TYPE_IPV6:
memset(&kr, 0, sizeof(kr));
lde_imsg_compose_parent(IMSG_KLABEL_DELETE, 0, &kr,
sizeof(kr));
-
- if (fn->fec.u.ipv6.prefixlen == 128)
- l2vpn_sync_pws(AF_INET6, (union ldpd_addr *)
- &fn->fec.u.ipv6.prefix);
break;
case FEC_TYPE_PWID:
pw = (struct l2vpn_pw *) fn->data;
void l2vpn_recv_pw_status(struct lde_nbr *, struct notify_msg *);
void l2vpn_recv_pw_status_wcard(struct lde_nbr *,
struct notify_msg *);
-void l2vpn_sync_pws(int, union ldpd_addr *);
void l2vpn_pw_ctl(pid_t);
void l2vpn_binding_ctl(pid_t);