Interface for per peer header and peer up notification

Change-Id: I76b86126c5ca99b2b4c619612de0cef3e63f7fec
diff --git a/apps/bgpmonitoring/api/src/main/java/org/onosproject/bgpmonitoring/PeerType.java b/apps/bgpmonitoring/api/src/main/java/org/onosproject/bgpmonitoring/PeerType.java
new file mode 100644
index 0000000..c327cc1
--- /dev/null
+++ b/apps/bgpmonitoring/api/src/main/java/org/onosproject/bgpmonitoring/PeerType.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2024-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.onosproject.bgpmonitoring;
+
+import org.onlab.packet.DeserializationException;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Enum to Provide the Different types of BMP peer type.
+ *
+ * Peer Type = 0: Global Instance Peer
+ * Peer Type = 1: RD Instance Peer
+ * Peer Type = 2: Local Instance Peer
+ */
+public enum PeerType {
+
+    GLOBAL_INSTANCE_PEER(0),
+
+    RD_INSTANCE_PEER(1),
+
+    LOCAL_INSTANCE_PEER(2);
+
+    private final int value;
+
+    /**
+     * Assign value with the value val as the types of BMP per peer type.
+     *
+     * @param val type of BMP per peer type
+     */
+    PeerType(int val) {
+        value = val;
+    }
+
+    /**
+     * Returns value as type of BMP per peer type.
+     *
+     * @return value type of BMP per peer type
+     */
+    public int getType() {
+        return value;
+    }
+
+
+    private static Map<Integer, PeerType> parser = new ConcurrentHashMap<>();
+
+    static {
+        Arrays.stream(PeerType.values()).forEach(v -> parser.put(v.value, v));
+    }
+
+    public static PeerType getType(int type) throws DeserializationException {
+        if (type > 2) {
+            throw new DeserializationException("Invalid bmp per peer type");
+        }
+        return Optional.of(type)
+                .filter(id -> parser.containsKey(id))
+                .map(id -> parser.get(id))
+                .orElse(GLOBAL_INSTANCE_PEER);
+    }
+}
diff --git a/apps/bgpmonitoring/api/src/main/java/org/onosproject/bgpmonitoring/PeerUpNotificationMessage.java b/apps/bgpmonitoring/api/src/main/java/org/onosproject/bgpmonitoring/PeerUpNotificationMessage.java
new file mode 100644
index 0000000..d591da9
--- /dev/null
+++ b/apps/bgpmonitoring/api/src/main/java/org/onosproject/bgpmonitoring/PeerUpNotificationMessage.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2024-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.onosproject.bgpmonitoring;
+
+import org.onosproject.bgpio.protocol.BgpMessage;
+import java.net.InetAddress;
+
+/**
+ * Abstraction of an BMP peer up notification message.
+ */
+public abstract class PeerUpNotificationMessage extends BmpMessage {
+
+    public static final int PEERUP_NOTIFICATION_HEADER_MIN_LENGTH = 40;
+
+    public static final int PADDING_BYTES = 16;
+
+    public static final int IPV4_ADDRS = 4;
+
+    public static final int IPV6_ADDRS = 16;
+
+    public static final int BGP_LENGTH_FIELD = 16;
+
+    /**
+     * Returns BMP per peer header of BMP message.
+     *
+     * @return BMP per peer header of BMP message
+     */
+    public abstract PerPeer getPerPeer();
+
+    /**
+     * Returns local ip address.
+     *
+     * @return local ip address
+     */
+    public abstract InetAddress getLocalAddress();
+
+    /**
+     * Returns local port number.
+     *
+     * @return local port number
+     */
+    public abstract int getLocalPort();
+
+    /**
+     * Returns remote port number.
+     *
+     * @return remote port number
+     */
+    public abstract int getRemotePort();
+
+    /**
+     * Returns Bgp sent open message.
+     *
+     * @return Bgp sent open message
+     */
+    public abstract BgpMessage getSentOpenMsg();
+
+    /**
+     * Returns Bgp received open message.
+     *
+     * @return Bgp received open message
+     */
+    public abstract BgpMessage getReceivedOpenMsg();
+
+    /**
+     * Returns BMP peer information.
+     *
+     * @return BMP peer information
+     */
+    public abstract byte[] getInformation();
+
+}
\ No newline at end of file
diff --git a/apps/bgpmonitoring/api/src/main/java/org/onosproject/bgpmonitoring/PerPeer.java b/apps/bgpmonitoring/api/src/main/java/org/onosproject/bgpmonitoring/PerPeer.java
new file mode 100644
index 0000000..e725ad2
--- /dev/null
+++ b/apps/bgpmonitoring/api/src/main/java/org/onosproject/bgpmonitoring/PerPeer.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2024-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.onosproject.bgpmonitoring;
+
+import java.net.InetAddress;
+
+/**
+ * Abstraction of an BMP Per Peer header.
+ */
+public interface PerPeer {
+
+    /**
+     * Returns BMP per peer header of BMP message.
+     *
+     * @return BMP per peer header of BMP message
+     */
+    PeerType getType();
+
+    /**
+     * Returns BMP per peer flag.
+     *
+     * @return BMP BMP per peer flag
+     */
+    byte getFlag();
+
+    /**
+     * Returns BMP per peer distinguisher.
+     *
+     * @return BMP per peer distinguisher
+     */
+    byte[] getPeerDistinguisher();
+
+    /**
+     * Returns BMP per peer inet address.
+     *
+     * @return BMP per peer inet address
+     */
+    InetAddress getIntAddress();
+
+    /**
+     * Returns BMP per peer bgp AS.
+     *
+     * @return BMP per peer bgp AS
+     */
+    int getPeerAs();
+
+    /**
+     * Returns BMP per peer bgp ID.
+     *
+     * @return BMP per peer bgp ID
+     */
+    String getPeerBgpId();
+
+    /**
+     * Returns BMP per peer message sent time in seconds.
+     *
+     * @return BMP per peer message sent time in seconds
+     */
+    int getSeconds();
+
+    /**
+     * Returns BMP per peer message sent time in micro seconds.
+     *
+     * @return BMP per peer message sent time in micro seconds
+     */
+    int getMicroseconds();
+
+    /**
+     * Returns BMP per peer header has ipv6 address or not.
+     *
+     * @return BMP per peer header has ipv6 address or not
+     */
+    boolean isIpv6();
+}
\ No newline at end of file