This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
tango-tsg-service-chaining-…/common/include/addr_tuple4.h
luwenpeng 8a3b3eb049 TSG-13383 解析RAW_PACKET
* 增加 ETH_VLAN_VLAN_IP4_IP4_UDP 的测试用例
    * 增加 ETH_IP6_IP4_TCP_SSH 的测试用例
    * 增加 ETH_IP4_IP6_TCP 的测试用例
    * 增加 ETH_IP6_IP6_UDP 的测试用例
    * 增加 ETH_MPLS_IP4_TCP 的测试用例
    * 增加 ETH_MPLS_MPLS_IP4_TCP 的测试用例
    * 增加 ETH_VLAN_PPPOE_IP4_TCP 的测试用例
    * 增加 ETH_IP6_UDP_GTP_IP6_TCP_TLS 的测试用例
    * 增加 ETH_IP6_UDP_GTP_IP4_TCP_TLS 的测试用例
    * 增加 ETH_IP4_UDP_VXLAN_ETH_IP4_UDP_DNS 的测试用例
    * 增加 ETH_MPLS_MPLS_PWETHCW_ETH_ARP 的测试用例
    * 增加 ETH_MPLS_MPLS_PWETHCW_ETH_ARP 的测试用例
2023-01-31 15:36:16 +08:00

67 lines
2.2 KiB
C

#ifndef _ADDR_TUPLE4_H
#define _ADDR_TUPLE4_H
#ifdef __cpluscplus
extern "C"
{
#endif
#include <netinet/in.h>
enum addr_tuple4_type
{
ADDR_TUPLE4_TYPE_V4,
ADDR_TUPLE4_TYPE_V6,
};
struct addr_v4
{
struct in_addr src_addr; /* network order */
struct in_addr dst_addr; /* network order */
};
struct addr_v6
{
struct in6_addr src_addr; /* network order */
struct in6_addr dst_addr; /* network order */
};
struct addr_tuple4
{
enum addr_tuple4_type addr_type;
in_port_t src_port; /* network order */
in_port_t dst_port; /* network order */
union
{
struct addr_v4 addr_v4;
struct addr_v6 addr_v6;
};
};
#define INIT_ADDR_V4(name, src_addr_str, src_port_num, dst_addr_str, dst_port_num) \
struct addr_tuple4 name; \
memset(&name, 0, sizeof(name)); \
(name).addr_type = ADDR_TUPLE4_TYPE_V4; \
(name).src_port = htons((src_port_num)); \
(name).dst_port = htons((dst_port_num)); \
inet_pton(AF_INET, (src_addr_str), &(name).addr_v4.src_addr); \
inet_pton(AF_INET, (dst_addr_str), &(name).addr_v4.dst_addr);
#define INIT_ADDR_V6(name, src_addr_str, src_port_num, dst_addr_str, dst_port_num) \
struct addr_tuple4 name; \
memset(&name, 0, sizeof(name)); \
(name).addr_type = ADDR_TUPLE4_TYPE_V6; \
(name).src_port = htons((src_port_num)); \
(name).dst_port = htons((dst_port_num)); \
inet_pton(AF_INET6, (src_addr_str), &(name).addr_v6.src_addr); \
inet_pton(AF_INET6, (dst_addr_str), &(name).addr_v6.dst_addr);
char *addr_tuple4_to_str(const struct addr_tuple4 *addr);
void addr_tuple4_reverse(const struct addr_tuple4 *orin, struct addr_tuple4 *out);
#ifdef __cpluscplus
}
#endif
#endif