config: make RA retransTime configurable via uci
authorHans Dedecker <dedeckeh@gmail.com>
Fri, 12 May 2017 08:53:25 +0000 (10:53 +0200)
committerHans Dedecker <dedeckeh@gmail.com>
Fri, 12 May 2017 08:53:25 +0000 (10:53 +0200)
Allow to specify the router advertisement retrans time via the uci
parameter ra_retranstime. If retransmit time is not configured the
value is set to 0 in RA message meaning undefined.

README
src/config.c
src/odhcpd.h
src/router.c

diff --git a/README b/README
index 1bcc08777f2bf12e49b62f834f342d559704f626..fbcd99394f609d5512ee6a2f22d169bd7204c2e4 100644 (file)
--- a/README
+++ b/README
@@ -118,6 +118,8 @@ ra_useleasetime             bool    0                       Use configured leasetime as
                                                        valid lifetime of a prefix
 ra_reachabletime       integer 0                       Reachable Time in milliseconds to be
                                                        advertised in RA messages
+ra_retranstime         integer 0                       Retransmit Time in milliseconds to be
+                                                       advertised in RA messages
 ra_hoplimit            integer 0                       Current hoplimit to be advertised
                                                        in RA messages
 ra_mtu                 integer 0                       MTU to be advertised in
index 211ac1fd7a9a9b49df2d4c751c84dfab6bdc3091..93489852d7986b31d3a75e60079826556499b2c1 100644 (file)
@@ -51,6 +51,7 @@ enum {
        IFACE_ATTR_RA_LIFETIME,
        IFACE_ATTR_RA_USELEASETIME,
        IFACE_ATTR_RA_REACHABLETIME,
+       IFACE_ATTR_RA_RETRANSTIME,
        IFACE_ATTR_RA_HOPLIMIT,
        IFACE_ATTR_RA_MTU,
        IFACE_ATTR_PD_MANAGER,
@@ -92,6 +93,7 @@ static const struct blobmsg_policy iface_attrs[IFACE_ATTR_MAX] = {
        [IFACE_ATTR_RA_LIFETIME] = { .name = "ra_lifetime", .type = BLOBMSG_TYPE_INT32 },
        [IFACE_ATTR_RA_USELEASETIME] = { .name = "ra_useleasetime", .type = BLOBMSG_TYPE_BOOL },
        [IFACE_ATTR_RA_REACHABLETIME] = { .name = "ra_reachabletime", .type = BLOBMSG_TYPE_INT32 },
+       [IFACE_ATTR_RA_RETRANSTIME] = { .name = "ra_retranstime", .type = BLOBMSG_TYPE_INT32 },
        [IFACE_ATTR_RA_HOPLIMIT] = { .name = "ra_hoplimit", .type = BLOBMSG_TYPE_INT32 },
        [IFACE_ATTR_RA_MTU] = { .name = "ra_mtu", .type = BLOBMSG_TYPE_INT32 },
        [IFACE_ATTR_NDPROXY_ROUTING] = { .name = "ndproxy_routing", .type = BLOBMSG_TYPE_BOOL },
@@ -606,6 +608,9 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr
                        goto err;
        }
 
+       if ((c = tb[IFACE_ATTR_RA_RETRANSTIME]))
+               iface->ra_retranstime = blobmsg_get_u32(c);
+
        if ((c = tb[IFACE_ATTR_RA_HOPLIMIT])) {
                iface->ra_hoplimit = blobmsg_get_u32(c);
                if (iface->ra_hoplimit > 255)
index a50fd7664b2d8c1be77367bcb362801b8f4416f8..bb4702ecdda9b22afafea38c2968bd64c2fced36 100644 (file)
@@ -163,6 +163,7 @@ struct interface {
        int ra_mininterval;
        int ra_lifetime;
        uint32_t ra_reachabletime;
+       uint32_t ra_retranstime;
        uint32_t ra_hoplimit;
        uint32_t ra_mtu;
 
index 7600e2f0a7ae503bcba1e3509ef24796a976b712..8a2f8166ff0ef13f7a871544eded2a3190fb32fe 100644 (file)
@@ -297,6 +297,7 @@ static uint64_t send_router_advert(struct interface *iface, const struct in6_add
                adv.h.nd_ra_flags_reserved |= ND_RA_PREF_HIGH;
 
        adv.h.nd_ra_reachable = htonl(iface->ra_reachabletime);
+       adv.h.nd_ra_retransmit = htonl(iface->ra_retranstime);
 
        odhcpd_get_mac(iface, adv.lladdr.data);