Esempio n. 1
0
from os import listdir
from nesox import flow
from nesox import transdir

flows = []
transfermap = {}
transfers = listdir(transdir)

for tran in transfers:
    transfile = open(transdir + tran)
for line in transfile:
    flows.append(
        flow(int(line[0]), int(line[2]), int(line[6:].rstrip()), int(line[4])))
for flow in flows:
    transfermap[(flow.source, flow.destination)] = flow

# transfermap[(1,2)].show(1)
print transfermap
Esempio n. 2
0
    def handler_switch_features(self, event):
        if self.trace: self.logger.info("SCHEDULE [Handler = Switch Features]: enter!")

        """
        initialize packetin counter
        """
        self.packetin_counter = 0

        """
        initialize datapath
        """
        datapath = event.msg.datapath
        parser = datapath.ofproto_parser

        self.datapath = datapath
        """
        read `transfer` requirement into a `list` and a `dictionary`
        """
        self.flows = []
        for tran in self.transfers: transfile = open(transdir + tran)
        for line in transfile: self.flows.append(nesox.flow(int(line[0]), int(line[2]), int(line[6:].rstrip()), int(line[4])))
        for flow in self.flows: self.transfermap[(flow.source, flow.destination)] = flow
        if self.debug: self.logger.info("tramsfermap: %s", self.transfermap)

        """
        !!! Note: flow is defined by a match and a priority !!!
        """

        """
        create flows (default)
        priority = 1
        initialize pipeline: (ANY) packet pass through the pipeline to controller
        """
        p = 1
        m = parser.OFPMatch()
        t = self.table_start
        for gototid in self.soft_tables:
            self.insert_goto(datapath, t, m, p, gototid)
            t = gototid
        self.insert_controller(datapath, t, m, p)
        self.insert_controller(datapath, self.table_learning, m, p)


        """
        create flows (service dispatching)
        priority = 2
        for data transfer service port family 8***
        (still does NOT work!)
        """
        P = 2
        m = parser.OFPMatch(eth_type=0x0800, tcp_dst=8478)
        t = self.soft_table_id
        gototid = self.table_terminate
        self.insert_goto(datapath, t, m, p, gototid)


        """
        The Ethernet MTU is 1500 bytes! (from google)
        It means the largest IP packet (or some other payload) an Ethernet frame can contain is 1500 bytes.
        """

        """
        create meters (static)
        meter id: 1 - 5
        """
        rates = [4, 3, 2, 1, 0]
        for mid in range(0, len(rates)):
            self.insert_packetmeter(datapath, mid+1, rates[mid])
            self.meter_id = mid


        """
        monitor flows
        """
        m = parser.OFPMatch()
        if self.monitor_on: self.request_flowstats(datapath, self.table_learning, m)


        """
        monitor meters
        """
        if self.monitor_on: self.request_meterfeature(datapath)
        if self.monitor_on: self.request_meterconfig(datapath)
        if self.monitor_on: self.request_meterstats(datapath)



        if self.trace: self.logger.info("SCHEDULE [Handler = Switch Features]: leave!")