Refactor protocol buffer to split models into different packages

Change-Id: I26152ba227ebe9afd871c6e501ccca17c49e1e4e
diff --git a/incubator/pom.xml b/incubator/pom.xml
index cc945fc..310dc18 100644
--- a/incubator/pom.xml
+++ b/incubator/pom.xml
@@ -39,7 +39,7 @@
         <module>grpc-dependencies</module>
         <module>protobuf</module>
         <module>rpc</module>
-        <!-- <module>rpc-grpc</module> -->
+        <module>rpc-grpc</module>
         <module>rpc-nb</module>
         <module>protobuf-nb</module>
         <module>grpc</module>
diff --git a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/ProtobufUtils.java b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/ProtobufUtils.java
index ff29b27..481839a 100644
--- a/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/ProtobufUtils.java
+++ b/incubator/protobuf/models/src/main/java/org/onosproject/incubator/protobuf/models/ProtobufUtils.java
@@ -20,12 +20,12 @@
 import java.util.Map;
 
 import org.onlab.packet.ChassisId;
-import org.onosproject.grpc.net.models.DeviceDescriptionProto;
-import org.onosproject.grpc.net.models.DeviceEnums;
-import org.onosproject.grpc.net.models.PortDescriptionProto;
-import org.onosproject.grpc.net.models.PortEnums.PortType;
-import org.onosproject.grpc.net.models.DeviceEnums.DeviceType;
-import org.onosproject.grpc.net.models.PortStatisticsProto;
+import org.onosproject.grpc.net.device.models.DeviceDescriptionProtoOuterClass.DeviceDescriptionProto;
+import org.onosproject.grpc.net.device.models.DeviceEnumsProto.MastershipRoleProto;
+import org.onosproject.grpc.net.device.models.PortDescriptionProtoOuterClass.PortDescriptionProto;
+import org.onosproject.grpc.net.device.models.PortEnumsProto.PortTypeProto;
+import org.onosproject.grpc.net.device.models.DeviceEnumsProto.DeviceTypeProto;
+import org.onosproject.grpc.net.device.models.PortStatisticsProtoOuterClass.PortStatisticsProto;
 import org.onosproject.net.Annotations;
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.Device;
@@ -54,12 +54,12 @@
     private static final Logger log = LoggerFactory.getLogger(ProtobufUtils.class);
 
     /**
-     * Translates gRPC enum MastershipRole to ONOS enum.
+     * Translates gRPC enum MastershipRoleProto to ONOS enum.
      *
      * @param role mastership role in gRPC enum
      * @return equivalent in ONOS enum
      */
