system-linux: remove redundant check for strtoul() return value
[project/netifd.git] / system-linux.c
index 88880477e0816736c5a9c10961b9d04822905dbf..ddc31d82ed182019af6b8b73959957a0874307ab 100644 (file)
@@ -1896,7 +1896,8 @@ static int system_rt(struct device *dev, struct device_route *route, int cmd)
                                rtm.rtm_type == RTN_ANYCAST) {
                        rtm.rtm_scope = RT_SCOPE_LINK;
                } else if (rtm.rtm_type == RTN_BLACKHOLE || rtm.rtm_type == RTN_UNREACHABLE ||
-                               rtm.rtm_type == RTN_PROHIBIT || rtm.rtm_type == RTN_FAILED_POLICY) {
+                               rtm.rtm_type == RTN_PROHIBIT || rtm.rtm_type == RTN_FAILED_POLICY ||
+                               rtm.rtm_type == RTN_THROW) {
                        rtm.rtm_scope = RT_SCOPE_UNIVERSE;
                        dev = NULL;
                }
@@ -1987,8 +1988,8 @@ bool system_resolve_rt_proto(const char *type, unsigned int *id)
        FILE *f;
        char *e, buf[128];
        unsigned int n, proto = 256;
-
-       if ((n = strtoul(type, &e, 0)) >= 0 && !*e && e != type)
+       n = strtoul(type, &e, 0);
+       if (!*e && e != type)
                proto = n;
        else if (!strcmp(type, "unspec"))
                proto = RTPROT_UNSPEC;
@@ -2316,31 +2317,41 @@ static int system_add_gre_tunnel(const char *name, const char *kind,
                }
        }
 
-       if ((cur = tb[TUNNEL_ATTR_INFO]) && (blobmsg_type(cur) == BLOBMSG_TYPE_STRING)) {
-               uint8_t icsum, ocsum, iseqno, oseqno;
-               if (sscanf(blobmsg_get_string(cur), "%u,%u,%hhu,%hhu,%hhu,%hhu",
-                       &ikey, &okey, &icsum, &ocsum, &iseqno, &oseqno) < 6) {
-                       ret = -EINVAL;
-                       goto failure;
-               }
+       if ((cur = tb[TUNNEL_ATTR_DATA])) {
+               struct blob_attr *tb_data[__GRE_DATA_ATTR_MAX];
 
-               if (ikey)
-                       iflags |= GRE_KEY;
+               blobmsg_parse(gre_data_attr_list.params, __GRE_DATA_ATTR_MAX, tb_data,
+                       blobmsg_data(cur), blobmsg_len(cur));
 
-               if (okey)
-                       oflags |= GRE_KEY;
+               if ((cur = tb_data[GRE_DATA_IKEY])) {
+                       if ((ikey = blobmsg_get_u32(cur)))
+                               iflags |= GRE_KEY;
+               }
 
-               if (icsum)
-                       iflags |= GRE_CSUM;
+               if ((cur = tb_data[GRE_DATA_OKEY])) {
+                       if ((okey = blobmsg_get_u32(cur)))
+                               oflags |= GRE_KEY;
+               }
 
-               if (ocsum)
-                       oflags |= GRE_CSUM;
+               if ((cur = tb_data[GRE_DATA_ICSUM])) {
+                       if (blobmsg_get_bool(cur))
+                               iflags |= GRE_CSUM;
+               }
+
+               if ((cur = tb_data[GRE_DATA_OCSUM])) {
+                       if (blobmsg_get_bool(cur))
+                               oflags |= GRE_CSUM;
+               }
 
-               if (iseqno)
-                       iflags |= GRE_SEQ;
+               if ((cur = tb_data[GRE_DATA_ISEQNO])) {
+                       if (blobmsg_get_bool(cur))
+                               iflags |= GRE_SEQ;
+               }
 
-               if (oseqno)
-                       oflags |= GRE_SEQ;
+               if ((cur = tb[GRE_DATA_OSEQNO])) {
+                       if (blobmsg_get_bool(cur))
+                               oflags |= GRE_SEQ;
+               }
        }
 
        if (v6) {
@@ -2452,7 +2463,6 @@ static int system_add_vti_tunnel(const char *name, const char *kind,
        struct nl_msg *nlm;
        struct ifinfomsg ifi = { .ifi_family = AF_UNSPEC, };
        struct blob_attr *cur;
-       uint32_t ikey = 0, okey = 0;
        int ret = 0;
 
        nlm = nlmsg_alloc_simple(RTM_NEWLINK, NLM_F_REQUEST | NLM_F_REPLACE | NLM_F_CREATE);
@@ -2478,14 +2488,6 @@ static int system_add_vti_tunnel(const char *name, const char *kind,
        if (link)
                nla_put_u32(nlm, IFLA_VTI_LINK, link);
 
-       if ((cur = tb[TUNNEL_ATTR_INFO]) && (blobmsg_type(cur) == BLOBMSG_TYPE_STRING)) {
-               if (sscanf(blobmsg_get_string(cur), "%u,%u",
-                       &ikey, &okey) < 2) {
-                       ret = -EINVAL;
-                       goto failure;
-               }
-       }
-
        if (v6) {
                struct in6_addr in6buf;
                if ((cur = tb[TUNNEL_ATTR_LOCAL])) {
@@ -2525,11 +2527,23 @@ static int system_add_vti_tunnel(const char *name, const char *kind,
 
        }
 
-       if (okey)
-               nla_put_u32(nlm, IFLA_VTI_OKEY, htonl(okey));
+       if ((cur = tb[TUNNEL_ATTR_DATA])) {
+               struct blob_attr *tb_data[__VTI_DATA_ATTR_MAX];
+               uint32_t ikey = 0, okey = 0;
 
-       if (ikey)
-               nla_put_u32(nlm, IFLA_VTI_IKEY, htonl(ikey));
+               blobmsg_parse(vti_data_attr_list.params, __VTI_DATA_ATTR_MAX, tb_data,
+                       blobmsg_data(cur), blobmsg_len(cur));
+
+               if ((cur = tb_data[VTI_DATA_IKEY])) {
+                       if ((ikey = blobmsg_get_u32(cur)))
+                               nla_put_u32(nlm, IFLA_VTI_IKEY, htonl(ikey));
+               }
+
+               if ((cur = tb_data[VTI_DATA_OKEY])) {
+                       if ((okey = blobmsg_get_u32(cur)))
+                               nla_put_u32(nlm, IFLA_VTI_OKEY, htonl(okey));
+               }
+       }
 
        nla_nest_end(nlm, infodata);
        nla_nest_end(nlm, linkinfo);