Ryuのマッチ処理(OFPMatch)

提供:TuntunkunMediaWiki

移動: 案内, 検索

目次

Ryuのマッチ処理(OFPMatch)

RyuのOFPMatchについて書いておく。以下はRyuのマッチに使用する事が出来るフィールド一覧である。

# |  ================ =============== ==================================
# |  Argument         Value           Description
# |  ================ =============== ==================================
# |  in_port          Integer 32bit   Switch input port
# |  in_phy_port      Integer 32bit   Switch physical input port
# |  metadata         Integer 64bit   Metadata passed between tables
# |  eth_dst          MAC address     Ethernet destination address
# |  eth_src          MAC address     Ethernet source address
# |  eth_type         Integer 16bit   Ethernet frame type
# |  vlan_vid         Integer 16bit   VLAN id
# |  vlan_pcp         Integer 8bit    VLAN priority
# |  ip_dscp          Integer 8bit    IP DSCP (6 bits in ToS field)
# |  ip_ecn           Integer 8bit    IP ECN (2 bits in ToS field)
# |  ip_proto         Integer 8bit    IP protocol
# |  ipv4_src         IPv4 address    IPv4 source address
# |  ipv4_dst         IPv4 address    IPv4 destination address
# |  tcp_src          Integer 16bit   TCP source port
# |  tcp_dst          Integer 16bit   TCP destination port
# |  udp_src          Integer 16bit   UDP source port
# |  udp_dst          Integer 16bit   UDP destination port
# |  sctp_src         Integer 16bit   SCTP source port
# |  sctp_dst         Integer 16bit   SCTP destination port
# |  icmpv4_type      Integer 8bit    ICMP type
# |  icmpv4_code      Integer 8bit    ICMP code
# |  arp_op           Integer 16bit   ARP opcode
# |  arp_spa          IPv4 address    ARP source IPv4 address
# |  arp_tpa          IPv4 address    ARP target IPv4 address
# |  arp_sha          MAC address     ARP source hardware address
# |  arp_tha          MAC address     ARP target hardware address
# |  ipv6_src         IPv6 address    IPv6 source address
# |  ipv6_dst         IPv6 address    IPv6 destination address
# |  ipv6_flabel      Integer 32bit   IPv6 Flow Label
# |  icmpv6_type      Integer 8bit    ICMPv6 type
# |  icmpv6_code      Integer 8bit    ICMPv6 code
# |  ipv6_nd_target   IPv6 address    Target address for ND
# |  ipv6_nd_sll      MAC address     Source link-layer for ND
# |  ipv6_nd_tll      MAC address     Target link-layer for ND
# |  mpls_label       Integer 32bit   MPLS label
# |  mpls_tc          Integer 8bit    MPLS TC
# |  mpls_bos         Integer 8bit    MPLS BoS bit
# |  pbb_isid         Integer 24bit   PBB I-SID
# |  tunnel_id        Integer 64bit   Logical Port Metadata
# |  ipv6_exthdr      Integer 16bit   IPv6 Extension Header pseudo-field
# |  ================ =============== ==================================

IPv4のアドレスのマッチ

以下にIPv4のアドレスマッチの例を示す。気をつけるべき事としては、ipv4_srcを指定する際にはeth_typeを指定しなければならないことがある。

match_rule     = parser.OFPMatch(eth_type=0x800, ipv4_src='10.0.0.1')

以下はネットマスクを利用した場合のIPv4アドレスの指定方法です。

match_rule     = parser.OFPMatch(in_port=port_a, eth_type=0x800, ipv4_src=('10.3.0.0', '255.255.254.0'))


0x0800 IPv4
0x0806 ARP
0x809b AppleTalk
0x8100 IEEE802.1q
0x8137 IPX
0x86dd IPv6

表1.1:Ethernet Frame Type

UDPプロトコル及びTCPプロトコルのマッチ処理

IPv4のアドレスにマッチさせるのと同様に、UDPプロトコルのみをマッチさせるためには、eth_type=0x800の指定及び、ip_protoを指定する必要がある。

import socket
 
# UDPプロトコルのマッチ処理
match_rule     = parser.OFPMatch(eth_type=0x800, ip_proto=socket.IPPROTO_UDP)
 
# TCPプロトコルのマッチ処理
match_rule     = parser.OFPMatch(eth_type=0x800, ip_proto=socket.IPPROTO_TCP)

宛先がTCPの80番ポートへのマッチ処理

 次に、宛先が80番ポートのTCPへのマッチ処理を記述する。

match_rule     = parser.OFPMatch(eth_type=0x800, ip_proto=socket.IPPROTO_TCP, tcp_dst=80)
個人用ツール
名前空間
変種
操作
案内
ツールボックス