numam-dpdk/examples/ipsec-secgw/parser.h
Konstantin Ananyev 7622291b64 examples/ipsec-secgw: allow to specify neighbour MAC address
In some cases it is useful to allow user to specify destination
ether address for outgoing packets.
This patch adds such ability by introducing new 'neigh' config
file option.

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Acked-by: Radu Nicolau <radu.nicolau@intel.com>
Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
2019-01-10 16:57:22 +01:00

89 lines
1.9 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2016 Intel Corporation
*/
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#ifndef __PARSER_H
#define __PARSER_H
struct parse_status {
int status;
char parse_msg[256];
};
#define APP_CHECK(exp, st, fmt, ...) \
do { \
if (!(exp)) { \
sprintf((st)->parse_msg, fmt "\n", \
## __VA_ARGS__); \
(st)->status = -1; \
} else \
(st)->status = 0; \
} while (0)
#define APP_CHECK_PRESENCE(val, str, status) \
APP_CHECK(val == 0, status, \
"item \"%s\" already present", str)
#define APP_CHECK_TOKEN_EQUAL(tokens, index, ref, status) \
APP_CHECK(strcmp(tokens[index], ref) == 0, status, \
"unrecognized input \"%s\": expect \"%s\"\n", \
tokens[index], ref)
static inline int
is_str_num(const char *str)
{
uint32_t i;
for (i = 0; i < strlen(str); i++)
if (!isdigit(str[i]))
return -1;
return 0;
}
#define APP_CHECK_TOKEN_IS_NUM(tokens, index, status) \
APP_CHECK(is_str_num(tokens[index]) == 0, status, \
"input \"%s\" is not valid number string", tokens[index])
#define INCREMENT_TOKEN_INDEX(index, max_num, status) \
do { \
APP_CHECK(index + 1 < max_num, status, "reaching the end of " \
"the token array"); \
index++; \
} while (0)
int
parse_ipv4_addr(const char *token, struct in_addr *ipv4, uint32_t *mask);
int
parse_ipv6_addr(const char *token, struct in6_addr *ipv6, uint32_t *mask);
int
parse_range(const char *token, uint16_t *low, uint16_t *high);
void
parse_sp4_tokens(char **tokens, uint32_t n_tokens,
struct parse_status *status);
void
parse_sp6_tokens(char **tokens, uint32_t n_tokens,
struct parse_status *status);
void
parse_sa_tokens(char **tokens, uint32_t n_tokens,
struct parse_status *status);
void
parse_rt_tokens(char **tokens, uint32_t n_tokens,
struct parse_status *status);
int
parse_cfg_file(const char *cfg_filename);
#endif