durationInSec := 10
var err error
- // recreate interfaces with RX-queues
- s.AssertNil(vpp.DeleteTap(s.Interfaces.Tap))
- s.AssertNil(vpp.CreateTap(s.Interfaces.Tap, false, 2, 2))
-
s.CreateNginxServer()
s.AssertNil(s.Containers.NginxServer.Start())
logPath := s.Containers.NginxServer.GetContainerWorkDir() + "/" + s.Containers.NginxServer.Name + "-access.log"
s.AssertNil(vpp.Start())
// wait for VPP to start
time.Sleep(time.Second * 1)
- s.AssertNil(vpp.CreateTap(s.Interfaces.Client, false, 1, 1))
- s.AssertNil(vpp.CreateTap(s.Interfaces.Server, false, 1, 2))
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Client, false, 1))
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Server, false, 2))
s.Containers.Vpp.Exec(false, "chmod 777 -R %s", s.Containers.Vpp.GetContainerWorkDir())
// Add Ipv4 ARP entry for nginx HTTP server, otherwise first request fail (HTTP error 503)
vpp, _ := s.Containers.Vpp.newVppInstance(s.Containers.Vpp.AllocatedCpus, memoryConfig, sessionConfig)
s.AssertNil(vpp.Start())
- s.AssertNil(vpp.CreateTap(s.Interfaces.Tap, false, 1, 1), "failed to create tap interface")
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Tap, false, 1), "failed to create tap interface")
if *DryRun {
s.LogStartedContainers()
)
s.AssertNil(vpp.Start())
- s.AssertNil(vpp.CreateTap(s.Interfaces.Client, false, 1, 1))
- s.AssertNil(vpp.CreateTap(s.Interfaces.Server, false, 1, 2))
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Client, false, 1))
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Server, false, 2))
if *DryRun {
s.LogStartedContainers()
vpp, _ := s.Containers.Vpp.newVppInstance(s.Containers.Vpp.AllocatedCpus, sessionConfig)
s.AssertNil(vpp.Start())
- s.AssertNil(vpp.CreateTap(s.Interfaces.Tap, false, 1, 1), "failed to create tap interface")
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Tap, false, 1), "failed to create tap interface")
if *DryRun {
s.LogStartedContainers()
vpp, _ := s.Containers.Vpp.newVppInstance(s.Containers.Vpp.AllocatedCpus, sessionConfig)
s.AssertNil(vpp.Start())
- s.AssertNil(vpp.CreateTap(s.Interfaces.Tap, true, 1, 1), "failed to create tap interface")
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Tap, true, 1), "failed to create tap interface")
if *DryRun {
s.LogStartedContainers()
s.AssertNotNil(vpp, fmt.Sprint(err))
s.AssertNil(vpp.Start())
- s.AssertNil(vpp.CreateTap(s.Interfaces.Client, false, 1, 1))
- s.AssertNil(vpp.CreateTap(s.Interfaces.Server, false, 1, 2))
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Client, false, 1))
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Server, false, 2))
if *DryRun {
s.LogStartedContainers()
s.AssertNotNil(vpp, fmt.Sprint(err))
s.AssertNil(vpp.Start())
- s.AssertNil(vpp.CreateTap(s.Interfaces.Client, false, 1, 1))
- s.AssertNil(vpp.CreateTap(s.Interfaces.Server, false, 1, 2))
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Client, false, 1))
+ s.AssertNil(vpp.CreateTap(s.Interfaces.Server, false, 2))
arp := fmt.Sprintf("set ip neighbor %s %s %s",
s.Interfaces.Server.Peer.Name(),
PinWorkersCorelist bool
RelativeCores bool
SkipCores int
+ NumWorkers int
}
type VppMemTrace struct {
return nil
}
-func (vpp *VppInstance) CreateTap(tap *NetInterface, IPv6 bool, numRxQueues uint16, tapId uint32, flags ...uint32) error {
- var tapFlags uint32 = 0
-
- if len(flags) > 0 {
- tapFlags = flags[0]
- }
+func (vpp *VppInstance) CreateTap(tap *NetInterface, IPv6 bool, tapId uint32) error {
+ numRxQueues := uint16(max(1, vpp.CpuConfig.NumWorkers))
+ tapFlags := Consistent_qp
if *DryRun {
- flagsCli := ""
+ flagsCli := "consistent-qp"
ipAddress := ""
ipAddressPeer := ""
- if tapFlags == Consistent_qp {
- flagsCli = "consistent-qp"
- }
-
if IPv6 {
ipAddress = "host-ip6-addr " + tap.Ip6Address
ipAddressPeer = tap.Peer.Ip6Address
TapFlags: tapv2.TapFlags(tapFlags),
}
- vpp.getSuite().Log("create tap interface " + tap.Name())
+ vpp.getSuite().Log("create tap interface " + tap.Name() + " num-rx-queues " + strconv.Itoa(int(numRxQueues)))
// Create tap interface
if err := vpp.ApiStream.SendMsg(createTapReq); err != nil {
return err
vpp.CpuConfig.PinWorkersCorelist = true
vpp.CpuConfig.RelativeCores = false
vpp.CpuConfig.SkipCores = 0
+ vpp.CpuConfig.NumWorkers = 0
}
func (vpp *VppInstance) generateVPPCpuConfig() string {
workers := vpp.Cpus[startCpu+1:]
workersRelativeCpu := startCpu + 1
+ vpp.CpuConfig.NumWorkers = len(workers)
if len(workers) > 0 && vpp.CpuConfig.UseWorkers {
if vpp.CpuConfig.PinWorkersCorelist {
s.SetupTest()
s.Containers.IperfC.Run()
s.Containers.IperfS.Run()
- vppProxy := s.Containers.VppProxy.VppInstance
-
- // tap interfaces are created on test setup with 1 rx-queue,
- // need to recreate them with 2 + consistent-qp
- s.AssertNil(vppProxy.DeleteTap(s.Interfaces.Server))
- s.AssertNil(vppProxy.CreateTap(s.Interfaces.Server, false, 2, uint32(s.Interfaces.Server.Peer.Index), Consistent_qp))
-
- s.AssertNil(vppProxy.DeleteTap(s.Interfaces.Client))
- s.AssertNil(vppProxy.CreateTap(s.Interfaces.Client, false, 2, uint32(s.Interfaces.Client.Peer.Index), Consistent_qp))
s.ConfigureVppProxy("tcp", s.Ports.Proxy)
if proto == "udp" {
defer remoteServerConn.Close()
vppProxy := s.Containers.VppProxy.VppInstance
- // tap interfaces are created on test setup with 1 rx-queue,
- // need to recreate them with 2 + consistent-qp
- s.AssertNil(vppProxy.DeleteTap(s.Interfaces.Server))
- s.AssertNil(vppProxy.CreateTap(s.Interfaces.Server, false, 2, uint32(s.Interfaces.Server.Peer.Index), Consistent_qp))
- s.AssertNil(vppProxy.DeleteTap(s.Interfaces.Client))
- s.AssertNil(vppProxy.CreateTap(s.Interfaces.Client, false, 2, uint32(s.Interfaces.Client.Peer.Index), Consistent_qp))
s.ConfigureVppProxy("http", s.Ports.Proxy)
ps->ao_disconnected = 1;
if (ps->po.is_http)
{
- session_send_rpc_evt_to_thread (
+ session_send_rpc_evt_to_thread_force (
session_thread_from_handle (ps->po.session_handle),
active_open_send_http_resp_rpc,
uword_to_pointer (ps->ps_index, void *));