diff options
| author | lijia <[email protected]> | 2021-01-08 10:04:38 +0800 |
|---|---|---|
| committer | lijia <[email protected]> | 2021-01-08 10:04:38 +0800 |
| commit | 524eb4e96c4a95ac8f9ff9a36e79c0be0303ac49 (patch) | |
| tree | 8139b17d4fb43ea065b8a9c3975645daeb578516 /src/common | |
| parent | 5ec887e24946fdde6333de9b96283da4f98af09e (diff) | |
修复vxlan层显示地址类型为unknown的bug.
Diffstat (limited to 'src/common')
| -rw-r--r-- | src/common/stream_addr_inet.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/common/stream_addr_inet.c b/src/common/stream_addr_inet.c index 13c3c65..858537b 100644 --- a/src/common/stream_addr_inet.c +++ b/src/common/stream_addr_inet.c @@ -42,6 +42,7 @@ static int __addr_socks_n2p_fun(const struct layer_addr *paddr, char *buf, int b static int __addr_openvpn_n2p_fun(const struct layer_addr *paddr, char *buf, int buf_len); static int __addr_mac_in_mac_n2p_fun(const struct layer_addr *paddr, char *buf, int buf_len); static int __addr_gtp_n2p_fun(const struct layer_addr *paddr, char *buf, int buf_len); +static int __addr_vxlan_n2p_fun(const struct layer_addr *paddr, char *buf, int buf_len); static int __addr_ipv4_pton(char *addr_str, addr_continuous_bin_t *addr_bin_val); @@ -66,6 +67,7 @@ static int __addr_openvpn_pton(char *addr_str, addr_continuous_bin_t *addr_bin_v static int __addr_mac_in_mac_pton(char *addr_str, addr_continuous_bin_t *addr_bin_val); static const char *__layer_addr_ntop (const struct streaminfo *stream, int thread_index); static int __addr_gtp_pton(char *addr_str, addr_continuous_bin_t *addr_bin_val); +static int __addr_vxlan_pton(char *addr_str, addr_continuous_bin_t *addr_bin_val); @@ -102,6 +104,7 @@ static const addr_convert_t G_ADDR_CONVERT_HANDLE[] = {ADDR_TYPE_IPV4, STREAM_TYPE_OPENVPN,"ADDR_TYPE_OPENVPN", "OpenVPN", "OpenVPN<",__addr_openvpn_n2p_fun,__addr_openvpn_pton, "openvpn"},/* 2017-02-10 lijia add */ {ADDR_TYPE_IPV6, STREAM_TYPE_OPENVPN,"ADDR_TYPE_OPENVPN", "OpenVPN", "OpenVPN<",__addr_openvpn_n2p_fun,__addr_openvpn_pton, "openvpn"},/* 2017-02-10 lijia add */ {ADDR_TYPE_GPRS_TUNNEL, STREAM_TYPE_NON,"ADDR_TYPE_GTP", "GTP", "GTP<",__addr_gtp_n2p_fun,__addr_gtp_pton, "gtp"}, /* */ + {ADDR_TYPE_VXLAN, STREAM_TYPE_NON,"ADDR_TYPE_VXLAN", "VXLAN", "VXLAN<", __addr_vxlan_n2p_fun,__addr_vxlan_pton, "vxlan"}, {__ADDR_TYPE_MAX, STREAM_TYPE_NON,NULL, NULL, NULL, NULL, NULL} /* EOF */ }; @@ -793,6 +796,46 @@ static int __addr_gtp_pton(char *addr_str, addr_continuous_bin_t *addr_bin_val) return 0; } +/* vxlan��ַ��ʽ: vlan_id-dir-link_id-link_type*/ +static int __addr_vxlan_pton(char *addr_str, addr_continuous_bin_t *addr_bin_val) +{ + char *vxlan_struct_item; + const char *delim = "-"; + char *save_ptr; + struct layer_addr_vxlan *vxlan_bin_addr = (struct layer_addr_vxlan *)addr_bin_val->addr_value; + addr_bin_val->stream.addr.addrtype = ADDR_TYPE_VXLAN; + addr_bin_val->stream.type = STREAM_TYPE_NON; + addr_bin_val->stream.addr.addrlen = sizeof(struct layer_addr_vxlan); + addr_bin_val->stream.addr.paddr = addr_bin_val->addr_value; + + vxlan_struct_item = strtok_r(addr_str, delim, &save_ptr); + if(NULL == vxlan_struct_item){ + return -1; + } + vxlan_bin_addr->vlan_id = atoi(vxlan_struct_item); + + vxlan_struct_item = strtok_r(NULL, delim, &save_ptr); + if(NULL == vxlan_struct_item){ + return -1; + } + vxlan_bin_addr->dir = atoi(vxlan_struct_item); + + + vxlan_struct_item = strtok_r(NULL, delim, &save_ptr); + if(NULL == vxlan_struct_item){ + return -1; + } + vxlan_bin_addr->link_id = atoi(vxlan_struct_item); + + vxlan_struct_item = strtok_r(NULL, delim, &save_ptr); + if(NULL == vxlan_struct_item){ + return -1; + } + vxlan_bin_addr->link_type = atoi(vxlan_struct_item); + + + return 0; +} static int __addr_sockv4_pton(char *addr_str, addr_continuous_bin_t *addr_bin_val) { char *save_ptr; @@ -1603,6 +1646,19 @@ static int __addr_openvpn_n2p_fun(const struct layer_addr *paddr, char *buf, int return strlen(buf) + 1; } + +static int __addr_vxlan_n2p_fun(const struct layer_addr *paddr, char *buf, int buf_len) +{ + const struct layer_addr_vxlan *vxlan_addr = paddr->vxlan; + int addr_len; + + /* ��vxlan�ṹ��˳������ */ + snprintf(buf, buf_len, "%u-%u-%u-%u", vxlan_addr->vlan_id, vxlan_addr->dir, vxlan_addr->link_id, vxlan_addr->link_type); + + addr_len = strlen(buf) + 1; //add EOF + + return addr_len; +} static const char *addr_and_stream_type_to_prefix(UCHAR stream_type, enum addr_type_t layer_type) { int i; |
