diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
index 5b60976..edb871d 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandler.java
@@ -307,8 +307,9 @@
 
         private boolean handleEchoRequest(DeviceId srcDevice, MacAddress srcMac, IPv4 ipPacket,
                                           ICMP icmp) {
-            //We only handles a request from an instance port
-            //In case of ehco request to SNAT ip address from an external router, we intentionally ignore it
+            // we only handles a request from an instance port
+            // in case of ehco request to SNAT ip address from an external router,
+            // we intentionally ignore it
             InstancePort instPort = instancePortService.instancePort(srcMac);
             if (instPort == null) {
                 log.warn(ERR_REQ + "unknown source host(MAC:{})", srcMac);
@@ -339,14 +340,16 @@
                 // this is a request to an external network
                 log.trace("Icmp request to external {} from {}", dstIp, srcIp);
 
-                IpAddress externalIp = externalIpFromSubnet(srcSubnet, osRouterService, osNetworkService);
+                IpAddress externalIp = externalIpFromSubnet(srcSubnet,
+                                            osRouterService, osNetworkService);
                 if (externalIp == null) {
                     log.warn(ERR_REQ + "failed to get external ip");
                     return false;
                 }
 
                 ExternalPeerRouter externalPeerRouter =
-                        externalPeerRouterFromSubnet(srcSubnet, osRouterService, osNetworkService);
+                        externalPeerRouterFromSubnet(srcSubnet,
+                                            osRouterService, osNetworkService);
                 if (externalPeerRouter == null) {
                     log.warn(ERR_REQ + "failed to get external peer router");
                     return false;
@@ -413,7 +416,8 @@
             }
 
             Router osRouter = osRouterService.router(osRouterIface.getId());
-            Set<IpAddress> routableGateways = osRouterService.routerInterfaces(osRouter.getId())
+            Set<IpAddress> routableGateways =
+                    osRouterService.routerInterfaces(osRouter.getId())
                     .stream()
                     .map(iface -> osNetworkService.subnet(iface.getSubnetId()).getGateway())
                     .map(IpAddress::valueOf)
@@ -443,8 +447,10 @@
             sendReply(icmpReply, instPort);
         }
 
-        private void sendRequestForExternal(IPv4 ipPacket, DeviceId srcDevice,
-                                            IpAddress srcNatIp, ExternalPeerRouter externalPeerRouter) {
+        private void sendRequestForExternal(IPv4 ipPacket,
+                                            DeviceId srcDevice,
+                                            IpAddress srcNatIp,
+                                            ExternalPeerRouter externalPeerRouter) {
             ICMP icmpReq = (ICMP) ipPacket.getPayload();
             icmpReq.resetChecksum();
             ipPacket.setSourceAddress(srcNatIp.getIp4Address().toInt()).resetChecksum();
