猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

Ryuのソースコードリーディング その1 プロトコル

前置き

 Ryu-bookも出たので、そろそろ本格的にRyuのソースコードリーディングをやってみます。まずはRyuのパケットに関するライブラリに関連するコードから読み始めてみます。

プロトコル

 Ryu/lib/packet以下の[arp/bgp/bpdu/dhcp/ethernet/icmp/icmpv6/igmp/ipv4/ipv6
/llc/lldp/mpls/pbb/sctp/slow/tcp/udp/vlan/vrrp]がRyuが対応しているプロトコルです。いずれのプロトコルもpacket_base.pyを継承したクラスとして定義されています。

 OpenFlowの仕様にも含まれていないプロトコルも含まれています。これらのプロトコルを用いることで、パケットアウトの際にパケットを新規作成して送信できるプロトコルの種類が膨らみます。

実行例

 Ryuのプロトコルのクラスを用いた簡単な実行例です。ipv4のプロトコルのインスタンスを作成して、IPアドレスとプロトコルを表示しています。

 pythonの対話型シェルを用いて、Ryuのアプリケーションを作成しなくても、ライブラリを指定して実行させることができます。

>>> from ryu.ofproto import inet
>>> from ryu.lib.packet import ipv4
>>> pkt_ipv4 = ipv4.ipv4(dst='192.0.2.1',
...                      src='192.0.2.2',
...                      proto=inet.IPPROTO_UDP)
>>> print pkt_ipv4.dst
192.0.2.1
>>> print pkt_ipv4.src
192.0.2.2
>>> print pkt_ipv4.proto
17