1

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 があるかどうか知りたいです。パスを知っていて、フローを事前にプログラムしたい場合に、フローを設定するために使用します。

4

0 に答える 0