summaryrefslogtreecommitdiffstats
path: root/src/vnet/dpo/pw_cw.h
blob: 96f8c72c9d0ab64d5af81305abaa6a29f12719c7 (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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
 * Copyright (c) 2019 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 __PW_CW_DPO_H__
#define __PW_CW_DPO_H__

#include <vnet/vnet.h>
#include <vnet/mpls/packet.h>
#include <vnet/dpo/dpo.h>

/**
 * A Psuedo Wire Control Word is 4 bytes
 */
typedef u32 pw_cw_t;

/**
 * A representation of a Psuedo Wire Control Word pop DPO
 */
typedef struct pw_cw_dpo_t
{
    /**
     * Next DPO in the graph
     */
    dpo_id_t pwcw_parent;

    /**
     * Number of locks/users of the label
     */
    u16 pwcw_locks;
} pw_cw_dpo_t;

/**
 * @brief Assert that the MPLS label object is less than a cache line in size.
 * Should this get any bigger then we will need to reconsider how many labels
 * can be pushed in one object.
 */
STATIC_ASSERT_SIZEOF(pw_cw_dpo_t, 2 * sizeof(u64));

/* #define STATIC_ASSERT_ALIGNOF(d, s)                                      \ */
/*     STATIC_ASSERT (alignof (d) == sizeof(s), "Align of " #d " must be " # s " bytes") */

/* STATIC_ASSERT_AIGNOF(pw_cw_dpo_t, u64); */

/**
 * @brief Create an PW CW pop
 *
 * @param parent The parent of the created MPLS label object
 * @param dpo The PW CW DPO created
 */
extern void pw_cw_dpo_create(const dpo_id_t *paremt,
                             dpo_id_t *dpo);

extern u8* format_pw_cw_dpo(u8 *s, va_list *args);

/*
 * Encapsulation violation for fast data-path access
 */
extern pw_cw_dpo_t *pw_cw_dpo_pool;

static inline pw_cw_dpo_t *
pw_cw_dpo_get (index_t index)
{
    return (pool_elt_at_index(pw_cw_dpo_pool, index));
}

extern void pw_cw_dpo_module_init(void);

#endif
olor: #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 */ }
# Copyright (c) 2020 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.

# Idea of this file is motivated by OpenDylight,
# especially its Integration/Test sub-project.

# This file requires active virtualenv with tox package installed,
# or python-tox system package installed.

# Usage:
# cd to CSIT root (other directories might use different tox.ini)
#   $ tox
# will execute all checks.
#  $ tox -e pylint
# will execute only checks defined in "pylint" tox environment.

[tox]
# Fast and brief checkers to front, slow or verbose checkers to back.
envlist = tc_naming, tc_coverage, copyright_year, new_line_length, line_length,
    autogen, pylint, doc_verify

# The following is needed as tox requires setup.py by default.
skipsdist = true
# Just a shorthand to avoid long lines.
checker_dir = ./resources/libraries/bash/entry/check

# TODO: Tox prints various warnings. Figure them out and fix them.

# Keep testenvs sorted alphabetically, please.

[testenv:autogen]
whitelist_externals = /bin/bash
setenv = PYTHONPATH = {toxinidir}
commands = bash {[tox]checker_dir}/autogen.sh

[testenv:copyright_year]
whitelist_externals = /bin/bash
setenv = PYTHONPATH = {toxinidir}
commands = bash {[tox]checker_dir}/copyright_year.sh

[testenv:doc_verify]
# Fix all documentaion error before enabling voting.
whitelist_externals = /bin/bash
commands = bash -c "bash {[tox]checker_dir}/doc_verify.sh || true"

[testenv:line_length]
whitelist_externals = /bin/bash
# Fix all transgressions and remove the " || true" workaround.
commands = bash -c "bash {[tox]checker_dir}/line.sh || true"

[testenv:new_line_length]
whitelist_externals = /bin/bash
# Adding .svg, big .rst tables, .yaml and similar still requires long lines.
# As current implementation is too dumb to filter those out,
# the checker has to remain non-voting.
commands = bash -c "bash {[tox]checker_dir}/new_line.sh || true"

[testenv:pylint]
basepython = python3
deps =
    pylint==2.4.3
    -r ./requirements.txt
whitelist_externals = /bin/bash
setenv = PYTHONPATH = {toxinidir}
# Run pylint, but hide its return value until python warnings are cleared.
commands = bash -c "bash {[tox]checker_dir}/pylint.sh || true"

# TODO: See FIXME in https://gerrit.fd.io/r/16423

[testenv:tc_coverage]
whitelist_externals = /bin/bash
# Coverage is not needed to be voting.
commands = bash -c "bash {[tox]checker_dir}/tc_coverage.sh || true"

[testenv:tc_naming]
whitelist_externals = /bin/bash
commands = bash {[tox]checker_dir}/tc_naming.sh

# Keep testenvs sorted alphabetically, please.

# TODO: Migrate current docs check here.
# TODO: Create voting "pylint violations should not increase" checker.
# TODO: Create voting checker to reject suites with Force Tags of other suite.
# TODO: Create voting checker against tags not in tag_documentation.rst file.
# TODO: Create Robot suite Documentation checker (backslash if not next mark).
# TODO: Create .yaml specific checker, so people can override long line check.
# TODO: Create .rst specific checker, if there is one allowing
#       to override line check.
# TODO: You get the idea, replace line check with something smarter
#       wherever possible.