]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/install+setup/setup/networking.c
Setup weiter ausgebaut.
[people/pmueller/ipfire-2.x.git] / src / install+setup / setup / networking.c
index a580a3d0eb56500a5fc5cfc11981e38c7882e842..6a2bb128fc3b8f43115456f91d60fbdbe838fb03 100644 (file)
@@ -6,8 +6,6 @@
  * (c) Lawrence Manning, 2001
  * The big one: networking. 
  * 
- * $Id: networking.c,v 1.5.2.6 2006/02/06 22:00:13 gespinasse Exp $
- * 
  */
  
 #include "setup.h"
@@ -30,38 +28,20 @@ extern int automode;
 #define HAS_BLUE (configtype == 3 || configtype == 4)
 #define RED_IS_NOT_ETH (configtype == 0)
 
-//#define HAS_ORANGE (configtype == 1 || configtype == 3 || configtype == 5 || configtype == 7)
-//#define HAS_RED (configtype == 2 || configtype == 3 || configtype == 6 || configtype == 7)
-//#define HAS_BLUE (configtype == 4 || configtype == 5 || configtype == 6 || configtype == 7)
-//#define RED_IS_NOT_ETH (configtype == 0 || configtype == 1 || configtype == 4 || configtype == 5)
-
 extern struct nic nics[];
 extern struct knic knics[];
 
-/* char *configtypenames[] = { 
-       "GREEN (RED is modem/ISDN)", 
-       "GREEN + ORANGE (RED is modem/ISDN)", 
-       "GREEN + RED",
-       "GREEN + ORANGE + RED", 
-       "GREEN + BLUE (RED is modem/ISDN) ",
-       "GREEN + ORANGE + BLUE (RED is modem/ISDN)",
-       "GREEN + BLUE + RED",
-       "GREEN + ORANGE + BLUE + RED",
-       NULL };
-*/
-char *configtypenames[] = { 
-       "GREEN",
+char *configtypenames[] = {
        "GREEN + RED",
        "GREEN + RED + ORANGE",
        "GREEN + RED + BLUE",
        "GREEN + RED + ORANGE + BLUE",
        NULL };
 int configtypecards[] = {
-       1,      // "GREEN",
        2,      // "GREEN + RED",
        3,      // "GREEN + RED + ORANGE",
        3,      // "GREEN + RED + BLUE",
-       4       // "GREEN + RED + ORANGE + BLUE",
+       4         // "GREEN + RED + ORANGE + BLUE",
 };
 
 
@@ -85,12 +65,8 @@ int handlenetworking(void)
        
        netaddresschange = 0;
 
-       fprintf(flog,"Enter HandleNetworking\n"); // #### Debug ####
-
        found = scan_network_cards();
-       fprintf(flog,"found %d cards\n",found); // #### Debug ####
        found = init_knics();
-       fprintf(flog,"found %d kcards\n",found); // #### Debug ####
 
        done = 0;
        while (!done)
@@ -134,6 +110,9 @@ int handlenetworking(void)
                {
                        runcommandwithstatus("/etc/rc.d/init.d/network stop",
                                ctr[TR_PUSHING_NETWORK_DOWN]);
+
+                       rename_nics();
+
                        runcommandwithstatus("/etc/rc.d/init.d/network start",
                                ctr[TR_PULLING_NETWORK_UP]);
                }
@@ -155,20 +134,34 @@ int oktoleave(char *errormessage)
                return 0;
        }       
 
-       strcpy(temp, "0"); findkey(kv, "CONFIG_TYPE", temp); configtype = atol(temp);
-       if (configtype < 1 || configtype > 4) configtype = 0;
+       strcpy(temp, "1"); findkey(kv, "CONFIG_TYPE", temp); configtype = atol(temp);
+       if (configtype < 1 || configtype > 4) configtype = 1;
 
-       if (HAS_BLUE)
+       if (HAS_GREEN)
        {
-               strcpy(temp, ""); findkey(kv, "BLUE_DEV", temp);
+               strcpy(temp, ""); findkey(kv, "GREEN_DEV", temp);
                if (!(strlen(temp)))
                {
-                       strcpy(errormessage, ctr[TR_NO_BLUE_INTERFACE]);
+                       strcpy(errormessage, ctr[TR_NO_GREEN_INTERFACE]);
                        goto EXIT;
                }
-               if (!(interfacecheck(kv, "BLUE")))
+               if (!(interfacecheck(kv, "GREEN")))
                {
-                       strcpy(errormessage, ctr[TR_MISSING_BLUE_IP]);
+                       strcpy(errormessage, ctr[TR_MISSING_GREEN_IP]);
+                       goto EXIT;
+               }
+       }
+       if (HAS_RED)
+       {
+               strcpy(temp, ""); findkey(kv, "RED_DEV", temp);
+               if (!(strlen(temp)))
+               {
+                       strcpy(errormessage, ctr[TR_NO_RED_INTERFACE]);
+                       goto EXIT;
+               }
+               if (!(interfacecheck(kv, "RED")))
+               {
+                       strcpy(errormessage, ctr[TR_MISSING_RED_IP]);
                        goto EXIT;
                }
        }
