diff --git a/nest/config.Y b/nest/config.Y index b0f9642f..e672d730 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -629,7 +629,7 @@ r_args_for: net_fill_ip_host($$, SYM_VAL($1).ip); } else if (($1->class == (SYM_CONSTANT | T_NET)) && net_type_match(SYM_VAL($1).net, NB_IP | NB_VPN)) - $$ = SYM_VAL($1).net; + $$ = (net_addr *) SYM_VAL($1).net; /* Avoid const warning */ else cf_error("IP address or network expected"); } diff --git a/proto/ospf/config.Y b/proto/ospf/config.Y index 8a1e0052..9cfc70a9 100644 --- a/proto/ospf/config.Y +++ b/proto/ospf/config.Y @@ -148,7 +148,7 @@ CF_KEYWORDS(ELIGIBLE, POLL, NETWORKS, HIDDEN, VIRTUAL, CHECK, LINK, ONLY, BFD) CF_KEYWORDS(RX, BUFFER, LARGE, NORMAL, STUBNET, HIDDEN, SUMMARY, TAG, EXTERNAL) CF_KEYWORDS(WAIT, DELAY, LSADB, ECMP, LIMIT, WEIGHT, NSSA, TRANSLATOR, STABILITY) CF_KEYWORDS(GLOBAL, LSID, ROUTER, SELF, INSTANCE, REAL, NETMASK, TX, PRIORITY, LENGTH) -CF_KEYWORDS(SECONDARY, MERGE, LSA, SUPPRESSION, OSPF2, OSPF3) +CF_KEYWORDS(SECONDARY, MERGE, LSA, SUPPRESSION) %type lsadb_args %type ospf_variant nbma_eligible diff --git a/sysdep/bsd/krt-sock.c b/sysdep/bsd/krt-sock.c index c65cba65..d353d629 100644 --- a/sysdep/bsd/krt-sock.c +++ b/sysdep/bsd/krt-sock.c @@ -146,8 +146,9 @@ krt_capable(rte *e) { rta *a = e->attrs; + /* XXXX device routes are broken */ return - ((a->dest == RTD_UNICAST && !a->nh.next) /* No multipath support */ + ((a->dest == RTD_UNICAST && ipa_nonzero(a->nh.gw) && !a->nh.next) /* No multipath support */ #ifdef RTF_REJECT || a->dest == RTD_UNREACHABLE #endif @@ -254,7 +255,7 @@ krt_send_route(struct krt_proto *p, int cmd, rte *e) af = AF_INET6; break; default: - log(L_ERR "KRT: Not sending VPN route %N to kernel", net->n.addr); + log(L_ERR "KRT: Not sending route %N to kernel", net->n.addr); return -1; } @@ -299,6 +300,7 @@ krt_send_route(struct krt_proto *p, int cmd, rte *e) sockaddr_fill(&gate, ipa_is_ip4(i->addr->ip) ? AF_INET : AF_INET6, i->addr->ip, NULL, 0); msg.rtm.rtm_addrs |= RTA_GATEWAY; + break; } default: diff --git a/sysdep/unix/krt.c b/sysdep/unix/krt.c index c6ff6275..a1b10cea 100644 --- a/sysdep/unix/krt.c +++ b/sysdep/unix/krt.c @@ -1142,7 +1142,9 @@ krt_start(struct proto *P) { case NET_IP4: p->af = AF_INET; break; case NET_IP6: p->af = AF_INET6; break; +#ifdef AF_MPLS case NET_MPLS: p->af = AF_MPLS; break; +#endif default: log(L_ERR "KRT: Tried to start with strange net type: %d", p->p.net_type); return PS_START; break; }