Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions modules/route-mpls/dataplane/dataplane.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ route_mpls_handle_packets(
rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4)) {
if (ip4_result[ip4_idx] == FILTER_RULE_INVALID) {
++ip4_idx;
packet_front_drop(packet_front, packet);
continue;
}

Expand All @@ -104,6 +105,7 @@ route_mpls_handle_packets(
rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV6)) {
if (ip6_result[ip6_idx] == FILTER_RULE_INVALID) {
++ip6_idx;
packet_front_drop(packet_front, packet);
continue;
}

Expand Down Expand Up @@ -149,16 +151,24 @@ route_mpls_handle_packets(
}

// IANA-specified values
uint16_t src_port = htobe16(0xc000 | (0x3fff & packet->hash));
uint16_t dst_port = htobe16(6635);
uint16_t src_port_value = 0xc000 | (0x3fff & packet->hash);
uint16_t dst_port_value = 6635;
uint8_t src_port[2] = {
(uint8_t)(src_port_value >> 8),
(uint8_t)(src_port_value & 0xff),
};
uint8_t dst_port[2] = {
(uint8_t)(dst_port_value >> 8),
(uint8_t)(dst_port_value & 0xff),
};

if (nexthop->type == ROUTE_TYPE_V4) {
if (packet_ip4_encap_udp(
packet,
nexthop->ip4_tunnel.src,
nexthop->ip4_tunnel.dst,
(uint8_t *)&src_port,
(uint8_t *)&dst_port
src_port,
dst_port
)) {
// FIXME update error counter
packet_front_drop(packet_front, packet);
Expand All @@ -169,8 +179,8 @@ route_mpls_handle_packets(
packet,
nexthop->ip6_tunnel.src,
nexthop->ip6_tunnel.dst,
(uint8_t *)&src_port,
(uint8_t *)&dst_port
src_port,
dst_port
)) {
// FIXME update error counter
packet_front_drop(packet_front, packet);
Expand Down
Loading