@@ -186,17 +179,32 @@ int oktoleave(char *errormessage)
                        goto EXIT;
                }
        }
-       if (HAS_RED)
+       if (HAS_BLUE)
        {
-               strcpy(temp, ""); findkey(kv, "RED_DEV", temp);
+               strcpy(temp, ""); findkey(kv, "BLUE_DEV", temp);
                if (!(strlen(temp)))
                {
-                       strcpy(errormessage, ctr[TR_NO_RED_INTERFACE]);
+                       strcpy(errormessage, ctr[TR_NO_BLUE_INTERFACE]);
                        goto EXIT;
                }
-               if (!(interfacecheck(kv, "RED")))
+               if (!(interfacecheck(kv, "BLUE")))
                {
-                       strcpy(errormessage, ctr[TR_MISSING_RED_IP]);
+                       strcpy(errormessage, ctr[TR_MISSING_BLUE_IP]);
+                       goto EXIT;
+               }
+       }
+       if (configtype == 0)
+       {
+               strcpy(temp, ""); findkey(kv, "DNS1", temp);
+               if (!(strlen(temp)))
+               {
+                       strcpy(errormessage, ctr[TR_MISSING_DNS]);
+                       goto EXIT;
+               }
+               strcpy(temp, ""); findkey(kv, "DEFAULT_GATEWAY", temp);
+               if (!(strlen(temp)))
+               {
+                       strcpy(errormessage, ctr[TR_MISSING_DEFAULT]);
                        goto EXIT;
                }
        }
@@ -222,7 +230,7 @@ int firstmenu(void)
        static int choice = 0;
        struct keyvalue *kv = initkeyvalues();
        char message[1000];
-       char temp[STRING_SIZE];
+       char temp[STRING_SIZE] = "1";
        int x;
        int result;
        char networkrestart[STRING_SIZE] = "";
@@ -237,8 +245,10 @@ int firstmenu(void)
        if (netaddresschange) 
                strcpy(networkrestart, ctr[TR_RESTART_REQUIRED]);
 
-       strcpy(temp, ""); findkey(kv, "CONFIG_TYPE", temp); x = atol(temp);
-       if (x < 1 || x > 4) x = 0;
+       strcpy(temp, ""); findkey(kv, "CONFIG_TYPE", temp); 
+       x = atol(temp);
+       x--;
+       if (x < 0 || x > 4) x = 0;
        /* Format heading bit. */
        snprintf(message, 1000, ctr[TR_CURRENT_CONFIG], configtypenames[x],
                networkrestart);
@@ -257,12 +267,10 @@ int firstmenu(void)
 int configtypemenu(void)
 {
        struct keyvalue *kv = initkeyvalues();
-       char temp[STRING_SIZE] = "0";
+       char temp[STRING_SIZE] = "1";
        char message[1000];
        int choise, found;
-       int rc;
-
-       fprintf(flog,"Enter ConfigMenu\n");
+       int rc, configtype;
 
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
@@ -272,9 +280,9 @@ int configtypemenu(void)
        }
 
        found = scan_network_cards();
-       fprintf(flog,"found %d Card\'s\n", found ); // #### Debug ####
        
        findkey(kv, "CONFIG_TYPE", temp); choise = atol(temp);
+       choise--;
 
        do
        {
@@ -282,7 +290,7 @@ int configtypemenu(void)
                rc = newtWinMenu(ctr[TR_NETWORK_CONFIGURATION_TYPE], message, 50, 5, 5,
                        6, configtypenames, &choise, ctr[TR_OK], ctr[TR_CANCEL], NULL);
                if ( configtypecards[choise] > found ) {
-                       sprintf(message, "(TR) Nicht genuegend Netzwerkkarten fuer diese Auswahl gefunden.\n\nBenoetigt: %d\nGefunden: %d\n", configtypecards[choise], found);
+                       sprintf(message, ctr[TR_NOT_ENOUGH_INTERFACES] , configtypecards[choise], found);
                        errorbox(message);
                }
        }
