diff options
| author | luwenpeng <[email protected]> | 2024-08-21 11:55:06 +0800 |
|---|---|---|
| committer | luwenpeng <[email protected]> | 2024-08-21 18:18:13 +0800 |
| commit | a0fb57e84314ea019a0cf88dcbc430998e8b40c2 (patch) | |
| tree | c7552a7bb7bc4c159a3357f71b9e9ae6553057d3 /include | |
| parent | 1aece166cd091d071ce45b4bbce527fb115cc741 (diff) | |
refactor: update packet get layer/tunnel API
Diffstat (limited to 'include')
| -rw-r--r-- | include/stellar/layer.h | 36 | ||||
| -rw-r--r-- | include/stellar/tunnel.h | 19 |
2 files changed, 18 insertions, 37 deletions
diff --git a/include/stellar/layer.h b/include/stellar/layer.h index 6250481..9cf7e4a 100644 --- a/include/stellar/layer.h +++ b/include/stellar/layer.h @@ -70,26 +70,24 @@ struct layer }; int packet_get_layer_count(const struct packet *pkt); -// return 0: success -// return -1: failed -int packet_get_layer_by_idx(const struct packet *pkt, int idx, struct layer *out); +const struct layer *packet_get_layer_by_idx(const struct packet *pkt, int idx); -#define PACKET_FOREACH_LAYER_INORDER(pkt, layer) \ - for (int i = 0; i < packet_get_layer_count(pkt) && packet_get_layer_by_idx(pkt, i, &layer) == 0; i++) - -#define PACKET_FOREACH_LAYER_REVERSE(pkt, layer) \ - for (int i = packet_get_layer_count(pkt) - 1; i >= 0 && packet_get_layer_by_idx(pkt, i, &layer) == 0; i--) - -#define PACKET_GETALL_LAYERS(pkt, layers) \ - ({ \ - memset(layers, 0, sizeof(layers)); \ - int size = sizeof(layers) / sizeof(layers[0]); \ - int count = packet_get_layer_count(pkt); \ - int num = count > size ? size : count; \ - for (int i = 0; i < num && packet_get_layer_by_idx(pkt, i, &layers[i]) == 0; i++) \ - /* void */; \ - num; \ - }) +// // example: foreach layer in packet (inorder) +// int count = packet_get_layer_count(pkt); +// for (int i = 0; i < count; i++) +// { +// const struct layer *layer = packet_get_layer_by_idx(pkt, i); +// // do something with layer +// } +// +// +// // example: foreach layer in packet (reverse) +// int count = packet_get_layer_count(pkt); +// for (int i = count - 1; i >= 0; i--) +// { +// const struct layer *layer = packet_get_layer_by_idx(pkt, i); +// // do something with layer +// } #ifdef __cplusplus } diff --git a/include/stellar/tunnel.h b/include/stellar/tunnel.h index 07d2339..17d1d75 100644 --- a/include/stellar/tunnel.h +++ b/include/stellar/tunnel.h @@ -33,7 +33,7 @@ struct tunnel enum tunnel_type type; int layer_count; - struct layer layers[MAX_LAYERS_PER_TUNNEL]; + const struct layer *layers[MAX_LAYERS_PER_TUNNEL]; }; int packet_get_tunnel_count(const struct packet *pkt); @@ -41,23 +41,6 @@ int packet_get_tunnel_count(const struct packet *pkt); // return -1: failed int packet_get_tunnel_by_idx(const struct packet *pkt, int idx, struct tunnel *out); -#define PACKET_FOREACH_TUNNEL_INORDER(pkt, tunnel) \ - for (int i = 0; i < packet_get_tunnel_count(pkt) && packet_get_tunnel_by_idx(pkt, i, &tunnel) == 0; i++) - -#define PACKET_FOREACH_TUNNEL_REVERSE(pkt, tunnel) \ - for (int i = packet_get_tunnel_count(pkt) - 1; i >= 0 && packet_get_tunnel_by_idx(pkt, i, &tunnel) == 0; i--) - -#define PACKET_GETALL_TUNNELS(pkt, tunnels) \ - ({ \ - memset(tunnels, 0, sizeof(tunnels)); \ - int size = sizeof(tunnels) / sizeof(tunnels[0]); \ - int count = packet_get_tunnel_count(pkt); \ - int num = count > size ? size : count; \ - for (int i = 0; i < num && packet_get_tunnel_by_idx(pkt, i, &tunnels[i]) == 0; i++) \ - /* void */; \ - num; \ - }) - #ifdef __cplusplus } #endif |
