# Copyright (c) 2016-2017 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

[lua]
lpm4 = dofile("ipv4_bng.lua")
user_table = dofile("gre_table.lua")

[eal options]
-n=4 ; $sut_memory_channels
no-output=no ; disable DPDK debug output

[variables]
$master        =0
$core_lb_cpe0  =1
$core_inet0    =2
$core_lb_cpe1  =3
$core_inet1    =4
$core_workers  =13-14,15-16,17-18,19-20
$core_tx_cpe0  =6
$core_tx_cpe1  =8
$core_tx_inet0 =9
$core_tx_inet1 =11
$core_cpe1     =12

[port 0]
name=cpe0
mac=hardware
rx desc=2048
tx desc=2048
[port 1]
name=inet0
mac=hardware
rx desc=2048
tx desc=2048
[port 2]
name=cpe1
mac=hardware
rx desc=2048
tx desc=2048
[port 3]
name=inet1
mac=hardware
rx desc=2048
tx desc=2048

[defaults]
mempool size=142K
memcache size=512
qinq tag=0xa888

[global]
start time=20
name=BNG

[core $master]
mode=master

; IPv4
;*****************************************************************************************
;##### Load Balancing receiving from CPE and from Internet ####
[core $core_lb_cpe0]
name=LB-cpe
task=0
mode=lbqinq
rx port=cpe0
tx cores=(${core_workers})t0 proto=ipv4
tx cores=(${core_workers})t0 proto=arp
drop=no

[core $core_inet0]
name=LB-inet
task=0
mode=lbnetwork
rx port=inet0
untag mpls=yes
tx cores=(${core_workers})t1 proto=ipv4
drop=no

[core $core_lb_cpe1]
name=LB-cpe
task=0
mode=lbqinq
rx port=cpe1
tx cores=(${core_workers})t0 proto=ipv4
tx cores=(${core_workers})t0 proto=arp
drop=no

[core $core_inet1]
name=LB-inet
task=0
mode=lbnetwork
rx port=inet1
untag mpls=yes
tx cores=(${core_workers})t1 proto=ipv4
drop=no

[core $core_tx_cpe0]
name=LB-cpe
task=0
mode=nop
rx ring=yes
tx port=cpe0
drop=no

[core $core_tx_inet0]
name=LB-cpe
task=0
mode=nop
rx ring=yes
tx port=inet0
drop=no

[core $core_tx_cpe1]
name=LB-cpe
task=0
mode=nop
rx ring=yes
tx port=cpe1
drop=no

[core $core_tx_inet1]
name=LB-cpe
task=0
mode=nop
rx ring=yes
tx port=inet1
drop=no


;*****************************************************************************************
;#### Workers receiving from LB
;#### Task 0: QinQ decapsulation + gre encapsulation + routing
;#### Task 1: ARP
;#### Task 2: GRE depcapsulation + QinQ encapsulation + use learned mac
[core $core_workers]
name=Worker
task=0
mode=qinqdecapv4
rx ring=yes
tx cores from routing table=${core_tx_inet0},${core_tx_inet1}
drop=no
route table=lpm4
local ipv4=21.22.23.24
handle arp=yes
user table=user_table
fast path handle arp=yes

task=1
mode=qinqencapv4
rx ring=yes ; gre received from internal queue
tx cores from cpe table=${core_tx_cpe0},${core_tx_cpe1} remap=cpe0,cpe1
drop=no
user table=user_table

;