Openflow stringer library
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file ofpstr-0.2.0.tar.gz
.
File metadata
- Download URL: ofpstr-0.2.0.tar.gz
- Upload date:
- Size: 26.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | addca90bc1c1f6d61b1ed3c5840a6b4feab81d31963a851f27ea521aa07ef838 |
|
MD5 | 52acdbe7f97d3f7ebd67c372f4011cfe |
|
BLAKE2b-256 | 249ed55016f267dca2d008e30b743b30418fa3183f7627cd7ba1e05de8908dd2 |