@@ -290,13 +298,16 @@ int configtypemenu(void)
 
        if (rc == 0 || rc == 1)
        {
-//     if (automode != 0) runcommandwithstatus("/etc/rc.d/init.d/network stop red blue orange", ctr[TR_PUSHING_NON_LOCAL_NETWORK_DOWN]);
-
+               choise++;
                sprintf(temp, "%d", choise);
                replacekeyvalue(kv, "CONFIG_TYPE", temp);
-               clear_card_entry(_RED_CARD_);
-               clear_card_entry(_ORANGE_CARD_);
-               clear_card_entry(_BLUE_CARD_);
+               configtype = atol(temp);
+               if (!HAS_RED)
+                       clear_card_entry(_RED_CARD_);
+               if (!HAS_ORANGE)
+                       clear_card_entry(_ORANGE_CARD_);
+               if (!HAS_BLUE)
+                       clear_card_entry(_BLUE_CARD_);
 
                writekeyvalues(kv, CONFIG_ROOT "/ethernet/settings");
                netaddresschange = 1;
@@ -306,19 +317,15 @@ int configtypemenu(void)
        return 0;
 }
 
-
-
 /* Driver menu.  Choose drivers.. */
 int drivermenu(void)
 {
        struct keyvalue *kv = initkeyvalues();
        char message[STRING_SIZE];
-       char temp[STRING_SIZE];
+       char temp[STRING_SIZE] = "1";
 
        int configtype;
-       int i, rc, kcount = 0, neednics; //i = 0, count = 0,
-       
-       fprintf(flog,"Enter drivermenu\n"); // #### Debug ####
+       int i, rc, kcount = 0, neednics;
 
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
@@ -327,27 +334,14 @@ int drivermenu(void)
                return 0;
        }
 
-       strcpy(temp, "0"); findkey(kv, "CONFIG_TYPE", temp);
+       findkey(kv, "CONFIG_TYPE", temp);
        configtype = atol(temp);
        
        strcpy(message, ctr[TR_CONFIGURE_NETWORK_DRIVERS]);
 
