diff --git a/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/subtype/LsRequestPacket.java b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/subtype/LsRequestPacket.java
new file mode 100644
index 0000000..8d254de
--- /dev/null
+++ b/protocols/ospf/protocol/src/main/java/org/onosproject/ospf/protocol/ospfpacket/subtype/LsRequestPacket.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * 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.onosproject.ospf.protocol.ospfpacket.subtype;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Representation of an LS Request packet and fields and access methods to access it.
+ */
+public class LsRequestPacket {
+
+    private int lsType;
+    private String linkStateId;
+    private String ownRouterId;
+
+    /**
+     * Gets the LSA type.
+     *
+     * @return LSA type
+     */
+    public int lsType() {
+        return lsType;
+    }
+
+    /**
+     * Sets the LSA type.
+     *
+     * @param lsType LSA type
+     */
+    public void setLsType(int lsType) {
+        this.lsType = lsType;
+    }
+
+    /**
+     * Gets the link state id.
+     *
+     * @return link state id
+     */
+    public String linkStateId() {
+        return linkStateId;
+    }
+
+    /**
+     * Sets link state id.
+     *
+     * @param linkStateId state id
+     */
+    public void setLinkStateId(String linkStateId) {
+        this.linkStateId = linkStateId;
+    }
+
+    /**
+     * Gets the router id.
+     *
+     * @return router id
+     */
+    public String ownRouterId() {
+        return ownRouterId;
+    }
+
+    /**
+     * Sets the router id.
+     *
+     * @param ownRouterId router id
+     */
+    public void setOwnRouterId(String ownRouterId) {
+        this.ownRouterId = ownRouterId;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass())
+                .omitNullValues()
+                .add("lsType", lsType)
+                .add("linkStateId", linkStateId)
+                .add("ownRouterId", ownRouterId)
+                .toString();
+    }
+}
\ No newline at end of file
