diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2012-03-23 00:26:26 +0100 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2012-03-23 00:26:26 +0100 |
commit | 72aed1a00ba9e18116d6fd907f7e1a36d0a0a583 (patch) | |
tree | c753fb8b35af591812c5d64eeccdb6f9c9ff0c30 /sysdep/unix/krt.c | |
parent | 89647357af0d8507652f257f1e8f5679fe9a7078 (diff) |
Adds krt_source route attribute.
Thanks Jeremie Dimino for the original patch.
Diffstat (limited to 'sysdep/unix/krt.c')
-rw-r--r-- | sysdep/unix/krt.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/sysdep/unix/krt.c b/sysdep/unix/krt.c index 0fb8c4f9..de1188a1 100644 --- a/sysdep/unix/krt.c +++ b/sysdep/unix/krt.c @@ -907,12 +907,29 @@ krt_shutdown(struct proto *P) return PS_DOWN; } +struct ea_list * +krt_make_tmp_attrs(struct rte *rt, struct linpool *pool) +{ + struct ea_list *l = lp_alloc(pool, sizeof(struct ea_list) + 1 * sizeof(eattr)); + + l->next = NULL; + l->flags = EALF_SORTED; + l->count = 1; + l->attrs[0].id = EA_KRT_SOURCE; + l->attrs[0].flags = 0; + l->attrs[0].type = EAF_TYPE_INT | EAF_TEMP; + l->attrs[0].u.data = rt->u.krt.proto; + + return l; +} + static struct proto * krt_init(struct proto_config *c) { struct krt_proto *p = proto_new(c, sizeof(struct krt_proto)); p->p.accept_ra_types = RA_OPTIMAL; + p->p.make_tmp_attrs = krt_make_tmp_attrs; p->p.import_control = krt_import_control; p->p.rt_notify = krt_notify; @@ -952,12 +969,18 @@ krt_get_attr(eattr * a, byte * buf, int buflen UNUSED) { switch (a->id) { + case EA_KRT_SOURCE: + bsprintf(buf, "source"); + return GA_NAME; + case EA_KRT_PREFSRC: bsprintf(buf, "prefsrc"); return GA_NAME; + case EA_KRT_REALM: bsprintf(buf, "realm"); return GA_NAME; + default: return GA_UNKNOWN; } |