Add mac address field into virtual router

Change-Id: I387507756d88732f9e1733b9d1037f8d0861f848
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
index f6a9545..84a5998 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
@@ -18,6 +18,7 @@
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import org.onlab.packet.MacAddress;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -37,6 +38,7 @@
     private final String name;
     private final String description;
     private final boolean enableSnat;
+    private final MacAddress mac;
     private final Set<String> internal;
     private final Map<String, String> external;
     private final KubevirtPeerRouter peerRouter;
@@ -48,12 +50,14 @@
      * @param name          router name
      * @param description   router description
      * @param enableSnat    snat use indicator
+     * @param mac           MAC address
      * @param internal      internal networks
      * @param external      external network
      * @param peerRouter    external peer router
      * @param gateway       elected gateway node id
      */
-    public DefaultKubevirtRouter(String name, String description, boolean enableSnat,
+    public DefaultKubevirtRouter(String name, String description,
+                                 boolean enableSnat, MacAddress mac,
                                  Set<String> internal,
                                  Map<String, String> external,
                                  KubevirtPeerRouter peerRouter,
@@ -61,6 +65,7 @@
         this.name = name;
         this.description = description;
         this.enableSnat = enableSnat;
+        this.mac = mac;
         this.internal = internal;
         this.external = external;
         this.peerRouter = peerRouter;
@@ -83,6 +88,11 @@
     }
 
     @Override
+    public MacAddress mac() {
+        return mac;
+    }
+
+    @Override
     public Set<String> internal() {
         if (internal == null) {
             return ImmutableSet.of();
@@ -116,6 +126,7 @@
                 .name(name)
                 .enableSnat(enableSnat)
                 .description(description)
+                .mac(mac)
                 .internal(internal)
                 .external(external)
                 .peerRouter(updated)
@@ -129,6 +140,7 @@
                 .name(name)
                 .enableSnat(enableSnat)
                 .description(description)
+                .mac(mac)
                 .internal(internal)
                 .external(external)
                 .peerRouter(peerRouter)
@@ -146,14 +158,14 @@
         }
         DefaultKubevirtRouter that = (DefaultKubevirtRouter) o;
         return enableSnat == that.enableSnat && name.equals(that.name) &&
-                description.equals(that.description) && internal.equals(that.internal) &&
-                external.equals(that.external) && peerRouter.equals(that.peerRouter) &&
-                gateway.equals(that.electedGateway());
+                description.equals(that.description) && mac.equals(that.mac) &&
+                internal.equals(that.internal) && external.equals(that.external) &&
+                peerRouter.equals(that.peerRouter) && gateway.equals(that.electedGateway());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(name, description, enableSnat,
+        return Objects.hash(name, description, mac, enableSnat,
                 internal, external, peerRouter, gateway);
     }
 
@@ -163,6 +175,7 @@
                 .add("name", name)
                 .add("description", description)
                 .add("enableSnat", enableSnat)
+                .add("mac", mac)
                 .add("internal", internal)
                 .add("external", external)
                 .add("peerRouter", peerRouter)
@@ -184,6 +197,7 @@
         private String name;
         private String description;
         private boolean enableSnat;
+        private MacAddress mac;
         private Set<String> internal;
         private Map<String, String> external;
         private KubevirtPeerRouter peerRouter;
@@ -193,7 +207,7 @@
         public KubevirtRouter build() {
             checkArgument(name != null, NOT_NULL_MSG, "name");
 
-            return new DefaultKubevirtRouter(name, description, enableSnat,
+            return new DefaultKubevirtRouter(name, description, enableSnat, mac,
                     internal, external, peerRouter, gateway);
         }
 
@@ -216,6 +230,12 @@
         }
 
         @Override
+        public Builder mac(MacAddress mac) {
+            this.mac = mac;
+            return this;
+        }
+
+        @Override
         public Builder internal(Set<String> internal) {
             this.internal = Objects.requireNonNullElseGet(internal, HashSet::new);
             return this;