Skip to main content

About

ofpstr is openflow stringer library and it converts string into openflow binary message, like ovs-ofctl flow rule arguments. It can also convert binary message back to string representation. The syntax is DIFFERENT from ovs-ofctl, using more direct naming as is defined in the spec. For example, ovs-ofctl use dl_vlan for vlan tagging, which is not present in openflow 1.3 spec. ofpstr use vlan_vid for this.

usage

There are two modes of oxm and ofp_mod_flow.

oxm example:

import ofpstr.oxm
# string to binary message
oxm_msg,parsed_len = ofpstr.oxm.str2oxm("in_port=1,vlan_vid=0x1,eth_type=0x0800")
# binary message to string
print(ofpstr.oxm.oxm2str(oxm_msg))

ofp_mod_flow example:

import ofpstr.ofp4
# string to binary message
ofp_flow_mod_msg = ofpstr.ofp4.str2mod("in_port=1,@apply,output=controller", xid=16)
# binary message to string
print(ofpstr.ofp4.mod2str(ofp_flow_mod_msg))
# in_port=1,@apply,output=controller

general syntax

Tokens are separated by comma, field may take argument with = separator. argument may have mask with “/” separator. Examples:

# integer mode
metadata=0x01/0x0F
tunnel_id=10
# mac mode
eth_dst=01:00:00:00:00:00/01:00:00:00:00:00
# ipv4 mode
ipv4_src=192.168.1.0/24
ipv4_src=192.168.1.0/255.255.255.0
# ipv6 mode
ipv6_src=::
# port mode may use special names or integer
in_port=controller
in_port=1
# pkt mode use two integer representing (namespace,ns_type)
packet_type=0:1
# hex mode use hex string (like binascii hex)
dot11_frame_ctrl=c000/ff00
# ssid mode use string directly
dot11_ssid=TestAP

Full oxm list follows:

  • integer mode: metadata, eth_type, vlan_vid, vlan_pcp, ip_dscp, ip_ecn, ip_proto, tcp_src, tcp_dst, udp_src, udp_dst, sctp_src, sctp_dst, icmpv4_type, icmpv4_code, arp_op, ipv6_label, icmpv6_type, icmpv6_code, mpls_bale, mpls_tc, mpls_bos, pbb_isid, tunnel_id, ipv6_exthdr, pbb_uca, tcp_flags, nxm_in_port, nxm_eth_type, nxm_vlan_tci, nxm_ip_tos, nxm_ip_proto, nxm_tcp_src, nxm_tcp_dst, nxm_udp_src, nxm_udp_dst, nxm_icmp_type, nxm_icmp_code, nxm_arp_op, nxm_reg0, nxm_reg1, nxm_reg2, nxm_reg3, nxm_reg4, nxm_reg5, nxm_reg6, nxm_reg7, nxm_tun_id, nxm_icmpv6_type, nxm_icmpv6_code, nxm_ip_frag, nxm_ipv6_label, nxm_ip_ecn, nxm_ip_ttl, nxm_pkt_mark, nxm_tcp_flags, nxm_dp_hash, nxm_recirc_id, nxm_conj_id, nxm_tun_gbp_id, nxm_tun_gbp_flags, dot11, dot11_public_action, dot11_tag, radiotap_tsft, radiotap_flags, radiotap_lock_quality, radiotap_tx_attenuation, radiotap_db_tx_attenuation, radiotap_antenna, radiotap_db_antsignal, radiotap_db_antnoise, radiotap_rx_flags, radiotap_tx_flags, radiotap_rts_retries, radiotap_data_retries, radiotap_dbm_antsignal, radiotap_dbm_antnoise, radiotap_dbm_tx_power

  • mac mode: eth_dst, eth_src, arp_sha, arp_tha, ipv6_nd_sll, ipv6_nd_tll, nxm_eth_dst, nxm_eth_src, nxm_arp_sha, nxm_arp_tha, nxm_nd_sll, nxm_nd_tll, dot11_addr1, dot11_addr2, dot11_addr3, dot11_addr4

  • ipv4 mode: ipv4_src, ipv4_dst, arp_spa, arp_tpa, nxm_ip_src, nxm_ip_dst, nxm_arp_spa, nxm_arp_tpa, nxm_tun_ipv4_src, nxm_tun_ipv4_dst

  • ipv6 mode: ipv6_src, ipv6_dst, ipv6_nd_target, nxm_ipv6_src, nxm_ipv6_dst, nxm_nd_target

  • port mode: in_port, in_phy_port, actset_output

  • pkt mode: packet_type

  • hex mode: dot11_frame_ctrl, dot11_action_category, dot11_tag_vendor, radiotap_fhss

  • ssid mode: dot11_ssid

  • rate mode: radiotap_rate

  • ch mode: radiotap_channel

  • comp mode: radiotap_mcs, radiotap_ampdu_status

  • vht mode: radiotap_vht

