fix bsd RTM_GATEWAY routing flags detection
authorMarkus Kittenberger <Markus.Kittenberger@gmx.at>
Wed, 7 Mar 2012 21:37:50 +0000 (22:37 +0100)
committerMarkus Kittenberger <Markus.Kittenberger@gmx.at>
Wed, 7 Mar 2012 21:37:50 +0000 (22:37 +0100)
src/bsd/kernel_routes.c
src/process_routes.c
src/process_routes.h

index 6e12e26..55538f4 100644 (file)
@@ -108,7 +108,7 @@ add_del_route(const struct rt_entry *rt, int add)
   rtm->rtm_version = RTM_VERSION;
   rtm->rtm_type = add ? RTM_ADD : RTM_DELETE;
   rtm->rtm_index = 0;           /* is ignored in outgoing messages */
-  rtm->rtm_flags = olsr_rt_flags(rt);
+  rtm->rtm_flags = olsr_rt_flags(rt, add);
   rtm->rtm_pid = OLSR_PID;
   rtm->rtm_seq = ++seq;
 
@@ -269,7 +269,7 @@ add_del_route6(const struct rt_entry *rt, int add)
   rtm->rtm_version = RTM_VERSION;
   rtm->rtm_type = (add != 0) ? RTM_ADD : RTM_DELETE;
   rtm->rtm_index = 0;
-  rtm->rtm_flags = olsr_rt_flags(rt);
+  rtm->rtm_flags = olsr_rt_flags(rt, add);
   rtm->rtm_pid = OLSR_PID;
   rtm->rtm_seq = ++seq;
 
@@ -357,7 +357,7 @@ add_del_route6(const struct rt_entry *rt, int add)
     drtm->rtm_version = RTM_VERSION;
     drtm->rtm_type = RTM_DELETE;
     drtm->rtm_index = 0;
-    drtm->rtm_flags = olsr_rt_flags(rt);
+    drtm->rtm_flags = olsr_rt_flags(rt, add);
     drtm->rtm_seq = ++seq;
 
     walker = dbuff + sizeof(struct rt_msghdr);
index ef543e2..46c5529 100644 (file)
@@ -79,7 +79,8 @@ olsr_rt_flags(const struct rt_entry *rt)
     flags |= RTF_HOST;
   }
 
-  nh = olsr_get_nh(rt);
+  if (add) nh = olsr_get_nh(rt);
+  else nh = &rt->rt_nexthop;
 
   if (!ipequal(&rt->rt_dst.prefix, &nh->gateway)) {
     flags |= RTF_GATEWAY;
index 3473b3a..692e944 100644 (file)
@@ -56,7 +56,7 @@ void olsr_init_export_route(void);
 void olsr_update_rib_routes(void);
 void olsr_update_kernel_routes(void);
 void olsr_delete_all_kernel_routes(void);
-uint8_t olsr_rt_flags(const struct rt_entry *);
+uint8_t olsr_rt_flags(const struct rt_entry *, int add);
 void olsr_delete_interface_routes(int if_index);
 void olsr_force_kernelroutes_refresh(void);