This patch combined with an corresponding kernel
patch makes it possible to route link-local
addresses which, in practice, means DHCPv6, RA, RS
are now functional.
Signed-off-by: Michal Kazior <michal.kaz...@tieto.com>
---
 main.c  |  3 +++
 route.c | 22 ++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/main.c b/main.c
index e1d1dc997b6f..30906b2df2e9 100644
--- a/main.c
+++ b/main.c
@@ -1341,6 +1341,9 @@ static int usage(const char *progname)
                        "       -P              Disable DHCP options parsing\n"
                        "       -L <ipaddr>     Enable local access using 
<ipaddr> as source address\n"
                        "       -6              Enable IPv6 support\n"
+#ifdef RTAX_FEATURE_XFACE
+                       "IPv6 link-local routing capability is compiled in.\n"
+#endif
                        "\n",
                progname);
        return -1;
diff --git a/route.c b/route.c
index fc15e9945aaf..05d8cee18214 100644
--- a/route.c
+++ b/route.c
@@ -191,6 +191,13 @@ rtnl_route_request(struct relayd_interface *rif, struct 
relayd_host *host,
                        struct rtattr rta;
                        int ifindex;
                } __packed dev;
+               struct {
+                       struct rtattr rta;
+                       struct {
+                               struct rtattr rta;
+                               int val;
+                       } __packed features;
+               } __packed metrics;
                union {
                        struct rtnl_addr4 addr4[3];
                        struct rtnl_addr6 addr6[3];
@@ -209,6 +216,21 @@ rtnl_route_request(struct relayd_interface *rif, struct 
relayd_host *host,
                        .rta_type = RTA_OIF,
                        .rta_len = sizeof(req.dev),
                },
+               .metrics = {
+                       .rta = {
+                               .rta_type = RTA_METRICS,
+                               .rta_len = sizeof(req.metrics),
+                       },
+                       .features = {
+                               .rta = {
+                                       .rta_type = RTAX_FEATURES,
+                                       .rta_len = sizeof(req.metrics.features),
+                               },
+#ifdef RTAX_FEATURE_XFACE
+                               .val = RTAX_FEATURE_XFACE,
+#endif
+                       },
+               },
        };
        int pktlen = sizeof(req) - sizeof(req.addrs);
        void *addrs = &req.addrs;
-- 
2.1.4
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to