API для предварительного программирования записей потока в коммутаторы
Я использую функцию ниже в моем simple_switch.py, чтобы заполнить потоки к коммутаторам.
def populate_of_flow(self,datapath,msg,src,dst):
ofproto = datapath.ofproto
dpid = datapath.id
self.mac_to_port.setdefault(dpid, {})
# learn a mac address to avoid FLOOD next time.
self.mac_to_port[dpid][src] = msg.in_port
if dst in self.mac_to_port[dpid]:
out_port = self.mac_to_port[dpid][dst]
else:
out_port = ofproto.OFPP_FLOOD
actions = [datapath.ofproto_parser.OFPActionOutput(out_port)]
fe_key = format_dpid_str(dpid_to_str(datapath.id)) + str(msg.in_port)
fe_list = self.g.vertices.index.lookup(switch_dpid_port=fe_key)
for fe in fe_list:
#print('flow entries for switch {} has output port {} action {}'.format(fe.switch_dpid,fe.actionOutputPort,fe.actions))
outport = fe.actionOutputPort
actions = [datapath.ofproto_parser.OFPActionOutput(outport)]
# install a flow to avoid packet_in next time
if out_port != ofproto.OFPP_FLOOD:
self.add_flow(datapath, msg.in_port, dst, actions)
print('msg.buffer_id {}'.format(msg.buffer_id))
out = datapath.ofproto_parser.OFPPacketOut(
datapath=datapath, buffer_id=msg.buffer_id, in_port=msg.in_port,
actions=actions)
datapath.send_msg(out)
Как вы можете видеть выше, для этого требуется "msg.buffer_id.". Теперь это "msg" происходит из события PACKET_IN, которое передается в обработчик событий. Я хотел бы знать, есть ли более общий API, который я могу используйте для заполнения потоков, учитывая, что я знаю путь и хочу предварительно запрограммировать потоки.