コード例 #1
0
    def __init__(self, *args, **kwargs):
        super(Ryu, self).__init__(*args, **kwargs)
        #--- register for configuration options
        self.CONF.register_opts([
            cfg.StrOpt('SciPassConfig',
                       default='/etc/SciPass/SciPass.xml',
                       help='where to find the SciPass config file'),
        ])

        self.logger.error("Starting SciPass")
        self.datapaths = {}
        self.isactive = 1
        self.statsInterval = 5
        self.balanceInterval = 15
        self.bal = None
        self.stats = {}
        self.stats_thread = hub.spawn(self._stats_loop)
        self.balance_thread = hub.spawn(self._balance_loop)

        self.ports = defaultdict(dict)
        self.prefix_bytes = defaultdict(lambda: defaultdict(int))
        self.lastStatsTime = None
        self.flowmods = {}

        api = SciPass(logger=self.logger, config_file=self.CONF.SciPassConfig)

        api.registerForwardingStateChangeHandler(
            self.changeSwitchForwardingState)

        self.api = api

        wsgi = kwargs['wsgi']
        wsgi.register(SciPassRest, {'api': self.api})
コード例 #2
0
 def setUp(self):
     self.api = SciPass( logger = logging.getLogger(__name__),
                         config = str(os.getcwd()) + "/t/etc/SciPass_balancer_only.xml", 
                         readState = False)
     self.datapath = Mock(id=1)
     self.api.switchJoined(self.datapath)
     self.state = "/var/run/" + "%016x" % self.datapath.id +  "IUPUI" + ".json"
コード例 #3
0
 def test_state_restore(self):
     net1 = ipaddr.IPv4Network("192.168.0.0/24")
     group = self.api.getBalancer("%016x" % self.datapath.id, "IUPUI").getPrefixGroup(net1)
     res = self.api.getBalancer("%016x" % self.datapath.id, "IUPUI").splitSensorPrefix(group,net1,check=False)
     self.assertTrue(res == 1)
     net2 = ipaddr.IPv6Network("2001:0DB8::/48")
     group = self.api.getBalancer("%016x" % self.datapath.id, "IUPUI").getPrefixGroup(net2)
     res = self.api.getBalancer("%016x" % self.datapath.id, "IUPUI").splitSensorPrefix(group,net2,check=False)
     self.assertTrue(res == 1)
     self.api.switchLeave(self.datapath)
     time.sleep(3)
     self.api = SciPass( logger = logging.getLogger(__name__),
                         config = str(os.getcwd()) + "/t/etc/SciPass_balancer_only.xml",
                         readState = True)
     self.api.switchJoined(self.datapath)
     prefixes = self.api.getBalancer("%016x" % self.datapath.id, "IUPUI").getPrefixes()
     prefixList = prefixes.keys()
     assert(net1 not in prefixList)
     assert(net2 not in prefixList)
     net  = [ipaddr.IPv4Network('192.168.0.0/25'), ipaddr.IPv4Network('192.168.0.128/25')]
     assert(n in prefixList for n in net)
     net = [ipaddr.IPv6Network('2001:db8::/49'), ipaddr.IPv6Network('2001:db8:0:8000::/49')]
     assert(n in prefixList for n in net)
コード例 #4
0
 def setUp(self):
     self.api = SciPass( logger = logging.getLogger(__name__),
                       config = str(os.getcwd()) + "/t/etc/Inline.xml" )
