diff options
Diffstat (limited to 'sysdep/linux')
-rw-r--r-- | sysdep/linux/krt-sys.h | 38 | ||||
-rw-r--r-- | sysdep/linux/netlink.c | 23 |
2 files changed, 31 insertions, 30 deletions
diff --git a/sysdep/linux/krt-sys.h b/sysdep/linux/krt-sys.h index 76ae29b7..2b8cdaa7 100644 --- a/sysdep/linux/krt-sys.h +++ b/sysdep/linux/krt-sys.h @@ -34,9 +34,9 @@ static inline struct ifa * kif_get_primary_ip(struct iface *i UNUSED) { return N #define KRT_ALLOW_MERGE_PATHS 1 -#define EA_KRT_PREFSRC EA_CODE(EAP_KRT, 0x10) -#define EA_KRT_REALM EA_CODE(EAP_KRT, 0x11) -#define EA_KRT_SCOPE EA_CODE(EAP_KRT, 0x12) +#define EA_KRT_PREFSRC EA_CODE(PROTOCOL_KERNEL, 0x10) +#define EA_KRT_REALM EA_CODE(PROTOCOL_KERNEL, 0x11) +#define EA_KRT_SCOPE EA_CODE(PROTOCOL_KERNEL, 0x12) #define KRT_METRICS_MAX 0x10 /* RTAX_QUICKACK+1 */ @@ -48,22 +48,22 @@ static inline struct ifa * kif_get_primary_ip(struct iface *i UNUSED) { return N * Following attributes are parts of RTA_METRICS kernel route attribute, their * ids must be consistent with their RTAX_* constants (+ KRT_METRICS_OFFSET) */ -#define EA_KRT_METRICS EA_CODE(EAP_KRT, 0x20) /* Dummy one */ -#define EA_KRT_LOCK EA_CODE(EAP_KRT, 0x21) -#define EA_KRT_MTU EA_CODE(EAP_KRT, 0x22) -#define EA_KRT_WINDOW EA_CODE(EAP_KRT, 0x23) -#define EA_KRT_RTT EA_CODE(EAP_KRT, 0x24) -#define EA_KRT_RTTVAR EA_CODE(EAP_KRT, 0x25) -#define EA_KRT_SSTRESH EA_CODE(EAP_KRT, 0x26) -#define EA_KRT_CWND EA_CODE(EAP_KRT, 0x27) -#define EA_KRT_ADVMSS EA_CODE(EAP_KRT, 0x28) -#define EA_KRT_REORDERING EA_CODE(EAP_KRT, 0x29) -#define EA_KRT_HOPLIMIT EA_CODE(EAP_KRT, 0x2a) -#define EA_KRT_INITCWND EA_CODE(EAP_KRT, 0x2b) -#define EA_KRT_FEATURES EA_CODE(EAP_KRT, 0x2c) -#define EA_KRT_RTO_MIN EA_CODE(EAP_KRT, 0x2d) -#define EA_KRT_INITRWND EA_CODE(EAP_KRT, 0x2e) -#define EA_KRT_QUICKACK EA_CODE(EAP_KRT, 0x2f) +#define EA_KRT_METRICS EA_CODE(PROTOCOL_KERNEL, 0x20) /* Dummy one */ +#define EA_KRT_LOCK EA_CODE(PROTOCOL_KERNEL, 0x21) +#define EA_KRT_MTU EA_CODE(PROTOCOL_KERNEL, 0x22) +#define EA_KRT_WINDOW EA_CODE(PROTOCOL_KERNEL, 0x23) +#define EA_KRT_RTT EA_CODE(PROTOCOL_KERNEL, 0x24) +#define EA_KRT_RTTVAR EA_CODE(PROTOCOL_KERNEL, 0x25) +#define EA_KRT_SSTRESH EA_CODE(PROTOCOL_KERNEL, 0x26) +#define EA_KRT_CWND EA_CODE(PROTOCOL_KERNEL, 0x27) +#define EA_KRT_ADVMSS EA_CODE(PROTOCOL_KERNEL, 0x28) +#define EA_KRT_REORDERING EA_CODE(PROTOCOL_KERNEL, 0x29) +#define EA_KRT_HOPLIMIT EA_CODE(PROTOCOL_KERNEL, 0x2a) +#define EA_KRT_INITCWND EA_CODE(PROTOCOL_KERNEL, 0x2b) +#define EA_KRT_FEATURES EA_CODE(PROTOCOL_KERNEL, 0x2c) +#define EA_KRT_RTO_MIN EA_CODE(PROTOCOL_KERNEL, 0x2d) +#define EA_KRT_INITRWND EA_CODE(PROTOCOL_KERNEL, 0x2e) +#define EA_KRT_QUICKACK EA_CODE(PROTOCOL_KERNEL, 0x2f) /* Bits of EA_KRT_LOCK, also based on RTAX_* constants */ #define EA_KRT_LOCK_MTU EA_KRT_LOCK | EA_BIT(0x2) diff --git a/sysdep/linux/netlink.c b/sysdep/linux/netlink.c index 84591eb2..73f77147 100644 --- a/sysdep/linux/netlink.c +++ b/sysdep/linux/netlink.c @@ -1177,11 +1177,12 @@ nh_bufsize(struct nexthop *nh) } static int -nl_send_route(struct krt_proto *p, rte *e, struct ea_list *eattrs, int op, int dest, struct nexthop *nh) +nl_send_route(struct krt_proto *p, rte *e, int op, int dest, struct nexthop *nh) { eattr *ea; net *net = e->net; rta *a = e->attrs; + ea_list *eattrs = a->eattrs; int bufsize = 128 + KRT_METRICS_MAX*8 + nh_bufsize(&(a->nh)); u32 priority = 0; @@ -1328,7 +1329,7 @@ dest: } static inline int -nl_add_rte(struct krt_proto *p, rte *e, struct ea_list *eattrs) +nl_add_rte(struct krt_proto *p, rte *e) { rta *a = e->attrs; int err = 0; @@ -1337,34 +1338,34 @@ nl_add_rte(struct krt_proto *p, rte *e, struct ea_list *eattrs) { struct nexthop *nh = &(a->nh); - err = nl_send_route(p, e, eattrs, NL_OP_ADD, RTD_UNICAST, nh); + err = nl_send_route(p, e, NL_OP_ADD, RTD_UNICAST, nh); if (err < 0) return err; for (nh = nh->next; nh; nh = nh->next) - err += nl_send_route(p, e, eattrs, NL_OP_APPEND, RTD_UNICAST, nh); + err += nl_send_route(p, e, NL_OP_APPEND, RTD_UNICAST, nh); return err; } - return nl_send_route(p, e, eattrs, NL_OP_ADD, a->dest, &(a->nh)); + return nl_send_route(p, e, NL_OP_ADD, a->dest, &(a->nh)); } static inline int -nl_delete_rte(struct krt_proto *p, rte *e, struct ea_list *eattrs) +nl_delete_rte(struct krt_proto *p, rte *e) { int err = 0; /* For IPv6, we just repeatedly request DELETE until we get error */ do - err = nl_send_route(p, e, eattrs, NL_OP_DELETE, RTD_NONE, NULL); + err = nl_send_route(p, e, NL_OP_DELETE, RTD_NONE, NULL); while (krt_ecmp6(p) && !err); return err; } void -krt_replace_rte(struct krt_proto *p, net *n, rte *new, rte *old, struct ea_list *eattrs) +krt_replace_rte(struct krt_proto *p, net *n, rte *new, rte *old) { int err = 0; @@ -1380,10 +1381,10 @@ krt_replace_rte(struct krt_proto *p, net *n, rte *new, rte *old, struct ea_list */ if (old) - nl_delete_rte(p, old, eattrs); + nl_delete_rte(p, old); if (new) - err = nl_add_rte(p, new, eattrs); + err = nl_add_rte(p, new); if (err < 0) n->n.flags |= KRF_SYNC_ERROR; @@ -1751,7 +1752,7 @@ nl_parse_route(struct nl_parse_state *s, struct nlmsghdr *h) for (t = 1; t < KRT_METRICS_MAX; t++) if (metrics[0] & (1 << t)) { - ea->attrs[n].id = EA_CODE(EAP_KRT, KRT_METRICS_OFFSET + t); + ea->attrs[n].id = EA_CODE(PROTOCOL_KERNEL, KRT_METRICS_OFFSET + t); ea->attrs[n].flags = 0; ea->attrs[n].type = EAF_TYPE_INT; /* FIXME: Some are EAF_TYPE_BITFIELD */ ea->attrs[n].u.data = metrics[t]; |