diff options
| author | Qiuwen Lu <[email protected]> | 2020-06-03 17:43:16 +0800 |
|---|---|---|
| committer | 陆秋文 <[email protected]> | 2020-06-03 17:57:48 +0800 |
| commit | a7387cb848d7069e8dd7f5d0ce5ee905024b37ae (patch) | |
| tree | c972e392c1ba7b7dedc44a325fb5850b82847beb | |
| parent | 7cecf76874695f7f39cfb7c4e0f6bb5152ee1892 (diff) | |
增加输出VlanFlipping中方向标志位、LinkInfo线程号的功能
* 增加VlanFlipping的LinkInfo表中C/I方向的输出;
* 增加输出LinkInfo表中线程号的功能。
| -rw-r--r-- | tunnat/include/tunnat.h | 1 | ||||
| -rw-r--r-- | tunnat/include/tunnel.h | 4 | ||||
| -rw-r--r-- | tunnat/src/core.cc | 3 | ||||
| -rw-r--r-- | tunnat/src/monit.cc | 8 | ||||
| -rw-r--r-- | tunnat/src/tunnel.cc | 17 |
5 files changed, 26 insertions, 7 deletions
diff --git a/tunnat/include/tunnat.h b/tunnat/include/tunnat.h index f2a90db..17a322f 100644 --- a/tunnat/include/tunnat.h +++ b/tunnat/include/tunnat.h @@ -132,6 +132,7 @@ struct TunnatInstance /* VLAN Fliping 映射表 */ bool en_vlan_flipping{false}; uint16_t vlan_fliping_map[ETHER_MAX_VLAN_ID + 1]{0}; + bool vlan_flipping_map_is_c_router[ETHER_MAX_VLAN_ID + 1]{false}; /* MAC Flipping */ bool mac_flipping[ETHER_MAX_VLAN_ID + 1]{false}; diff --git a/tunnat/include/tunnel.h b/tunnat/include/tunnel.h index 69fa17f..1ee796a 100644 --- a/tunnat/include/tunnel.h +++ b/tunnat/include/tunnel.h @@ -212,9 +212,11 @@ private: uint16_t vlan_id_; uint16_t vlan_id_map_; bool mac_flipping_; + bool is_c_router_; bool vlan_id_offload_by_nic_{false}; - static bool flipping_map_lookup(uint16_t le_vlan_id, uint16_t & vlan_id_out, bool & en_mac_flipping); + static bool flipping_map_lookup(uint16_t le_vlan_id, uint16_t & vlan_id_out, + bool & en_mac_flipping, bool & is_c_router); }; class TunInnerEther : public Tunnel diff --git a/tunnat/src/core.cc b/tunnat/src/core.cc index 3765cab..0588f44 100644 --- a/tunnat/src/core.cc +++ b/tunnat/src/core.cc @@ -189,6 +189,9 @@ int tunnat_vlan_flipping_setup(TunnatInstance * instance) instance->mac_flipping[u16_c_router_vlan_id] = en_mac_flipping; instance->mac_flipping[u16_i_router_vlan_id] = en_mac_flipping; + instance->vlan_flipping_map_is_c_router[u16_c_router_vlan_id] = true; + instance->vlan_flipping_map_is_c_router[u16_i_router_vlan_id] = false; + MR_INFO("VLAN-FLIPPING-MAP %u: C-router-vlan-id %u, I-router-vlan-id %u, MAC FLIPPING: %s",i, u16_c_router_vlan_id, u16_i_router_vlan_id, en_mac_flipping ? "true" : "false"); } diff --git a/tunnat/src/monit.cc b/tunnat/src/monit.cc index d379f97..bd886ba 100644 --- a/tunnat/src/monit.cc +++ b/tunnat/src/monit.cc @@ -66,8 +66,12 @@ static cJSON * monit_runtime(TunnatInstance * instance) { for (unsigned int thread_id = 0; thread_id < instance->nr_thread; thread_id++) { + cJSON * th_linkinfo_root = cJSON_CreateObject(); LinkInfoTable * link_info_table = instance->thread_instances[thread_id]->link_info_table; - cJSON_AddItemToArray(j_linkinfo, link_info_table->DumpToJSON()); + + cJSON_AddNumberToObject(th_linkinfo_root, "thread_id", thread_id); + cJSON_AddItemToObject(th_linkinfo_root, "linkinfo", link_info_table->DumpToJSON()); + cJSON_AddItemToArray(j_linkinfo, th_linkinfo_root); } } @@ -128,4 +132,4 @@ void * tunnat_monit_thread(void * arg) } return (void *)nullptr; -}
\ No newline at end of file +} diff --git a/tunnat/src/tunnel.cc b/tunnat/src/tunnel.cc index d85d013..e843631 100644 --- a/tunnat/src/tunnel.cc +++ b/tunnat/src/tunnel.cc @@ -350,7 +350,7 @@ int TunVlanFlipping::PacketParse(const char * pkt, unsigned int pkt_len) } /* 不在VLAN Flipping Map中的VLAN,不认为是隧道的一部分 */ - if (!flipping_map_lookup(vlan_id_, vlan_id_map_, mac_flipping_)) + if (!flipping_map_lookup(vlan_id_, vlan_id_map_, mac_flipping_, this->is_c_router_)) { return RT_ERR; } @@ -403,9 +403,10 @@ int TunVlanFlipping::PacketForwardModify(const char * pkt, unsigned int pkt_len) uint16_t vlan_id = ntohs(vlan_hdr->vlan_tci); uint16_t map_vlan_id = 0; + bool is_c_router{false}; bool mac_flipping = false; - if (!flipping_map_lookup(vlan_id, map_vlan_id, mac_flipping)) + if (!flipping_map_lookup(vlan_id, map_vlan_id, mac_flipping, is_c_router)) { return RT_ERR; } @@ -429,8 +430,9 @@ int TunVlanFlipping::MbufMetaForwardModify(marsio_buff_t * mbuf) uint16_t vlan_id_fliping{0}; bool mac_flipping{false}; + bool is_c_router{false}; - if (!flipping_map_lookup(__mbuf->vlan_tci, vlan_id_fliping, mac_flipping)) + if (!flipping_map_lookup(__mbuf->vlan_tci, vlan_id_fliping, mac_flipping, is_c_router)) { return 0; } @@ -468,7 +470,8 @@ void TunVlanFlipping::MbufMetaConstruct(marsio_buff_t * mbuf) } } -bool TunVlanFlipping::flipping_map_lookup(uint16_t le_vlan_id, uint16_t & vlan_id_out, bool & en_mac_flipping) +bool TunVlanFlipping::flipping_map_lookup(uint16_t le_vlan_id, uint16_t & vlan_id_out, + bool & en_mac_flipping, bool & is_c_router) { auto * instance = TunnatInstance::TunnatInstanceGet(); if (unlikely(le_vlan_id < 1 || le_vlan_id > ETHER_MAX_VLAN_ID)) @@ -500,6 +503,12 @@ cJSON * TunVlanFlipping::ToJSON() const cJSON_AddNumberToObject(j_object, "vlan_id", vlan_id_); cJSON_AddNumberToObject(j_object, "vlan_id_map", vlan_id_map_); + /* This vlan is from c router, the vlan map must be i router, + * so, C->I's dir = 0, I->C's dir = 1 */ + unsigned int dir = is_c_router_ ? 0 : 1; + cJSON_AddNumberToObject(j_object, "dir", dir); + + /* offload */ unsigned int offload_by_nics_in_number = vlan_id_offload_by_nic_ ? 1 : 0; cJSON_AddNumberToObject(j_object, "offload_by_nics", offload_by_nics_in_number); |
