diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java
index 84106de..5342f41 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java
@@ -1,116 +1,116 @@
-package org.onosproject.pcepio.types;
-
-import java.util.Objects;
-
-import org.jboss.netty.buffer.ChannelBuffer;
-import org.onosproject.pcepio.protocol.PcepNai;
-
-import com.google.common.base.MoreObjects;
-
-/**
- * Provides Pcep Nai Unnumbered Adjacency Ipv4.
- */
-public class PcepNaiUnnumberedAdjacencyIpv4 implements PcepNai {
-    /**
-     * draft-ietf-pce-segment-routing-03 section    5.3.2.
-     */
-    public static final byte ST_TYPE = 0x05;
-
-    private final int localNodeId;
-    private final int localInterfaceId;
-    private final int remoteNodeId;
-    private final int remoteInterfaceId;
-
-    /**
-     * Constructor to initialize all the member variables.
-     *
-     * @param localNodeId local node id
-     * @param localInterfaceId local interface id
-     * @param remoteNodeId remote node id
-     * @param remoteInterfaceId remote interface id
-     */
-    public PcepNaiUnnumberedAdjacencyIpv4(int localNodeId, int localInterfaceId, int remoteNodeId,
-            int remoteInterfaceId) {
-        this.localNodeId = localNodeId;
-        this.localInterfaceId = localInterfaceId;
-        this.remoteNodeId = remoteNodeId;
-        this.remoteInterfaceId = remoteInterfaceId;
-    }
-
-    /**
-     * Returns PCEP Nai Unnumbered Adjacency Ipv4 object.
-     *
-     * @param localNodeId local node id
-     * @param localInterfaceId local interface if
-     * @param remoteNodeId remote node id
-     * @param remoteInterfaceId remote interface id
-     * @return PCEP Nai Unnumbered Adjacency Ipv4 object
-     */
-    public static PcepNaiUnnumberedAdjacencyIpv4 of(int localNodeId, int localInterfaceId, int remoteNodeId,
-            int remoteInterfaceId) {
-        return new PcepNaiUnnumberedAdjacencyIpv4(localNodeId, localInterfaceId, remoteNodeId, remoteInterfaceId);
-    }
-
-    @Override
-    public byte getType() {
-        return ST_TYPE;
-    }
-
-    @Override
-    public int write(ChannelBuffer bb) {
-        int iLenStartIndex = bb.writerIndex();
-        bb.writeInt(localNodeId);
-        bb.writeInt(localInterfaceId);
-        bb.writeInt(remoteNodeId);
-        bb.writeInt(remoteInterfaceId);
-        return bb.writerIndex() - iLenStartIndex;
-    }
-
-    /**
-     * Reads from channel buffer and return object of PcepNAIUnnumberedAdjacencyIpv4.
-     *
-     * @param bb of type channel buffer
-     * @return object of PcepNAIUnnumberedAdjacencyIpv4
-     */
-    public static PcepNaiUnnumberedAdjacencyIpv4 read(ChannelBuffer bb) {
-        int localNodeId;
-        int localInterfaceId;
-        int remoteNodeId;
-        int remoteInterfaceId;
-        localNodeId = bb.readInt();
-        localInterfaceId = bb.readInt();
-        remoteNodeId = bb.readInt();
-        remoteInterfaceId = bb.readInt();
-        return new PcepNaiUnnumberedAdjacencyIpv4(localNodeId, localInterfaceId, remoteNodeId, remoteInterfaceId);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(localNodeId, localInterfaceId, remoteNodeId, remoteInterfaceId);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof PcepNaiUnnumberedAdjacencyIpv4) {
-            PcepNaiUnnumberedAdjacencyIpv4 other = (PcepNaiUnnumberedAdjacencyIpv4) obj;
-            return Objects.equals(this.localNodeId, other.localNodeId)
-                    && Objects.equals(this.localInterfaceId, other.localInterfaceId)
-                    && Objects.equals(this.remoteNodeId, other.remoteNodeId)
-                    && Objects.equals(this.remoteInterfaceId, other.remoteInterfaceId);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("localNodeId", localNodeId)
-                .add("localInterfaceId", localInterfaceId)
-                .add("remoteNodeId", remoteNodeId)
-                .add("remoteInterfaceId:", remoteInterfaceId)
-                .toString();
-    }
-}
+package org.onosproject.pcepio.types;
+
+import java.util.Objects;
+
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.onosproject.pcepio.protocol.PcepNai;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Provides Pcep Nai Unnumbered Adjacency Ipv4.
+ */
+public class PcepNaiUnnumberedAdjacencyIpv4 implements PcepNai {
+    /**
+     * draft-ietf-pce-segment-routing-03 section    5.3.2.
+     */
+    public static final byte ST_TYPE = 0x05;
+
+    private final int localNodeId;
+    private final int localInterfaceId;
+    private final int remoteNodeId;
+    private final int remoteInterfaceId;
+
+    /**
+     * Constructor to initialize all the member variables.
+     *
+     * @param localNodeId local node id
+     * @param localInterfaceId local interface id
+     * @param remoteNodeId remote node id
+     * @param remoteInterfaceId remote interface id
+     */
+    public PcepNaiUnnumberedAdjacencyIpv4(int localNodeId, int localInterfaceId, int remoteNodeId,
+            int remoteInterfaceId) {
+        this.localNodeId = localNodeId;
+        this.localInterfaceId = localInterfaceId;
+        this.remoteNodeId = remoteNodeId;
+        this.remoteInterfaceId = remoteInterfaceId;
+    }
+
+    /**
+     * Returns PCEP Nai Unnumbered Adjacency Ipv4 object.
+     *
+     * @param localNodeId local node id
+     * @param localInterfaceId local interface if
+     * @param remoteNodeId remote node id
+     * @param remoteInterfaceId remote interface id
+     * @return PCEP Nai Unnumbered Adjacency Ipv4 object
+     */
+    public static PcepNaiUnnumberedAdjacencyIpv4 of(int localNodeId, int localInterfaceId, int remoteNodeId,
+            int remoteInterfaceId) {
+        return new PcepNaiUnnumberedAdjacencyIpv4(localNodeId, localInterfaceId, remoteNodeId, remoteInterfaceId);
+    }
+
+    @Override
+    public byte getType() {
+        return ST_TYPE;
+    }
+
+    @Override
+    public int write(ChannelBuffer bb) {
+        int iLenStartIndex = bb.writerIndex();
+        bb.writeInt(localNodeId);
+        bb.writeInt(localInterfaceId);
+        bb.writeInt(remoteNodeId);
+        bb.writeInt(remoteInterfaceId);
+        return bb.writerIndex() - iLenStartIndex;
+    }
+
+    /**
+     * Reads from channel buffer and return object of PcepNAIUnnumberedAdjacencyIpv4.
+     *
+     * @param bb of type channel buffer
+     * @return object of PcepNAIUnnumberedAdjacencyIpv4
+     */
+    public static PcepNaiUnnumberedAdjacencyIpv4 read(ChannelBuffer bb) {
+        int localNodeId;
+        int localInterfaceId;
+        int remoteNodeId;
+        int remoteInterfaceId;
+        localNodeId = bb.readInt();
+        localInterfaceId = bb.readInt();
+        remoteNodeId = bb.readInt();
+        remoteInterfaceId = bb.readInt();
+        return new PcepNaiUnnumberedAdjacencyIpv4(localNodeId, localInterfaceId, remoteNodeId, remoteInterfaceId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(localNodeId, localInterfaceId, remoteNodeId, remoteInterfaceId);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof PcepNaiUnnumberedAdjacencyIpv4) {
+            PcepNaiUnnumberedAdjacencyIpv4 other = (PcepNaiUnnumberedAdjacencyIpv4) obj;
+            return Objects.equals(this.localNodeId, other.localNodeId)
+                    && Objects.equals(this.localInterfaceId, other.localInterfaceId)
+                    && Objects.equals(this.remoteNodeId, other.remoteNodeId)
+                    && Objects.equals(this.remoteInterfaceId, other.remoteInterfaceId);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .add("localNodeId", localNodeId)
+                .add("localInterfaceId", localInterfaceId)
+                .add("remoteNodeId", remoteNodeId)
+                .add("remoteInterfaceId:", remoteInterfaceId)
+                .toString();
+    }
+}
