Diff for /embedaddon/mrouted/route.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2012/02/21 23:10:48 version 1.1.1.2, 2013/07/21 23:59:22
Line 259  void add_neighbor_to_routes(vifi_t vifi, u_int index) Line 259  void add_neighbor_to_routes(vifi_t vifi, u_int index)
 void delete_neighbor_from_routes(u_int32 addr, vifi_t vifi, u_int index)  void delete_neighbor_from_routes(u_int32 addr, vifi_t vifi, u_int index)
 {  {
     struct rtentry *r;      struct rtentry *r;
    struct uvif *v;    struct uvif *v = &uvifs[vifi];
   
     v = &uvifs[vifi];  
     for (r = routing_table; r != NULL; r = r->rt_next) {      for (r = routing_table; r != NULL; r = r->rt_next) {
         if (r->rt_metric != UNREACHABLE) {          if (r->rt_metric != UNREACHABLE) {
             if (r->rt_parent == vifi && r->rt_gateway == addr) {              if (r->rt_parent == vifi && r->rt_gateway == addr) {
Line 273  void delete_neighbor_from_routes(u_int32 addr, vifi_t  Line 272  void delete_neighbor_from_routes(u_int32 addr, vifi_t 
             } else if (r->rt_dominants[vifi] == addr) {              } else if (r->rt_dominants[vifi] == addr) {
                 VIFM_SET(vifi, r->rt_children);                  VIFM_SET(vifi, r->rt_children);
                 r->rt_dominants[vifi] = 0;                  r->rt_dominants[vifi] = 0;
                if ((uvifs[vifi].uv_flags & VIFF_NOFLOOD) ||                if ((v->uv_flags & VIFF_NOFLOOD) || AVOID_TRANSIT(vifi, r))
                                AVOID_TRANSIT(vifi, r))                    NBRM_CLRMASK(r->rt_subordinates, v->uv_nbrmap);
                    NBRM_CLRMASK(r->rt_subordinates, uvifs[vifi].uv_nbrmap); 
                 else                  else
                    NBRM_SETMASK(r->rt_subordinates, uvifs[vifi].uv_nbrmap);                    NBRM_SETMASK(r->rt_subordinates, v->uv_nbrmap);
                 update_table_entry(r, r->rt_gateway);                  update_table_entry(r, r->rt_gateway);
             } else if (NBRM_ISSET(index, r->rt_subordinates)) {              } else if (NBRM_ISSET(index, r->rt_subordinates)) {
                 NBRM_CLR(index, r->rt_subordinates);                  NBRM_CLR(index, r->rt_subordinates);
Line 295  void delete_neighbor_from_routes(u_int32 addr, vifi_t  Line 293  void delete_neighbor_from_routes(u_int32 addr, vifi_t 
  * beginning for each update; this relies on having the route reports in   * beginning for each update; this relies on having the route reports in
  * a single message be in the same order as the route entries in the routing   * a single message be in the same order as the route entries in the routing
  * table.   * table.
    *
    * find_route() expects rtp to be the preceding entry in the linked list
    * where route insertion takes place.  We need to be able to insert routes
    * before at the list head (routing table).
  */   */
 void start_route_updates(void)  void start_route_updates(void)
 {  {
    rtp = routing_table;    rtp = NULL;
 }  }
   
   
Line 315  static int find_route(u_int32 origin, u_int32 mask) Line 317  static int find_route(u_int32 origin, u_int32 mask)
 {  {
     struct rtentry *r;      struct rtentry *r;
   
    r = rtp;    /*
      * If rtp is NULL, we are preceding routing_table, so our first search
      * candidate should be the routing_table.
      */
     r = rtp ? rtp : routing_table;
     while (r != NULL) {      while (r != NULL) {
         if (origin == r->rt_origin && mask == r->rt_originmask) {          if (origin == r->rt_origin && mask == r->rt_originmask) {
             rtp = r;              rtp = r;
Line 386  static void create_route(u_int32 origin, u_int32 mask) Line 392  static void create_route(u_int32 origin, u_int32 mask)
             rt_end = this;              rt_end = this;
         rtp->rt_next = this;          rtp->rt_next = this;
     } else {      } else {
           if (routing_table) {
               /* Change existing head to this */
               this->rt_next = routing_table;
               routing_table->rt_prev = this;
           }
           else {
               /* this is the first route entry that exists */
               rt_end = this;
           }
         routing_table = this;          routing_table = this;
         rt_end = this;  
     }      }
   
     rtp = this;      rtp = this;
Line 1233  static int report_chunk(int which_routes, struct rtent Line 1247  static int report_chunk(int which_routes, struct rtent
     int datalen = 0;      int datalen = 0;
     int width = 0;      int width = 0;
     u_int32 mask = 0;      u_int32 mask = 0;
     u_int32 src;  
     int admetric = v->uv_admetric;      int admetric = v->uv_admetric;
     int metric;      int metric;
   
     src = v->uv_lcl_addr;  
     p = send_buf + MIN_IP_HEADER_LEN + IGMP_MINLEN;      p = send_buf + MIN_IP_HEADER_LEN + IGMP_MINLEN;
   
     for (r = start_rt; r != routing_table; r = r->rt_prev) {      for (r = start_rt; r != routing_table; r = r->rt_prev) {

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>