Remove olsr netlink routing code for linux (#if 0 block)
authorHenning Rogge <hrogge@googlemail.com>
Sun, 7 Mar 2010 14:23:39 +0000 (15:23 +0100)
committerHenning Rogge <hrogge@googlemail.com>
Sun, 7 Mar 2010 14:23:39 +0000 (15:23 +0100)
src/linux/kernel_routes_nl.c

index 16f787f..d3e13c0 100644 (file)
@@ -636,449 +636,6 @@ olsr_ioctl_del_route6(const struct rt_entry *rt)
   return olsr_os_process_rt_entry(AF_INET6, rt, false);
 }
 
-#endif
-
-#if 0
-/* values for control flag to handle recursive route corrections
- *  currently only requires in linux specific kernel_routes.c */
-
-// #define RT_ORIG_REQUEST 0
-// #define RT_RETRY_AFTER_ADD_GATEWAY 1
-// #define RT_RETRY_AFTER_DELETE_SIMILAR 2
-// #define RT_DELETE_SIMILAR_ROUTE 3
-// #define RT_AUTO_ADD_GATEWAY_ROUTE 4
-// #define RT_DELETE_SIMILAR_AUTO_ROUTE 5
-// #define RT_NIIT 6
-// #define RT_SMARTGW 7
-
-/* returns
- * -1 on unrecoverable error (calling function will have to handle it)
- *  0 on unexpected but recoverable rtnetlink behaviour
- *    but some of the implemented recovery methods only cure symptoms, 
- *    not the cause, like unintelligent ordering of inserted routes.
- *  1 on success */
-static int
-olsr_netlink_route_int(const struct rt_entry *rt, uint8_t family, uint8_t rttable, __u16 cmd, uint32_t flag)
-{
-  int ret = 1; /* helper variable for rtnetlink_message processing */
-  int rt_ret = -2;  /* if no response from rtnetlink it must be considered as failed! */
-  struct olsr_rtreq req;
-  struct iovec iov;
-  struct sockaddr_nl nladdr;
-  struct msghdr msg = {
-    &nladdr,
-    sizeof(nladdr),
-    &iov,
-    1,
-    NULL,
-    0,
-    0
-  };
-
-  uint32_t metric = 0;
-  const struct rt_nexthop *nexthop = NULL;
-  if ( ( cmd != RTM_NEWRULE ) && ( cmd != RTM_DELRULE ) ) {
-    if (FIBM_FLAT == olsr_cnf->fib_metric) {
-      metric = RT_METRIC_DEFAULT;
-    }
-    else {
-      metric = (RTM_NEWROUTE == cmd) ? rt->rt_best->rtp_metric.hops : rt->rt_metric.hops;
-    }
-
-    if (( RTM_NEWROUTE == cmd ) ||
-        (( RTM_DELROUTE == cmd ) && ( RT_DELETE_SIMILAR_ROUTE == flag || RT_DELETE_SIMILAR_AUTO_ROUTE == flag ))) {
-      nexthop = &rt->rt_best->rtp_nexthop;
-    }
-    else {
-      nexthop = &rt->rt_nexthop;
-    }
-  }
-
-  memset(&req, 0, sizeof(req));
-
-  req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg));
-  req.n.nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE | NLM_F_EXCL | NLM_F_ACK;
-  req.n.nlmsg_type = cmd;
-  
-  /*sanity check for niit ipv4 over ipv6 routes*/
-  if (family == AF_INET && flag == RT_NIIT) {
-    olsr_syslog(OLSR_LOG_ERR,"niit makes no sense with olsrd running on ipv4!");
-    return -1;
-  }
-
-  if (flag == RT_NIIT) {
-    req.r.rtm_family=AF_INET; /*we create an ipv4 niit route*/
-  }
-  else {
-    req.r.rtm_family = family;
-  }
-
-  req.r.rtm_table = rttable;
-
-  /* RTN_UNSPEC would be the wildcard, but blackhole broadcast or nat roules should usually not conflict */
-  /* -> olsr only adds deletes unicast routes */
-  req.r.rtm_type = RTN_UNICAST;
-
-  /* wildcard to delete routes of all protos if no simlar-delete correct proto will get set below */
-  req.r.rtm_protocol = RTPROT_UNSPEC;
-
-  /* as wildcard for deletion */
-  req.r.rtm_scope = RT_SCOPE_NOWHERE;
-
-  if ( ( cmd == RTM_NEWRULE ) || ( cmd == RTM_DELRULE ) ) {
-    /* add or delete a rule */
-    req.r.rtm_scope = RT_SCOPE_UNIVERSE;
-    olsr_netlink_addreq(&req, RTA_PRIORITY, &flag, sizeof(flag));
-    if (rt!=NULL) {
-      /*add interface name to rule*/
-      olsr_netlink_addreq(&req, RTA_IIF, rt, strlen((const char*) rt)+1);
-      //printf("\nrule to interface %s!",(const char*) rt);
-    } 
-  }
-  else {
-    req.r.rtm_dst_len = rt->rt_dst.prefix_len;
-
-    /* do not specify much as we wanna delete similar/conflicting routes */
-    if ( ( flag != RT_DELETE_SIMILAR_ROUTE ) && ( flag != RT_DELETE_SIMILAR_AUTO_ROUTE )) {
-      /* 0 gets replaced by OS-specifc default (3)
-       * 1 is reserved so we take 0 instead (this really makes some sense)
-       * other numbers are used 1:1 */
-      req.r.rtm_protocol = ( (olsr_cnf->rtproto<1) ? RTPROT_BOOT : ( (olsr_cnf->rtproto==1) ? 0 : olsr_cnf->rtproto) );
-      req.r.rtm_scope = RT_SCOPE_LINK;
-
-      /*add interface*/
-      if ((olsr_cnf->smart_gw_active) && family != AF_INET)
-      {
-        printf("smart gateway not available for ipv6 currently\n");
-        return -1;
-      }
-      else if(flag == RT_SMARTGW)
-      //else if ((olsr_cnf->smart_gateway_active) && (rt->rt_dst.prefix_len == 0) && (&olsr_cnf->ipip_if_index))
-      {
-        //add interface (without nexthop if possible (if not use &rt->rt_best->rtp_originator))
-        olsr_netlink_addreq(&req, RTA_OIF, &olsr_cnf->ipip_if_index, sizeof(&olsr_cnf->ipip_if_index));
-      }
-      else if (flag == RT_NIIT) {
-        olsr_netlink_addreq(&req, RTA_OIF, &olsr_cnf->niit4to6_if_index, sizeof(&olsr_cnf->niit4to6_if_index));
-      }
-      else {
-        olsr_netlink_addreq(&req, RTA_OIF, &nexthop->iif_index, sizeof(nexthop->iif_index));
-      }
-
-#if SOURCE_IP_ROUTES
-      /**
-       * source ip here is based on now static olsr_cnf->main_addr in this olsr-0.5.6-r4,
-       * should be based on orignator-id in newer olsrds
-       **/
-      if (flag != RT_NIIT) {
-        if (AF_INET == family) {
-          olsr_netlink_addreq(&req, RTA_PREFSRC, &olsr_cnf->main_addr.v4.s_addr, sizeof(olsr_cnf->main_addr.v4.s_addr));
-        }
-        else {
-          olsr_netlink_addreq(&req, RTA_PREFSRC, &olsr_cnf->main_addr.v6.s6_addr, sizeof(olsr_cnf->main_addr.v6.s6_addr));
-        }
-      }
-#endif
-    }
-
-    /* metric is specified always as we can only delete one route per iteration, and wanna hit the correct one first */
-    if (FIBM_APPROX != olsr_cnf->fib_metric || (RTM_NEWROUTE == cmd) ) {
-      olsr_netlink_addreq(&req, RTA_PRIORITY, &metric, sizeof(metric));
-    }
-
-    /* make sure that netmask = maxplen (32 or 128) as this is an autogenarated (host)route */
-    if (( flag == RT_AUTO_ADD_GATEWAY_ROUTE ) || (flag == RT_DELETE_SIMILAR_AUTO_ROUTE) ) {
-      req.r.rtm_dst_len = olsr_cnf->maxplen;
-    }
-
-    /**
-     * for ipv4 or ipv6 we add gateway if one is specified,
-     * or leave gateway away if we want to delete similar routes aswell,
-     * 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_SMARTGW )
-           && ( 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, RTA_GATEWAY, &nexthop->gateway.v4, sizeof(nexthop->gateway.v4));
-        req.r.rtm_scope = RT_SCOPE_UNIVERSE;
-      }
-      olsr_netlink_addreq(&req, RTA_DST, ( (flag == RT_AUTO_ADD_GATEWAY_ROUTE) || (flag == RT_DELETE_SIMILAR_AUTO_ROUTE) ) ? 
-                          &nexthop->gateway.v4 : &rt->rt_dst.prefix.v4, sizeof(rt->rt_dst.prefix.v4));
-    } else {
-      if (flag == RT_NIIT) {
-        union olsr_ip_addr ipv4_addr;
-        /* create an ipv4 route */
-        olsr_syslog(OLSR_LOG_ERR,"niit suport not fully implemented!!\n");
-
-        /* fix prefix length */
-        req.r.rtm_dst_len = rt->rt_dst.prefix_len - 96;
-        olsr_netlink_addreq(&req, RTA_DST, olsr_ipv6_to_ipv4(&rt->rt_dst.prefix, &ipv4_addr), sizeof(ipv4_addr.v4));
-      }
-      else {
-        if ( ( flag != RT_SMARTGW ) 
-            && ( 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, RTA_GATEWAY, &nexthop->gateway.v6, sizeof(nexthop->gateway.v6));
-          req.r.rtm_scope = RT_SCOPE_UNIVERSE;
-        }
-        olsr_netlink_addreq(&req, RTA_DST, ( (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));
-      }
-    }
-  }
-
-  iov.iov_base = &req.n;
-  iov.iov_len = req.n.nlmsg_len;
-  memset(&nladdr, 0, sizeof(nladdr));
-  nladdr.nl_family = AF_NETLINK;
-  if (0 <= (ret = sendmsg(olsr_cnf->rtnl_s, &msg, 0))) {
-    iov.iov_base = req.buf;
-    iov.iov_len = sizeof(req.buf);
-    if (0 < (ret = recvmsg(olsr_cnf->rtnl_s, &msg, 0))) {
-      struct nlmsghdr *h = (struct nlmsghdr *)(ARM_NOWARN_ALIGN)req.buf;
-      while (NLMSG_OK(h, (unsigned int)ret)) {
-        if (NLMSG_DONE == h->nlmsg_type) {
-          /* seems to reached never */
-          olsr_syslog(OLSR_LOG_INFO, "_received NLMSG_DONE");
-          break;
-        }
-        if (NLMSG_ERROR == h->nlmsg_type) {
-          if (NLMSG_LENGTH(sizeof(struct nlmsgerr) <= h->nlmsg_len)) {
-            struct ipaddr_str ibuf;
-            struct ipaddr_str gbuf;
-            struct nlmsgerr *l_err = (struct nlmsgerr *)NLMSG_DATA(h);
-            errno = -l_err->error;
-            if (0 != errno) {
-              const char *const err_msg = strerror(errno);
-              struct ipaddr_str buf;
-              rt_ret = -1;
-
-              /* syslog debug output for various situations */
-              if ( cmd == RTM_NEWRULE ) {
-                olsr_syslog(OLSR_LOG_ERR,"Error '%s' (%d) on inserting empty policy rule aimed to activate RtTable %u!", err_msg, errno, rttable);
-              }
-              else if ( cmd == RTM_DELRULE ) {
-                olsr_syslog(OLSR_LOG_ERR,"Error '%s' (%d) on deleting empty policy rule aimed to activate rtTable %u!", err_msg, errno, rttable);
-              }
-              else if ( flag == RT_NIIT ) {
-                olsr_syslog(OLSR_LOG_ERR,"Error '%s' (%d) on manipulating niit route of %s!", err_msg, errno, olsr_ip_to_string(&ibuf,&rt->rt_dst.prefix));
-              }
-              else if ( flag <= RT_RETRY_AFTER_DELETE_SIMILAR ) {
-                if (rt->rt_dst.prefix.v4.s_addr!=nexthop->gateway.v4.s_addr) {
-                  olsr_syslog(OLSR_LOG_ERR, "error '%s' (%d) %s route to %s/%d via %s dev %s",
-                      err_msg, errno, (cmd == RTM_NEWROUTE) ? "add" : "del",
-                      olsr_ip_to_string(&ibuf,&rt->rt_dst.prefix), req.r.rtm_dst_len,
-                      olsr_ip_to_string(&gbuf,&nexthop->gateway), if_ifwithindex_name(nexthop->iif_index));
-                }
-                else {
-                  olsr_syslog(OLSR_LOG_ERR, "error '%s' (%d) %s route to %s/%d dev %s",
-                      err_msg, errno, (cmd == RTM_NEWROUTE) ? "add" : "del",
-                      olsr_ip_to_string(&ibuf,&rt->rt_dst.prefix), req.r.rtm_dst_len, if_ifwithindex_name(nexthop->iif_index));
-                }
-              }
-              else if (flag == RT_AUTO_ADD_GATEWAY_ROUTE) {
-                olsr_syslog(OLSR_LOG_ERR, ". error '%s' (%d) auto-add route to %s dev %s", err_msg, errno,
-                    olsr_ip_to_string(&ibuf,&nexthop->gateway), if_ifwithindex_name(nexthop->iif_index));
-              }
-              else if (flag == RT_DELETE_SIMILAR_ROUTE) {
-                olsr_syslog(OLSR_LOG_ERR, ". error '%s' (%d) auto-delete route to %s dev %s", err_msg, errno,
-                    olsr_ip_to_string(&ibuf,&rt->rt_dst.prefix), if_ifwithindex_name(nexthop->iif_index));
-              }
-              else if (flag == RT_DELETE_SIMILAR_AUTO_ROUTE) {
-                olsr_syslog(OLSR_LOG_ERR, ". . error '%s' (%d) auto-delete similar route to %s dev %s", err_msg, errno,
-                    olsr_ip_to_string(&ibuf,&nexthop->gateway), if_ifwithindex_name(nexthop->iif_index));
-              }
-              else {
-                /* should never happen */
-                olsr_syslog(OLSR_LOG_ERR, "# invalid internal route delete/add flag (%d) used!", flag);
-              }
-            }
-            else {
-              /* netlink acks requests with an errno=0 NLMSG_ERROR response! */
-              rt_ret = 1;
-            }
-
-            /* resolve "File exist" (17) propblems (on orig and autogen routes)*/
-            if ((errno == 17) && (cmd == RTM_NEWROUTE) && ((flag == RT_ORIG_REQUEST) || (flag == RT_AUTO_ADD_GATEWAY_ROUTE))) {
-              /* a similar route going over another gateway may be present, which has to be deleted! */
-              olsr_syslog(OLSR_LOG_ERR, ". 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) && (cmd == 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_syslog(OLSR_LOG_ERR, ". ignoring 'No such process' (3) while deleting route!");
-              rt_ret = 0;
-            }
-            /* insert route to gateway on the fly if "Network unreachable" (128) on 2.4 kernels
-             * or on 2.6 kernel No such process (3) or Network unreachable (101) is reported in rtnetlink response
-             * do this only with flat metric, as using metric values inherited from 
-             * a target behind the gateway is really strange, and could lead to multiple routes!
-             * 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 */
-            else if ( ( (errno == 3) || (errno == 101) || (errno == 128) )
-                && (flag == RT_ORIG_REQUEST) && (FIBM_FLAT == olsr_cnf->fib_metric)
-                     && (cmd == RTM_NEWROUTE) && (rt->rt_dst.prefix.v4.s_addr!=nexthop->gateway.v4.s_addr)) {
-              if (errno == 128)  {
-                olsr_syslog(OLSR_LOG_ERR, ". autogenerating route to handle 'Network unreachable' (128) while adding route!");
-              }
-              else if (errno == 101) {
-                olsr_syslog(OLSR_LOG_ERR, ". autogenerating route to handle 'Network unreachable' (101) while adding route!");
-              }
-              else {
-                olsr_syslog(OLSR_LOG_ERR, ". autogenerating route to handle 'No such process' (3) while adding route!");
-              }
-
-              /* processing will contiune after this loop */
-              rt_ret = RT_AUTO_ADD_GATEWAY_ROUTE;
-            }
-          }
-          /* report invalid message size */
-          else {
-            olsr_syslog(OLSR_LOG_INFO,"_received invalid netlink message size %lu != %u",
-                (unsigned long int)sizeof(struct nlmsgerr), h->nlmsg_len);
-          }
-        }
-        /* log all other messages */
-        else {
-          olsr_syslog(OLSR_LOG_INFO,"_received %u Byte rtnetlink response of type %u with seqnr %u and flags %u from %u (%u)",
-              h->nlmsg_len, h->nlmsg_type, h->nlmsg_seq, h->nlmsg_flags, h->nlmsg_pid, NLMSG_ERROR);
-        }
-/*
- * The ARM compile complains about alignment. Copied
- * from /usr/include/linux/netlink.h and adapted for ARM
- */
-#define MY_NLMSG_NEXT(nlh,len)   ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \
-          (struct nlmsghdr*)(ARM_NOWARN_ALIGN)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
-        h = MY_NLMSG_NEXT(h, ret);
-      }
-    }
-  }
-  if ( rt_ret == RT_DELETE_SIMILAR_ROUTE ) {
-    /* delete all routes that may collide */
-
-    /* recursive call to delete simlar routes, using flag 2 to invoke deletion of similar, not only exact matches*/
-    rt_ret = olsr_netlink_route_int(rt, family, rttable, RTM_DELROUTE, 
-        flag == RT_AUTO_ADD_GATEWAY_ROUTE ? RT_DELETE_SIMILAR_AUTO_ROUTE : RT_DELETE_SIMILAR_ROUTE);
-
-    /* retry insert original route, if deleting similar succeeded, using flag=1 to prevent recursions */
-    if (rt_ret > 0) {
-      rt_ret = olsr_netlink_route_int(rt, family, rttable, RTM_NEWROUTE, RT_RETRY_AFTER_DELETE_SIMILAR);
-    }
-    else {
-      olsr_syslog(OLSR_LOG_ERR, ". failed on auto-deleting similar route conflicting with above route!");
-    }
-
-    /* set appropriate return code for original request, while returning simple -1/1 if called recursive */
-    if (flag != RT_AUTO_ADD_GATEWAY_ROUTE) {
-      if (rt_ret > 0) {
-        /* successful recovery */
-        rt_ret = 0;
-      }
-      else {
-        /* unrecoverable error */
-        rt_ret = -1;
-      }
-    }
-  }
-  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, olsr_cnf->rttable, RTM_NEWROUTE, RT_AUTO_ADD_GATEWAY_ROUTE);
-
-    /* retry insert original route, if above succeeded without problems */
-    if (rt_ret > 0) {
-      rt_ret = olsr_netlink_route_int(rt, family, rttable, RTM_NEWROUTE, RT_RETRY_AFTER_ADD_GATEWAY);
-    }
-    else {
-      olsr_syslog(OLSR_LOG_ERR, ". failed on inserting auto-generated route to gateway of above route!");
-    }
-
-    /* set appropriate return code for original request*/
-    if (rt_ret > 0) {
-      /* successful recovery */
-      rt_ret = 0;
-    }
-    else {
-      /* unrecoverable error */
-      rt_ret = -1;
-    }
-  }
-  /* send ipc update on success */
-  if ( ( cmd != RTM_NEWRULE ) && ( cmd != 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 == cmd, if_ifwithindex_name(nexthop->iif_index));
-  }
-  if (rt_ret == -2) {
-    olsr_syslog(OLSR_LOG_ERR,"no rtnetlink response! (no system ressources left?, everything may happen now ...)");
-  }
-  return rt_ret;
-}
-
-/* external wrapper function for above patched multi purpose rtnetlink function */
-int
-olsr_os_policy_rule(uint8_t family, uint8_t rttable, uint16_t cmd, uint32_t priority, char* dev)
-{
-  return olsr_netlink_route_int((const struct rt_entry *) dev, family, rttable, cmd, priority);
-}
-
-
-/* internal wrapper function for above patched function */
-/* added smartgw and niit route creation*/
-static int
-olsr_netlink_route(const struct rt_entry *rt, uint8_t family, uint8_t rttable, __u16 cmd)
-{
-  /*check if this rule is relevant for smartgw*/
-  if ((olsr_cnf->smart_gw_active) && (rt->rt_dst.prefix_len == 0) )
-  { 
-    if (cmd == RTM_DELROUTE){ /*should we do something sane here!!??*/
-      printf("ignoreing deletion of default route for smart gateway!!\n");
-    }
-    else
-    {
-      if (!olsr_cnf->ipip_if_index) {
-int r;
-        printf("creating tunnel %s\n",olsr_cnf->ipip_name);
-        /*create tunnel*/
-        set_tunl(SIOCADDTUNNEL,rt->rt_best->rtp_originator.v4.s_addr);
-        olsr_cnf->ipip_if_up=false;/*rtnetlink monitoring will detect it up*/
-        /*!!?? currently it gets never deleted on shutdown, anyways reusing existing tunnel might be a safe approach if creating fails?*/
-        /*set tunnel up with originator ip*/
-        r=olsr_if_setip(olsr_cnf->ipip_name, &olsr_cnf->main_addr, 0);
-printf("result of ifup is %i\n",r);
-        /*find out iifindex (maybe it works even if above failed (old tunnel))*/
-        olsr_cnf->ipip_if_index=if_nametoindex(olsr_cnf->ipip_name);
-printf("index of new olsrtunl is %i\n",olsr_cnf->ipip_if_index);
-      }
-      else
-      {
-        printf("changing tunnel %s:\n",olsr_cnf->ipip_name);
-        /*change tunnel to new originator or potentially new gateway*/
-        if ((olsr_cnf->ipip_remote_address != rt->rt_best->rtp_originator.v4.s_addr) && (rt->rt_best->rtp_originator.v4.s_addr != 0x00000000) ) {
-          struct ipaddr_str buf;
-          printf("changing tunnel to %s\n",olsr_ip_to_string(&buf,&rt->rt_best->rtp_originator));
-          olsr_cnf->ipip_remote_address = rt->rt_best->rtp_originator.v4.s_addr;
-          set_tunl(SIOCCHGTUNNEL,olsr_cnf->ipip_remote_address);
-        }
-      }
-      /*create route into tunnel*/
-      olsr_netlink_route_int(rt, family, olsr_cnf->rttable_smartgw, cmd, RT_SMARTGW);
-    }
-  }
-  /*normal route in default route table*/
-
-  /*create/delete niit route if we have an niit device*/
-  if ((olsr_cnf->niit4to6_if_index!=0) && (family != AF_INET) && (olsr_is_niit_ipv6(&rt->rt_dst.prefix))) {
-    olsr_netlink_route_int(rt, family, rttable, cmd, RT_NIIT);
-  }
-
-  return olsr_netlink_route_int(rt, family, rttable, cmd, RT_ORIG_REQUEST);
-}
 #endif
 /*
  * Local Variables: