summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQiuwen Lu <[email protected]>2020-06-03 17:43:16 +0800
committer陆秋文 <[email protected]>2020-06-03 17:57:48 +0800
commita7387cb848d7069e8dd7f5d0ce5ee905024b37ae (patch)
treec972e392c1ba7b7dedc44a325fb5850b82847beb
parent7cecf76874695f7f39cfb7c4e0f6bb5152ee1892 (diff)
增加输出VlanFlipping中方向标志位、LinkInfo线程号的功能
* 增加VlanFlipping的LinkInfo表中C/I方向的输出; * 增加输出LinkInfo表中线程号的功能。
-rw-r--r--tunnat/include/tunnat.h1
-rw-r--r--tunnat/include/tunnel.h4
-rw-r--r--tunnat/src/core.cc3
-rw-r--r--tunnat/src/monit.cc8
-rw-r--r--tunnat/src/tunnel.cc17
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);