From 88cc95c1c66078dd81d18a32a90c45736d6e52f5 Mon Sep 17 00:00:00 2001 From: Pritesh Kothari Date: Mon, 12 Jan 2015 17:46:49 -0800 Subject: [PATCH] ipv6: Add support for setting ipv6 flow label. IPv6 Flow Label is currently read only. This patch adds support to allow actions like actions=set_field:0x12345->ipv6_label. The change to mf_set_flow_value() is a bug fix, but the bug was not visible before the flow label was modifiable. Signed-off-by: Pritesh Kothari [blp@nicira.com added an item to NEWS] Signed-off-by: Ben Pfaff --- NEWS | 1 + lib/meta-flow.c | 2 +- lib/meta-flow.h | 2 +- tests/ofproto.at | 4 ++-- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 228fec36a..e35478d73 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,7 @@ Post-v2.3.0 commands are now redundant and will be removed in a future release. See ovs-vswitchd(8) for details. - OpenFlow: + * The IPv6 flow label field is now modifiable. * OpenFlow 1.5 (draft) extended registers are now supported. * The OpenFlow 1.5 (draft) actset_output field is now supported. * OpenFlow 1.5 (draft) Copy-Field action is now supported. diff --git a/lib/meta-flow.c b/lib/meta-flow.c index 67115b2d7..9ce4cfea0 100644 --- a/lib/meta-flow.c +++ b/lib/meta-flow.c @@ -1017,7 +1017,7 @@ mf_set_flow_value(const struct mf_field *mf, break; case MFF_IPV6_LABEL: - flow->ipv6_label = value->be32 & ~htonl(IPV6_LABEL_MASK); + flow->ipv6_label = value->be32 & htonl(IPV6_LABEL_MASK); break; case MFF_IP_PROTO: diff --git a/lib/meta-flow.h b/lib/meta-flow.h index 1ee5c7581..d07072ea7 100644 --- a/lib/meta-flow.h +++ b/lib/meta-flow.h @@ -904,7 +904,7 @@ enum OVS_PACKED_ENUM mf_field_id { * Maskable: bitwise. * Formatting: hexadecimal. * Prerequisites: IPv6. - * Access: read-only. + * Access: read/write. * NXM: NXM_NX_IPV6_LABEL(27) since v1.4. * OXM: OXM_OF_IPV6_FLABEL(28) since OF1.2 and v1.7. */ diff --git a/tests/ofproto.at b/tests/ofproto.at index 386cb67ed..b33e0dcb0 100644 --- a/tests/ofproto.at +++ b/tests/ofproto.at @@ -1380,7 +1380,7 @@ OVS_VSWITCHD_START instructions: apply_actions,clear_actions,write_actions,write_metadata$goto Write-Actions and Apply-Actions features: actions: output group set_field strip_vlan push_vlan mod_nw_ttl dec_ttl set_mpls_ttl dec_mpls_ttl push_mpls pop_mpls set_queue - supported on Set-Field: metadata in_port_oxm eth_src eth_dst vlan_vid vlan_pcp mpls_label mpls_tc ip_src ip_dst ipv6_src ipv6_dst ip_dscp nw_ecn arp_op arp_spa arp_tpa arp_sha arp_tha tcp_src tcp_dst udp_src udp_dst sctp_src sctp_dst + supported on Set-Field: metadata in_port_oxm eth_src eth_dst vlan_vid vlan_pcp mpls_label mpls_tc ip_src ip_dst ipv6_src ipv6_dst ipv6_label ip_dscp nw_ecn arp_op arp_spa arp_tpa arp_sha arp_tha tcp_src tcp_dst udp_src udp_dst sctp_src sctp_dst matching: metadata: exact match or wildcard in_port_oxm: exact match or wildcard @@ -1465,7 +1465,7 @@ OVS_VSWITCHD_START instructions: meter,apply_actions,clear_actions,write_actions,write_metadata$goto Write-Actions and Apply-Actions features: actions: output group set_field strip_vlan push_vlan mod_nw_ttl dec_ttl set_mpls_ttl dec_mpls_ttl push_mpls pop_mpls set_queue - supported on Set-Field: tun_id tun_src tun_dst metadata in_port in_port_oxm pkt_mark reg0 reg1 reg2 reg3 reg4 reg5 reg6 reg7 xreg0 xreg1 xreg2 xreg3 eth_src eth_dst vlan_tci vlan_vid vlan_pcp mpls_label mpls_tc ip_src ip_dst ipv6_src ipv6_dst nw_tos ip_dscp nw_ecn nw_ttl arp_op arp_spa arp_tpa arp_sha arp_tha tcp_src tcp_dst udp_src udp_dst sctp_src sctp_dst + supported on Set-Field: tun_id tun_src tun_dst metadata in_port in_port_oxm pkt_mark reg0 reg1 reg2 reg3 reg4 reg5 reg6 reg7 xreg0 xreg1 xreg2 xreg3 eth_src eth_dst vlan_tci vlan_vid vlan_pcp mpls_label mpls_tc ip_src ip_dst ipv6_src ipv6_dst ipv6_label nw_tos ip_dscp nw_ecn nw_ttl arp_op arp_spa arp_tpa arp_sha arp_tha tcp_src tcp_dst udp_src udp_dst sctp_src sctp_dst matching: dp_hash: arbitrary mask recirc_id: exact match or wildcard -- 2.20.1