logic cleanup in rtnetlink code
authorMarkus Kittenberger <Markus.Kittenberger@gmx.at>
Sat, 13 Jun 2009 14:01:19 +0000 (16:01 +0200)
committerMarkus Kittenberger <Markus.Kittenberger@gmx.at>
Sat, 13 Jun 2009 14:01:19 +0000 (16:01 +0200)
src/linux/kernel_routes.c

index 5b8a724..b19a1e8 100644 (file)
@@ -162,6 +162,8 @@ olsr_netlink_send(struct nlmsghdr *n, char *buf, size_t bufSize, uint8_t flag, c
                 else if (flag == RT_DELETE_SIMILAR_AUTO_ROUTE)
                   OLSR_DEBUG(LOG_ROUTING, ". . error '%s' (%d) auto-delete similar route to %s gw %s", err_msg, errno,
                              olsr_ip_to_string(&ibuf, &nexthop->gateway), olsr_ip_to_string(&gbuf, &nexthop->gateway));
+                else if (flag == RT_LO_IP)
+                  OLSR_DEBUG(LOG_ROUTING, "error '%s' (%d) while %s lo:olsr", err_msg, errno, n->nlmsg_type == RTM_NEWADDR ? "adding":"deleting");
                 else {          /* should never happen */
                   OLSR_DEBUG(LOG_ROUTING, "# invalid internal route delete/add flag (%d) used!", flag);
                 }
@@ -175,19 +177,19 @@ olsr_netlink_send(struct nlmsghdr *n, char *buf, size_t bufSize, uint8_t flag, c
             }
             if (flag != RT_NONE) {
               /* ignore file exist when inserting Addr to lo:olsr*/
-              if ((errno == 17) & (flag == RT_LO_IP)) {
+              if ((errno == 17) && (flag == RT_LO_IP)) {
                OLSR_DEBUG(LOG_ROUTING, "ignoring 'File exists' (17) while adding addr to lo!");      
                rt_ret = 1;
               }
               /* resolve "File exist" (17) propblems (on orig and autogen routes) */
-              if ((errno == 17) & ((flag == RT_ORIG_REQUEST) | (flag == RT_AUTO_ADD_GATEWAY_ROUTE)) & (n->nlmsg_type ==
+              else if ((errno == 17) && ((flag == RT_ORIG_REQUEST) || (flag == RT_AUTO_ADD_GATEWAY_ROUTE)) && (n->nlmsg_type ==
                                                                                                        RTM_NEWROUTE)) {
                 /* a similar route going over another gateway may be present, which has to be deleted! */
                 OLSR_DEBUG(LOG_ROUTING, ". auto-deleting similar routes to resolve 'File exists' (17) while adding route!");
                 rt_ret = RT_DELETE_SIMILAR_ROUTE;       /* processing will contiune after this loop */
               }
               /* report success on "No such process" (3) */
-              else if ((errno == 3) & (n->nlmsg_type == RTM_DELROUTE) & (flag == RT_ORIG_REQUEST)) {
+              else if ((errno == 3) && (n->nlmsg_type == RTM_DELROUTE) && (flag == RT_ORIG_REQUEST)) {
                 /* another similar (but slightly different) route may be present at this point
                  * , if so this will get solved when adding new route to this destination */
                 OLSR_DEBUG(LOG_ROUTING, ". ignoring 'No such process' (3) while deleting route!");
@@ -200,8 +202,8 @@ olsr_netlink_send(struct nlmsghdr *n, char *buf, size_t bufSize, uint8_t flag, c
                * anyways if invalid gateway ips may happen we are f*cked up!!
                * but if not, these on the fly generated routes are no problem, and will only get used when needed
                * warning currently only for ipv4 */
-              else if (((errno == 3) | (errno == 128)) & (flag == RT_ORIG_REQUEST) & (FIBM_FLAT == olsr_cnf->fib_metric)
-                       & (n->nlmsg_type == RTM_NEWROUTE) & (rt->rt_dst.prefix.v4.s_addr != nexthop->gateway.v4.s_addr)) {
+              else if (((errno == 3) || (errno == 128)) && (flag == RT_ORIG_REQUEST) && (FIBM_FLAT == olsr_cnf->fib_metric)
+                       && (n->nlmsg_type == RTM_NEWROUTE) && (rt->rt_dst.prefix.v4.s_addr != nexthop->gateway.v4.s_addr)) {
                 if (errno == 128)
                   OLSR_DEBUG(LOG_ROUTING, ". autogenerating route to handle 'Network unreachable' (128) while adding route!");
                 else
@@ -237,7 +239,7 @@ olsr_netlink_send(struct nlmsghdr *n, char *buf, size_t bufSize, uint8_t flag, c
           rt_ret = -1;          /* unrecoverable error */
       }
     }
-    if (rt_ret == RT_AUTO_ADD_GATEWAY_ROUTE) {  /* autoadd route via gateway */
+    else if (rt_ret == RT_AUTO_ADD_GATEWAY_ROUTE) {  /* autoadd route via gateway */
       /* recursive call to invoke creation of a route to the gateway */
       rt_ret = olsr_netlink_route_int(rt, family, rttable, RTM_NEWROUTE, RT_AUTO_ADD_GATEWAY_ROUTE);
 
@@ -254,12 +256,11 @@ olsr_netlink_send(struct nlmsghdr *n, char *buf, size_t bufSize, uint8_t flag, c
         rt_ret = -1;            /* unrecoverable error */
     }
     /* send ipc update on success (deprecated!?)
-       if ( ( n->nlmsg_type != RTM_NEWRULE ) & ( n->nlmsg_type != RTM_DELRULE ) & (flag = RT_ORIG_REQUEST) & (0 <= rt_ret && olsr_cnf->ipc_connections > 0)) {
-       ipc_route_send_rtentry(&rt->rt_dst.prefix, &nexthop->gateway, metric, RTM_NEWROUTE == n->nlmsg_type,
-       if_ifwithindex_name(nexthop->iif_index));
-       } */
-    if (rt_ret == -2)
-      OLSR_ERROR(LOG_ROUTING, "no rtnetlink response! (no system ressources left?, everything may happen now ...)");
+    if (  ( n->nlmsg_type != RT_LO_IP ) && ( n->nlmsg_type != RTM_NEWRULE ) && ( n->nlmsg_type != RTM_DELRULE ) && (flag = RT_ORIG_REQUEST) && (0 <= rt_ret && olsr_cnf->ipc_connections > 0)) {
+      ipc_route_send_rtentry(&rt->rt_dst.prefix, &nexthop->gateway, metric, RTM_NEWROUTE == n->nlmsg_type,
+      if_ifwithindex_name(nexthop->iif_index));
+    } */
+    if (rt_ret == -2) OLSR_ERROR(LOG_ROUTING, "no rtnetlink response! (no system ressources left?, everything may happen now ...)");
     return rt_ret;
   } else return ret; 
 }
@@ -309,7 +310,7 @@ olsr_netlink_route_int(const struct rt_entry *rt, uint8_t family, uint8_t rttabl
   req.r.rtm_dst_len = rt->rt_dst.prefix_len;
 
   if (NULL != nexthop->interface) {
-    if ((cmd != RTM_NEWRULE) & (cmd != RTM_DELRULE)) {
+    if ((cmd != RTM_NEWRULE) && (cmd != RTM_DELRULE)) {
       req.r.rtm_dst_len = rt->rt_dst.prefix_len;
 
       /* do not specify much as we wanna delete similar/conflicting routes */
@@ -337,7 +338,7 @@ olsr_netlink_route_int(const struct rt_entry *rt, uint8_t family, uint8_t rttabl
       }
 
       /* make sure that netmask = /32 as this is an autogenarated route */
-      if ((flag == RT_AUTO_ADD_GATEWAY_ROUTE) | (flag == RT_DELETE_SIMILAR_AUTO_ROUTE))
+      if ((flag == RT_AUTO_ADD_GATEWAY_ROUTE) || (flag == RT_DELETE_SIMILAR_AUTO_ROUTE))
         req.r.rtm_dst_len = 32;
 
       /* for ipv4 or ipv6 we add gateway if one is specified,
@@ -345,8 +346,8 @@ olsr_netlink_route_int(const struct rt_entry *rt, uint8_t family, uint8_t rttabl
        * or even use the gateway as target if we add a auto-generated route,
        * or if delete-similar to make insertion of auto-generated route possible */
       if (AF_INET == family) {
-        if ((flag != RT_AUTO_ADD_GATEWAY_ROUTE) & (flag != RT_DELETE_SIMILAR_ROUTE) &
-            (flag != RT_DELETE_SIMILAR_AUTO_ROUTE) & (rt->rt_dst.prefix.v4.s_addr != nexthop->gateway.v4.s_addr)) {
+        if ((flag != RT_AUTO_ADD_GATEWAY_ROUTE) && (flag != RT_DELETE_SIMILAR_ROUTE) &
+            (flag != RT_DELETE_SIMILAR_AUTO_ROUTE) && (rt->rt_dst.prefix.v4.s_addr != nexthop->gateway.v4.s_addr)) {
           olsr_netlink_addreq(&req.n, sizeof(req), RTA_GATEWAY, &nexthop->gateway.v4, sizeof(nexthop->gateway.v4));
           req.r.rtm_scope = RT_SCOPE_UNIVERSE;
         }
@@ -355,13 +356,13 @@ olsr_netlink_route_int(const struct rt_entry *rt, uint8_t family, uint8_t rttabl
                                                                     RT_DELETE_SIMILAR_AUTO_ROUTE)) ? &nexthop->gateway.v4 : &rt->
                             rt_dst.prefix.v4, sizeof(rt->rt_dst.prefix.v4));
       } else {
-        if ((flag != RT_AUTO_ADD_GATEWAY_ROUTE) & (flag != RT_DELETE_SIMILAR_ROUTE) & (flag != RT_DELETE_SIMILAR_AUTO_ROUTE)
+        if ((flag != RT_AUTO_ADD_GATEWAY_ROUTE) && (flag != RT_DELETE_SIMILAR_ROUTE) && (flag != RT_DELETE_SIMILAR_AUTO_ROUTE)
             & (0 != memcmp(&rt->rt_dst.prefix.v6, &nexthop->gateway.v6, sizeof(nexthop->gateway.v6)))) {
           olsr_netlink_addreq(&req.n, sizeof(req), RTA_GATEWAY, &nexthop->gateway.v6, sizeof(nexthop->gateway.v6));
           req.r.rtm_scope = RT_SCOPE_UNIVERSE;
         }
         olsr_netlink_addreq(&req.n, sizeof(req), RTA_DST,
-                            ((flag == RT_AUTO_ADD_GATEWAY_ROUTE) | (flag ==
+                            ((flag == RT_AUTO_ADD_GATEWAY_ROUTE) || (flag ==
                                                                     RT_DELETE_SIMILAR_AUTO_ROUTE)) ? &nexthop->gateway.v6 : &rt->
                             rt_dst.prefix.v6, sizeof(rt->rt_dst.prefix.v6));
       }