ONOS-6887 Move neighbour classes from incubator to core

Change-Id: I5fa70253b833838566a3527d8938e04be4274210
diff --git a/core/api/src/main/java/org/onosproject/net/neighbour/NeighbourMessageContext.java b/core/api/src/main/java/org/onosproject/net/neighbour/NeighbourMessageContext.java
new file mode 100644
index 0000000..aef37bb
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/neighbour/NeighbourMessageContext.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2016-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.net.neighbour;
+
+import com.google.common.annotations.Beta;
+import org.onlab.packet.Ethernet;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
+import org.onosproject.net.intf.Interface;
+import org.onosproject.net.ConnectPoint;
+
+/**
+ * Context of an incoming neighbor message (e.g. ARP, NDP).
+ *
+ * <p>This includes information about the message accessible through a
+ * protocol-agnostic interface, as well as mechanisms to perform an action in
+ * response to the incoming message.</p>
+ */
+@Beta
+public interface NeighbourMessageContext {
+    /**
+     * Gets the port where the packet came in to the network.
+     *
+     * @return connect point
+     */
+    ConnectPoint inPort();
+
+    /**
+     * Gets the full parsed representation of the packet.
+     *
+     * @return ethernet header
+     */
+    Ethernet packet();
+
+    /**
+     * Gets the protocol of the packet.
+     *
+     * @return protocol
+     */
+    NeighbourProtocol protocol();
+
+    /**
+     * Gets the message type of the packet.
+     *
+     * @return message type
+     */
+    NeighbourMessageType type();
+
+    /**
+     * Gets the vlan of the packet, if any.
+     *
+     * @return vlan
+     */
+    VlanId vlan();
+
+    /**
+     * Gets the source MAC address of the message.
+     *
+     * @return source MAC address
+     */
+    MacAddress srcMac();
+
+    /**
+     * Gets the destination MAC address of the message.
+     * <p>
+     * Only valid for reply packets, will be null for request packets.
+     * </p>
+     *
+     * @return target MAC address
+     */
+    MacAddress dstMac();
+
+    /**
+     * Gets the target IP address of the message.
+     *
+     * @return target IP address
+     */
+    IpAddress target();
+
+    /**
+     * Gets the source IP address of the message.
+     *
+     * @return source IP address
+     */
+    IpAddress sender();
+
+    /**
+     * Forwards the message to a given output port.
+     *
+     * @param outPort output port
+     */
+    void forward(ConnectPoint outPort);
+
+    /**
+     * Forwards the message to a given interface.
+     * <p>
+     * The message will be modified to fit the parameters of the outgoing
+     * interface. For example, if the interface has a VLAN configured, the
+     * outgoing packet will have that VLAN tag added.
+     * </p>
+     * @param outIntf output interface
+     */
+    void forward(Interface outIntf);
+
+    /**
+     * Replies to the request message with a given MAC address.
+     *
+     * @param targetMac target MAC address
+     */
+    void reply(MacAddress targetMac);
+
+    /**
+     * Floods the incoming message out all ports except the input port.
+     */
+    void flood();
+
+    /**
+     * Drops the incoming message.
+     */
+    void drop();
+}