.. This work is licensed under a Creative Commons Attribution 4.0 International
.. License.
.. http://creativecommons.org/licenses/by/4.0
.. (c) OPNFV, Intel Corporation and others.

SampleVNF - Config files
========================

The configuration files are created based on the DUT test scenarios.
The example reference files are provided as part of the VNFs in the 
config folder.

Following parameters will define the config files.

1. Loadbalancing: Hardware or Software
2. Traffic type: IPv4 or IPv6
3. Number of Ports: pairs: Single port or Multi-Port 

Following are the example configuration files for sampleVNFs.

vCGNAPT Config files
--------------------




vFW Config files
----------------

The reference configuration files explained here are for Software and Hardware
loadbalancing with IPv4 traffic type and single port pair.
For other configurations liek IPv6 and Multi-port, refer to example config
files provided as part of the source code in config(VNFs/vFW/config) folder
of the VNFs. 

1. SWLB, IPv4, Single Port Pair, 4WT:

  ::

    [PIPELINE0]
    type = MASTER
    core = 0
    
    [PIPELINE1]
    type =  ARPICMP
    core = 0
    
    pktq_in  = SWQ2
    pktq_out = TXQ0.0 TXQ1.0
    
    ; IPv4 ARP route table entries (dst_ip, mask, if_port, nh) hex values with no 0x
    ; arp_route_tbl = (ac102814,ff000000,1,ac102814) (ca106414,ff000000,0,ca106414)
    
    ; IPv6 ARP route table entries (dst_ip, mask, if_port, nh) hex values with no 0x
    ;nd_route_tbl =  (fec0::6a05:caff:fe30:21b0,64,0,fec0::6a05:caff:fe30:21b0)
    ;nd_route_tbl =  (2012::6a05:caff:fe30:2081,64,1,2012::6a05:caff:fe30:2081)
    
    ; egress (private interface) info
    pktq_in_prv =  RXQ0.0
    
    ;for pub port <-> prv port mapping (prv, pub)
    prv_to_pub_map = (0,1)
    prv_que_handler = (0)
    
    [PIPELINE2]
    type = TXRX
    core = 1
    pktq_in  = RXQ0.0 RXQ1.0
    pktq_out = SWQ0 SWQ1 SWQ2
    pipeline_txrx_type = RXRX
    
    [PIPELINE3]
    type = LOADB
    core = 2
    pktq_in  = SWQ0 SWQ1
    pktq_out = SWQ3 SWQ4 SWQ5 SWQ6 SWQ7 SWQ8 SWQ9 SWQ10
    outport_offset = 136
    n_vnf_threads = 4 ; Number of worker threads
    prv_que_handler = (0)
    n_lb_tuples = 5 ; tuple(src_ip,dst_ip, src_port, dst_port, protocol)
    ;loadb_debug = 0
    
    [PIPELINE4]
    type = VFW
    core = 3
    pktq_in  = SWQ3 SWQ4
    pktq_out = SWQ11 SWQ12;TXQ0.0 TXQ1.0
    
    n_rules = 4096 ; Max number of ACL rules
    ;n_flows gets round up to power of 2
    n_flows = 1048576 ; Max number of connections/flows per vFW WT
    traffic_type = 4 ; IPv4 Traffic
    ;traffic_type = 6 ; IPv6 Traffic
    ; tcp_time_wait controls timeout for closed connection, normally 120
    tcp_time_wait = 10	; TCP Connection WAIT timeout
    tcp_be_liberal = 0
    ;udp_unreplied and udp_replied controls udp "connection" timeouts, normally 30/180
    udp_unreplied = 180 ; UDP timeouts for unreplied traffic
    udp_replied = 180 ; UDP timeout for replied traffic
    
    [PIPELINE5]
    type = VFW
    core = 4
    pktq_in  = SWQ5 SWQ6
    pktq_out = SWQ13 SWQ14;TXQ0.0 TXQ1.0
    
    n_rules = 4096
    ;n_flows gets round up to power of 2
    n_flows = 1048576
    traffic_type = 4 ; IPv4 Traffic
    ;traffic_type = 6 ; IPv6 Traffic
    ; tcp_time_wait controls timeout for closed connection, normally 120
    tcp_time_wait = 10
    tcp_be_liberal = 0
    ;udp_unreplied and udp_replied controls udp "connection" timeouts, normally 30/180
    udp_unreplied = 180
    udp_replied = 180
    
    [PIPELINE6]
    type = VFW
    core = 5
    pktq_in  = SWQ7 SWQ8
    pktq_out = SWQ15 SWQ16
    
    n_rules = 4096
    ;n_flows gets round up to power of 2
    n_flows = 1048576
    traffic_type = 4 ; IPv4 Traffic
    ;traffic_type = 6 ; IPv6 Traffic
    ; tcp_time_wait controls timeout for closed connection, normally 120
    tcp_time_wait = 10
    tcp_be_liberal = 0
    ;udp_unreplied and udp_replied controls udp "connection" timeouts, normally 30/180
    udp_unreplied = 180
    udp_replied = 180
    
    [PIPELINE7]
    type = VFW
    core = 6
    pktq_in  = SWQ9 SWQ10
    pktq_out = SWQ17 SWQ18
    
    n_rules = 4096
    ;n_flows gets round up to power of 2
    n_flows = 1048576
    traffic_type = 4 ; IPv4 Traffic 
    ;traffic_type = 6 ; IPv6 Traffic
    ; tcp_time_wait controls timeout for closed connection, normally 120
    tcp_time_wait = 10
    tcp_be_liberal = 0
    udp_unreplied = 180
    udp_replied = 180
    
    [PIPELINE8]
    type = TXRX
    core = 1h
    pktq_in  = SWQ11 SWQ12 SWQ13 SWQ14 SWQ15 SWQ16 SWQ17 SWQ18
    pktq_out = TXQ0.1 TXQ1.1 TXQ0.2 TXQ1.2 TXQ0.3 TXQ1.3 TXQ0.4 TXQ1.4
    pipeline_txrx_type = TXTX


