aboutsummaryrefslogtreecommitdiffstats
path: root/metis/ccnx/forwarder/metis/config/metis_Configuration.c
diff options
context:
space:
mode:
Diffstat (limited to 'metis/ccnx/forwarder/metis/config/metis_Configuration.c')
-rw-r--r--metis/ccnx/forwarder/metis/config/metis_Configuration.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/metis/ccnx/forwarder/metis/config/metis_Configuration.c b/metis/ccnx/forwarder/metis/config/metis_Configuration.c
index 3703c6ef..4a72ab41 100644
--- a/metis/ccnx/forwarder/metis/config/metis_Configuration.c
+++ b/metis/ccnx/forwarder/metis/config/metis_Configuration.c
@@ -47,6 +47,7 @@
#include <ccnx/forwarder/metis/core/metis_Forwarder.h>
#include <ccnx/forwarder/metis/core/metis_System.h>
+#include <ccnx/forwarder/metis/io/metis_AddressPair.h>
#include <ccnx/forwarder/metis/core/metis_ConnectionTable.h>
#include <ccnx/forwarder/metis/core/metis_Connection.h>
@@ -351,14 +352,34 @@ static CCNxControl *
metisConfiguration_ProcessCreateTunnel(MetisConfiguration *config, CCNxControl *control, unsigned ingressId)
{
bool success = false;
+ bool exists = true;
CPIInterfaceIPTunnel *iptun = cpiLinks_CreateIPTunnelFromControlMessage(control);
const char *symbolicName = cpiInterfaceIPTunnel_GetSymbolicName(iptun);
+ const CPIAddress *source;
+ const CPIAddress *destination;
+
if (!metisSymbolicNameTable_Exists(config->symbolicNameTable, symbolicName)) {
- const CPIAddress *source = cpiInterfaceIPTunnel_GetSourceAddress(iptun);
- const CPIAddress *destination = cpiInterfaceIPTunnel_GetDestinationAddress(iptun);
+ source = cpiInterfaceIPTunnel_GetSourceAddress(iptun);
+ destination = cpiInterfaceIPTunnel_GetDestinationAddress(iptun);
+
+ MetisAddressPair *pair = metisAddressPair_Create(source, destination);
+ const MetisConnection *conn =
+ metisConnectionTable_FindByAddressPair(metisForwarder_GetConnectionTable(config->metis), pair);
+
+ metisAddressPair_Release(&pair);
+
+ if(conn == NULL){
+ //the connection does not exists (even without a name)
+ exists = false;
+ }
+ }
+
+ if(!exists){
+ source = cpiInterfaceIPTunnel_GetSourceAddress(iptun);
+ destination = cpiInterfaceIPTunnel_GetDestinationAddress(iptun);
MetisIoOperations *ops = NULL;
switch (cpiInterfaceIPTunnel_GetTunnelType(iptun)) {