-       kcount = 0;     // counter to find knowing nics.
-       neednics = 0;   // counter to use needing nics.
+       kcount = 0;
+       neednics = 0;
        if (HAS_GREEN) {
-/*             strcpy(temp, ""); findkey(kv, "GREEN_MACADDR", temp);
-               if (strlen(temp)) {
-                       strcpy(knics[_GREEN_CARD_].macaddr, temp);
-                       strcpy(knics[_GREEN_CARD_].colour, "GREEN");
-                       findkey(kv, "GREEN_DESCRIPTION", temp);
-                       strcpy(knics[_GREEN_CARD_].description, temp);
-                       findkey(kv, "GREEN_DRIVER", temp);
-                       strcpy(knics[_GREEN_CARD_].driver, temp);
-                       kcount++;
-               } else {
-                       strcpy(knics[_GREEN_CARD_].description, ctr[TR_UNSET]);
-               }
-*/
                sprintf(temp, "GREEN:  %s\n", knics[_GREEN_CARD_].description);
                strcat(message, temp);
                if (strlen(knics[_GREEN_CARD_].macaddr) ) {
@@ -357,19 +351,6 @@ int drivermenu(void)
                neednics++;
        }
        if (HAS_RED) {
-/*             strcpy(temp, ""); findkey(kv, "RED_MACADDR", temp);
-               if (strlen(temp)) {
-                       strcpy(knics[_RED_CARD_].macaddr, temp);
-                       strcpy(knics[_RED_CARD_].colour, "RED");
-                       findkey(kv, "RED_DESCRIPTION", temp);
-                       strcpy(knics[_RED_CARD_].description, temp);
-                       findkey(kv, "RED_DRIVER", temp);
-                       strcpy(knics[_RED_CARD_].driver, temp);
-                       kcount++;
-               } else {
-                       strcpy(knics[_RED_CARD_].description, ctr[TR_UNSET]);
-               }
-*/
                sprintf(temp, "RED:    %s\n", knics[_RED_CARD_].description);
                strcat(message, temp);
                if (strlen(knics[_RED_CARD_].macaddr) ) {
@@ -379,19 +360,6 @@ int drivermenu(void)
                neednics++;
        }
        if (HAS_ORANGE) {
-/*             strcpy(temp, ""); findkey(kv, "ORANGE_MACADDR", temp);
-               if (strlen(temp)) {
-                       strcpy(knics[_ORANGE_CARD_].macaddr, temp);
-                       strcpy(knics[_ORANGE_CARD_].colour, "ORANGE");
-                       findkey(kv, "ORANGE_DESCRIPTION", temp );
-                       strcpy(knics[_ORANGE_CARD_].description, temp );
-                       findkey(kv, "ORANGE_DRIVER", temp);
-                       strcpy(knics[_ORANGE_CARD_].driver, temp);
-                       kcount++;
-               } else {
-                       strcpy(knics[_ORANGE_CARD_].description, ctr[TR_UNSET]);
-               }
-*/
                sprintf(temp, "ORANGE: %s\n", knics[_ORANGE_CARD_].description);
                strcat(message, temp);
                if ( strlen(knics[_ORANGE_CARD_].macaddr) ) {
@@ -401,19 +369,6 @@ int drivermenu(void)
                neednics++;
        }
        if (HAS_BLUE) {
-/*             strcpy(temp, ""); findkey(kv, "BLUE_MACADDR", temp);
-               if (strlen(temp)) {
-                       strcpy(knics[_BLUE_CARD_].macaddr, temp);
-                       strcpy(knics[_BLUE_CARD_].colour, "BLUE");
-                       findkey(kv, "BLUE_DESCRIPTION", temp );
-                       strcpy(knics[_BLUE_CARD_].description, temp);
-                       findkey(kv, "BLUE_DRIVER", temp);
-                       strcpy(knics[_BLUE_CARD_].driver, temp);
-                       kcount++;
-               } else {
-                       strcpy(knics[_BLUE_CARD_].description, ctr[TR_UNSET]);
-               }
-*/
                sprintf(temp, "BLUE:   %s\n", knics[_BLUE_CARD_].description);
                strcat(message, temp);
                if (strlen(knics[_BLUE_CARD_].macaddr)) {
@@ -423,22 +378,20 @@ int drivermenu(void)
                neednics++;
        }
 
-       for ( i=0 ; i<4;i++) if (strcmp(knics[i].macaddr, "")) kcount++;
-       fprintf(flog,"found %d knowing Card\'s\n", kcount); // #### DEBUG ####
+       for ( i=0 ; i<4; i++)
+               if (strcmp(knics[i].macaddr, ""))
+                       kcount++;
 
-       if (neednics = kcount) {
+       if (neednics = kcount)
+       {
                strcat(message, ctr[TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS]);
                rc = newtWinChoice(ctr[TR_DRIVERS_AND_CARD_ASSIGNMENTS], ctr[TR_OK],
                ctr[TR_CANCEL], message);
                if (rc == 0 || rc == 1)
                {
-                       /* Shit, got to do something.. */
                        changedrivers();
                }
        } else {
-               strcat(message, "\nEs wurden noch nicht alle Netzwerkkarten konfiguriert.\n");
-               newtWinMessage(ctr[TR_DRIVERS_AND_CARD_ASSIGNMENTS], ctr[TR_OK], message);
-               /* Shit, got to do something.. */
                changedrivers();
        }
        freekeyvalues(kv);
@@ -468,14 +421,12 @@ int changedrivers(void)
                errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
                return 0;
        }
-       fprintf(flog,"stop network on red, blue and orange\n"); // #### Debug ####
-       runcommandwithstatus("/etc/rc.d/init.d/network stop red blue orange",
-               ctr[TR_PUSHING_NON_LOCAL_NETWORK_DOWN]);
+       if (automode == 0)
+               runcommandwithstatus("/etc/rc.d/init.d/network stop red blue orange",
+                       ctr[TR_PUSHING_NON_LOCAL_NETWORK_DOWN]);
 
        findkey(kv, "CONFIG_TYPE", temp); configtype = atol(temp);
-       if (configtype == 0)
-               { green = 1; }
-       else if (configtype == 1)
+       if (configtype == 1)
                { green = 1; red = 1; }
        else if (configtype == 2)
                { green = 1; red = 1; orange = 1; }
@@ -483,19 +434,11 @@ int changedrivers(void)
                { green = 1; red = 1; blue = 1; }
        else if (configtype == 4)
                { green = 1; red=1; orange=1; blue = 1; }
-//     else if (configtype == 5)
-//             { green = 1; blue = 1; orange = 1; }
-//     else if (configtype == 6)
-//             { green = 1; red = 1; blue = 1; }
-//     else if (configtype == 7)
-//             { green = 1; red = 1; blue = 1; orange = 1; }
-
-       fprintf(flog,"found: g=%d r=%d o=%d b=%d\n",green, red, orange, blue); // #### Debug ####
 
        do
        {
                count = 0;
-               strcpy(message, "(TR) Bitte wählen Sie das Interface aus das geaendert werden soll.\n\n");
+               strcpy(message, ctr[TR_INTERFACE_CHANGE]);
 
                if (green) {
                        strcpy(MenuInhalt[count], "GREEN");
@@ -514,7 +457,6 @@ int changedrivers(void)
                        strcpy(MenuInhalt[count], "RED");
                        pMenuInhalt[count] = MenuInhalt[count];
                        NicEntry[_RED_CARD_] = count;
-//                     fprintf(flog,"found: %s as entry %d\n", MenuInhalt[count], NicEntry[count]); // #### Debug ####
                        sprintf(temp, "RED:    %s\n", knics[_RED_CARD_].description);
                        strcat(message, temp);
                        if ( strlen(knics[_RED_CARD_].macaddr) ) {
@@ -528,7 +470,6 @@ int changedrivers(void)
                        strcpy(MenuInhalt[count], "ORANGE");
                        pMenuInhalt[count] = MenuInhalt[count];
                        NicEntry[_ORANGE_CARD_] = count;
-//                     fprintf(flog,"found: %s as entry %d\n", MenuInhalt[count], NicEntry[count]); // #### Debug ####
                        sprintf(temp, "ORANGE: %s\n", knics[_ORANGE_CARD_].description);
                        strcat(message, temp);
                        if ( strlen(knics[_ORANGE_CARD_].macaddr) ) {
@@ -542,7 +483,6 @@ int changedrivers(void)
                        strcpy(MenuInhalt[count], "BLUE");
                        pMenuInhalt[count] = MenuInhalt[count];
                        NicEntry[_BLUE_CARD_] = count;
-//                     fprintf(flog,"found: %s as entry %d\n", MenuInhalt[count], NicEntry[count]); // #### Debug ####
                        sprintf(temp, "BLUE:   %s\n", knics[_BLUE_CARD_].description);
                        strcat(message, temp);
                        if ( strlen(knics[_BLUE_CARD_].macaddr) ) {
@@ -553,29 +493,23 @@ int changedrivers(void)
                }
                pMenuInhalt[count] = NULL;
 
-               rc = newtWinMenu("(TR) Netcard Farbe", message, 70, 5, 5, 6, pMenuInhalt, &choise, ctr[TR_SELECT], "(TR) Entfernen" , ctr[TR_DONE], NULL);
+               rc = newtWinMenu( ctr[TR_NETCARD_COLOR], message, 70, 5, 5, 6, pMenuInhalt, &choise, ctr[TR_SELECT], ctr[TR_REMOVE], ctr[TR_DONE], NULL);
                        
                if ( rc == 0 || rc == 1) {
-//                     write_configs_netudev(pnics[choise].description, pnics[choise].macaddr, colour);
-                       // insert nic to colourcard
                        if ((green) && ( choise == NicEntry[0])) nicmenu(_GREEN_CARD_);
                        if ((red) && ( choise == NicEntry[1])) nicmenu(_RED_CARD_);
                        if ((orange) && ( choise == NicEntry[2])) nicmenu(_ORANGE_CARD_);
                        if ((blue) && ( choise == NicEntry[3])) nicmenu(_BLUE_CARD_);
+                       netaddresschange = 1;
                } else if (rc == 2) {
                        if ((green) && ( choise == NicEntry[0])) ask_clear_card_entry(_GREEN_CARD_);
                        if ((red) && ( choise == NicEntry[1])) ask_clear_card_entry(_RED_CARD_);
                        if ((orange) && ( choise == NicEntry[2])) ask_clear_card_entry(_ORANGE_CARD_);
                        if ((blue) && ( choise == NicEntry[3])) ask_clear_card_entry(_BLUE_CARD_);
-               } 
-//             else {
-//                     errorbox("Sie haben keine Netzwerkkarte ausgewaehlt.\n");
-//                     return 1;
-//             }
+                       netaddresschange = 1;
+               }
        }
        while ( rc <= 2);
-       
-       // writekeyvalues(kv, CONFIG_ROOT "/ethernet/settings");
 
        freekeyvalues(kv);
        return 1;
@@ -751,16 +685,6 @@ int dnsgatewaymenu(void)
                return 0;
        }
 
-/*     strcpy(temp, "0"); findkey(kv, "CONFIG_TYPE", temp);
-       configtype = atol(temp);
-       
-       if (RED_IS_NOT_ETH)
-       {
-               freekeyvalues(kv);
-               errorbox(ctr[TR_DNS_GATEWAY_WITH_GREEN]);
-               return 0;
-       }
-*/
        entries[DNS1].text = ctr[TR_PRIMARY_DNS];
        strcpy(temp, ""); findkey(kv, "DNS1", temp);
        values[DNS1] = strdup(temp);