-    public static MastershipRole translate(DeviceEnums.MastershipRole role) {
+    public static MastershipRole translate(MastershipRoleProto role) {
         switch (role) {
             case NONE:
                 return MastershipRole.NONE;
@@ -81,52 +81,52 @@
      * @param newRole ONOS' mastership role
      * @return equivalent in gRPC message enum
      */
-    public static DeviceEnums.MastershipRole translate(MastershipRole newRole) {
+    public static MastershipRoleProto translate(MastershipRole newRole) {
         switch (newRole) {
             case MASTER:
-                return DeviceEnums.MastershipRole.MASTER;
+                return MastershipRoleProto.MASTER;
             case STANDBY:
-                return DeviceEnums.MastershipRole.STANDBY;
+                return MastershipRoleProto.STANDBY;
             case NONE:
             default:
-                return DeviceEnums.MastershipRole.NONE;
+                return MastershipRoleProto.NONE;
         }
     }
 
 
     /**
-     * Translates gRPC DeviceDescription to {@link DeviceDescription}.
+     * Translates gRPC DeviceDescriptionProto to {@link DeviceDescription}.
      *
-     * @param deviceDescription gRPC message
+     * @param devDescProto device description protobuf message
      * @return {@link DeviceDescription}
      */
     public static DeviceDescription translate(
-            DeviceDescriptionProto.DeviceDescription deviceDescription) {
-        URI uri = URI.create(deviceDescription.getDeviceUri());
-        Device.Type type = translate(deviceDescription.getType());
-        String manufacturer = deviceDescription.getManufacturer();
-        String hwVersion = deviceDescription.getHwVersion();
-        String swVersion = deviceDescription.getSwVersion();
-        String serialNumber = deviceDescription.getSerialNumber();
-        ChassisId chassis = new ChassisId(deviceDescription.getChassisId());
-        boolean defaultAvailable = deviceDescription.getIsDefaultAvailable();
+            DeviceDescriptionProto devDescProto) {
+        URI uri = URI.create(devDescProto.getDeviceUri());
+        Device.Type type = translate(devDescProto.getType());
+        String manufacturer = devDescProto.getManufacturer();
+        String hwVersion = devDescProto.getHwVersion();
+        String swVersion = devDescProto.getSwVersion();
+        String serialNumber = devDescProto.getSerialNumber();
+        ChassisId chassis = new ChassisId(devDescProto.getChassisId());
+        boolean defaultAvailable = devDescProto.getIsDefaultAvailable();
         return new DefaultDeviceDescription(uri, type, manufacturer,
                                             hwVersion, swVersion, serialNumber,
                                             chassis,
                                             defaultAvailable,
-                                            asAnnotations(deviceDescription.getAnnotationsMap()));
+                                            asAnnotations(devDescProto.getAnnotationsMap()));
     }
 
     /**
-     * Translates {@link DeviceDescription} to gRPC DeviceDescription message.
+     * Translates {@link DeviceDescription} to gRPC DeviceDescriptionProto message.
      *
      * @param deviceDescription {@link DeviceDescription}
-     * @return gRPC DeviceDescription message
+     * @return gRPC DeviceDescriptionProto message
      */
-    public static DeviceDescriptionProto.DeviceDescription translate(
+    public static DeviceDescriptionProto translate(
             DeviceDescription deviceDescription) {
 
-        return DeviceDescriptionProto.DeviceDescription.newBuilder()
+        return DeviceDescriptionProto.newBuilder()
                 .setDeviceUri(deviceDescription.deviceUri().toString())
                 .setType(translate(deviceDescription.type()))
                 .setManufacturer(deviceDescription.manufacturer())
@@ -141,12 +141,12 @@
 
 
     /**
-     * Translates gRPC DeviceType to {@link Device.Type}.
+     * Translates gRPC DeviceTypeProto to {@link Device.Type}.
      *
      * @param type      gRPC message
      * @return  {@link Device.Type}
      */
-    public static Device.Type translate(DeviceType type) {
+    public static Device.Type translate(DeviceTypeProto type) {
         switch (type) {
             case BALANCER:
                 return Device.Type.BALANCER;
@@ -174,7 +174,7 @@
                 return Device.Type.ROUTER;
             case SWITCH:
                 return Device.Type.SWITCH;
-            case VIRTUAL:
+            case VIRTUAL_DEVICE:
                 return Device.Type.VIRTUAL;
 
             case UNRECOGNIZED:
@@ -185,55 +185,55 @@
     }
 
     /**
-     * Translates {@link Type} to gRPC DeviceType.
+     * Translates {@link Type} to gRPC DeviceTypeProto.
      *
      * @param type {@link Type}
      * @return  gRPC message
      */
-    public static DeviceType translate(Device.Type type) {
+    public static DeviceTypeProto translate(Device.Type type) {
         switch (type) {
             case BALANCER:
-                return DeviceType.BALANCER;
+                return DeviceTypeProto.BALANCER;
             case CONTROLLER:
-                return DeviceType.CONTROLLER;
+                return DeviceTypeProto.CONTROLLER;
             case FIBER_SWITCH:
-                return DeviceType.FIBER_SWITCH;
+                return DeviceTypeProto.FIBER_SWITCH;
             case FIREWALL:
-                return DeviceType.FIREWALL;
+                return DeviceTypeProto.FIREWALL;
             case IDS:
-                return DeviceType.IDS;
+                return DeviceTypeProto.IDS;
             case IPS:
-                return DeviceType.IPS;
+                return DeviceTypeProto.IPS;
             case MICROWAVE:
-                return DeviceType.MICROWAVE;
+                return DeviceTypeProto.MICROWAVE;
             case OTHER:
-                return DeviceType.OTHER;
+                return DeviceTypeProto.OTHER;
             case OTN:
-                return DeviceType.OTN;
+                return DeviceTypeProto.OTN;
             case ROADM:
-                return DeviceType.ROADM;
+                return DeviceTypeProto.ROADM;
             case ROADM_OTN:
-                return DeviceType.ROADM_OTN;
+                return DeviceTypeProto.ROADM_OTN;
             case ROUTER:
-                return DeviceType.ROUTER;
+                return DeviceTypeProto.ROUTER;
             case SWITCH:
-                return DeviceType.SWITCH;
+                return DeviceTypeProto.SWITCH;
             case VIRTUAL:
-                return DeviceType.VIRTUAL;
+                return DeviceTypeProto.VIRTUAL_DEVICE;
 
             default:
                 log.warn("Unexpected Device.Type: {}", type);
-                return DeviceType.OTHER;
+                return DeviceTypeProto.OTHER;
         }
     }
 
     /**
-     * Translates gRPC PortDescription message to {@link PortDescription}.
+     * Translates gRPC PortDescriptionProto message to {@link PortDescription}.
      *
      * @param portDescription gRPC message
      * @return {@link PortDescription}
      */
-    public static PortDescription translate(PortDescriptionProto.PortDescription portDescription) {
+    public static PortDescription translate(PortDescriptionProto portDescription) {
         PortNumber number = PortNumber.fromString(portDescription.getPortNumber());
         boolean isEnabled = portDescription.getIsEnabled();
         Port.Type type = translate(portDescription.getType());
@@ -243,13 +243,13 @@
     }
 
     /**
-     * Translates {@link PortDescription} to gRPC PortDescription message.
+     * Translates {@link PortDescription} to gRPC PortDescriptionProto message.
      *
      * @param portDescription {@link PortDescription}
-     * @return gRPC PortDescription message
+     * @return gRPC PortDescriptionProto message
      */
-    public static PortDescriptionProto.PortDescription translate(PortDescription portDescription) {
-        return PortDescriptionProto.PortDescription.newBuilder()
+    public static PortDescriptionProto translate(PortDescription portDescription) {
+        return PortDescriptionProto.newBuilder()
                 .setPortNumber(portDescription.portNumber().toString())
                 .setIsEnabled(portDescription.isEnabled())
                 .setType(translate(portDescription.type()))
@@ -259,12 +259,12 @@
     }
 
     /**
-     * Translates gRPC PortType to {@link Port.Type}.
+     * Translates gRPC PortTypeProto to {@link Port.Type}.
      *
      * @param type      gRPC message
      * @return  {@link Port.Type}
      */
-    public static Port.Type translate(org.onosproject.grpc.net.models.PortEnums.PortType type) {
+    public static Port.Type translate(PortTypeProto type) {
         switch (type) {
             case COPPER:
                 return Type.COPPER;
@@ -278,7 +278,7 @@
                 return Type.OMS;
             case PACKET:
                 return Type.PACKET;
-            case VIRTUAL:
+            case VIRTUAL_PORT:
                 return Type.VIRTUAL;
 
             case UNRECOGNIZED:
@@ -294,26 +294,26 @@
      * @param type      {@link org.onosproject.net.Port.Type}
      * @return  gRPC message
      */
-    public static PortType translate(Port.Type type) {
+    public static PortTypeProto translate(Port.Type type) {
         switch (type) {
             case COPPER:
-                return PortType.COPPER;
+                return PortTypeProto.COPPER;
             case FIBER:
-                return PortType.FIBER;
+                return PortTypeProto.FIBER;
             case OCH:
-                return PortType.OCH;
+                return PortTypeProto.OCH;
             case ODUCLT:
-                return PortType.ODUCLT;
+                return PortTypeProto.ODUCLT;
             case OMS:
-                return PortType.OMS;
+                return PortTypeProto.OMS;
             case PACKET:
-                return PortType.PACKET;
+                return PortTypeProto.PACKET;
             case VIRTUAL:
-                return PortType.VIRTUAL;
+                return PortTypeProto.VIRTUAL_PORT;
 
             default:
                 log.warn("Unexpected Port.Type: {}", type);
-                return PortType.COPPER;
+                return PortTypeProto.COPPER;
         }
     }
 
@@ -323,7 +323,7 @@
      * @param portStatistics gRPC PortStatistics message
      * @return {@link PortStatistics}
      */
-    public static PortStatistics translate(PortStatisticsProto.PortStatistics portStatistics) {
+    public static PortStatistics translate(PortStatisticsProto portStatistics) {
         // TODO implement adding missing fields
         return DefaultPortStatistics.builder()
                 .setPort(portStatistics.getPort())
@@ -338,9 +338,9 @@
      * @param portStatistics {@link PortStatistics}
      * @return gRPC PortStatistics message
      */
-    public static PortStatisticsProto.PortStatistics translate(PortStatistics portStatistics) {
+    public static PortStatisticsProto translate(PortStatistics portStatistics) {
         // TODO implement adding missing fields
-        return PortStatisticsProto.PortStatistics.newBuilder()
+        return PortStatisticsProto.newBuilder()
                 .setPort(portStatistics.port())
                 .setPacketsReceived(portStatistics.packetsReceived())
                 .setPacketsSent(portStatistics.packetsSent())
diff --git a/incubator/protobuf/models/src/main/proto/DeviceDescriptionProto.proto b/incubator/protobuf/models/src/main/proto/DeviceDescriptionProto.proto
deleted file mode 100644
index b620bfa..0000000
--- a/incubator/protobuf/models/src/main/proto/DeviceDescriptionProto.proto
+++ /dev/null
@@ -1,18 +0,0 @@
-syntax = "proto3";
-option java_package = "org.onosproject.grpc.net.models";
-
-package Device;
-
-import "DeviceEnums.proto";
-
-message DeviceDescription {
-    string device_Uri = 1;
-    Device.DeviceType type = 2;
-    string manufacturer = 3;
-    string hw_version = 4;
-    string sw_version = 5;
-    string serial_number = 6;
-    string chassis_id = 7;
-    map<string, string> annotations = 8;
-    bool is_default_available = 9;
-}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/DeviceEventProto.proto b/incubator/protobuf/models/src/main/proto/DeviceEventProto.proto
deleted file mode 100644
index 9cbbf60..0000000
--- a/incubator/protobuf/models/src/main/proto/DeviceEventProto.proto
+++ /dev/null
@@ -1,16 +0,0 @@
-syntax = "proto3";
-option java_package = "org.onosproject.grpc.net.models";
-
-
-import "DeviceProto.proto";
-import "DeviceEnums.proto";
-import "PortProto.proto";
-
-package Device;
-
-// Corresponds to org.onosproject.net.device.DeviceEvent.
-message DeviceNotification {
-    Device.DeviceProto device = 1;
-    Device.DeviceEventType deviceEventType = 2;
-    Port.PortProto port = 3;
-}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/LinkDescriptionProto.proto b/incubator/protobuf/models/src/main/proto/LinkDescriptionProto.proto
deleted file mode 100644
index 16fe534..0000000
--- a/incubator/protobuf/models/src/main/proto/LinkDescriptionProto.proto
+++ /dev/null
@@ -1,14 +0,0 @@
-syntax = "proto3";
-option java_package = "org.onosproject.grpc.net.models";
-
-package Link;
-
-import "ConnectPointProto.proto";
-import "LinkEnums.proto";
-
-message LinkDescription {
-    ConnectPoint.ConnectPoint src = 1;
-    ConnectPoint.ConnectPoint dst = 2;
-    Link.LinkType type = 3;
-    map<string, string> annotations = 4;
-}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/LinkEventProto.proto b/incubator/protobuf/models/src/main/proto/LinkEventProto.proto
deleted file mode 100644
index be1ee41..0000000
--- a/incubator/protobuf/models/src/main/proto/LinkEventProto.proto
+++ /dev/null
@@ -1,13 +0,0 @@
-syntax = "proto3";
-option java_package = "org.onosproject.grpc.net.models";
-
-package Link;
-
-import "LinkProto.proto";
-import "LinkEnums.proto";
-
-// Corresponds to org.onosproject.net.link.LinkEvent.
-message LinkNotification {
-    Link.LinkEventType linkEventType = 2;
-    Link.LinkProto link = 3;
-}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/LinkProto.proto b/incubator/protobuf/models/src/main/proto/LinkProto.proto
deleted file mode 100644
index 2355618..0000000
--- a/incubator/protobuf/models/src/main/proto/LinkProto.proto
+++ /dev/null
@@ -1,18 +0,0 @@
-syntax = "proto3";
-option java_package = "org.onosproject.grpc.net.models";
-
-package Link;
-
-import "LinkEnums.proto";
-import "ConnectPointProto.proto";
-
-// Corresponds to org.onosproject.net.Link.
-message LinkProto {
-    Link.LinkState state = 1;
-    ConnectPoint.ConnectPoint src = 2;
-    ConnectPoint.ConnectPoint dst = 3;
-    Link.LinkType type = 4;
-    map<string, string> annotations = 5;
-}
-
-
diff --git a/incubator/protobuf/models/src/main/proto/PortDescriptionProto.proto b/incubator/protobuf/models/src/main/proto/PortDescriptionProto.proto
deleted file mode 100644
index 065ef67..0000000
--- a/incubator/protobuf/models/src/main/proto/PortDescriptionProto.proto
+++ /dev/null
@@ -1,15 +0,0 @@
-syntax = "proto3";
-option java_package = "org.onosproject.grpc.net.models";
-
-package Port;
-
-import "PortEnums.proto";
-
-message PortDescription {
-    // PortNumber as String PortNumber#toString
-    string port_number = 1;
-    bool is_enabled = 2;
-    Port.PortType type = 3;
-    int64 port_speed = 4;
-    map<string, string> annotations = 8;
-}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/ConnectPointProto.proto b/incubator/protobuf/models/src/main/proto/net/ConnectPointProto.proto
similarity index 87%
rename from incubator/protobuf/models/src/main/proto/ConnectPointProto.proto
rename to incubator/protobuf/models/src/main/proto/net/ConnectPointProto.proto
index ecc1362..3749b6f 100644
--- a/incubator/protobuf/models/src/main/proto/ConnectPointProto.proto
+++ b/incubator/protobuf/models/src/main/proto/net/ConnectPointProto.proto
@@ -1,9 +1,9 @@
 syntax = "proto3";
 option java_package = "org.onosproject.grpc.net.models";
 
-package ConnectPoint;
+package net;
 
-message ConnectPoint {
+message ConnectPointProto {
     oneof element_id {
         // DeviceID as String DeviceId#toString
         string device_id = 1;
diff --git a/incubator/protobuf/models/src/main/proto/DeviceProto.proto b/incubator/protobuf/models/src/main/proto/net/DeviceProto.proto
similarity index 72%
rename from incubator/protobuf/models/src/main/proto/DeviceProto.proto
rename to incubator/protobuf/models/src/main/proto/net/DeviceProto.proto
index f4a81d1..54e478a 100644
--- a/incubator/protobuf/models/src/main/proto/DeviceProto.proto
+++ b/incubator/protobuf/models/src/main/proto/net/DeviceProto.proto
@@ -1,14 +1,14 @@
 syntax = "proto3";
 option java_package = "org.onosproject.grpc.net.models";
 
-package Device;
+package net;
 
-import "DeviceEnums.proto";
+import "net/device/DeviceEnumsProto.proto";
 
 // Corresponds to org.onosproject.net.Device.
 message DeviceProto {
-    string deviceId = 1;
-    Device.DeviceType type = 2;
+    string device_id = 1;
+    net.device.DeviceTypeProto type = 2;
     string manufacturer = 3;
     string hw_version = 4;
     string sw_version = 5;
diff --git a/incubator/protobuf/models/src/main/proto/net/LinkProto.proto b/incubator/protobuf/models/src/main/proto/net/LinkProto.proto
new file mode 100644
index 0000000..77bb32b
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/net/LinkProto.proto
@@ -0,0 +1,18 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.models";
+
+package net;
+
+import "net/link/LinkEnumsProto.proto";
+import "net/ConnectPointProto.proto";
+
+// Corresponds to org.onosproject.net.Link.
+message LinkProto {
+    net.link.LinkStateProto state = 1;
+    net.ConnectPointProto src = 2;
+    net.ConnectPointProto dst = 3;
+    net.link.LinkTypeProto type = 4;
+    map<string, string> annotations = 5;
+}
+
+
diff --git a/incubator/protobuf/models/src/main/proto/PortProto.proto b/incubator/protobuf/models/src/main/proto/net/PortProto.proto
similarity index 73%
rename from incubator/protobuf/models/src/main/proto/PortProto.proto
rename to incubator/protobuf/models/src/main/proto/net/PortProto.proto
index 309e50b..e734fae 100644
--- a/incubator/protobuf/models/src/main/proto/PortProto.proto
+++ b/incubator/protobuf/models/src/main/proto/net/PortProto.proto
@@ -1,15 +1,15 @@
 syntax = "proto3";
 option java_package = "org.onosproject.grpc.net.models";
 
-package Port;
+package net;
 
-import "PortEnums.proto";
+import "net/device/PortEnumsProto.proto";
 
 // Corresponds to org.onosproject.net.Port.
 message PortProto {
     string port_number = 1;
     bool is_enabled = 2;
-    Port.PortType type = 3;
+    net.device.PortTypeProto type = 3;
     int64 port_speed = 4;
     map<string, string> annotations = 5;
 }
diff --git a/incubator/protobuf/models/src/main/proto/net/device/DeviceDescriptionProto.proto b/incubator/protobuf/models/src/main/proto/net/device/DeviceDescriptionProto.proto
new file mode 100644
index 0000000..c1d6e22
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/net/device/DeviceDescriptionProto.proto
@@ -0,0 +1,18 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.device.models";
+
+package net.device;
+
+import "net/device/DeviceEnumsProto.proto";
+
+message DeviceDescriptionProto {
+    string device_uri = 1;
+    net.device.DeviceTypeProto type = 2;
+    string manufacturer = 3;
+    string hw_version = 4;
+    string sw_version = 5;
+    string serial_number = 6;
+    string chassis_id = 7;
+    map<string, string> annotations = 8;
+    bool is_default_available = 9;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/DeviceEnums.proto b/incubator/protobuf/models/src/main/proto/net/device/DeviceEnumsProto.proto
similarity index 73%
rename from incubator/protobuf/models/src/main/proto/DeviceEnums.proto
rename to incubator/protobuf/models/src/main/proto/net/device/DeviceEnumsProto.proto
index 7fb1f08..d574a35 100644
--- a/incubator/protobuf/models/src/main/proto/DeviceEnums.proto
+++ b/incubator/protobuf/models/src/main/proto/net/device/DeviceEnumsProto.proto
@@ -1,15 +1,15 @@
 syntax = "proto3";
-option java_package = "org.onosproject.grpc.net.models";
+option java_package = "org.onosproject.grpc.net.device.models";
 
-package Device;
+package net.device;
 
-enum MastershipRole {
+enum MastershipRoleProto {
     NONE = 0;
     MASTER = 1;
     STANDBY = 2;
 }
 
-enum DeviceType {
+enum DeviceTypeProto {
     OTHER = 0;
     SWITCH = 1;
     ROUTER = 2;
@@ -21,12 +21,12 @@
     IPS = 8;
     IDS = 9;
     CONTROLLER = 10;
-    VIRTUAL = 11;
+    VIRTUAL_DEVICE = 11;
     FIBER_SWITCH = 12;
     MICROWAVE = 13;
 }
 
-enum DeviceEventType {
+enum DeviceEventTypeProto {
     DEVICE_ADDED = 0;
     DEVICE_UPDATED = 1;
     DEVICE_REMOVED = 2;
diff --git a/incubator/protobuf/models/src/main/proto/net/device/DeviceEventProto.proto b/incubator/protobuf/models/src/main/proto/net/device/DeviceEventProto.proto
new file mode 100644
index 0000000..87e7c08
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/net/device/DeviceEventProto.proto
@@ -0,0 +1,16 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.device.models";
+
+
+import "net/DeviceProto.proto";
+import "net/device/DeviceEnumsProto.proto";
+import "net/PortProto.proto";
+
+package net.device;
+
+// Corresponds to org.onosproject.net.device.DeviceEvent.
+message DeviceNotificationProto {
+    net.DeviceProto device = 1;
+    net.device.DeviceEventTypeProto device_event_type = 2;
+    net.PortProto port = 3;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/net/device/PortDescriptionProto.proto b/incubator/protobuf/models/src/main/proto/net/device/PortDescriptionProto.proto
new file mode 100644
index 0000000..3097a81
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/net/device/PortDescriptionProto.proto
@@ -0,0 +1,15 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.device.models";
+
+package net.device;
+
+import "net/device/PortEnumsProto.proto";
+
+message PortDescriptionProto {
+    // PortNumber as String PortNumber#toString
+    string port_number = 1;
+    bool is_enabled = 2;
+    net.device.PortTypeProto type = 3;
+    int64 port_speed = 4;
+    map<string, string> annotations = 8;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/PortEnums.proto b/incubator/protobuf/models/src/main/proto/net/device/PortEnumsProto.proto
similarity index 82%
rename from incubator/protobuf/models/src/main/proto/PortEnums.proto
rename to incubator/protobuf/models/src/main/proto/net/device/PortEnumsProto.proto
index b05efc4..e7892f8 100644
--- a/incubator/protobuf/models/src/main/proto/PortEnums.proto
+++ b/incubator/protobuf/models/src/main/proto/net/device/PortEnumsProto.proto
@@ -1,9 +1,9 @@
 syntax = "proto3";
-option java_package = "org.onosproject.grpc.net.models";
+option java_package = "org.onosproject.grpc.net.device.models";
 
-package Port;
+package net.device;
 
-enum PortType {
+enum PortTypeProto {
     // Signifies copper-based connectivity.
     COPPER = 0;
     // Signifies optical fiber-based connectivity.
@@ -19,5 +19,5 @@
     //Optical Multiplexing Section (See ITU G.709).
     OMS = 5;
     // Signifies virtual port.
-    VIRTUAL = 6;
+    VIRTUAL_PORT = 6;
 }
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/PortStatisticsProto.proto b/incubator/protobuf/models/src/main/proto/net/device/PortStatisticsProto.proto
similarity index 78%
rename from incubator/protobuf/models/src/main/proto/PortStatisticsProto.proto
rename to incubator/protobuf/models/src/main/proto/net/device/PortStatisticsProto.proto
index 964d47c..b089ec9 100644
--- a/incubator/protobuf/models/src/main/proto/PortStatisticsProto.proto
+++ b/incubator/protobuf/models/src/main/proto/net/device/PortStatisticsProto.proto
@@ -1,9 +1,9 @@
 syntax = "proto3";
-option java_package = "org.onosproject.grpc.net.models";
+option java_package = "org.onosproject.grpc.net.device.models";
 
-package Port;
+package net.device;
 
-message PortStatistics {
+message PortStatisticsProto {
     int32 port = 1;
     int64 packets_received = 2;
     int64 packets_sent = 3;
diff --git a/incubator/protobuf/models/src/main/proto/net/link/LinkDescriptionProto.proto b/incubator/protobuf/models/src/main/proto/net/link/LinkDescriptionProto.proto
new file mode 100644
index 0000000..d24545d
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/net/link/LinkDescriptionProto.proto
@@ -0,0 +1,14 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.link.models";
+
+package net.link;
+
+import "net/ConnectPointProto.proto";
+import "net/link/LinkEnumsProto.proto";
+
+message LinkDescriptionProto {
+    net.ConnectPointProto src = 1;
+    net.ConnectPointProto dst = 2;
+    net.link.LinkTypeProto type = 3;
+    map<string, string> annotations = 4;
+}
\ No newline at end of file
diff --git a/incubator/protobuf/models/src/main/proto/LinkEnums.proto b/incubator/protobuf/models/src/main/proto/net/link/LinkEnumsProto.proto
similarity index 84%
rename from incubator/protobuf/models/src/main/proto/LinkEnums.proto
rename to incubator/protobuf/models/src/main/proto/net/link/LinkEnumsProto.proto
index fa5f5ac..0f06aa0 100644
--- a/incubator/protobuf/models/src/main/proto/LinkEnums.proto
+++ b/incubator/protobuf/models/src/main/proto/net/link/LinkEnumsProto.proto
@@ -1,9 +1,9 @@
 syntax = "proto3";
-option java_package = "org.onosproject.grpc.net.models";
+option java_package = "org.onosproject.grpc.net.link.models";
 
-package Link;
+package net.link;
 
-enum LinkType {
+enum LinkTypeProto {
     // Signifies that this is a direct single-segment link.
     DIRECT = 0;
 
@@ -27,13 +27,13 @@
     VIRTUAL = 5;
 }
 
-enum LinkState {
+enum LinkStateProto {
     ACTIVE = 0;
     INACTIVE = 1;
 }
 
 // Link Event Types
-enum LinkEventType {
+enum LinkEventTypeProto {
     LINK_ADDED = 0;
     LINK_UPDATED = 1;
     LINK_REMOVED = 2;
diff --git a/incubator/protobuf/models/src/main/proto/net/link/LinkEventProto.proto b/incubator/protobuf/models/src/main/proto/net/link/LinkEventProto.proto
new file mode 100644
index 0000000..1ad93b7
--- /dev/null
+++ b/incubator/protobuf/models/src/main/proto/net/link/LinkEventProto.proto
@@ -0,0 +1,13 @@
+syntax = "proto3";
+option java_package = "org.onosproject.grpc.net.link.models";
+
+package net.link;
+
+import "net/LinkProto.proto";
+import "net/link/LinkEnumsProto.proto";
+
+// Corresponds to org.onosproject.net.link.LinkEvent.
+message LinkNotificationProto {
+    net.link.LinkEventTypeProto link_event_type = 1;
+    net.LinkProto link = 2;
+}
\ No newline at end of file
diff --git a/incubator/rpc-grpc/pom.xml b/incubator/rpc-grpc/pom.xml
index 4139f18..af56f07 100644
--- a/incubator/rpc-grpc/pom.xml
+++ b/incubator/rpc-grpc/pom.xml
@@ -19,7 +19,7 @@
     <parent>
         <artifactId>onos-incubator-grpc-dependencies</artifactId>
         <groupId>org.onosproject</groupId>
-        <version>1.11-SNAPSHOT</version>
+        <version>1.11.0-SNAPSHOT</version>
         <relativePath>../grpc-dependencies/pom.xml</relativePath>
     </parent>
 
@@ -34,7 +34,7 @@
         <onos.app.title>ONOS gRPC API</onos.app.title>
         <onos.app.requires>
             org.onosproject.incubator.rpc,
-            org.onosproject.incubator.protobuf,
+            org.onosproject.incubator.protobuf.models,
             org.onosproject.incubator.grpc
         </onos.app.requires>
     </properties>
@@ -96,7 +96,7 @@
 
         <dependency>
             <groupId>org.onosproject</groupId>
-            <artifactId>onos-incubator-protobuf</artifactId>
+            <artifactId>onos-incubator-protobuf-models</artifactId>
             <version>${project.version}</version>
         </dependency>
 
diff --git a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/DeviceProviderServiceClientProxy.java b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/DeviceProviderServiceClientProxy.java
index 4f41835..1da5ddd 100644
--- a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/DeviceProviderServiceClientProxy.java
+++ b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/DeviceProviderServiceClientProxy.java
@@ -31,6 +31,8 @@
 import org.onosproject.grpc.net.device.DeviceService.IsReachableRequest;
 import org.onosproject.grpc.net.device.DeviceService.RoleChanged;
 import org.onosproject.grpc.net.device.DeviceService.TriggerProbe;
+import org.onosproject.grpc.net.device.models.PortDescriptionProtoOuterClass.PortDescriptionProto;
+import org.onosproject.grpc.net.device.models.PortStatisticsProtoOuterClass.PortStatisticsProto;
 import org.onosproject.incubator.protobuf.models.ProtobufUtils;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.MastershipRole;
@@ -115,7 +117,7 @@
         checkValidity();
 
         DeviceProviderServiceMsg.Builder builder = DeviceProviderServiceMsg.newBuilder();
-        List<org.onosproject.grpc.net.Port.PortDescription> portDescs =
+        List<PortDescriptionProto> portDescs =
                 portDescriptions.stream()
                     .map(ProtobufUtils::translate)
                     .collect(toList());
@@ -168,7 +170,7 @@
         checkValidity();
 
         DeviceProviderServiceMsg.Builder builder = DeviceProviderServiceMsg.newBuilder();
-        List<org.onosproject.grpc.net.Port.PortStatistics> portStats =
+        List<PortStatisticsProto> portStats =
                 portStatistics.stream()
                     .map(ProtobufUtils::translate)
                     .collect(toList());
diff --git a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceClientProxy.java b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceClientProxy.java
index 78f9f37..5c40c90 100644
--- a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceClientProxy.java
+++ b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceClientProxy.java
@@ -15,18 +15,16 @@
  */
 package org.onosproject.incubator.rpc.grpc;
 
-import static org.onosproject.incubator.protobuf.models.ProtobufUtils.asMap;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-import org.onosproject.grpc.net.Link.LinkType;
+import com.google.common.annotations.Beta;
+import com.google.common.util.concurrent.ListenableFuture;
+import io.grpc.Channel;
 import org.onosproject.grpc.net.link.LinkProviderServiceRpcGrpc;
 import org.onosproject.grpc.net.link.LinkProviderServiceRpcGrpc.LinkProviderServiceRpcFutureStub;
 import org.onosproject.grpc.net.link.LinkService.LinkDetectedMsg;
 import org.onosproject.grpc.net.link.LinkService.LinkVanishedMsg;
 import org.onosproject.grpc.net.link.LinkService.Void;
+import org.onosproject.grpc.net.link.models.LinkEnumsProto.LinkTypeProto;
+import org.onosproject.grpc.net.models.ConnectPointProtoOuterClass.ConnectPointProto;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.Link.Type;
@@ -38,10 +36,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.annotations.Beta;
-import com.google.common.util.concurrent.ListenableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
-import io.grpc.Channel;
+import static org.onosproject.incubator.protobuf.models.ProtobufUtils.asMap;
 
 /**
  * Proxy object to handle LinkProviderService calls.
@@ -226,25 +225,25 @@
      * Translates ONOS object to gRPC message.
      *
      * @param type {@link org.onosproject.net.Link.Type Link.Type}
-     * @return gRPC LinkType
+     * @return gRPC LinkTypeProto
      */
-    private LinkType translate(Type type) {
+    private LinkTypeProto translate(Type type) {
         switch (type) {
         case DIRECT:
-            return LinkType.DIRECT;
+            return LinkTypeProto.DIRECT;
         case EDGE:
-            return LinkType.EDGE;
+            return LinkTypeProto.EDGE;
         case INDIRECT:
-            return LinkType.INDIRECT;
+            return LinkTypeProto.INDIRECT;
         case OPTICAL:
-            return LinkType.OPTICAL;
+            return LinkTypeProto.OPTICAL;
         case TUNNEL:
-            return LinkType.TUNNEL;
+            return LinkTypeProto.TUNNEL;
         case VIRTUAL:
-            return LinkType.VIRTUAL;
+            return LinkTypeProto.VIRTUAL;
 
         default:
-            return LinkType.DIRECT;
+            return LinkTypeProto.DIRECT;
 
         }
     }
@@ -253,10 +252,10 @@
      * Translates ONOS object to gRPC message.
      *
      * @param cp {@link ConnectPoint}
-     * @return gRPC ConnectPoint
+     * @return gRPC ConnectPointProto
      */
-    private org.onosproject.grpc.net.Link.ConnectPoint translate(ConnectPoint cp) {
-        return org.onosproject.grpc.net.Link.ConnectPoint.newBuilder()
+    private ConnectPointProto translate(ConnectPoint cp) {
+        return ConnectPointProto.newBuilder()
                 .setDeviceId(cp.deviceId().toString())
                 .setPortNumber(cp.port().toString())
                 .build();
diff --git a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceServerProxy.java b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceServerProxy.java
index 69f9cfd..3ba56e4 100644
--- a/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceServerProxy.java
+++ b/incubator/rpc-grpc/src/main/java/org/onosproject/incubator/rpc/grpc/LinkProviderServiceServerProxy.java
@@ -15,26 +15,24 @@
  */
 package org.onosproject.incubator.rpc.grpc;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.cache.RemovalListeners.asynchronous;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.LinkKey.linkKey;
-
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
+import com.google.common.annotations.Beta;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.RemovalNotification;
+import io.grpc.stub.StreamObserver;
 import org.apache.commons.lang3.tuple.Pair;
-import org.onosproject.grpc.net.Link.ConnectPoint.ElementIdCase;
-import org.onosproject.grpc.net.Link.LinkType;
 import org.onosproject.grpc.net.link.LinkProviderServiceRpcGrpc.LinkProviderServiceRpcImplBase;
 import org.onosproject.grpc.net.link.LinkService.LinkDetectedMsg;
 import org.onosproject.grpc.net.link.LinkService.LinkVanishedMsg;
 import org.onosproject.grpc.net.link.LinkService.Void;
+import org.onosproject.grpc.net.link.models.LinkDescriptionProtoOuterClass.LinkDescriptionProto;
+import org.onosproject.grpc.net.link.models.LinkEnumsProto.LinkTypeProto;
+import org.onosproject.grpc.net.models.ConnectPointProtoOuterClass.ConnectPointProto;
+import org.onosproject.grpc.net.models.ConnectPointProtoOuterClass.ConnectPointProto.ElementIdCase;
 import org.onosproject.incubator.protobuf.models.ProtobufUtils;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
-import org.onosproject.net.Link;
+import org.onosproject.net.Link.Type;
 import org.onosproject.net.LinkKey;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.SparseAnnotations;
@@ -44,12 +42,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.RemovalNotification;
-import com.google.common.annotations.Beta;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
 
-import io.grpc.stub.StreamObserver;
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.cache.RemovalListeners.asynchronous;
+import static org.onosproject.net.DeviceId.deviceId;
+import static org.onosproject.net.LinkKey.linkKey;
 
 // Only single instance will be created and bound to gRPC LinkProviderService
 /**
@@ -174,7 +174,7 @@
      * @param connectPoint gRPC message.
      * @return {@link ConnectPoint}
      */
-    private ConnectPoint translate(org.onosproject.grpc.net.Link.ConnectPoint connectPoint) {
+    private ConnectPoint translate(ConnectPointProto connectPoint) {
         checkArgument(connectPoint.getElementIdCase() == ElementIdCase.DEVICE_ID,
                       "Only DeviceId supported.");
         return new ConnectPoint(deviceId(connectPoint.getDeviceId()),
@@ -187,10 +187,10 @@
      * @param linkDescription gRPC message
      * @return {@link LinkDescription}
      */
-    private LinkDescription translate(org.onosproject.grpc.net.Link.LinkDescription linkDescription) {
+    private LinkDescription translate(LinkDescriptionProto linkDescription) {
         ConnectPoint src = translate(linkDescription.getSrc());
         ConnectPoint dst = translate(linkDescription.getDst());
-        Link.Type type = translate(linkDescription.getType());
+        Type type = translate(linkDescription.getType());
         SparseAnnotations annotations = ProtobufUtils.asAnnotations(linkDescription.getAnnotations());
         return new DefaultLinkDescription(src, dst, type, annotations);
     }
@@ -199,26 +199,26 @@
      * Translates gRPC message to corresponding ONOS object.
      *
      * @param type gRPC message enum
-     * @return {@link org.onosproject.net.Link.Type Link.Type}
+     * @return {@link Type Link.Type}
      */
-    private Link.Type translate(LinkType type) {
+    private Type translate(LinkTypeProto type) {
         switch (type) {
         case DIRECT:
-            return Link.Type.DIRECT;
+            return Type.DIRECT;
         case EDGE:
-            return Link.Type.EDGE;
+            return Type.EDGE;
         case INDIRECT:
-            return Link.Type.INDIRECT;
+            return Type.INDIRECT;
         case OPTICAL:
-            return Link.Type.INDIRECT;
+            return Type.INDIRECT;
         case TUNNEL:
-            return Link.Type.TUNNEL;
+            return Type.TUNNEL;
         case VIRTUAL:
-            return Link.Type.VIRTUAL;
+            return Type.VIRTUAL;
 
         case UNRECOGNIZED:
         default:
-            return Link.Type.DIRECT;
+            return Type.DIRECT;
         }
     }
 
diff --git a/incubator/rpc-grpc/src/main/proto/DeviceService.proto b/incubator/rpc-grpc/src/main/proto/DeviceService.proto
index 5ae7cd6..9ff86c5 100644
--- a/incubator/rpc-grpc/src/main/proto/DeviceService.proto
+++ b/incubator/rpc-grpc/src/main/proto/DeviceService.proto
@@ -1,15 +1,17 @@
 syntax = "proto3";
 option java_package = "org.onosproject.grpc.net.device";
 
-import "models/Device.proto";
-import "models/Port.proto";
+import "net/device/DeviceDescriptionProto.proto";
+import "net/device/PortDescriptionProto.proto";
+import "net/device/PortStatisticsProto.proto";
+import "net/device/DeviceEnumsProto.proto";
 
 package Device;
 
 message DeviceConnected {
   // DeviceID as String DeviceId#toString
   string device_id = 1;
-  DeviceDescription device_description = 2;
+  net.device.DeviceDescriptionProto device_description = 2;
 }
 
 message DeviceDisconnected {
@@ -20,26 +22,26 @@
 message UpdatePorts {
   // DeviceID as String DeviceId#toString
   string device_id = 1;
-  repeated Port.PortDescription port_descriptions= 2;
+  repeated net.device.PortDescriptionProto port_descriptions= 2;
 }
 
 message PortStatusChanged {
   // DeviceID as String DeviceId#toString
   string device_id = 1;
-  Port.PortDescription port_description= 2;
+  net.device.PortDescriptionProto port_description= 2;
 }
 
 message ReceivedRoleReply {
   // DeviceID as String DeviceId#toString
   string device_id = 1;
-  MastershipRole requested = 2;
-  MastershipRole response = 3;
+  net.device.MastershipRoleProto requested = 2;
+  net.device.MastershipRoleProto response = 3;
 }
 
 message UpdatePortStatistics {
   // DeviceID as String DeviceId#toString
   string device_id = 1;
-  repeated Port.PortStatistics port_statistics = 2;
+  repeated net.device.PortStatisticsProto port_statistics = 2;
 }
 
 message RegisterProvider {
@@ -72,7 +74,7 @@
 message RoleChanged {
   // DeviceID as String DeviceId#toString
   string device_id = 1;
-  MastershipRole new_role = 2;
+  net.device.MastershipRoleProto new_role = 2;
 }
 
 message IsReachableRequest {
diff --git a/incubator/rpc-grpc/src/main/proto/LinkService.proto b/incubator/rpc-grpc/src/main/proto/LinkService.proto
index ee32453..e211e11 100644
--- a/incubator/rpc-grpc/src/main/proto/LinkService.proto
+++ b/incubator/rpc-grpc/src/main/proto/LinkService.proto
@@ -1,7 +1,8 @@
 syntax = "proto3";
 option java_package = "org.onosproject.grpc.net.link";
 
-import "models/Link.proto";
+import "net/link/LinkDescriptionProto.proto";
+import "net/ConnectPointProto.proto";
 
 package Link;
 
@@ -11,15 +12,15 @@
 message LinkDetectedMsg {
   // ProviderId scheme only
   string provider_id = 1;
-  LinkDescription link_description = 2;
+  net.link.LinkDescriptionProto link_description = 2;
 }
 
 message LinkVanishedMsg {
   // ProviderId scheme only
   string provider_id = 1;
   oneof subject {
-    LinkDescription link_description = 2;
-    ConnectPoint connect_point = 3;
+    net.link.LinkDescriptionProto link_description = 2;
+    net.ConnectPointProto connect_point = 3;
     string device_id = 4;
   }
 }