diff --git a/app/src/main/java/org/opencord/bng/packets/PppProtocolType.java b/app/src/main/java/org/opencord/bng/packets/PppProtocolType.java
new file mode 100644
index 0000000..b3f102d
--- /dev/null
+++ b/app/src/main/java/org/opencord/bng/packets/PppProtocolType.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.opencord.bng.packets;
+
+/**
+ * PPP Protocol type enumerator.
+ */
+public enum PppProtocolType {
+    LCP(0xc021, "lcp", true),
+    IPCP(0x8021, "ipcp", true),
+    PAP(0xc023, "pap", true),
+    CHAP(0xc223, "chap", true),
+    IPv4(0x0021, "ipv4", false),
+    IPv6(0x0057, "ipv6", false),
+    NO_PROTOCOL(0, "no_proto", true);
+
+    private final short code;
+    private final String type;
+    private final boolean control;
+
+    /**
+     * Constructs new PPP Protocol types.
+     *
+     * @param code         The PPP Protocol type.
+     * @param type         Textual representation of the PPP Protocol type.
+     * @param control      True if is control plane packet, false otherwise.
+     */
+    PppProtocolType(int code, String type, boolean control) {
+        this.code = (short) (code & 0xFFFF);
+        this.type = type;
+        this.control = control;
+    }
+
+    /**
+     * Lookups for a PPP Protocol type.
+     *
+     * @param code The code for PPP protocol.
+     * @return The PPPProtocol type
+     */
+    public static PppProtocolType lookup(short code) {
+        for (PppProtocolType type : PppProtocolType.values()) {
+            if (code == type.code()) {
+                return type;
+            }
+        }
+        return NO_PROTOCOL;
+    }
+
+    /**
+     * Returns code associated to the PPP protocol.
+     *
+     * @return The code for PPP protocol
+     */
+    public short code() {
+        return this.code;
+    }
+
+    /**
+     * Returns the string representation of the PPP protocol.
+     *
+     * @return The PPP protocol string representation
+     */
+    public String type() {
+        return this.type;
+    }
+
+    /**
+     * Checks if the PPP protocol is carrying control plane packets.
+     *
+     * @return True if the PPP protocol is for control plane packets, false
+     * otherwise
+     */
+    public boolean control() {
+        return this.control;
+    }
+}