2. HWLB, IPv4, Single Port Pair, 4 WT:

This configuration doesn't require LOADB and TXRX pipelines

  ::

    [PIPELINE0]
    type = MASTER
    core = 0
    
    [PIPELINE1]
    type =  ARPICMP
    core = 0
    pktq_in  = SWQ0 SWQ1 SWQ2 SWQ3
    pktq_out = TXQ0.0 TXQ1.0
    
    ; egress (private interface) info
    pktq_in_prv =  RXQ0.0
    
    ;for pub port <-> prv port mapping (prv, pub)
    prv_to_pub_map = (0,1)
    prv_que_handler = (0)
    
    [PIPELINE2]
    type = VFW
    core = 1
    pktq_in  = RXQ0.0 RXQ1.0
    pktq_out = TXQ0.1 TXQ1.1 SWQ0
    
    n_rules = 4096
    ;n_flows gets round up to power of 2
    n_flows = 1048576
    
    traffic_type = 4 ; IPv4 Traffic
    ;traffic_type = 6 ; IPv6 Traffic
    ; tcp_time_wait controls timeout for closed connection, normally 120
    tcp_time_wait = 10
    tcp_be_liberal = 0
    ;udp_unreplied and udp_replied controls udp "connection" timeouts, normally 30/180
    udp_unreplied = 180
    udp_replied = 180
    
    [PIPELINE3]
    type = VFW
    core = 2
    pktq_in  = RXQ0.1 RXQ1.1
    pktq_out = TXQ0.2 TXQ1.2 SWQ1
    
    n_rules = 4096
    ;n_flows gets round up to power of 2
    n_flows = 1048576
    
    traffic_type = 4 ; IPv4 Traffic
    ;traffic_type = 6 ; IPv6 Traffic
    ; tcp_time_wait controls timeout for closed connection, normally 120
    tcp_time_wait = 10
    tcp_be_liberal = 0
    ;udp_unreplied and udp_replied controls udp "connection" timeouts, normally 30/180
    udp_unreplied = 180
    udp_replied = 180
    
    [PIPELINE4]
    type = VFW
    core = 3
    pktq_in  = RXQ0.2 RXQ1.2
    pktq_out = TXQ0.3 TXQ1.3 SWQ2
    
    n_rules = 4096
    ;n_flows gets round up to power of 2
    n_flows = 1048576
    
    traffic_type = 4 ; IPv4 Traffic
    ;traffic_type = 6 ; IPv6 Traffic
    ; tcp_time_wait controls timeout for closed connection, normally 120
    tcp_time_wait = 10
    tcp_be_liberal = 0
    ;udp_unreplied and udp_replied controls udp "connection" timeouts, normally 30/180
    udp_unreplied = 180
    udp_replied = 180
    
    [PIPELINE5]
    type = VFW
    core = 4
    pktq_in  = RXQ0.3 RXQ1.3
    pktq_out = TXQ0.4 TXQ1.4 SWQ3
    
    n_rules = 4096
    ;n_flows gets round up to power of 2
    n_flows = 1048576
    
    traffic_type = 4 ; IPv4 Traffic
    ;traffic_type = 6 ; IPv6 Traffic
    ; tcp_time_wait controls timeout for closed connection, normally 120
    tcp_time_wait = 10
    tcp_be_liberal = 0
    ;udp_unreplied and udp_replied controls udp "connection" timeouts, normally 30/180
    udp_unreplied = 180
    udp_replied = 180


