diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java b/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java
index 8ee0c1b..e6a5c85 100644
--- a/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/config/basics/BasicLinkConfig.java
@@ -45,6 +45,8 @@
     public static final String DELAY = "delay";
     public static final String LOSS = "loss";
     public static final String AVAILABILITY = "availability";
+    public static final String TIER = "tier";
+    public static final String METERED_USAGE = "meteredUsage";
     public static final String FLAPPING = "flapping";
     public static final String IS_DURABLE = "durable";
     public static final String IS_BIDIRECTIONAL = "bidirectional";
@@ -56,11 +58,13 @@
         type();
 
         return hasOnlyFields(ALLOWED, TYPE, METRIC, LATENCY, BANDWIDTH, JITTER, DELAY, LOSS, AVAILABILITY, FLAPPING,
-                IS_DURABLE, IS_BIDIRECTIONAL, IS_METERED) &&
+                IS_DURABLE, IS_BIDIRECTIONAL, IS_METERED, TIER, METERED_USAGE) &&
                 isBoolean(ALLOWED, OPTIONAL) && isNumber(METRIC, OPTIONAL) &&
                 isNumber(LATENCY, OPTIONAL) && isNumber(BANDWIDTH, OPTIONAL) && isDecimal(JITTER, OPTIONAL) &&
                 isDecimal(DELAY, OPTIONAL) && isDecimal(LOSS, OPTIONAL) && isDecimal(AVAILABILITY, OPTIONAL) &&
                 isDecimal(FLAPPING, OPTIONAL) &&
+                isNumber(TIER, OPTIONAL) &&
+                isDecimal(METERED_USAGE, OPTIONAL) &&
                 isBoolean(IS_BIDIRECTIONAL, OPTIONAL) &&
                 isBoolean(IS_METERED, OPTIONAL);
     }
@@ -322,7 +326,7 @@
     }
 
     /**
-     * Sets durability for this link.
+     * Sets metered flag for this link.
      *
      * @param isMetered true for metered, false otherwise
      * @return this BasicLinkConfig
@@ -332,6 +336,44 @@
     }
 
     /**
+     * Returns link tier.
+     *
+     * @return link tier value; -1 if not set
+     */
+    public long tier() {
+        return get(TIER, -1);
+    }
+
+    /**
+     * Sets the link tier.
+     *
+     * @param tier new link tier value; null to clear
+     * @return self
+     */
+    public BasicLinkConfig tier(Long tier) {
+        return (BasicLinkConfig) setOrClear(TIER, tier);
+    }
+
+    /**
+     * Returns metered link usage in terms of percentage.
+     *
+     * @return metered link usage value; -1 if not set
+     */
+    public double meteredUsage() {
+        return get(METERED_USAGE, -1.0);
+    }
+
+    /**
+     * Sets the metered link usage.
+     *
+     * @param meteredUsage new metered usage value; null to clear
+     * @return self
+     */
+    public BasicLinkConfig meteredUsage(Double meteredUsage) {
+        return (BasicLinkConfig) setOrClear(METERED_USAGE, meteredUsage);
+    }
+
+    /**
      * Create a {@link BasicLinkConfig} instance.
      * <p>
      * Note: created instance needs to be initialized by #init(..) before using.
