documentation updates
This commit is contained in:
parent
c0844fd4ee
commit
94e4d90c38
|
@ -48,7 +48,7 @@ module IPL4_example {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* generate a flow_info using pre-defined default addresses + * incremented port */
|
/* generate a flow_info using pre-defined default addresses + * incremented port */
|
||||||
function flow_gen(integer port_delta, unsignedbyte l4_prot := tsc_IP_Protocol_UDP) return flow_info {
|
private function flow_gen(integer port_delta, unsignedbyte l4_prot := tsc_IP_Protocol_UDP) return flow_info {
|
||||||
var flow_info flowi := {
|
var flow_info flowi := {
|
||||||
l3_protocol := 2,
|
l3_protocol := 2,
|
||||||
src_ip := "1.1.1.200",
|
src_ip := "1.1.1.200",
|
||||||
|
@ -60,7 +60,7 @@ module IPL4_example {
|
||||||
return flowi
|
return flowi
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_random_port_offset() return unsignedshort {
|
private function get_random_port_offset() return unsignedshort {
|
||||||
var float r := rnd();
|
var float r := rnd();
|
||||||
return float2int(r * (65535.0 - 2000.0));
|
return float2int(r * (65535.0 - 2000.0));
|
||||||
}
|
}
|
||||||
|
@ -161,6 +161,7 @@ module IPL4_example {
|
||||||
return flows.flow_list[0];
|
return flows.flow_list[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* generate + send packet for given flow through TUN */
|
||||||
function flow_send_pkt_tun1(flow_info flowi, pkt_info pkti) runs on dummy_CT {
|
function flow_send_pkt_tun1(flow_info flowi, pkt_info pkti) runs on dummy_CT {
|
||||||
var octetstring pkt := flow_gen_pkt(flowi, pkti);
|
var octetstring pkt := flow_gen_pkt(flowi, pkti);
|
||||||
TUN.send(tunmsg(pkt));
|
TUN.send(tunmsg(pkt));
|
||||||
|
@ -176,6 +177,7 @@ module IPL4_example {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* generate + send packet for given flow through TUN2 */
|
||||||
function flow_send_pkt_tun2(flow_info flowi, pkt_info pkti) runs on dummy_CT {
|
function flow_send_pkt_tun2(flow_info flowi, pkt_info pkti) runs on dummy_CT {
|
||||||
var octetstring pkt := flow_gen_pkt(flowi, pkti);
|
var octetstring pkt := flow_gen_pkt(flowi, pkti);
|
||||||
TUN2.send(tunmsg(pkt));
|
TUN2.send(tunmsg(pkt));
|
||||||
|
@ -191,6 +193,7 @@ module IPL4_example {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* get nf_conntrack from kernel for given flow and match against template */
|
||||||
function get_nfct_and_match(flow_info flowi, template Flow t_flow) return boolean {
|
function get_nfct_and_match(flow_info flowi, template Flow t_flow) return boolean {
|
||||||
var Flow ct := f_get_conntrack(flowi);
|
var Flow ct := f_get_conntrack(flowi);
|
||||||
var boolean ret := match(ct, t_flow);
|
var boolean ret := match(ct, t_flow);
|
||||||
|
@ -202,6 +205,7 @@ module IPL4_example {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* get nf_conntrack from kernel for given flow and ensure there is none */
|
||||||
function get_nfct_ensure_none(flow_info flowi) return boolean {
|
function get_nfct_ensure_none(flow_info flowi) return boolean {
|
||||||
var Flows cts := f_get_conntracks(flowi);
|
var Flows cts := f_get_conntracks(flowi);
|
||||||
var boolean ret := false;
|
var boolean ret := false;
|
||||||
|
@ -215,7 +219,6 @@ module IPL4_example {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* apply a certain tolerance of up to 1 second in the timeout * retrieved after the packet traversed conntrack */
|
/* apply a certain tolerance of up to 1 second in the timeout * retrieved after the packet traversed conntrack */
|
||||||
function timeout_range(NonNegativeInteger secs) return template NonNegativeInteger {
|
function timeout_range(NonNegativeInteger secs) return template NonNegativeInteger {
|
||||||
return (secs-1 .. secs);
|
return (secs-1 .. secs);
|
||||||
|
@ -226,6 +229,7 @@ module IPL4_example {
|
||||||
tflow.meta_2.choice.indep_group.timeout_ := timeout_range(tout);
|
tflow.meta_2.choice.indep_group.timeout_ := timeout_range(tout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* shared init function for all test cases */
|
||||||
function init() runs on dummy_CT {
|
function init() runs on dummy_CT {
|
||||||
if (initialized) {
|
if (initialized) {
|
||||||
return;
|
return;
|
||||||
|
@ -235,14 +239,7 @@ module IPL4_example {
|
||||||
initialized := true;
|
initialized := true;
|
||||||
}
|
}
|
||||||
|
|
||||||
testcase TC_xml() runs on dummy_CT {
|
/* generate pkt_info based on arguments */
|
||||||
var charstring xml;
|
|
||||||
init();
|
|
||||||
xml := f_get_conntracks_xml()
|
|
||||||
log(xml)
|
|
||||||
log(dec_Flows(unichar2oct(xml)))
|
|
||||||
}
|
|
||||||
|
|
||||||
function pkti_gen(in nfct_direction direction, in octetstring payload := ''O,
|
function pkti_gen(in nfct_direction direction, in octetstring payload := ''O,
|
||||||
in NonNegativeInteger trunc_len := 0, in boolean exp_pass := true) return pkt_info {
|
in NonNegativeInteger trunc_len := 0, in boolean exp_pass := true) return pkt_info {
|
||||||
var pkt_info pkti := {
|
var pkt_info pkti := {
|
||||||
|
@ -254,6 +251,17 @@ module IPL4_example {
|
||||||
return pkti;
|
return pkti;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* just verify that we can get conntrack XML and parse it */
|
||||||
|
testcase TC_xml() runs on dummy_CT {
|
||||||
|
var charstring xml;
|
||||||
|
init();
|
||||||
|
xml := f_get_conntracks_xml()
|
||||||
|
log(xml)
|
||||||
|
log(dec_Flows(unichar2oct(xml)))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* test for classic netfilter UDP '3way handshake' ORIG, REPL, ORIG */
|
||||||
testcase TC_udp_3way() runs on dummy_CT {
|
testcase TC_udp_3way() runs on dummy_CT {
|
||||||
var flow_info flowi := flow_gen(get_random_port_offset())
|
var flow_info flowi := flow_gen(get_random_port_offset())
|
||||||
var Flow ct;
|
var Flow ct;
|
||||||
|
@ -283,6 +291,7 @@ module IPL4_example {
|
||||||
setverdict(pass);
|
setverdict(pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* test for inverse netfilter UDP '3way handshake' ORIG, REPL, REPL */
|
||||||
testcase TC_udp_uni2() runs on dummy_CT {
|
testcase TC_udp_uni2() runs on dummy_CT {
|
||||||
var flow_info flowi := flow_gen(get_random_port_offset());
|
var flow_info flowi := flow_gen(get_random_port_offset());
|
||||||
var template Flow t_flow;
|
var template Flow t_flow;
|
||||||
|
@ -314,6 +323,7 @@ module IPL4_example {
|
||||||
setverdict(pass);
|
setverdict(pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* truncated UDP header should neither pass nor create conntrack */
|
||||||
testcase TC_udp_shorthdr() runs on dummy_CT {
|
testcase TC_udp_shorthdr() runs on dummy_CT {
|
||||||
var flow_info flowi := flow_gen(get_random_port_offset());
|
var flow_info flowi := flow_gen(get_random_port_offset());
|
||||||
var template Flow t_flow;
|
var template Flow t_flow;
|
||||||
|
@ -327,6 +337,7 @@ module IPL4_example {
|
||||||
setverdict(pass);
|
setverdict(pass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* truncated UDP packet (full hdr, short data) should neither pass nor create conntrack */
|
||||||
testcase TC_udp_shortdata() runs on dummy_CT {
|
testcase TC_udp_shortdata() runs on dummy_CT {
|
||||||
var flow_info flowi := flow_gen(get_random_port_offset());
|
var flow_info flowi := flow_gen(get_random_port_offset());
|
||||||
var template Flow t_flow;
|
var template Flow t_flow;
|
||||||
|
|
|
@ -87,7 +87,7 @@ void TunDevice__PT_PROVIDER::logHex(const char *prompt, const OCTETSTRING& msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* constructor */
|
||||||
TunDevice__PT_PROVIDER::TunDevice__PT_PROVIDER(const char *par_port_name)
|
TunDevice__PT_PROVIDER::TunDevice__PT_PROVIDER(const char *par_port_name)
|
||||||
: PORT(par_port_name)
|
: PORT(par_port_name)
|
||||||
{
|
{
|
||||||
|
@ -96,6 +96,7 @@ TunDevice__PT_PROVIDER::TunDevice__PT_PROVIDER(const char *par_port_name)
|
||||||
debugging = false;
|
debugging = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* destructor */
|
||||||
TunDevice__PT_PROVIDER::~TunDevice__PT_PROVIDER()
|
TunDevice__PT_PROVIDER::~TunDevice__PT_PROVIDER()
|
||||||
{
|
{
|
||||||
close_device();
|
close_device();
|
||||||
|
@ -124,6 +125,7 @@ void TunDevice__PT_PROVIDER::Handle_Fd_Event_Writable(int fd)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* function called if FD becomes readable: pull packet from chardev */
|
||||||
void TunDevice__PT_PROVIDER::Handle_Fd_Event_Readable(int fd)
|
void TunDevice__PT_PROVIDER::Handle_Fd_Event_Readable(int fd)
|
||||||
{
|
{
|
||||||
uint8_t msg[0xffff];
|
uint8_t msg[0xffff];
|
||||||
|
@ -157,10 +159,12 @@ void TunDevice__PT_PROVIDER::user_unmap(const char *system_port)
|
||||||
close_device();
|
close_device();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* user calls 'start' on given port */
|
||||||
void TunDevice__PT_PROVIDER::user_start()
|
void TunDevice__PT_PROVIDER::user_start()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* user calls 'stop' on given port */
|
||||||
void TunDevice__PT_PROVIDER::user_stop()
|
void TunDevice__PT_PROVIDER::user_stop()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue