summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaria Matejka <mq@ucw.cz>2022-10-05 15:17:51 +0200
committerMaria Matejka <mq@ucw.cz>2022-10-05 15:17:51 +0200
commit1e01721525032bf3608aa457cafde58543b8a977 (patch)
treed73f8020f23615dcda6f4acbb10fdb17e338cb64
parent7911148b22a9efb1fd200b23e3c71cb1df3a0620 (diff)
parentdc9351d326b9d2d8bcb7e9a0e5126878c2b02762 (diff)
Merge commit 'dc9351d3' into HEAD
-rw-r--r--nest/protocol.h3
-rw-r--r--sysdep/linux/netlink.c3
-rw-r--r--sysdep/unix/krt.c7
3 files changed, 9 insertions, 4 deletions
diff --git a/nest/protocol.h b/nest/protocol.h
index 88bff092..892d1890 100644
--- a/nest/protocol.h
+++ b/nest/protocol.h
@@ -180,15 +180,12 @@ struct proto {
* Routing entry hooks (called only for routes belonging to this protocol):
*
* rte_recalculate Called at the beginning of the best route selection
- * rte_better Compare two rte's and decide which one is better (1=first, 0=second).
- * rte_same Compare two rte's and decide whether they are identical (1=yes, 0=no).
* rte_mergable Compare two rte's and decide whether they could be merged (1=yes, 0=no).
* rte_insert Called whenever a rte is inserted to a routing table.
* rte_remove Called whenever a rte is removed from the routing table.
*/
int (*rte_recalculate)(struct rtable_private *, struct network *, struct rte *, struct rte *, struct rte *);
- int (*rte_better)(struct rte *, struct rte *);
int (*rte_mergable)(struct rte *, struct rte *);
void (*rte_insert)(struct network *, struct rte *);
void (*rte_remove)(struct network *, struct rte *);
diff --git a/sysdep/linux/netlink.c b/sysdep/linux/netlink.c
index 94a37a73..3443957b 100644
--- a/sysdep/linux/netlink.c
+++ b/sysdep/linux/netlink.c
@@ -1874,6 +1874,9 @@ nl_parse_route(struct nl_parse_state *s, struct nlmsghdr *h)
return;
}
+ if (nhad.ad.length)
+ ea_set_attr(&ra, EA_LITERAL_DIRECT_ADATA(&ea_gen_nexthop, 0, &nhad.ad));
+
if (i->rtm_scope != def_scope)
ea_set_attr(&ra,
EA_LITERAL_EMBEDDED(&ea_krt_scope, 0, i->rtm_scope));
diff --git a/sysdep/unix/krt.c b/sysdep/unix/krt.c
index 080c3a03..b0033a65 100644
--- a/sysdep/unix/krt.c
+++ b/sysdep/unix/krt.c
@@ -835,6 +835,10 @@ krt_postconfig(struct proto_config *CF)
krt_sys_postconfig(cf);
}
+struct rte_owner_class krt_rte_owner_class = {
+ .rte_better = krt_rte_better,
+};
+
static struct proto *
krt_init(struct proto_config *CF)
{
@@ -848,7 +852,8 @@ krt_init(struct proto_config *CF)
p->p.if_notify = krt_if_notify;
p->p.reload_routes = krt_reload_routes;
p->p.feed_end = krt_feed_end;
- p->p.rte_better = krt_rte_better;
+
+ p->p.sources.class = &krt_rte_owner_class;
krt_sys_init(p);
return &p->p;