FD.io VPP
v21.10.1-2-g0a485f517
Vector Packet Processing
pcap2cinit.c
Go to the documentation of this file.
1
/*
2
* pcap2cinit.c: convert pcap input to a u8 ** initializer
3
*
4
* Copyright (c) 2018 Cisco and/or its affiliates.
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at:
8
*
9
* http://www.apache.org/licenses/LICENSE-2.0
10
*
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
16
*/
17
/**
18
* @file
19
* @brief Functions to convert PCAP file format to a u8 ** initializer
20
*
21
*/
22
#include <
vppinfra/pcap.h
>
23
#include <
vnet/ethernet/packet.h
>
24
#include <stdio.h>
25
26
pcap_main_t
pcap_main
;
27
28
/**
29
* @brief Conversion of PCAP file to u8 ** initializer stanzas
30
*
31
* @param *pm - pcap_main_t
32
* @param *ofp - FILE
33
*
34
* @return rc - int
35
*
36
*/
37
int
38
pcap2cinit
(
pcap_main_t
* pm, FILE * ofp)
39
{
40
int
i
, j;
41
u8
*pkt;
42
43
for
(
i
= 0;
i
<
vec_len
(pm->
packets_read
);
i
++)
44
{
45
pkt = (
u8
*) pm->
packets_read
[
i
];
46
47
fformat
(ofp,
"static u8 __pcap_pkt%d [] = {\n "
,
i
);
48
49
for
(j = 0; j <
vec_len
(pkt); j++)
50
{
51
if
(((j + 1) % 8) == 0)
52
fformat
(ofp,
"0x%02x,\n "
, pkt[j]);
53
else
54
fformat
(ofp,
"0x%02x, "
, pkt[j]);
55
}
56
fformat
(ofp,
"\n};\n"
);
57
}
58
59
fformat
(ofp,
"static u8 *__pcap_pkts [] = {\n"
);
60
61
for
(
i
= 0;
i
<
vec_len
(pm->
packets_read
);
i
++)
62
fformat
(ofp,
" __pcap_pkt%d, \n"
,
i
);
63
64
fformat
(ofp,
"};\n"
);
65
66
return
0;
67
}
68
69
/**
70
* @brief pcap2pg.
71
* usage: pcap2pg -i <input-file> [-o <output-file>]
72
*/
73
int
74
main
(
int
argc,
char
**argv)
75
{
76
unformat_input_t
input;
77
pcap_main_t
*pm = &
pcap_main
;
78
u8
*input_file = 0, *output_file = 0;
79
FILE *ofp;
80
clib_error_t
*
error
;
81
82
unformat_init_command_line
(&input, argv);
83
84
while
(
unformat_check_input
(&input) !=
UNFORMAT_END_OF_INPUT
)
85
{
86
if
(
unformat
(&input,
"-i %s"
, &input_file)
87
||
unformat
(&input,
"input %s"
, &input_file))
88
;
89
else
if
(
unformat
(&input,
"-o %s"
, &output_file)
90
||
unformat
(&input,
"output %s"
, &output_file))
91
;
92
else
93
{
94
usage
:
95
fformat
(stderr,
96
"usage: pcap2pg -i <input-file> [-o <output-file>]\n"
);
97
exit (1);
98
}
99
}
100
101
if
(input_file == 0)
102
goto
usage
;
103
104
pm->
file_name
= (
char
*) input_file;
105
error
=
pcap_read
(pm);
106
107
if
(
error
)
108
{
109
clib_error_report
(
error
);
110
exit (1);
111
}
112
113
if
(output_file)
114
{
115
ofp = fopen ((
char
*) output_file,
"w+"
);
116
if
(ofp == NULL)
117
{
118
clib_unix_warning
(
"Couldn't create '%s'"
, output_file);
119
exit (1);
120
}
121
}
122
else
123
{
124
ofp = stdout;
125
}
126
127
pcap2cinit
(pm, ofp);
128
129
fclose (ofp);
130
exit (0);
131
}
132
133
/*
134
* fd.io coding-style-patch-verification: ON
135
*
136
* Local Variables:
137
* eval: (c-set-style "gnu")
138
* End:
139
*/
pcap_read
__clib_export clib_error_t * pcap_read(pcap_main_t *pm)
Read PCAP file.
Definition:
pcap.c:176
pcap2cinit
int pcap2cinit(pcap_main_t *pm, FILE *ofp)
Conversion of PCAP file to u8 ** initializer stanzas.
Definition:
pcap2cinit.c:38
usage
static void usage(void)
Definition:
health_check.c:14
clib_error_report
#define clib_error_report(e)
Definition:
error.h:113
unformat_input_t
struct _unformat_input_t unformat_input_t
pcap_main_t
PCAP main state data structure.
Definition:
pcap.h:155
clib_unix_warning
#define clib_unix_warning(format, args...)
Definition:
error.h:68
error
Definition:
cJSON.c:88
unformat
uword unformat(unformat_input_t *i, const char *fmt,...)
Definition:
unformat.c:978
vec_len
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
Definition:
vec_bootstrap.h:142
packet.h
unformat_check_input
static uword unformat_check_input(unformat_input_t *i)
Definition:
format.h:163
pcap.h
PCAP utility definitions.
pcap_main_t::packets_read
u8 ** packets_read
Packets read from file.
Definition:
pcap.h:186
pcap_main
pcap_main_t pcap_main
Definition:
pcap2cinit.c:26
fformat
__clib_export word fformat(FILE *f, char *fmt,...)
Definition:
format.c:466
u8
unsigned char u8
Definition:
types.h:56
clib_error_t
Definition:
clib_error.h:21
i
int i
Definition:
flowhash_template.h:376
unformat_init_command_line
void unformat_init_command_line(unformat_input_t *input, char *argv[])
Definition:
unformat.c:1013
pcap_main_t::file_name
char * file_name
File name of pcap output.
Definition:
pcap.h:161
main
int main(int argc, char **argv)
pcap2pg.
Definition:
pcap2cinit.c:74
UNFORMAT_END_OF_INPUT
#define UNFORMAT_END_OF_INPUT
Definition:
format.h:137
src
vnet
unix
pcap2cinit.c
Generated on Sat Jan 8 2022 10:37:04 for FD.io VPP by
1.8.17