コード例 #5
0
ファイル: SciPassTest.py プロジェクト: zec/SciPass
    def test_switch_init(self):
        api = SciPass(logger=logging.getLogger(__name__),
                      config=str(os.getcwd()) + "/t/etc/SciPass.xml")

        #first setup the handler to get all the flows that were sent
        flows = []

        def flowSent(dpid=None,
                     domain=None,
                     header=None,
                     actions=None,
                     command=None,
                     priority=None,
                     idle_timeout=None,
                     hard_timeout=None):
            obj = {
                'dpid': dpid,
                'header': header,
                'actions': actions,
                'command': command,
                'priority': priority,
                'idle_timeout': idle_timeout,
                'hard_timeout': hard_timeout
            }
            flows.append(obj)
            logging.error(obj)

        api.registerForwardingStateChangeHandler(flowSent)
        datapath = Mock(id=1)
        api.switchJoined(datapath)

        self.assertTrue(len(flows) == 25)
        #verify all of the 'flow details are set properly'
        for flow in flows:
            self.assertEquals(flow['dpid'], "%016x" % datapath.id)
            self.assertEquals(flow['hard_timeout'], 0)
            self.assertEquals(flow['idle_timeout'], 0)

        flow = flows[0]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {'phys_port': 1, 'dl_type': None})
        self.assertEquals(flow['priority'], 5)
        flow = flows[1]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 1}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 5,
            'nw_dst': ipaddr.IPv4Network('10.0.17.0/24')
        })
        self.assertEquals(flow['priority'], 10)
        flow = flows[2]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 1,
            'nw_src': ipaddr.IPv4Network('10.0.17.0/24')
        })
        self.assertEquals(flow['priority'], 10)
        flow = flows[3]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 1}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 5,
            'nw_dst': ipaddr.IPv4Network('10.0.18.0/24')
        })
        self.assertEquals(flow['priority'], 10)
        flow = flows[4]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 1,
            'nw_src': ipaddr.IPv4Network('10.0.18.0/24')
        })
        self.assertEquals(flow['priority'], 10)
        flow = flows[5]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {'phys_port': 2, 'dl_type': None})
        self.assertEquals(flow['priority'], 5)
        flow = flows[6]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 2}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 5,
            'nw_dst': ipaddr.IPv4Network('10.0.19.0/24')
        })
        self.assertEquals(flow['priority'], 10)
        flow = flows[7]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 2,
            'nw_src': ipaddr.IPv4Network('10.0.19.0/24')
        })
        self.assertEquals(flow['priority'], 10)
        flow = flows[8]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 2}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 5,
            'nw_dst': ipaddr.IPv4Network('10.0.20.0/24')
        })
        self.assertEquals(flow['priority'], 10)
        flow = flows[9]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 2,
            'nw_src': ipaddr.IPv4Network('10.0.20.0/24')
        })
        self.assertEquals(flow['priority'], 10)
        flow = flows[10]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 2}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 5,
            'nw_dst': ipaddr.IPv6Network('2001:0DB8::/48')
        })
        self.assertEquals(flow['priority'], 10)
        flow = flows[11]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 5}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 2,
            'nw_src': ipaddr.IPv6Network('2001:0DB8::/48')
        })
        self.assertEquals(flow['priority'], 10)
        flow = flows[12]
        self.assertEquals(flow['actions'], [{
            'type': 'output',
            'port': 1
        }, {
            'type': 'output',
            'port': 2
        }])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {'phys_port': 5, 'dl_type': None})
        self.assertEquals(flow['priority'], 3)
        flow = flows[13]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 10}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {'phys_port': 6, 'dl_type': None})
        self.assertEquals(flow['priority'], 10)
        flow = flows[14]
        self.assertEquals(flow['actions'], [{'type': 'output', 'port': 6}])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {'phys_port': 10, 'dl_type': None})
        self.assertEquals(flow['priority'], 10)
        flow = flows[15]
        self.assertEquals(flow['actions'], [{
            'type': 'output',
            'port': 27
        }, {
            'type': 'output',
            'port': 26
        }, {
            'type': 'output',
            'port': 5
        }])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 1,
            'nw_src': ipaddr.IPv4Network('10.0.17.0/24')
        })
        self.assertEquals(flow['priority'], 500)
        flow = flows[16]
        self.assertEquals(flow['actions'], [{
            'type': 'output',
            'port': 27
        }, {
            'type': 'output',
            'port': 26
        }, {
            'type': 'output',
            'port': 6
        }])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 10,
            'nw_dst': ipaddr.IPv4Network('10.0.17.0/24')
        })
        self.assertEquals(flow['priority'], 500)
        flow = flows[17]
        self.assertEquals(flow['actions'], [{
            'type': 'output',
            'port': 21
        }, {
            'type': 'output',
            'port': 20
        }, {
            'type': 'output',
            'port': 5
        }])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 1,
            'nw_src': ipaddr.IPv4Network('10.0.18.0/24')
        })
        self.assertEquals(flow['priority'], 600)
        flow = flows[18]
        self.assertEquals(flow['actions'], [{
            'type': 'output',
            'port': 21
        }, {
            'type': 'output',
            'port': 20
        }, {
            'type': 'output',
            'port': 6
        }])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 10,
            'nw_dst': ipaddr.IPv4Network('10.0.18.0/24')
        })
        self.assertEquals(flow['priority'], 600)
        flow = flows[19]
        self.assertEquals(flow['actions'], [{
            'type': 'output',
            'port': 25
        }, {
            'type': 'output',
            'port': 24
        }, {
            'type': 'output',
            'port': 5
        }])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 2,
            'nw_src': ipaddr.IPv4Network('10.0.19.0/24')
        })
        self.assertEquals(flow['priority'], 700)
        flow = flows[20]
        self.assertEquals(flow['actions'], [{
            'type': 'output',
            'port': 25
        }, {
            'type': 'output',
            'port': 24
        }, {
            'type': 'output',
            'port': 6
        }])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 10,
            'nw_dst': ipaddr.IPv4Network('10.0.19.0/24')
        })
        self.assertEquals(flow['priority'], 700)
        flow = flows[21]
        self.assertEquals(flow['actions'], [{
            'type': 'output',
            'port': 23
        }, {
            'type': 'output',
            'port': 22
        }, {
            'type': 'output',
            'port': 5
        }])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 2,
            'nw_src': ipaddr.IPv4Network('10.0.20.0/24')
        })
        self.assertEquals(flow['priority'], 800)
        flow = flows[22]
        self.assertEquals(flow['actions'], [{
            'type': 'output',
            'port': 23
        }, {
            'type': 'output',
            'port': 22
        }, {
            'type': 'output',
            'port': 6
        }])
        self.assertEquals(flow['command'], "ADD")
        self.assertEquals(flow['header'], {
            'phys_port': 10,
            'nw_dst': ipaddr.IPv4Network('10.0.20.0/24')
        })
        self.assertEquals(flow['priority'], 800)
コード例 #6
0
ファイル: SciPassTest.py プロジェクト: zec/SciPass
 def test_valid_config(self):
     api = SciPass(logger=logging.getLogger(__name__),
                   config=str(os.getcwd()) + "/t/etc/SciPass.xml")
     self.assertTrue(isinstance(api, SciPass))
コード例 #7
0
 def setUp(self):
     self.api = SciPass(logger=logging.getLogger(__name__),
                        config=str(os.getcwd()) +
                        "/t/etc/Simple_SciPass_balancer_only.xml")