Skip to content

Commit

Permalink
redefine encap_data_t -> meta_encap_data_t and
Browse files Browse the repository at this point in the history
overlay_rewrite_data_t -> meta_overlay_rewrite_data_t, as
header in struct is not well supported for target dpdk-pna.
  • Loading branch information
jimmyzhai committed Sep 3, 2024
1 parent 5123008 commit 68c7deb
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 0 deletions.
37 changes: 37 additions & 0 deletions dash-pipeline/bmv2/dash_metadata.p4
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,31 @@ struct ha_data_t {
dash_flow_state_t ha_flow_state;
}

#ifdef TARGET_DPDK_PNA
// redefine encap_data_t -> meta_encap_data_t
// redefine overlay_rewrite_data_t -> meta_overlay_rewrite_data_t
// header in struct is not well supported for target dpdk-pna
struct meta_encap_data_t {
bit<24> vni;
bit<24> dest_vnet_vni;
IPv4Address underlay_sip;
IPv4Address underlay_dip;
EthernetAddress underlay_smac;
EthernetAddress underlay_dmac;
dash_encapsulation_t dash_encapsulation;
}

struct meta_overlay_rewrite_data_t {
EthernetAddress dmac;
IPv4ORv6Address sip;
IPv4ORv6Address dip;
IPv6Address sip_mask;
IPv6Address dip_mask;
bit<7> reserved;
bit<1> is_ipv6;
}
#endif // TARGET_DPDK_PNA

