From b11f3b54c842117e22e2f5cf1561ea34eee8dfcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Ter=C3=A4s?= Date: Mon, 2 Nov 2015 16:50:07 +0200 Subject: zebra: implement per-route mtu handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commits allow overriding MTU using netlink attributes on per-route basis. This is useful for routing protocols that can advertice prefix specific MTUs between routers (e.g. NHRP). Signed-off-by: Timo Teräs --- zebra/zserv.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'zebra/zserv.c') diff --git a/zebra/zserv.c b/zebra/zserv.c index e26c8cac..7a75ed42 100644 --- a/zebra/zserv.c +++ b/zebra/zserv.c @@ -455,6 +455,8 @@ zsend_route_multipath (int cmd, struct zserv *client, struct prefix *p, stream_putc (s, rib->distance); SET_FLAG (zapi_flags, ZAPI_MESSAGE_METRIC); stream_putl (s, rib->metric); + SET_FLAG (zapi_flags, ZAPI_MESSAGE_MTU); + stream_putl (s, rib->mtu); } /* write real message flags value */ @@ -903,6 +905,9 @@ zread_ipv4_add (struct zserv *client, u_short length, vrf_id_t vrf_id) if (CHECK_FLAG (message, ZAPI_MESSAGE_METRIC)) rib->metric = stream_getl (s); + if (CHECK_FLAG (message, ZAPI_MESSAGE_MTU)) + rib->mtu = stream_getl (s); + /* Table */ rib->table=zebrad.rtm_table_default; rib_add_ipv4_multipath (&p, rib, safi); @@ -1092,15 +1097,20 @@ zread_ipv6_add (struct zserv *client, u_short length, vrf_id_t vrf_id) api.metric = stream_getl (s); else api.metric = 0; + + if (CHECK_FLAG (api.message, ZAPI_MESSAGE_MTU)) + api.mtu = stream_getl (s); + else + api.mtu = 0; if (IN6_IS_ADDR_UNSPECIFIED (&nexthop)) rib_add_ipv6 (api.type, api.flags, &p, NULL, ifindex, vrf_id, zebrad.rtm_table_default, api.metric, - api.distance, api.safi); + api.mtu, api.distance, api.safi); else rib_add_ipv6 (api.type, api.flags, &p, &nexthop, ifindex, vrf_id, zebrad.rtm_table_default, api.metric, - api.distance, api.safi); + api.mtu, api.distance, api.safi); return 0; } -- cgit v1.2.3