X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=system-linux.c;h=4299a6136260521d2537339f450d18da411e669c;hp=f5c900db2185ff5b6e17cc5228bc3f04208f92aa;hb=2674941b06c1ec67f1aff1bff9212e1372106641;hpb=0b66ee22a3a339188ab2b8661c6af62883be93c2 diff --git a/system-linux.c b/system-linux.c index f5c900d..4299a61 100644 --- a/system-linux.c +++ b/system-linux.c @@ -36,6 +36,10 @@ #include #include +#ifndef RTN_FAILED_POLICY +#define RTN_FAILED_POLICY 12 +#endif + #include #include #include @@ -918,17 +922,21 @@ static int system_addr(struct device *dev, struct device_addr *addr, int cmd) struct ifa_cacheinfo cinfo = {0xffffffffU, 0xffffffffU, 0, 0}; if (addr->preferred_until) { - int preferred = addr->preferred_until - now; + int64_t preferred = addr->preferred_until - now; if (preferred < 0) preferred = 0; + else if (preferred > UINT32_MAX) + preferred = UINT32_MAX; cinfo.ifa_prefered = preferred; } if (addr->valid_until) { - int valid = addr->valid_until - now; + int64_t valid = addr->valid_until - now; if (valid <= 0) return -1; + else if (valid > UINT32_MAX) + valid = UINT32_MAX; cinfo.ifa_valid = valid; } @@ -1251,6 +1259,8 @@ bool system_resolve_iprule_action(const char *action, unsigned int *id) n = RTN_UNICAST; else if (!strcmp(action, "throw")) n = RTN_THROW; + else if (!strcmp(action, "failed_policy")) + n = RTN_FAILED_POLICY; else { n = strtoul(action, &e, 0); if (!e || *e || e == action || n > 255)