FD.io VPP
v20.09-64-g4f7b92f0a
Vector Packet Processing
ip_init.c
Go to the documentation of this file.
1
/*
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
/*
16
* ip/ip_init.c: ip generic initialization
17
*
18
* Copyright (c) 2008 Eliot Dresselhaus
19
*
20
* Permission is hereby granted, free of charge, to any person obtaining
21
* a copy of this software and associated documentation files (the
22
* "Software"), to deal in the Software without restriction, including
23
* without limitation the rights to use, copy, modify, merge, publish,
24
* distribute, sublicense, and/or sell copies of the Software, and to
25
* permit persons to whom the Software is furnished to do so, subject to
26
* the following conditions:
27
*
28
* The above copyright notice and this permission notice shall be
29
* included in all copies or substantial portions of the Software.
30
*
31
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
34
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
35
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
36
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
37
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38
*/
39
40
#include <
vnet/ip/ip.h
>
41
42
ip_main_t
ip_main
;
43
44
clib_error_t
*
45
ip_main_init
(
vlib_main_t
*
vm
)
46
{
47
ip_main_t
*im = &
ip_main
;
48
clib_error_t
*error = 0;
49
50
clib_memset
(im, 0,
sizeof
(im[0]));
51
52
{
53
ip_protocol_info_t
*pi;
54
u32
i
;
55
56
#define ip_protocol(n,s) \
57
do { \
58
vec_add2 (im->protocol_infos, pi, 1); \
59
pi->protocol = n; \
60
pi->name = (u8 *) #s; \
61
} while (0);
62
63
#include "
protocols.def
"
64
65
#undef ip_protocol
66
67
im->
protocol_info_by_name
=
hash_create_string
(0,
sizeof
(
uword
));
68
for
(i = 0; i <
vec_len
(im->
protocol_infos
); i++)
69
{
70
pi = im->
protocol_infos
+
i
;
71
72
hash_set_mem
(im->
protocol_info_by_name
, pi->
name
, i);
73
hash_set
(im->
protocol_info_by_protocol
, pi->
protocol
, i);
74
}
75
}
76
77
{
78
tcp_udp_port_info_t
*pi;
79
u32
i
;
80
static
char
*port_names[] = {
81
#define ip_port(s,n) #s,
82
#include "
ports.def
"
83
#undef ip_port
84
};
85
static
u16
ports[] = {
86
#define ip_port(s,n) n,
87
#include "
ports.def
"
88
#undef ip_port
89
};
90
91
vec_resize
(im->
port_infos
,
ARRAY_LEN
(port_names));
92
im->
port_info_by_name
=
hash_create_string
(0,
sizeof
(
uword
));
93
94
for
(i = 0; i <
vec_len
(im->
port_infos
); i++)
95
{
96
pi = im->
port_infos
+
i
;
97
pi->
port
= clib_host_to_net_u16 (ports[i]);
98
pi->
name
= (
u8
*) port_names[i];
99
hash_set_mem
(im->
port_info_by_name
, pi->
name
, i);
100
hash_set
(im->
port_info_by_port
, pi->
port
, i);
101
}
102
}
103
104
return
error;
105
}
106
107
/* *INDENT-OFF* */
108
VLIB_INIT_FUNCTION
(
ip_main_init
) =
109
{
110
.init_order =
111
VLIB_INITS
(
"vnet_main_init"
,
112
"ip4_init"
,
113
"ip6_init"
,
114
"icmp4_init"
,
115
"icmp6_init"
,
116
"ip6_hop_by_hop_init"
,
117
"udp_local_init"
,
118
"udp_init"
,
119
"ip_classify_init"
,
120
"in_out_acl_init"
,
121
"policer_classify_init"
,
122
"flow_classify_init"
,
123
"dns_init"
),
124
};
125
/* *INDENT-ON* */
126
127
/*
128
* fd.io coding-style-patch-verification: ON
129
*
130
* Local Variables:
131
* eval: (c-set-style "gnu")
132
* End:
133
*/
ip_main_t::protocol_info_by_name
uword * protocol_info_by_name
Definition:
ip.h:117
ip_main_t::protocol_info_by_protocol
uword * protocol_info_by_protocol
Definition:
ip.h:113
hash_set
#define hash_set(h, key, value)
Definition:
hash.h:255
ip_main_t::port_info_by_name
uword * port_info_by_name
Definition:
ip.h:126
clib_memset
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
hash_set_mem
#define hash_set_mem(h, key, value)
Definition:
hash.h:275
vm
vlib_main_t * vm
Definition:
in2out_ed.c:1582
ip_main_t
Definition:
ip.h:107
ip_protocol_info_t
Definition:
ip.h:70
ip.h
u8
unsigned char u8
Definition:
types.h:56
ip_protocol_info_t::protocol
ip_protocol_t protocol
Definition:
ip.h:76
VLIB_INIT_FUNCTION
#define VLIB_INIT_FUNCTION(x)
Definition:
init.h:173
vec_resize
#define vec_resize(V, N)
Resize a vector (no header, unspecified alignment) Add N elements to end of given vector V...
Definition:
vec.h:281
u32
unsigned int u32
Definition:
types.h:88
hash_create_string
#define hash_create_string(elts, value_bytes)
Definition:
hash.h:690
ip_main_t::port_info_by_port
uword * port_info_by_port
Definition:
ip.h:123
u16
unsigned short u16
Definition:
types.h:57
tcp_udp_port_info_t::port
u16 port
Definition:
ip.h:98
ip_main_t::protocol_infos
ip_protocol_info_t * protocol_infos
Definition:
ip.h:110
i
sll srl srl sll sra u16x4 i
Definition:
vector_sse42.h:317
ip_main
ip_main_t ip_main
Definition:
ip_init.c:42
ARRAY_LEN
#define ARRAY_LEN(x)
Definition:
clib.h:67
ip_main_init
clib_error_t * ip_main_init(vlib_main_t *vm)
Definition:
ip_init.c:45
tcp_udp_port_info_t::name
u8 * name
Definition:
ip.h:95
ports.def
clib_error_t
Definition:
clib_error.h:21
vec_len
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
Definition:
vec_bootstrap.h:142
vlib_main_t
Definition:
main.h:120
uword
u64 uword
Definition:
types.h:112
ip_protocol_info_t::name
u8 * name
Definition:
ip.h:73
ip_main_t::port_infos
tcp_udp_port_info_t * port_infos
Definition:
ip.h:120
VLIB_INITS
#define VLIB_INITS(...)
Definition:
init.h:357
protocols.def
tcp_udp_port_info_t
Definition:
ip.h:92
src
vnet
ip
ip_init.c
Generated on Thu Jun 3 2021 16:06:03 for FD.io VPP by
1.8.13