summaryrefslogtreecommitdiffstats
path: root/lib/if.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/if.c')
-rw-r--r--lib/if.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/if.c b/lib/if.c
index 11d339ffb..e44882a43 100644
--- 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;
+}