Actions may take arguments in function style. oxm with set_ prefix will be set_field action. Some nxm actions accepts only function style. Examples:

# alias for set_vlan_vid=10
set_vlan_vid(10)
# nicira extensions
cnt_ids(0x1,0x2,0x3)
reg_load(nxm_vlan_tci=0xa/0x0fff)
reg_load2(nxm_vlan_tci=0xa/0x0fff)
reg_move(nxm_eth_dst=nxm_eth_src)
reg_move(nxm_eth_dst[0:4]=nxm_eth_src[4:8])
resubmit(in_port)
resubmit(1)
resubmit_table(in_port,all)
resubmit_table(1,1)
set_tunnel(0x11223344)
set_tunnel64(0x1122334455667788)
pop_queue()
note(some text)
multipath(eth_src,50,hrw,12,0x0,nxm_reg0[0:4])
bundle(eth_src,50,active_backup,nxm_in_port,slaves(1,2,3))
bundle_load(symmetric_l4,60,hrw,nxm_in_port,nxm_reg0[0:16],slaves(2,3))
output_reg(in_port)
output_reg(in_port[0:1])
output_reg2(in_port)
output_reg2(in_port[0:1])
learn(nxm_in_port=0x10,nxm_eth_dst=nxm_eth_src,reg_load(nxm_reg1[16:32]=nxm_in_port))
exit()
  • integer mode: output, set_mpls_ttl, push_vlan, pop_mpls, push_mpls, set_queue, group, set_nw_ttl, push_pbb,

  • flag mode: copy_ttl_out, copy_ttl_in, dec_mpls_ttl, dec_nw_ttl, pop_pbb

Advanced features

In addition to OFPT_FLOW_MOD, several openflow methods are provided:

import ofpstr.ofp4

# OFPMP_FLOW
ofpstr.ofp4.text2mpflow
ofpstr.ofp4.mpflow2text

# OFPT_GROUP
ofpstr.ofp4.str2group
ofpstr.ofp4.group2str

# OFPMP_GROUP / OFPT_MULTIPART_*
ofpstr.ofp4.text2mpgroup
ofpstr.ofp4.mpgroup2text

# OFPMP_GROUP_DESC / OFPT_MULTIPART_*
ofpstr.ofp4.text2mpgroupdesc
ofpstr.ofp4.mpgroupdesc2text

Note these functions were rewritten in 0.2,

LICENSE

ofpstr is available under Apache 2.0 License and Python Software Foundation License.

Metadata

Release files for ofpstr 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ofpstr 0.2.0
File Size Uploaded
ofpstr-0.2.0.tar.gz 26.1 kB Details

Release files / ofpstr-0.2.0.tar.gz

Download URL ofpstr-0.2.0.tar.gz
Size 26.1 kB
Tags Source
SHA-256 checksum
How to use checksums
addca90bc1c1f6d61b1ed3c5840a6b4feab81d31963a851f27ea521aa07ef838
BLAKE2b-256 checksum
How to use checksums
249ed55016f267dca2d008e30b743b30418fa3183f7627cd7ba1e05de8908dd2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.2.0 This release

1 release file

0.1.13

1 release file

0.1.12

1 release file

0.1.11

1 release file

0.1.10

1 release file

0.1.9

1 release file

0.1.8

1 release file

0.1.7

1 release file

0.1.6

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page