义齿webservice構築の学習と使用


Openflowの簡単なJSON-RPC-ish webサービスインタラクティブインターフェースで、of_サービス情報サービスは、webcoreコンポーネントに依存して派生した.HTTP POST方式でJSONを送信してアクセスできます.
現在サポートされている方法は次のとおりです.
,        
method
紹介する
パラメータ
get_flow_stats
フロー・テーブルのテーブル・アイテムの取得
dpid-文字列形式のdpid.たとえば、'00-00-00-01'flows-すべてのフローテーブルのリスト
get_switch_desc
指定したスイッチの詳細の取得
dpid-同上
get_switches
スイッチのリストと基本情報の取得
dpid-上match-フローテーブルとの一致エントリ(デフォルトはすべて一致)table_id-ストリームテーブルのid(デフォルトはすべて)out_port - filter by out port (defaults to all)
set_table
指定したスイッチのフロー・テーブルの設定
None.
poxの使用中は基本的に./pox.pyは後で構築を増やして一緒に実行しますが、webservice構築はwebを通じてスイッチとストリームテーブルにアクセスできるインタフェースを提供しています.上記のように、4つの機能しかサポートされていません.私は次の過程でプレゼンテーションを行います.私は基本的にpox wikiの中の資料を見て検証した結果ですが、wikiには少しバグがあり、私も修正しました.みんなもpox wikiの内容を参考にすることができます~私はcurlという東と東を使って上の方法を実行して、この東の具体的な紹介はここで省略しました~次は直接私の運行過程を言います~
まず、ここでは2つの基本的な東東mininetとpoxを使います.この文章を読むことができるという見積りもよく知られていないので、説明もしません.この文章は国内のウェブサイトでは見つけにくいものを書くことを指しています.余計なこと言わないで~
まずpoxとmininetを実行します(私は基本的にsu rootでroot権限で実行し、個人の使用を比較し、セキュリティの問題を考慮する必要はありません)、mininetのデフォルトのトポロジーを使用して、比較は機能のプレゼンテーションにすぎません.
poxのディレクトリにアクセスしてpoxと対応する構築を開始し、テスト取得情報を検証するためにl 3_を開きました.learningは、ping操作時にフローテーブルを発行します.
cd pox                                 
./pox.py openflow.of_01 web.webcore openflow.webservice forwarding.l3_learning

mininetを開く:
mn --controller=remote

一般的にデフォルトでは、~が接続されpoxに次の情報が出力されます.
INFO:openflow.of_01:[00-00-00-00-00-01 2] connected
まずmininetでping操作をしてコントローラにフローチャートをダウンさせます~
mininet> h1 ping h2
pingが通じるなら、スイッチにはコントローラからダウンロードしたフローチャートがあります.
今、curlでwebインタフェースにアクセスして、情報を得ることができます~
まずスイッチのフローチャートを取得します
curl -i -X POST -d '{"method":"get_flow_stats","params":{"dpid":"00-00-00-00-00-01"},"id": 1}' http://127.0.0.1:8000/OF/
この操作は3つの部分に分けられ、前はcurlコマンドで、ここでは言わないで、真ん中の大きな括弧の中で、私たちが要求するデータで、私たちはpostの形式で、データを要求して、最後に私たちがデータを要求するウェブサイトで、pox wikiの中で書いたウェブサイトはhttp://127.0.0.1:8000しかし、私自身のテストサイトによると、それは上のものだと思います.次に、真ん中の括弧の内容を具体的に話しましょう.
一般的に私たちがフォームを送信するのは一対一のデータの形式で送信されます.この形式はpythonでは辞書と呼ばれ、他の場所ではハッシュテーブル、マッピングなどと呼ばれる可能性があります.今、具体的なパラメータについて話します.この方法には3つのパラメータ、method、4つのオプションがあります.冒頭に列挙されています.paramsに対応するのは辞書です.例の方法、methodなど、対応する方法のパラメータが含まれています.彼は私たちが取得するフローテーブルをそのスイッチから指定しなければなりません.スイッチは一般的にdpidによって識別されています.だから、私たちが入力したパラメータはdpidです.スイッチの情報を取得するのは簡単な操作なので、パラメータは1つしかありません.liux端末で上記のコマンドを実行すると、コントローラに接続されているスイッチの情報を取得できます.この例の出力は次のとおりです.
{"result": {"flowstats": [{"packet_count": 2, "hard_timeout": 0, "byte_count": 196, "duration_sec": 3, "actions": [{"dl_addr": "be:48:cb:78:60:92", "type": "OFPAT_SET_DL_DST"}, {"max_len": 0, "type": "OFPAT_OUTPUT", "port": 2}], "duration_nsec": 194000000, "priority": 65535, "idle_timeout": 10, "cookie": 0, "table_id": 0, "match": {"dl_type": "IP", "nw_dst": "10.0.0.2/32", "dl_src": "52:9d:f5:2b:88:d4", "nw_proto": 1, "nw_tos": 0, "tp_dst": 0, "tp_src": 8, "dl_dst": "be:48:cb:78:60:92", "dl_vlan": 65535, "nw_src": "10.0.0.1", "in_port": 1}}, {"packet_count": 2, "hard_timeout": 0, "byte_count": 196, "duration_sec": 3, "actions": [{"dl_addr": "52:9d:f5:2b:88:d4", "type": "OFPAT_SET_DL_DST"}, {"max_len": 0, "type": "OFPAT_OUTPUT", "port": 1}], "duration_nsec": 193000000, "priority": 65535, "idle_timeout": 10, "cookie": 0, "table_id": 0, "match": {"dl_type": "IP", "nw_dst": "10.0.0.1/32", "dl_src": "be:48:cb:78:60:92", "nw_proto": 1, "nw_tos": 0, "tp_dst": 0, "tp_src": 0, "dl_dst": "52:9d:f5:2b:88:d4", "dl_vlan": 65535, "nw_src": "10.0.0.2", "in_port": 2}}], "dpid": "00-00-00-00-00-01"}, "id": 1}

