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
stellar-stellar/include/stellar/tunnel.h

47 lines
1.1 KiB
C
Raw Normal View History

#pragma once
2024-06-17 11:41:21 +08:00
#ifdef __cplusplus
extern "C"
{
#endif
#include "layer.h"
enum tunnel_type
{
2024-06-19 14:43:32 +08:00
TUNNEL_IPV4 = 1, // contain layers: IPv4, (next inner layer must be IPv4 / IPv6)
TUNNEL_IPV6 = 2, // contain layers: IPv6, (next inner layer must be IPv4 / IPv6)
TUNNEL_GRE = 3, // contain layers: IPv4 + GRE
// contain layers: IPv6 + GRE
TUNNEL_GTP = 4, // contain layers: IPv4 + UDP + GTP
// contain layers: IPv6 + UDP + GTP
TUNNEL_VXLAN = 5, // contain layers: IPv4 + UDP + VXLAN
// contain layers: IPv6 + UDP + VXLAN
TUNNEL_L2TP = 6, // contain layers: IPv4 + UDP + L2TP
// contain layers: IPv6 + UDP + L2TP
TUNNEL_TEREDO = 7, // contain layers: IPv4 + UDP, (next inner layer must be IPv6)
2024-06-17 11:41:21 +08:00
};
#define MAX_LAYERS_PER_TUNNEL 3
struct tunnel
{
enum tunnel_type type;
2024-06-19 14:43:32 +08:00
int layer_count;
const struct layer *layers[MAX_LAYERS_PER_TUNNEL];
2024-06-17 11:41:21 +08:00
};
int packet_get_tunnel_count(const struct packet *pkt);
// return 0: success 
// return -1: failed
2024-06-19 14:43:32 +08:00
int packet_get_tunnel_by_idx(const struct packet *pkt, int idx, struct tunnel *out);
2024-06-17 11:41:21 +08:00
#ifdef __cplusplus
}
#endif