Stratum Support for Segement Rounting Suite

- Add Stratum Bmv2 switch support for SRDhcpRelay and SRRouting tests
- Add Support for 0x1 topology on a Stratum Tofino HW switch
- Support for dockerized mininet with Stratum BMv2 switches
- Update scapy driver to work with newer versions of scapy
- Simple parsing for scapy ping output
- Add support for fetching and installing external onos apps
- Add support for onos-diagnostics profiles
- Move onos log levels to params file
- Add onos cfg settings to SR tests

Change-Id: I7c4a71484c8fd5735da9ef09b96d8990283b199b
(cherry picked from commit bef6d9bd943996483fed32130cb30ad26a06aac0)
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/trellislib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/trellislib.py
index ebf6910..e02df4c 100644
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/trellislib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/trellislib.py
@@ -9,6 +9,7 @@
 sys.path.append('..')
 from mininet.node import Host
 from routinglib import RoutedHost, RoutedHost6, Router
+from stratum import NoOffloadHost
 
 class TaggedRoutedHost(RoutedHost):
     """Host that can be configured with multiple IP addresses."""
@@ -24,6 +25,7 @@
         intf = self.defaultIntf()
         self.vlanIntf = "%s.%s" % (intf, self.vlan)
         self.cmd('ip -4 addr flush dev %s' % intf)
+        self.cmd('sysctl -w net.ipv4.ip_forward=0')
         self.cmd('ip link add link %s name %s type vlan id %s' % (intf, self.vlanIntf, self.vlan))
         self.cmd('ip link set up %s' % self.vlanIntf)
 
@@ -38,7 +40,7 @@
         self.cmd('ip link remove link %s' % self.vlanIntf)
         super(TaggedRoutedHost, self).terminate()
 
-class DualHomedRoutedHost(Host):
+class DualHomedRoutedHost(NoOffloadHost):
     def __init__(self, name, ips, gateway, *args, **kwargs):
         super(DualHomedRoutedHost, self).__init__(name, **kwargs)
         self.bond0 = None
@@ -72,6 +74,7 @@
         self.cmd('ip link set %s master %s' % (intf2.name, self.bond0))
         self.cmd('ip addr flush dev %s' % intf1.name)
         self.cmd('ip addr flush dev %s' % intf2.name)
+        self.cmd('sysctl -w net.ipv4.ip_forward=0')
         self.cmd('ip link set %s up' % self.bond0)
         # NOTE: Issues with bonded intfs in mn data structures. Either only show bonded intf
         #       or create a custom class to handle bonded infs??
@@ -100,6 +103,7 @@
         default_intf = self.defaultIntf()
         self.vlanIntf = "%s.%s" % (default_intf, self.vlan)
         self.cmd('ip -4 addr flush dev %s' % default_intf)
+        self.cmd('sysctl -w net.ipv4.ip_forward=0')
         self.cmd('ip link add link %s name %s type vlan id %s' % (default_intf, self.vlanIntf, self.vlan))
         self.cmd('ip link set up %s' % self.vlanIntf)
 
@@ -123,6 +127,7 @@
     def config(self, **kwargs):
         super(DhcpClient, self).config(**kwargs)
         self.cmd('ip addr flush dev %s' % self.defaultIntf())
+        self.cmd('sysctl -w net.ipv4.ip_forward=0')
         self.cmd('dhclient -q -4 -nw -pf %s -lf %s %s' % (self.pidFile, self.leaseFile, self.defaultIntf()))
 
     def terminate(self, **kwargs):
@@ -139,6 +144,7 @@
     def config(self, **kwargs):
         super(Dhcp6Client, self).config(**kwargs)
         self.cmd('ip -4 addr flush dev %s' % self.defaultIntf())
+        self.cmd('sysctl -w net.ipv4.ip_forward=0')
         self.cmd('dhclient -q -6 -nw -pf %s -lf %s %s' % (self.pidFile, self.leaseFile, self.defaultIntf()))
 
     def terminate(self, **kwargs):
@@ -214,6 +220,7 @@
         super(TaggedDhcpClient, self).config(**kwargs)
         self.vlanIntf = "%s.%s" % (self.defaultIntf(), self.vlan)
         self.cmd('ip addr flush dev %s' % self.defaultIntf())
+        self.cmd('sysctl -w net.ipv4.ip_forward=0')
         self.cmd('ip link add link %s name %s type vlan id %s' % (self.defaultIntf(), self.vlanIntf, self.vlan))
         self.cmd('ip link set up %s' % self.vlanIntf)
         self.cmd('dhclient -q -4 -nw -pf %s %s' % (self.pidFile, self.vlanIntf))
@@ -267,6 +274,7 @@
         self.cmd('ip link set %s master %s' % (intf2.name, self.bond0))
         self.cmd('ip addr flush dev %s' % intf1.name)
         self.cmd('ip addr flush dev %s' % intf2.name)
+        self.cmd('sysctl -w net.ipv4.ip_forward=0')
         self.cmd('ip link set %s up' % self.bond0)
         # NOTE: Issues with bonded intfs in mn data structures. Either only show bonded intf
         #       or create a custom class to handle bonded infs??
@@ -284,7 +292,7 @@
         self.cmd('rm -rf %s' % self.pidFile)
         super(DualHomedDhcpClient, self).terminate()
 
-class TrellisHost(Host):
+class TrellisHost(NoOffloadHost):
     def __init__(self, name, ips=[], gateway="", dualHomed=False, vlan=None, dhcpClient=False, dhcpServer=False, ipv6=False, *args, **kwargs):
         super(TrellisHost, self).__init__(name, *args, **kwargs)
         self.dualHomed = dualHomed
@@ -313,6 +321,10 @@
             self.bondIntfs( self.intfs[0], self.intfs[1] )
 
         self.cmd('ip %s addr flush dev %s' % ("-4" if self.ipv6 else "", self.defaultIntf()))
+        self.cmd('sysctl -w net.ipv4.ip_forward=0')
+
+        if not self.ipv6:
+            self.cmd('sysctl -w net.ipv6.conf.all.disable_ipv6=1')
 
         if self.vlan:
             # Setup vlan interface