91 lines
No EOL
2.2 KiB
Text
91 lines
No EOL
2.2 KiB
Text
#ifndef NICO_NAT64_SESSION
|
|
#define NICO_NAT64_SESSION
|
|
|
|
/********************** NAT64 sessions ***********************************/
|
|
|
|
/* automatic translations */
|
|
action nat64_tcp_session_translate(
|
|
ipv4_addr_t src_addr,
|
|
bit<16> src_port,
|
|
ipv4_addr_t dst_addr,
|
|
bit<16> dst_port)
|
|
{
|
|
hdr.ipv4.setValid();
|
|
|
|
hdr.tcp.src_port = src_port;
|
|
hdr.tcp.dst_port = dst_port;
|
|
|
|
nat64_generic(src_addr, dst_addr);
|
|
}
|
|
|
|
action nat46_tcp_session_translate(
|
|
ipv6_addr_t src_addr,
|
|
bit<16> src_port,
|
|
ipv6_addr_t dst_addr,
|
|
bit<16> dst_port)
|
|
{
|
|
hdr.ipv6.setValid();
|
|
|
|
hdr.tcp.src_port = src_port;
|
|
hdr.tcp.dst_port = dst_port;
|
|
|
|
nat46_generic(src_addr, dst_addr);
|
|
}
|
|
|
|
/* We are in the right range, need to create a session entry */
|
|
action nat64_tcp_session_create()
|
|
{
|
|
controller_reply(TASK_NAT64_TCP_SESSION);
|
|
}
|
|
|
|
|
|
/* Used for detecting traffic that should have a session */
|
|
table nat64_session {
|
|
key = {
|
|
hdr.ipv6.dst_addr: lpm;
|
|
}
|
|
actions = {
|
|
controller_debug_table_id;
|
|
NoAction;
|
|
}
|
|
size = NAT64_TABLE_SIZE;
|
|
default_action = controller_debug_table_id(TABLE_NAT64_SESSION);
|
|
}
|
|
|
|
|
|
table nat64_tcp_session {
|
|
key = {
|
|
hdr.ipv6.src_addr: exact;
|
|
hdr.ipv6.dst_addr: exact;
|
|
hdr.tcp.src_port: exact;
|
|
hdr.tcp.dst_port: exact;
|
|
}
|
|
actions = {
|
|
controller_debug_table_id;
|
|
nat64_tcp_session_create;
|
|
nat64_tcp_session_translate;
|
|
NoAction;
|
|
}
|
|
size = NAT64_TABLE_SIZE;
|
|
default_action = nat64_tcp_session_create;
|
|
}
|
|
|
|
table nat46_tcp_session {
|
|
key = {
|
|
hdr.ipv6.src_addr: exact;
|
|
hdr.ipv6.dst_addr: exact;
|
|
hdr.tcp.src_port: exact;
|
|
hdr.tcp.dst_port: exact;
|
|
}
|
|
actions = {
|
|
controller_debug_table_id;
|
|
nat46_tcp_session_translate;
|
|
NoAction;
|
|
}
|
|
size = NAT64_TABLE_SIZE;
|
|
//default_action = controller_debug_table_id(TABLE_NAT64_TCP);
|
|
default_action = NoAction;
|
|
}
|
|
|
|
|
|
#endif |