summaryrefslogtreecommitdiff
path: root/sysdep/linux
diff options
context:
space:
mode:
Diffstat (limited to 'sysdep/linux')
-rw-r--r--sysdep/linux/krt-sys.h38
-rw-r--r--sysdep/linux/netlink.c23
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];