summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authortakahashi.minoru <takahashi.minoru7@gmail.com>2014-07-10 13:21:16 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2014-07-17 15:04:17 +0900
commitbfe4b79a1f1773dccad696bf04f342b1786a24cb (patch)
treef311ef7155233f0423164d1aba1ca6f5f2d3a0fc
parent261cda51a985f8be2785cc67ad26505c4b15355c (diff)
ofctl_v1_2/3: fix POP_MPLS action and some match fields
The following causes an error at mod_flow_entry command - ofctl_v1_2.py * match field: metadata, mpls_label - ofctl_v1_3.py * match field: in_phy_port and the following causes an error at get_flow_stats command - ofctl_v1_2.py * action: POP_MPLS * match field: metadata, ipv6_nd_target - ofctl_v1_3.py * action: POP_MPLS * match field: ipv6_nd_target this patch fixes them. Signed-off-by: TAKAHASHI Minoru <takahashi.minoru7@gmail.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/lib/ofctl_v1_2.py28
-rw-r--r--ryu/lib/ofctl_v1_3.py7
2 files changed, 33 insertions, 2 deletions
diff --git a/ryu/lib/ofctl_v1_2.py b/ryu/lib/ofctl_v1_2.py
index ce49a45f..41f0b939 100644
--- a/ryu/lib/ofctl_v1_2.py
+++ b/ryu/lib/ofctl_v1_2.py
@@ -145,7 +145,7 @@ def action_to_str(act):
elif action_type == ofproto_v1_2.OFPAT_PUSH_MPLS:
buf = 'PUSH_MPLS:' + str(act.ethertype)
elif action_type == ofproto_v1_2.OFPAT_POP_MPLS:
- buf = 'POP_MPLS'
+ buf = 'POP_MPLS:' + str(act.ethertype)
elif action_type == ofproto_v1_2.OFPAT_SET_QUEUE:
buf = 'SET_QUEUE:' + str(act.queue_id)
elif action_type == ofproto_v1_2.OFPAT_GROUP:
@@ -206,6 +206,8 @@ def to_match(dp, attrs):
'nw_proto': int,
'tp_src': int,
'tp_dst': int,
+ 'mpls_label': int,
+ 'metadata': to_match_metadata,
'eth_src': to_match_eth,
'eth_dst': to_match_eth,
'eth_type': int,
@@ -248,6 +250,8 @@ def to_match(dp, attrs):
'nw_proto': match.set_ip_proto,
'tp_src': to_match_tpsrc,
'tp_dst': to_match_tpdst,
+ 'mpls_label': match.set_mpls_label,
+ 'metadata': match.set_metadata_masked,
'eth_src': match.set_dl_src_masked,
'eth_dst': match.set_dl_dst_masked,
'eth_type': match.set_dl_type,
@@ -308,11 +312,18 @@ def to_match(dp, attrs):
ip = value[0]
mask = value[1]
match_append[key](ip, mask)
+ elif key == 'ipv6_nd_target':
+ match_append[key](value[0])
elif key == 'tp_src' or key == 'tp_dst' or \
key == 'tcp_src' or key == 'tcp_dst' or \
key == 'udp_src' or key == 'udp_dst':
# tp_src/dst
match_append[key](value, match, attrs)
+ elif key == 'metadata':
+ # metadata
+ metadata = value[0]
+ metadata_mask = value[1]
+ match_append[key](metadata, metadata_mask)
else:
# others
match_append[key](value)
@@ -390,6 +401,14 @@ def to_match_ipv6(value):
return ipv6, netmask
+def to_match_metadata(value):
+ if '/' in value:
+ metadata = value.split('/')
+ return str_to_int(metadata[0]), str_to_int(metadata[1])
+ else:
+ return str_to_int(value), ofproto_v1_2_parser.UINT64_MAX
+
+
def match_to_str(ofmatch):
keys = {ofproto_v1_2.OXM_OF_IN_PORT: 'in_port',
ofproto_v1_2.OXM_OF_IN_PHY_PORT: 'in_phy_port',
@@ -417,6 +436,8 @@ def match_to_str(ofmatch):
ofproto_v1_2.OXM_OF_ICMPV4_CODE: 'icmpv4_code',
ofproto_v1_2.OXM_OF_MPLS_LABEL: 'mpls_label',
ofproto_v1_2.OXM_OF_MPLS_TC: 'mpls_tc',
+ ofproto_v1_2.OXM_OF_METADATA: 'metadata',
+ ofproto_v1_2.OXM_OF_METADATA_W: 'metadata',
ofproto_v1_2.OXM_OF_ARP_OP: 'arp_op',
ofproto_v1_2.OXM_OF_ARP_SPA: 'arp_spa',
ofproto_v1_2.OXM_OF_ARP_TPA: 'arp_tpa',
@@ -450,6 +471,11 @@ def match_to_str(ofmatch):
value = match_ip_to_str(match_field.value, match_field.mask)
elif key == 'ipv6_src' or key == 'ipv6_dst':
value = match_ipv6_to_str(match_field.value, match_field.mask)
+ elif key == 'ipv6_nd_target':
+ value = match_ipv6_to_str(match_field.value, None)
+ elif key == 'metadata':
+ value = ('%d/%d' % (match_field.value, match_field.mask)
+ if match_field.mask else '%d' % match_field.value)
else:
value = match_field.value
match.setdefault(key, value)
diff --git a/ryu/lib/ofctl_v1_3.py b/ryu/lib/ofctl_v1_3.py
index c63c4e18..dda1090b 100644
--- a/ryu/lib/ofctl_v1_3.py
+++ b/ryu/lib/ofctl_v1_3.py
@@ -153,7 +153,7 @@ def action_to_str(act):
elif action_type == ofproto_v1_3.OFPAT_PUSH_MPLS:
buf = 'PUSH_MPLS:' + str(act.ethertype)
elif action_type == ofproto_v1_3.OFPAT_POP_MPLS:
- buf = 'POP_MPLS'
+ buf = 'POP_MPLS:' + str(act.ethertype)
elif action_type == ofproto_v1_3.OFPAT_SET_QUEUE:
buf = 'SET_QUEUE:' + str(act.queue_id)
elif action_type == ofproto_v1_3.OFPAT_GROUP:
@@ -259,6 +259,7 @@ def to_match(dp, attrs):
'ipv6_exthdr': int}
match_append = {'in_port': match.set_in_port,
+ 'in_phy_port': match.set_in_phy_port,
'dl_src': match.set_dl_src_masked,
'dl_dst': match.set_dl_dst_masked,
'dl_type': match.set_dl_type,
@@ -335,6 +336,8 @@ def to_match(dp, attrs):
ip = value[0]
mask = value[1]
match_append[key](ip, mask)
+ elif key == 'ipv6_nd_target':
+ match_append[key](value[0])
elif key == 'tp_src' or key == 'tp_dst' or \
key == 'tcp_src' or key == 'tcp_dst' or \
key == 'udp_src' or key == 'udp_dst':
@@ -496,6 +499,8 @@ def match_to_str(ofmatch):
value = match_ip_to_str(match_field.value, match_field.mask)
elif key == 'ipv6_src' or key == 'ipv6_dst':
value = match_ipv6_to_str(match_field.value, match_field.mask)
+ elif key == 'ipv6_nd_target':
+ value = match_ipv6_to_str(match_field.value, None)
elif key == 'metadata':
value = ('%d/%d' % (match_field.value, match_field.mask)
if match_field.mask else '%d' % match_field.value)