pub struct Match {Show 43 fields
pub in_port: Option<u32>,
pub in_phy_port: Option<u32>,
pub metadata: Option<u64>,
pub metadata_mask: Option<u64>,
pub eth_src: Option<[u8; 6]>,
pub eth_src_mask: Option<[u8; 6]>,
pub eth_dst: Option<[u8; 6]>,
pub eth_dst_mask: Option<[u8; 6]>,
pub eth_type: Option<u16>,
pub vlan_vid: Option<u16>,
pub vlan_pcp: Option<u8>,
pub ipv4_src: Option<Ipv4Addr>,
pub ipv4_src_mask: Option<u8>,
pub ipv4_dst: Option<Ipv4Addr>,
pub ipv4_dst_mask: Option<u8>,
pub ip_proto: Option<u8>,
pub ip_dscp: Option<u8>,
pub ip_ecn: Option<u8>,
pub ipv6_src: Option<Ipv6Addr>,
pub ipv6_src_mask: Option<u8>,
pub ipv6_dst: Option<Ipv6Addr>,
pub ipv6_dst_mask: Option<u8>,
pub ipv6_flabel: Option<u32>,
pub tcp_src: Option<u16>,
pub tcp_dst: Option<u16>,
pub tcp_flags: Option<u16>,
pub udp_src: Option<u16>,
pub udp_dst: Option<u16>,
pub icmp_type: Option<u8>,
pub icmp_code: Option<u8>,
pub icmpv6_type: Option<u8>,
pub icmpv6_code: Option<u8>,
pub arp_op: Option<u16>,
pub arp_spa: Option<Ipv4Addr>,
pub arp_tpa: Option<Ipv4Addr>,
pub arp_sha: Option<[u8; 6]>,
pub arp_tha: Option<[u8; 6]>,
pub tunnel_id: Option<u64>,
pub ct_state: Option<u32>,
pub ct_state_mask: Option<u32>,
pub ct_zone: Option<u16>,
pub ct_mark: Option<u32>,
pub ct_mark_mask: Option<u32>,
}Expand description
Match fields for flow matching.
Uses a builder pattern for ergonomic construction.
Fields§
§in_port: Option<u32>Input port
in_phy_port: Option<u32>Input physical port
metadata: Option<u64>Metadata
metadata_mask: Option<u64>Metadata mask
eth_src: Option<[u8; 6]>Source MAC address
eth_src_mask: Option<[u8; 6]>Source MAC mask
eth_dst: Option<[u8; 6]>Destination MAC address
eth_dst_mask: Option<[u8; 6]>Destination MAC mask
eth_type: Option<u16>Ethernet type
vlan_vid: Option<u16>VLAN ID
vlan_pcp: Option<u8>VLAN PCP
ipv4_src: Option<Ipv4Addr>IPv4 source address
ipv4_src_mask: Option<u8>IPv4 source mask (prefix length)
ipv4_dst: Option<Ipv4Addr>IPv4 destination address
ipv4_dst_mask: Option<u8>IPv4 destination mask (prefix length)
ip_proto: Option<u8>IP protocol
ip_dscp: Option<u8>IP DSCP
ip_ecn: Option<u8>IP ECN
ipv6_src: Option<Ipv6Addr>IPv6 source address
ipv6_src_mask: Option<u8>IPv6 source mask (prefix length)
ipv6_dst: Option<Ipv6Addr>IPv6 destination address
ipv6_dst_mask: Option<u8>IPv6 destination mask (prefix length)
ipv6_flabel: Option<u32>IPv6 flow label
tcp_src: Option<u16>TCP source port
tcp_dst: Option<u16>TCP destination port
tcp_flags: Option<u16>TCP flags
udp_src: Option<u16>UDP source port
udp_dst: Option<u16>UDP destination port
icmp_type: Option<u8>ICMPv4 type
icmp_code: Option<u8>ICMPv4 code
icmpv6_type: Option<u8>ICMPv6 type
icmpv6_code: Option<u8>ICMPv6 code
arp_op: Option<u16>ARP opcode
arp_spa: Option<Ipv4Addr>ARP source IPv4
arp_tpa: Option<Ipv4Addr>ARP target IPv4
arp_sha: Option<[u8; 6]>ARP source MAC
arp_tha: Option<[u8; 6]>ARP target MAC
tunnel_id: Option<u64>Tunnel ID
ct_state: Option<u32>Connection tracking state (use ct_state:: constants)
ct_state_mask: Option<u32>Connection tracking state mask
ct_zone: Option<u16>Connection tracking zone
ct_mark: Option<u32>Connection tracking mark
ct_mark_mask: Option<u32>Connection tracking mark mask
Implementations§
Source§impl Match
impl Match
Sourcepub fn ipv4_src(self, addr: Ipv4Addr, prefix_len: u8) -> Self
pub fn ipv4_src(self, addr: Ipv4Addr, prefix_len: u8) -> Self
Match on IPv4 source address with prefix length.
Sourcepub fn ipv4_dst(self, addr: Ipv4Addr, prefix_len: u8) -> Self
pub fn ipv4_dst(self, addr: Ipv4Addr, prefix_len: u8) -> Self
Match on IPv4 destination address with prefix length.
Sourcepub fn ipv6_src(self, addr: Ipv6Addr, prefix_len: u8) -> Self
pub fn ipv6_src(self, addr: Ipv6Addr, prefix_len: u8) -> Self
Match on IPv6 source address with prefix length.
Sourcepub fn ipv6_dst(self, addr: Ipv6Addr, prefix_len: u8) -> Self
pub fn ipv6_dst(self, addr: Ipv6Addr, prefix_len: u8) -> Self
Match on IPv6 destination address with prefix length.
Sourcepub fn ct_state(self, state: u32) -> Self
pub fn ct_state(self, state: u32) -> Self
Match on connection tracking state (Nicira extension).
Use constants from oxm::ct_state module, e.g.:
ct_state::TRK- packet has been trackedct_state::NEW- new connectionct_state::EST- established connectionct_state::REL- related connectionct_state::INV- invalid connection
§Example
use rovs_openflow::oxm::ct_state;
// Match established connections
Match::new().ct_state(ct_state::TRK | ct_state::EST)Sourcepub fn ct_state_masked(self, state: u32, mask: u32) -> Self
pub fn ct_state_masked(self, state: u32, mask: u32) -> Self
Sourcepub fn ct_zone(self, zone: u16) -> Self
pub fn ct_zone(self, zone: u16) -> Self
Match on connection tracking zone (Nicira extension).
Zones allow multiple independent connection tracking tables.
Sourcepub fn ct_mark(self, mark: u32) -> Self
pub fn ct_mark(self, mark: u32) -> Self
Match on connection tracking mark (Nicira extension).
The ct_mark is a 32-bit value that can be set by the ct action and matched on later.
Sourcepub fn ct_mark_masked(self, mark: u32, mask: u32) -> Self
pub fn ct_mark_masked(self, mark: u32, mask: u32) -> Self
Match on connection tracking mark with mask (Nicira extension).
Sourcepub fn arp_op(self, opcode: u16) -> Self
pub fn arp_op(self, opcode: u16) -> Self
Match on ARP opcode.
Common values: 1 = request, 2 = reply
Sourcepub fn arp_spa(self, addr: impl Into<Ipv4Addr>) -> Self
pub fn arp_spa(self, addr: impl Into<Ipv4Addr>) -> Self
Match on ARP source protocol address (sender IP).
Sourcepub fn arp_tpa(self, addr: impl Into<Ipv4Addr>) -> Self
pub fn arp_tpa(self, addr: impl Into<Ipv4Addr>) -> Self
Match on ARP target protocol address (target IP).
Sourcepub fn icmp_type(self, icmp_type: u8) -> Self
pub fn icmp_type(self, icmp_type: u8) -> Self
Match on ICMPv4 type.
Common values: 0 = echo reply, 8 = echo request
Sourcepub fn icmpv6_type(self, icmp_type: u8) -> Self
pub fn icmpv6_type(self, icmp_type: u8) -> Self
Match on ICMPv6 type.
Common values: 128 = echo request, 129 = echo reply, 133 = router solicitation, 134 = router advertisement, 135 = neighbor solicitation, 136 = neighbor advertisement
Sourcepub fn icmpv6_code(self, code: u8) -> Self
pub fn icmpv6_code(self, code: u8) -> Self
Match on ICMPv6 code.
Source§impl Match
impl Match
Sourcepub fn decode_oxm(oxm_data: &[u8]) -> Result<Self>
pub fn decode_oxm(oxm_data: &[u8]) -> Result<Self>
Decode OXM fields from raw bytes (without match header).
This is useful for parsing match fields from Packet-In messages where the match header has already been processed.
Sourcepub fn decode(data: &[u8]) -> Result<(Self, usize)>
pub fn decode(data: &[u8]) -> Result<(Self, usize)>
Decode a match from OpenFlow wire format.
Returns the decoded match and the total number of bytes consumed (including padding to 8-byte boundary).
Sourcepub fn encode(&self) -> Vec<u8> ⓘ
pub fn encode(&self) -> Vec<u8> ⓘ
Encode the match to OpenFlow wire format (OXM).
The match is encoded as:
- Match header: type (2 bytes) + length (2 bytes)
- OXM fields (variable)
- Padding to 8-byte boundary
Fields are encoded in OpenFlow-specified order with prerequisites automatically satisfied by the builder methods.
Sourcepub fn encode_oxm_fields(&self) -> Vec<u8> ⓘ
pub fn encode_oxm_fields(&self) -> Vec<u8> ⓘ
Encode just the OXM/NXM field TLVs without the match header.
This is used by protocols that embed raw OXM fields without the standard OpenFlow match header (e.g., Nicira flow monitor requests).