struct metadata_t {
// Packet type
dash_packet_source_t packet_source; // TODO: Parse packet source in parser.
Expand All @@ -154,7 +179,11 @@ struct metadata_t {
dash_direction_t direction;
dash_eni_mac_type_t eni_mac_type;
dash_eni_mac_override_type_t eni_mac_override_type;
#ifdef TARGET_DPDK_PNA
meta_encap_data_t rx_encap;
#else
encap_data_t rx_encap;
#endif // TARGET_DPDK_PNA
EthernetAddress eni_addr;
bit<16> vnet_id;
bit<16> dst_vnet_id;
Expand Down Expand Up @@ -200,11 +229,19 @@ struct metadata_t {

// Action data
bool dropped;
#ifdef TARGET_DPDK_PNA
// encap_data is for underlay
meta_encap_data_t encap_data;
// tunnel_data is used by dash_tunnel_id
meta_encap_data_t tunnel_data;
meta_overlay_rewrite_data_t overlay_data;
#else
// encap_data is for underlay
encap_data_t encap_data;
// tunnel_data is used by dash_tunnel_id
encap_data_t tunnel_data;
overlay_rewrite_data_t overlay_data;
#endif // TARGET_DPDK_PNA
bit<16> dash_tunnel_id;
bit<32> meter_class;
bit<8> local_region_id;
Expand Down
2 changes: 2 additions & 0 deletions dash-pipeline/bmv2/dash_pipeline.p4
Original file line number Diff line number Diff line change
Expand Up @@ -230,10 +230,12 @@ control dash_ingress(
apply {
meta.flow_enabled = false;

#ifndef TARGET_DPDK_PNA
meta.rx_encap.setValid();
meta.encap_data.setValid();
meta.tunnel_data.setValid();
meta.overlay_data.setValid();
#endif // TARGET_DPDK_PNA

#ifdef TARGET_DPDK_PNA
#ifdef DPDK_PNA_SEND_TO_PORT_FIX_MERGED
Expand Down
61 changes: 61 additions & 0 deletions dash-pipeline/bmv2/stages/conntrack_lookup.p4
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,42 @@ action conntrack_set_meta_from_dash_header(in headers_t hdr, out metadata_t meta
meta.meter_class = hdr.flow_data.meter_class;

/* encapsulation metadata */
#ifdef TARGET_DPDK_PNA
meta.encap_data.vni = hdr.flow_encap_data.vni;
meta.encap_data.dest_vnet_vni = hdr.flow_encap_data.dest_vnet_vni;
meta.encap_data.underlay_sip = hdr.flow_encap_data.underlay_sip;
meta.encap_data.underlay_dip = hdr.flow_encap_data.underlay_dip;
meta.encap_data.underlay_smac = hdr.flow_encap_data.underlay_smac;
meta.encap_data.underlay_dmac = hdr.flow_encap_data.underlay_dmac;
meta.encap_data.dash_encapsulation = hdr.flow_encap_data.dash_encapsulation;
#else
meta.encap_data = hdr.flow_encap_data;
#endif // TARGET_DPDK_PNA

/* tunnel metadata */
#ifdef TARGET_DPDK_PNA
meta.tunnel_data.vni = hdr.flow_tunnel_data.vni;
meta.tunnel_data.dest_vnet_vni = hdr.flow_tunnel_data.dest_vnet_vni;
meta.tunnel_data.underlay_sip = hdr.flow_tunnel_data.underlay_sip;
meta.tunnel_data.underlay_dip = hdr.flow_tunnel_data.underlay_dip;
meta.tunnel_data.underlay_smac = hdr.flow_tunnel_data.underlay_smac;
meta.tunnel_data.underlay_dmac = hdr.flow_tunnel_data.underlay_dmac;
meta.tunnel_data.dash_encapsulation = hdr.flow_tunnel_data.dash_encapsulation;
#else
meta.tunnel_data = hdr.flow_tunnel_data;
#endif // TARGET_DPDK_PNA

/* overlay rewrite metadata */
#ifdef TARGET_DPDK_PNA
meta.overlay_data.dmac = hdr.flow_overlay_data.dmac;
meta.overlay_data.sip = hdr.flow_overlay_data.sip;
meta.overlay_data.dip = hdr.flow_overlay_data.dip;
meta.overlay_data.sip_mask = hdr.flow_overlay_data.sip_mask;
meta.overlay_data.dip_mask = hdr.flow_overlay_data.dip_mask;
meta.overlay_data.is_ipv6 = hdr.flow_overlay_data.is_ipv6;
#else
meta.overlay_data = hdr.flow_overlay_data;
#endif // TARGET_DPDK_PNA
}

action conntrack_strip_dash_header(inout headers_t hdr)
Expand Down Expand Up @@ -48,17 +77,49 @@ control conntrack_build_dash_header(inout headers_t hdr, in metadata_t meta,
length = length + FLOW_DATA_HDR_SIZE;

if (meta.routing_actions & dash_routing_actions_t.STATIC_ENCAP != 0) {
#ifdef TARGET_DPDK_PNA
hdr.flow_encap_data.setValid();
hdr.flow_encap_data.vni = meta.encap_data.vni;
hdr.flow_encap_data.dest_vnet_vni = meta.encap_data.dest_vnet_vni;
hdr.flow_encap_data.underlay_sip = meta.encap_data.underlay_sip;
hdr.flow_encap_data.underlay_dip = meta.encap_data.underlay_dip;
hdr.flow_encap_data.underlay_smac = meta.encap_data.underlay_smac;
hdr.flow_encap_data.underlay_dmac = meta.encap_data.underlay_dmac;
hdr.flow_encap_data.dash_encapsulation = meta.encap_data.dash_encapsulation;
#else
hdr.flow_encap_data= meta.encap_data;
#endif // TARGET_DPDK_PNA
length = length + ENCAP_DATA_HDR_SIZE;
}

if (meta.dash_tunnel_id != 0) {
#ifdef TARGET_DPDK_PNA
hdr.flow_tunnel_data.setValid();
hdr.flow_tunnel_data.vni = meta.tunnel_data.vni;
hdr.flow_tunnel_data.dest_vnet_vni = meta.tunnel_data.dest_vnet_vni;
hdr.flow_tunnel_data.underlay_sip = meta.tunnel_data.underlay_sip;
hdr.flow_tunnel_data.underlay_dip = meta.tunnel_data.underlay_dip;
hdr.flow_tunnel_data.underlay_smac = meta.tunnel_data.underlay_smac;
hdr.flow_tunnel_data.underlay_dmac = meta.tunnel_data.underlay_dmac;
hdr.flow_tunnel_data.dash_encapsulation = meta.tunnel_data.dash_encapsulation;
#else
hdr.flow_tunnel_data= meta.tunnel_data;
#endif // TARGET_DPDK_PNA
length = length + ENCAP_DATA_HDR_SIZE;
}

if (meta.routing_actions != 0) {
#ifdef TARGET_DPDK_PNA
hdr.flow_overlay_data.setValid();
hdr.flow_overlay_data.dmac = meta.overlay_data.dmac;
hdr.flow_overlay_data.sip = meta.overlay_data.sip;
hdr.flow_overlay_data.dip = meta.overlay_data.dip;
hdr.flow_overlay_data.sip_mask = meta.overlay_data.sip_mask;
hdr.flow_overlay_data.dip_mask = meta.overlay_data.dip_mask;
hdr.flow_overlay_data.is_ipv6 = meta.overlay_data.is_ipv6;
#else
hdr.flow_overlay_data= meta.overlay_data;
#endif // TARGET_DPDK_PNA
length = length + OVERLAY_REWRITE_DATA_HDR_SIZE;
}

Expand Down

0 comments on commit 68c7deb

Please sign in to comment.