def meterdel(datapath=None, meter_id=ofp.OFPM_ALL): """Delete a meter (default all meters).""" return parser.OFPMeterMod( datapath, ofp.OFPMC_DELETE, 0, meter_id)
def controller_pps_meterdel(datapath=None): """Delete a PPS meter towards controller.""" return parser.OFPMeterMod( datapath=datapath, command=ofp.OFPMC_DELETE, flags=ofp.OFPMF_PKTPS, meter_id=ofp.OFPM_CONTROLLER)
def controller_pps_meteradd(datapath=None, pps=0): """Add a PPS meter towards controller.""" return parser.OFPMeterMod(datapath=datapath, command=ofp.OFPMC_ADD, flags=ofp.OFPMF_PKTPS, meter_id=ofp.OFPM_CONTROLLER, bands=[parser.OFPMeterBandDrop(rate=pps)])
def metermod(bands=None, datapath=None, command=ofp.OFPMC_ADD, flags=ofp.OFPMF_PKTPS, meter_id=1): # calls on the parser to parse the meter message. return parser.OFPMeterMod(datapath=None, command=command, flags=flags, meter_id=meter_id, bands=bands)
def meterdel(datapath=None, meter_id=ofp.OFPM_ALL): return parser.OFPMeterMod( datapath, ofp.OFPMC_DELETE, 0, meter_id)
def switch_features_handler(self, event): """ Switche sent his features, check if Beba supported """ msg = event.msg datapath = msg.datapath LOG.info("Configuring switch %d..." % datapath.id) for table in range(0, 2): """ Set tables as stateful """ req = bebaparser.OFPExpMsgConfigureStatefulTable(datapath=datapath, table_id=table, stateful=1) datapath.send_msg(req) """ Set lookup extractor = {ip_src, ip_dst, tcp_src, tcp_dst} """ req = bebaparser.OFPExpMsgKeyExtract( datapath=datapath, command=bebaproto.OFPSC_EXP_SET_L_EXTRACTOR, fields=[ ofproto.OXM_OF_IPV4_SRC, ofproto.OXM_OF_IPV4_DST, ofproto.OXM_OF_TCP_SRC, ofproto.OXM_OF_TCP_DST ], table_id=table) datapath.send_msg(req) """ Set update extractor = {ip_src, ip_dst, tcp_src, tcp_dst} (same as lookup) """ req = bebaparser.OFPExpMsgKeyExtract( datapath=datapath, command=bebaproto.OFPSC_EXP_SET_U_EXTRACTOR, fields=[ ofproto.OXM_OF_IPV4_SRC, ofproto.OXM_OF_IPV4_DST, ofproto.OXM_OF_TCP_SRC, ofproto.OXM_OF_TCP_DST ], table_id=table) datapath.send_msg(req) """ Configure meter 1 """ b1 = ofparser.OFPMeterBandDscpRemark(rate=10, prec_level=1) req = ofparser.OFPMeterMod(datapath, command=ofproto.OFPMC_ADD, flags=ofproto.OFPMF_PKTPS, meter_id=1, bands=[b1]) datapath.send_msg(req) """ Table 0 """ match = ofparser.OFPMatch(eth_type=0x0800, ipv4_dst="10.0.0.2", state=0) actions = [ bebaparser.OFPExpActionSetState(state=1, table_id=0, idle_timeout=30) ] inst = [ ofparser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions), ofparser.OFPInstructionMeter(meter_id=1), ofparser.OFPInstructionGotoTable(table_id=1) ] mod = ofparser.OFPFlowMod(datapath=datapath, table_id=0, priority=10, match=match, instructions=inst) datapath.send_msg(mod) match = ofparser.OFPMatch(eth_type=0x0800, ipv4_dst="10.0.0.2", state=1) inst = [ofparser.OFPInstructionGotoTable(table_id=1)] mod = ofparser.OFPFlowMod(datapath=datapath, table_id=0, priority=10, match=match, instructions=inst) datapath.send_msg(mod) match = ofparser.OFPMatch(eth_type=0x0800, ipv4_dst="10.0.0.1") actions = [ofparser.OFPActionOutput(1)] inst = [ ofparser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions) ] mod = ofparser.OFPFlowMod(datapath=datapath, table_id=0, priority=10, match=match, instructions=inst) datapath.send_msg(mod) """ Table 1 """ match = ofparser.OFPMatch(state=0, eth_type=0x0800, ipv4_dst="10.0.0.2", ip_dscp=10) actions = [ofparser.OFPActionOutput(2)] inst = [ ofparser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions) ] mod = ofparser.OFPFlowMod(datapath=datapath, table_id=1, priority=10, match=match, instructions=inst) datapath.send_msg(mod) match = ofparser.OFPMatch(eth_type=0x0800, ipv4_dst="10.0.0.2", ip_dscp=12) actions = [ bebaparser.OFPExpActionSetState(state=1, table_id=1, idle_timeout=30) ] inst = [ ofparser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions) ] mod = ofparser.OFPFlowMod(datapath=datapath, table_id=1, priority=10, match=match, instructions=inst) datapath.send_msg(mod) match = ofparser.OFPMatch(state=1, eth_type=0x0800, ipv4_dst="10.0.0.2", ip_dscp=10) actions = [] inst = [ ofparser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions) ] mod = ofparser.OFPFlowMod(datapath=datapath, table_id=1, priority=10, match=match, instructions=inst) datapath.send_msg(mod)