]> git.puffer.fish Git - mirror/frr.git/commitdiff
isisd: use MT to only advertise usable links 474/head
authorChristian Franke <chris@opensourcerouting.org>
Sat, 6 May 2017 13:50:50 +0000 (15:50 +0200)
committerChristian Franke <chris@opensourcerouting.org>
Sat, 6 May 2017 13:50:50 +0000 (15:50 +0200)
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
isisd/isis_mt.c

index 552365ad109123ac433169117dd31360fe3f2b9c..d15da1d27ae294dfaded3d179740b8946b4b1f1d 100644 (file)
@@ -415,7 +415,7 @@ tlvs_to_adj_mt_set(struct tlvs *tlvs, bool v4_usable, bool v6_usable,
       if (!tlvs->mt_router_info)
         {
           /* Other end does not have MT enabled */
-          if (mt_settings[i]->mtid == ISIS_MT_IPV4_UNICAST)
+          if (mt_settings[i]->mtid == ISIS_MT_IPV4_UNICAST && v4_usable)
             adj_mt_set(adj, intersect_count++, ISIS_MT_IPV4_UNICAST);
         }
       else
@@ -425,7 +425,27 @@ tlvs_to_adj_mt_set(struct tlvs *tlvs, bool v4_usable, bool v6_usable,
           for (ALL_LIST_ELEMENTS_RO(tlvs->mt_router_info, node, info))
             {
               if (mt_settings[i]->mtid == info->mtid)
-                adj_mt_set(adj, intersect_count++, info->mtid);
+                {
+                  bool usable;
+                  switch (info->mtid)
+                    {
+                      case ISIS_MT_IPV4_UNICAST:
+                      case ISIS_MT_IPV4_MGMT:
+                      case ISIS_MT_IPV4_MULTICAST:
+                        usable = v4_usable;
+                        break;
+                      case ISIS_MT_IPV6_UNICAST:
+                      case ISIS_MT_IPV6_MGMT:
+                      case ISIS_MT_IPV6_MULTICAST:
+                        usable = v6_usable;
+                        break;
+                      default:
+                        usable = true;
+                        break;
+                    }
+                  if (usable)
+                    adj_mt_set(adj, intersect_count++, info->mtid);
+                }
             }
         }
     }