]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/if.c
Update Traffic Engineering Support for OSPFD
[mirror_frr.git] / lib / if.c
index 11d339ffb705579f091faa8065aa3c152bbb9475..e44882a43e9a203456004ef32d79ace25544483d 100644 (file)
--- a/lib/if.c
+++ b/lib/if.c
@@ -205,6 +205,8 @@ if_delete (struct interface *ifp)
   list_free (ifp->connected);
   list_free (ifp->nbr_connected);
 
+  if_link_params_free (ifp);
+
   XFREE (MTYPE_IF, ifp);
 }
 
@@ -1364,3 +1366,45 @@ if_link_type_str (enum zebra_link_type llt)
     }
   return NULL;
 }
+
+struct if_link_params *
+if_link_params_get (struct interface *ifp)
+{
+  int i;
+
+  if (ifp->link_params != NULL)
+    return ifp->link_params;
+
+  struct if_link_params *iflp = XCALLOC(MTYPE_IF_LINK_PARAMS,
+                                      sizeof (struct if_link_params));
+  if (iflp == NULL) return NULL;
+
+  /* Set TE metric == standard metric */
+  iflp->te_metric = ifp->metric;
+
+  /* Compute default bandwidth based on interface */
+  int bw = (float)((ifp->bandwidth ? ifp->bandwidth : DEFAULT_BANDWIDTH)
+                   * TE_KILO_BIT / TE_BYTE);
+
+  /* Set Max, Reservable and Unreserved Bandwidth */
+  iflp->max_bw = bw;
+  iflp->max_rsv_bw = bw;
+  for (i = 0; i < MAX_CLASS_TYPE; i++)
+    iflp->unrsv_bw[i] = bw;
+
+  /* Update Link parameters status */
+  iflp->lp_status = LP_TE | LP_MAX_BW | LP_MAX_RSV_BW | LP_UNRSV_BW;
+
+  /* Finally attach newly created Link Parameters */
+  ifp->link_params = iflp;
+
+  return iflp;
+}
+
+void
+if_link_params_free (struct interface *ifp)
+{
+  if (ifp->link_params == NULL) return;
+  XFREE(MTYPE_IF_LINK_PARAMS, ifp->link_params);
+  ifp->link_params = NULL;
+}