自分で流し表を出したことがなければ、ちょっと難しそうに見えるかもしれませんが、自分で流し表を出したことがあれば、ほとんど読めます.
指定したスイッチの情報を取得します(dpidで異なるスイッチを指定します):
curl -i -X POST -d '{"method":"get_switch_desc","params":{"dpid":"00-00-00-00-00-01"},"id" : 1}' http://127.0.0.1:8000/OF/

結果:
{"result": {"switchdesc": {"dp_desc": "None", "sw_desc": "2.3.2", "hw_desc": "Open vSwitch", "serial_num": "None", "mfr_desc": "Nicira, Inc."}, "dpid": "00-00-00-00-00-01"}, "id": 1}

実はどんな内容もありません...咳をする.
スイッチのリストと基本情報を取得するには、次の手順に従います.
curl -i -X POST -d '{"method":"get_switches","id" : 1}'

結果:
{"result": [{"n_tables": 254, "ports": [{"hw_addr": "9e:0f:91:2d:a0:8e", "name": "s1-eth1", "port_no": 1}, {"hw_addr": "de:d6:d4:55:9e:e0", "name": "s1-eth2", "port_no": 2}, {"hw_addr": "7a:2a:44:cf:ff:4f", "port_down": true, "link_down": true, "name": "s1", "port_no": 65534}], "dpid": "00-00-00-00-00-01"}], "id": 1}
スイッチが1つしかないので、情報のセットをもらいました~
最後にダウンストリームメーターです~
curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","in_port":1 }}]}}' http://127.0.0.1:8000/OF/
paramsにはdpidを指定するだけでなくflowが1つ増えています.pythonではカッコの中にリストの形式が入っています.つまり、複数のフローテーブルを同時に送ることができます.同じactionsに対応するのもリストの形式で、複数の動作に対応しています.flowsの中には1本1本のストリームテーブルがあります.私たちはストリームテーブルのマッチングを指定しました.まずipパケットでなければなりません.それから1番ポートから入ってきたパケットでなければなりません.マッチングに成功した後の動作は2番ポートから転送することを指定しました.
複数のフロー・テーブルを同時に送信する方法を説明します.
curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","in_port":1 }},{"actions":[{"type":"OFPAT_OUTPUT","port":"OFPP_ALL"}]}]}}' http://127.0.0.1:8000/OF/

flowsリストにもう1つ追加しました~
次にmininetでフロー・テーブルを表示し、次のコードを実行します.
mininet> dpctl dump-flows

次の情報を入手できます.
*** s1 ------------------------------------------------------------------------
NXST_FLOW reply (xid=0x4):
 cookie=0x0, duration=203.063s, table=0, n_packets=0, n_bytes=0, idle_age=203, actions=ALL
 cookie=0x0, duration=203.102s, table=0, n_packets=0, n_bytes=0, idle_age=203, ip,in_port=1 actions=output:2

これですべての内容が终わって、话すのが足りないかもしれないし、话すのがうるさいかもしれないし、地方が分からないかもしれないし、みんなは伝言を残してもいいし、メールを送ってもいいです.もちろん、伝言をすると、私は何世纪も前のブログを知らないので、メールを送ったほうがいいです.
最後にもう一つ質問があります.matchソースipアドレスのときはいつも問題が発生します.
curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","nw_dst":"192.168.42.0/255.255.255.0"}}]}}' http://127.0.0.1:8000/OF/
もし私がこのように下りたら問題が発生して、今のところ解けません.の他の人は彼がovs 2にいると言った.5のバージョンとPOX eelで実行中にエラーはありません..