diff --git a/inc/MESA_jump_layer.h b/inc/MESA_jump_layer.h index d15578b..d5715fe 100644 --- a/inc/MESA_jump_layer.h +++ b/inc/MESA_jump_layer.h @@ -13,18 +13,45 @@ extern "C" { const char *MESA_jump_layer_get_last_error(void); + /* - The raw_layer_type and expect_layer_type refer to sapp_base.h->enum addr_type_t + CHN : 数据包头部偏移函数. + + 参数: + raw_data: 当前层的头部指针; + raw_layer_type: 当前层的地址类型, 详见: enum addr_type_t ; + expect_layer_type: 期望跳转到的地址类型, 详见: enum addr_type_t ; + + 返回值: + NULL: 无此地址; + NON-NULL: 对应层的头部地址. + + 举例: + 假设当前层为Ethernet, 起始包头地址为this_layer_hdr, 想跳转到IPv6层头部: + struct ip6_hdr *ip6_header; + ip6_header = MESA_net_jump_to_layer(this_layer_hdr, ADDR_TYPE_MAC, ADDR_TYPE_IPV6); */ const void *MESA_jump_layer(const void *raw_data, int raw_layer_type, int expect_layer_type); +/* + MESA_jump_layer_greedy与MESA_jump_layer的区别: + 对于隧道嵌套协议来说, + MESA_jump_layer跳转到第一个expect_layer_type; + MESA_jump_layer_greedy跳转到最内层的expect_layer_type; +*/ const void *MESA_jump_layer_greedy(const void *raw_data, int raw_layer_type, int expect_layer_type); -const char *MESA_jump_layer_ipv4_ntop(const struct ip *ip4_hdr, char *out_buf, int buf_len ); +/* 向前兼容以前的接口名称, 作用同上 */ +const void *MESA_net_jump_to_layer(const void *raw_data, int raw_layer_type, int expect_layer_type); +const void *MESA_net_jump_to_layer_greedy(const void *raw_data, int raw_layer_type, int expect_layer_type); + + + +const char *MESA_jump_layer_ipv4_ntop(const struct ip *ip4_hdr, char *out_buf, int buf_len ); const char *MESA_jump_layer_ipv6_ntop(const struct ip6_hdr *ip6_hdr, char *out_buf, int buf_len); #ifdef __cplusplus } -#endif \ No newline at end of file +#endif diff --git a/src/MESA_jump_layer.cpp b/src/MESA_jump_layer.cpp index ebbf164..04016eb 100644 --- a/src/MESA_jump_layer.cpp +++ b/src/MESA_jump_layer.cpp @@ -1332,6 +1332,11 @@ const void *MESA_jump_layer(const void *raw_data, int raw_layer_type, int expec return ((const char *)raw_data + ret); } +const void *MESA_net_jump_to_layer(const void *raw_data, int raw_layer_type, int expect_layer_type) +{ + return MESA_jump_layer(raw_data, raw_layer_type, expect_layer_type); +} + /* 与MESA_jump_layer()的区别: MESA_jump_layer()从最外层开始, 找到第一个符合条件的层就退出; @@ -1425,6 +1430,11 @@ done: return success_layer; } +const void *MESA_net_jump_to_layer_greedy(const void *raw_data, int raw_layer_type, int expect_layer_type) +{ + return MESA_jump_layer_greedy(raw_data, raw_layer_type, expect_layer_type); +} + /* 模拟tcpdump格式: 192.168.40.137.22 > 192.168.36.40.49429 */ const char *MESA_jump_layer_ipv4_ntop(const struct ip *ip4_hdr, char *out_buf, int buf_len ) {