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
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!")