vACL Config files
----------------

The reference configuration files explained here are for Software and Hardware
loadbalancing with IPv4 traffic type and single port pair.
For other configurations liek IPv6 and Multi-port, refer to example config
files provided as part of the source code in config(VNFs/vACL/config) folder
of the VNFs. 

1. SWLB, IPv4, Single Port Pair, 1 WT:

 ::

    [EAL]
    # add pci whitelist eg below
    w = 05:00.0  ; Network Ports binded to dpdk
    w = 05:00.1  ; Network Ports binded to dpdk
    
    [PIPELINE0]
    type = MASTER
    core = 0

    [PIPELINE1]
    type = ARPICMP
    core = 0
    pktq_in  = SWQ2
    pktq_out = SWQ7
    pktq_in_prv =  RXQ0.0
    prv_to_pub_map = (0,1)
    prv_que_handler = (0)
    
    [PIPELINE2]
    type = TXRX
    core = 1
    pktq_in  = RXQ0.0 RXQ1.0
    pktq_out = SWQ0 SWQ1 SWQ2
    pipeline_txrx_type = RXRX
    dest_if_offset = 176

    [PIPELINE3]
    type = LOADB
    core = 2
    pktq_in  = SWQ0 SWQ1
    pktq_out = SWQ3 SWQ4
    outport_offset = 136
    phyport_offset = 204
    n_vnf_threads = 1
    prv_que_handler = (0)

    [PIPELINE4]
    type = ACL
    core = 3
    pktq_in  = SWQ3 SWQ4
    pktq_out = SWQ5 SWQ6
    n_flows = 1000000
    pkt_type = ipv4
    traffic_type = 4

    [PIPELINE5]
    type = TXRX
    core = 1h
    pktq_in  = SWQ5 SWQ6 SWQ7
    pktq_out = TXQ0.0 TXQ1.0
    pipeline_txrx_type = TXTX


2. SWLB, IPv4, Single Port Pair, 1 WT:

 ::    

    [EAL]
    # add pci whitelist eg below
    w = 05:00.0
    w = 05:00.1
    
    [PIPELINE0]
    type = MASTER
    core = 0

    [PIPELINE1]
    type = ARPICMP
    core = 0
    pktq_in  = SWQ0
    pktq_out = TXQ0.0 TXQ1.0
    pktq_in_prv =  RXQ0.0
    prv_to_pub_map = (0,1)
    prv_que_handler = (0)

    [PIPELINE2]
    type = ACL
    core = 1
    pktq_in  = RXQ0.0 RXQ1.0
    pktq_out = TXQ0.1 TXQ1.1 SWQ0
    n_flows = 1000000
    pkt_type = ipv4
    traffic_type = 4