[ONOS-7236] Supports simple IPv4 routing on fabric.p4

Change-Id: Ie92b26361b1d646491bd382f698c0f8f61a058a1
diff --git a/core/net/src/main/java/org/onosproject/net/pi/impl/AbstractCriterionTranslator.java b/core/net/src/main/java/org/onosproject/net/pi/impl/AbstractCriterionTranslator.java
index d403ec1..4bbb123 100644
--- a/core/net/src/main/java/org/onosproject/net/pi/impl/AbstractCriterionTranslator.java
+++ b/core/net/src/main/java/org/onosproject/net/pi/impl/AbstractCriterionTranslator.java
@@ -127,6 +127,7 @@
                 break;
             case LPM:
                 mask = getMaskFromPrefixLength(prefixLength, value.size());
+                break;
             default:
                 throw new RuntimeException("Unrecognized init type " + initType.name());
         }
@@ -163,8 +164,7 @@
      * @return a byte sequence
      */
     private ImmutableByteSequence getMaskFromPrefixLength(int prefixLength, int maskSize) {
-        // TODO: implement.
-        throw new RuntimeException("getMaskFromPrefixLength() not implemented yet.");
+        return ImmutableByteSequence.prefixOnes(maskSize, prefixLength);
     }
 
     /**
@@ -175,7 +175,32 @@
      * @return optional prefix length
      */
     private Optional<Integer> getPrefixLengthFromMask(ImmutableByteSequence mask) {
-        // TODO: implement.
-        throw new RuntimeException("getPrefixLengthFromMask() not implemented yet.");
+        Integer prefixLength = 0;
+
+        byte[] byteArray = mask.asArray();
+        int byteArrayIndex = 0;
+        while (byteArrayIndex < byteArray.length && byteArray[byteArrayIndex] == (byte) 0xff) {
+            prefixLength += Byte.SIZE;
+            byteArrayIndex++;
+        }
+
+        byte byteVal = byteArray[byteArrayIndex];
+        while (byteVal != 0) {
+            if ((byteVal & Integer.MIN_VALUE) != Integer.MIN_VALUE) {
+                return Optional.empty();
+            }
+            prefixLength++;
+            byteVal <<= 1;
+        }
+
+        byteArrayIndex++;
+        while (byteArrayIndex < byteArray.length) {
+            if (byteArray[byteArrayIndex] != 0) {
+                return Optional.empty();
+            }
+            byteArrayIndex++;
+        }
+
+        return Optional.of(prefixLength);
     }
 }