summaryrefslogtreecommitdiffstats
path: root/src/vnet/dpo/dvr_dpo.h
blob: 15fe113c596531fecaa7100ccb0fd0f1079f430d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
 * Copyright (c) 2016 Cisco and/or its affiliates.
 * 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.
 */

#ifndef __DVR_DPO_H__
#define __DVR_DPO_H__

#include <vnet/dpo/dpo.h>

/**
 * @brief
 * The DVR DPO. Used as the resolving object for a DVR route.
 * This is used, in place of the usual L3 Adjacency, to retransmit
 * the packet with the original L2 header intact but also to run L3 features.
 * After running L3 features the packet is re-injected back into the L2 path
 * so it can pick up the necessary VLAN tags of the egress interface.
 * This re-injection is done with an output feature.
 */
typedef struct dvr_dpo_t_
{
    /**
     * The Software interface index that the packets will output on
     */
    u32 dd_sw_if_index;

    /**
     * The protocol of packets using this DPO
     */
    dpo_proto_t dd_proto;

    /**
     * number of locks.
     */
    u16 dd_locks;
} dvr_dpo_t;

extern void dvr_dpo_add_or_lock (u32 sw_if_index,
                                 dpo_proto_t dproto,
                                 dpo_id_t *dpo);

extern void dvr_dpo_module_init(void);

/**
 * @brief pool of all interface DPOs
 */
dvr_dpo_t *dvr_dpo_pool;

static inline dvr_dpo_t *
dvr_dpo_get (index_t index)
{
    return (pool_elt_at_index(dvr_dpo_pool, index));
}

#endif
{ color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

    # Configure cached packages to be shared between instances of the
    # same base box.
    if Vagrant.has_plugin?("vagrant-cachier")
        config.cache.scope = :box
    end

    # Configure proxy if needed.
    if Vagrant.has_plugin?("vagrant-proxyconf")
        config.proxy.http     = "http://192.168.0.2:3128/"
        config.proxy.https    = "http://192.168.0.2:3128/"
        config.proxy.ftp      = "http://192.168.0.2:3128/"
        config.proxy.no_proxy = "localhost,127.0.0.1"
    end

    # Configure testing network interfaces (tg).
    config.vm.network :private_network, type: "dhcp", auto_config: false, virtualbox__intnet: "link1", nic_type: "82545em", mac: "0800270fe04d"
    config.vm.network :private_network, type: "dhcp", auto_config: false, virtualbox__intnet: "link2", nic_type: "82545em", mac: "08002761f7ad"
    config.vm.network :private_network, type: "dhcp", auto_config: false, virtualbox__intnet: "link3", nic_type: "82545em", mac: "080027dc5da4"

    # Configure testing network interfaces (sut).
    config.vm.network :private_network, type: "dhcp", auto_config: false, virtualbox__intnet: "link1", nic_type: "82545em", mac: "080027385e58"
    config.vm.network :private_network, type: "dhcp", auto_config: false, virtualbox__intnet: "link2", nic_type: "82545em", mac: "080027e3f542"
    config.vm.network :private_network, type: "dhcp", auto_config: false, virtualbox__intnet: "link3", nic_type: "82545em", mac: "0800274f7c63"

    config.vm.synced_folder "../", "/vagrant/csit"

    # Provision the box using ansible local (no Ansible installation needed
    # on host).
    config.vm.provision "ansible_local" do |ansible|
        ansible.version = "latest"
        ansible.become = true
        ansible.verbose = false
        ansible.limit = "vagrant"
        ansible.inventory_path = "csit/fdio.infra.ansible/inventories/vagrant_inventory/hosts"
        ansible.playbook = "csit/fdio.infra.ansible/site.yaml"
    end

    config.vm.post_up_message = <<-MESSAGE
    Your virtual machine is configured!

    Login to the box using command:
        vagrant ssh

    To run some tests use the VPP Device bootstrap script, eg:
        cd /home/vagrant/csit/resources/libraries/bash/entry
        ./bootstrap_vpp_device.sh csit-vpp-device-master-ubuntu2004-1n-vbox

    To run only selected tests based on TAGS, export environment variables
    before running the test suite:
        export GERRIT_EVENT_TYPE="comment-added"
        export GERRIT_EVENT_COMMENT_TEXT="devicetest memif"
        ./bootstrap_vpp_device.sh csit-vpp-device-master-ubuntu2004-1n-vbox

    For more information please visit:
        https://docs.fd.io/csit/master/report/
        https://docs.fd.io/csit/master/trending/

    MESSAGE

    config.vm.define "focal", primary: true do |focal|
        # Base box definition, currently using
        #  Official Ubuntu 20.04 LTS (Focal) Daily Build
        focal.vm.box = "ubuntu/focal64"
        focal.vm.box_version = "20210415.0.0"
        focal.vm.box_check_update = false

        # Virtualbox machine configuration
        focal.vm.provider "virtualbox" do |vb|
            vb.name = "vppdevice-focal"
            vb.gui = false
            vb.memory = "8192"
            vb.cpus = "4"
            vb.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
            vb.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
            vb.customize ["modifyvm", :id, "--nicpromisc4", "allow-all"]
            vb.customize ["modifyvm", :id, "--nicpromisc5", "allow-all"]
            vb.customize ["modifyvm", :id, "--nicpromisc6", "allow-all"]
            vb.customize ["modifyvm", :id, "--nicpromisc7", "allow-all"]
        end
    end
end