gbp: refactor policy nodes
[vpp.git] / src / plugins / gbp / gbp_policy.h
1 /*
2  * Copyright (c) 2018 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15
16 #ifndef __GBP_POLICY_H__
17 #define __GBP_POLICY_H__
18
19 #include <plugins/gbp/gbp_contract.h>
20
21 /**
22  * per-packet trace data
23  */
24 typedef struct gbp_policy_trace_t_
25 {
26   /* per-pkt trace data */
27   gbp_scope_t scope;
28   sclass_t sclass;
29   sclass_t dclass;
30   u32 allowed;
31   u32 flags;
32 } gbp_policy_trace_t;
33
34 /* packet trace format function */
35 u8 * format_gbp_policy_trace (u8 * s, va_list * args);
36
37 static_always_inline void
38 gbp_policy_trace(vlib_main_t * vm, vlib_node_runtime_t * node, vlib_buffer_t *b, const gbp_contract_key_t *key, u8 allowed)
39 {
40   gbp_policy_trace_t *t;
41
42   if (PREDICT_TRUE (!(b->flags & VLIB_BUFFER_IS_TRACED)))
43     return;
44
45   t = vlib_add_trace (vm, node, b, sizeof (*t));
46   t->sclass = key->gck_src;
47   t->dclass = key->gck_dst;
48   t->scope = key->gck_scope;
49   t->allowed = allowed;
50   t->flags = vnet_buffer2 (b)->gbp.flags;
51 }
52
53 #endif /* __GBP_POLICY_H__ */