Adding shutdown option to interface.conf
[lcr.git] / interface.c
index 57d7fe8..cbfed2e 100644 (file)
@@ -1070,6 +1070,13 @@ static int inter_remote(struct interface *interface, char *filename, int line, c
        return(0);
 }
 
+static int inter_shutdown(struct interface *interface, char *filename, int line, char *parameter, char *value)
+{
+       interface->shutdown = 1;
+
+       return(0);
+}
+
 
 /*
  * structure of parameters
@@ -1234,6 +1241,9 @@ struct interface_param interface_param[] = {
        "Sets up an interface that communicates with the remote application.\n"
        "Use \"asterisk\" to use chan_lcr as remote application."},
 
+       {"shutdown", &inter_shutdown, "",
+       "Interface will not be loaded when processing interface.conf"},
+
        {NULL, NULL, NULL, NULL}
 };
 
@@ -1489,6 +1499,17 @@ void relink_interfaces(void)
        /* unlink all mISDNports */
        mISDNport = mISDNport_first;
        while(mISDNport) {
+               if (mISDNport->ifport) {
+                       ifport = mISDNport->ifport;
+#ifdef WITH_GSM_MS
+                       if (ifport->gsm_ms)
+                               gsm_ms_delete(ifport->gsm_ms_name);
+#endif
+#ifdef WITH_GSM_BS
+                       if (ifport->gsm_bs)
+                               gsm_bs_exit(0);
+#endif
+               }
                mISDNport->ifport = NULL;
                mISDNport = mISDNport->next;
        }
@@ -1521,15 +1542,7 @@ void relink_interfaces(void)
        while(mISDNport) {
                if (mISDNport->ifport == NULL) {
                        PDEBUG(DEBUG_ISDN, "Port %d is not used anymore and will be closed\n", mISDNport->portnum);
-                       /* remove all port objects and destroy port */
-#ifdef WITH_GSM_MS
-                       if (ifport->gsm_ms)
-                               gsm_ms_delete(ifport->gsm_ms_name);
-#endif
-#ifdef WITH_GSM_BS
-                       if (ifport->gsm_bs)
-                               gsm_bs_exit(0);
-#endif
+                       /* destroy port */
                        mISDNport_close(mISDNport);
                        goto closeagain;
                }
@@ -1542,7 +1555,11 @@ void relink_interfaces(void)
                ifport = interface->ifport;
                while(ifport) {
                        if (!ifport->mISDNport) {
-                               load_port(ifport);
+                               if (!interface->shutdown) {
+                                       load_port(ifport);
+                               } else {
+                                       ifport->block = 2;
+                               }
                        }
                        ifport = ifport->next;
                }