Skip to content

Commit

Permalink
wip: o2i nat in node
Browse files Browse the repository at this point in the history
  • Loading branch information
demo-exe committed Feb 2, 2024
1 parent 5e79eea commit 5914664
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 47 deletions.
47 changes: 0 additions & 47 deletions upf/upf_flow_node.c
Original file line number Diff line number Diff line change
Expand Up @@ -335,53 +335,6 @@ upf_flow_process (vlib_main_t *vm, vlib_node_runtime_t *node,
len0 = vlib_buffer_length_in_chain (vm, b0);
UPF_CHECK_INNER_NODE (b0);

ip4_header_t *ip4 = vlib_buffer_get_current (b0);
tcp_header_t *tcp = ip4_next_header (ip4);
// ip4->src_address.as_u32 = 0xAAAAAAAA;
// upf_debug ("QQQQQQQ IP hdr: %U", format_ip4_header,
// vlib_buffer_get_current (b), b->current_length);
//
int l3_csum_delta = 0;
int l4_csum_delta = 0;
if (ip4->dst_address.as_u32 == 0x14000090 &&
ip4->src_address.as_u32 == 0x301000a)
{
ip4->dst_address.as_u32 = 0x300010a;
l3_csum_delta = ip_csum_add_even (l3_csum_delta, 0x300010a);
l3_csum_delta = ip_csum_sub_even (l3_csum_delta, 0x14000090);
// l3_csum_delta = ip_csum_add_even (l3_csum_delta,
// 0x300010a); l3_csum_delta = ip_csum_sub_even
// (l3_csum_delta, 0x14000090);
}

// // int delta = ip_csum_add_even (0, ip4->src_address.as_u32);
// // ip_sum = ip_csum_add_even (ip_sum, delta);
// // ip4->checksum = ip_csum_fold (ip_sum);
//
// ip_csum_t tcp_sum = tcp->checksum;
// tcp_sum = ip_csum_sub_even (tcp_sum, f->l3_csum_delta);
// tcp_sum = ip_csum_sub_even (tcp_sum, f->l4_csum_delta);
// mss_clamping (sm->mss_clamping, tcp, &tcp_sum);
// tcp->checksum = ip_csum_fold (tcp_sum);
//

ip_csum_t tcp_sum = tcp->checksum;
tcp_sum = ip_csum_sub_even (tcp_sum, l3_csum_delta);
tcp_sum = ip_csum_sub_even (tcp_sum, l4_csum_delta);
// mss_clamping (sm->mss_clamping, tcp, &tcp_sum);
tcp->checksum = ip_csum_fold (tcp_sum);

ip_csum_t ip_sum = ip4->checksum;
ip_sum = ip_csum_sub_even (ip_sum, l3_csum_delta);
ip4->checksum = ip_csum_fold (ip_sum);

// ip4->checksum = 0;
// ip4->checksum = ip4_header_checksum (ip4);

clib_warning ("QQQQQZaaaaa ip4->src_address.as_u32 = %x, "
"ip4->dst_address.as_u32 = %x",
ip4->src_address.as_u32, ip4->dst_address.as_u32);

if (PREDICT_FALSE (pool_is_free_index (
gtm->sessions, upf_buffer_opaque (b0)->gtpu.session_index)))
{
Expand Down
51 changes: 51 additions & 0 deletions upf/upf_nat.c
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,57 @@ VLIB_NODE_FN (upf_nat_node)
next = UPF_NAT_NEXT_FLOW_PROCESS;
upf_debug ("IP hdr: %U", format_ip4_header, ip0, b->current_length);



ip4_header_t *ip4 = vlib_buffer_get_current (b);
tcp_header_t *tcp = ip4_next_header (ip4);
// ip4->src_address.as_u32 = 0xAAAAAAAA;
// upf_debug ("QQQQQQQ IP hdr: %U", format_ip4_header,
// vlib_buffer_get_current (b), b->current_length);
//
int l3_csum_delta = 0;
int l4_csum_delta = 0;
if (ip4->dst_address.as_u32 == 0x14000090 &&
ip4->src_address.as_u32 == 0x301000a)
{
ip4->dst_address.as_u32 = 0x300010a;
l3_csum_delta = ip_csum_add_even (l3_csum_delta, 0x300010a);
l3_csum_delta = ip_csum_sub_even (l3_csum_delta, 0x14000090);
// l3_csum_delta = ip_csum_add_even (l3_csum_delta,
// 0x300010a); l3_csum_delta = ip_csum_sub_even
// (l3_csum_delta, 0x14000090);
}

// // int delta = ip_csum_add_even (0, ip4->src_address.as_u32);
// // ip_sum = ip_csum_add_even (ip_sum, delta);
// // ip4->checksum = ip_csum_fold (ip_sum);
//
// ip_csum_t tcp_sum = tcp->checksum;
// tcp_sum = ip_csum_sub_even (tcp_sum, f->l3_csum_delta);
// tcp_sum = ip_csum_sub_even (tcp_sum, f->l4_csum_delta);
// mss_clamping (sm->mss_clamping, tcp, &tcp_sum);
// tcp->checksum = ip_csum_fold (tcp_sum);
//

ip_csum_t tcp_sum = tcp->checksum;
tcp_sum = ip_csum_sub_even (tcp_sum, l3_csum_delta);
tcp_sum = ip_csum_sub_even (tcp_sum, l4_csum_delta);
// mss_clamping (sm->mss_clamping, tcp, &tcp_sum);
tcp->checksum = ip_csum_fold (tcp_sum);

ip_csum_t ip_sum = ip4->checksum;
ip_sum = ip_csum_sub_even (ip_sum, l3_csum_delta);
ip4->checksum = ip_csum_fold (ip_sum);

// ip4->checksum = 0;
// ip4->checksum = ip4_header_checksum (ip4);

clib_warning ("QQQQQZaaaaanat ip4->src_address.as_u32 = %x, "
"ip4->dst_address.as_u32 = %x",
ip4->src_address.as_u32, ip4->dst_address.as_u32);



// ip4_ttl_and_checksum_check (b, ip0, &next, &error0);
// vnet_calc_checksums_inline (vm, b, 1 /* is_ip4 */, 0 /* is_ip6 */);

Expand Down

0 comments on commit 5914664

Please sign in to comment.