blob: 40fad3429783379c42dc6faa3f859abc9280d0a0 [file] [log] [blame]
Neale Ranns999c8ee2019-02-01 03:31:24 -08001/*
2 * Copyright (c) 2015 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#ifndef __IPSEC_SPD_POLICY_H__
16#define __IPSEC_SPD_POLICY_H__
17
18#include <vlib/vlib.h>
19
20#define foreach_ipsec_policy_action \
21 _ (0, BYPASS, "bypass") \
22 _ (1, DISCARD, "discard") \
23 _ (2, RESOLVE, "resolve") \
24 _ (3, PROTECT, "protect")
25
26typedef enum
27{
28#define _(v, f, s) IPSEC_POLICY_ACTION_##f = v,
29 foreach_ipsec_policy_action
30#undef _
31} ipsec_policy_action_t;
32
33#define IPSEC_POLICY_N_ACTION (IPSEC_POLICY_ACTION_PROTECT + 1)
34
35typedef struct
36{
37 ip46_address_t start, stop;
38} ip46_address_range_t;
39
40typedef struct
41{
42 u16 start, stop;
43} port_range_t;
44
45/**
Neale Rannsa09c1ff2019-02-04 01:10:30 -080046 * @brief
47 * Policy packet & bytes counters
48 */
49extern vlib_combined_counter_main_t ipsec_spd_policy_counters;
50
51/**
Neale Ranns999c8ee2019-02-01 03:31:24 -080052 * @brief A Secruity Policy. An entry in an SPD
53 */
54typedef struct ipsec_policy_t_
55{
56 u32 id;
57 i32 priority;
58 u8 is_outbound;
59
60 // Selector
61 u8 is_ipv6;
62 ip46_address_range_t laddr;
63 ip46_address_range_t raddr;
64 u8 protocol;
65 port_range_t lport;
66 port_range_t rport;
67
68 // Policy
69 ipsec_policy_action_t policy;
70 u32 sa_id;
71 u32 sa_index;
Neale Ranns999c8ee2019-02-01 03:31:24 -080072} ipsec_policy_t;
73
74/**
75 * @brief Add/Delete a SPD
76 */
77extern int ipsec_add_del_policy (vlib_main_t * vm,
Neale Rannsa09c1ff2019-02-04 01:10:30 -080078 ipsec_policy_t * policy,
79 int is_add, u32 * stat_index);
Neale Ranns999c8ee2019-02-01 03:31:24 -080080
Neale Rannsa09c1ff2019-02-04 01:10:30 -080081extern u8 *format_ipsec_policy (u8 * s, va_list * args);
Neale Ranns999c8ee2019-02-01 03:31:24 -080082extern u8 *format_ipsec_policy_action (u8 * s, va_list * args);
83extern uword unformat_ipsec_policy_action (unformat_input_t * input,
84 va_list * args);
85
86
87#endif /* __IPSEC_SPD_POLICY_H__ */
88
89/*
90 * fd.io coding-style-patch-verification: ON
91 *
92 * Local Variables:
93 * eval: (c-set-style "gnu")
94 * End:
95 */