kpw
static int kmpw_install(const char *, struct kpw *);
kmpw_set(struct kpw *kpw)
kif = kif_find(kpw->ifindex);
kpw->ifindex);
if (kif->kpw == NULL)
kif->kpw = malloc(sizeof(*kif->kpw));
*kif->kpw = *kpw;
return (kmpw_install(kif->k.ifname, kpw));
kmpw_unset(struct kpw *kpw)
kif = kif_find(kpw->ifindex);
kpw->ifindex);
if (kif->kpw == NULL) {
free(kif->kpw);
kif->kpw = NULL;
kmpw_install(const char *ifname, struct kpw *kpw)
switch (kpw->pw_type) {
kpw->pw_type);
if (kpw->flags & F_PW_CWORD)
memcpy(&imr.imr_nexthop, addr2sa(kpw->af, &kpw->nexthop, 0),
imr.imr_lshim.shim_label = kpw->local_label;
imr.imr_rshim.shim_label = kpw->remote_label;
if (kif->kpw)
kmpw_install(kif->k.ifname, kif->kpw);
if (kif->kpw)
struct kpw *kpw;
struct kpw kpw;
memset(&kpw, 0, sizeof(kpw));
kpw.ifindex = pw->ifindex;
kpw.pw_type = fn->fec.u.pwid.type;
kpw.af = pw->af;
kpw.nexthop = pw->addr;
kpw.local_label = fn->local_label;
kpw.remote_label = fnh->remote_label;
kpw.flags = pw->flags;
lde_imsg_compose_parent(IMSG_KPWLABEL_CHANGE, 0, &kpw,
sizeof(kpw));
struct kpw kpw;
memset(&kpw, 0, sizeof(kpw));
kpw.ifindex = pw->ifindex;
kpw.pw_type = fn->fec.u.pwid.type;
kpw.af = pw->af;
kpw.nexthop = pw->addr;
kpw.local_label = fn->local_label;
kpw.remote_label = fnh->remote_label;
kpw.flags = pw->flags;
lde_imsg_compose_parent(IMSG_KPWLABEL_DELETE, 0, &kpw,
sizeof(kpw));
sizeof(struct kpw))
sizeof(struct kpw))
int kmpw_set(struct kpw *);
int kmpw_unset(struct kpw *);