* (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"
#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",
};
int netaddresschange;
-int oktoleave(char *errormessage);
+int oktoleave(void);
int firstmenu(void);
int configtypemenu(void);
int drivermenu(void);
int done;
int choice;
int found;
- char errormessage[STRING_SIZE];
netaddresschange = 0;
- fprintf(flog,"Enter HandleNetworking\n"); // #### Debug ####
-
found = scan_network_cards();
- fprintf(flog,"found %d cards\n",found); // #### Debug ####
+ found = init_knics();
done = 0;
while (!done)
break;
case 0:
- if (oktoleave(errormessage))
- done = 1;
- else
- errorbox(errormessage);
+ if (oktoleave()) done = 1;
break;
default:
{
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]);
}
}
-
+ create_udev();
return 1;
}
-int oktoleave(char *errormessage)
+int oktoleave(void)
{
struct keyvalue *kv = initkeyvalues();
char temp[STRING_SIZE];
int configtype;
+ int rc;
if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
{
return 0;
}
- strcpy(temp, "0"); findkey(kv, "CONFIG_TYPE", temp); configtype = atol(temp);
- if (configtype < 0 || configtype > 7) 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]);
- goto EXIT;
+ errorbox(ctr[TR_NO_GREEN_INTERFACE]);
+ freekeyvalues(kv);
+ return 0;
}
- if (!(interfacecheck(kv, "BLUE")))
+ if (!(interfacecheck(kv, "GREEN")))
{
- strcpy(errormessage, ctr[TR_MISSING_BLUE_IP]);
- goto EXIT;
+ errorbox(ctr[TR_MISSING_GREEN_IP]);
+ freekeyvalues(kv);
+ return 0;
+ }
+ }
+ if (HAS_RED)
+ {
+
+ strcpy(temp, ""); findkey(kv, "RED_DEV", temp);
+ if (!(strlen(temp)))
+ {
+ rc = newtWinChoice(ctr[TR_ERROR], ctr[TR_OK], ctr[TR_IGNORE], ctr[TR_NO_RED_INTERFACE]);
+ if (rc == 0 || rc == 1)
+ {
+ freekeyvalues(kv);
+ return 0;
+ }
+ }
+ if (!(interfacecheck(kv, "RED")))
+ {
+ errorbox(ctr[TR_MISSING_RED_IP]);
+ freekeyvalues(kv);
+ return 0;
}
}
if (HAS_ORANGE)
strcpy(temp, ""); findkey(kv, "ORANGE_DEV", temp);
if (!(strlen(temp)))
{
- strcpy(errormessage, ctr[TR_NO_ORANGE_INTERFACE]);
- goto EXIT;
+ errorbox(ctr[TR_NO_ORANGE_INTERFACE]);
+ freekeyvalues(kv);
+ return 0;
}
if (!(interfacecheck(kv, "ORANGE")))
{
- strcpy(errormessage, ctr[TR_MISSING_ORANGE_IP]);
- goto EXIT;
+ errorbox(ctr[TR_MISSING_ORANGE_IP]);
+ freekeyvalues(kv);
+ return 0;
}
}
- 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]);
- goto EXIT;
+ errorbox(ctr[TR_NO_BLUE_INTERFACE]);
+ freekeyvalues(kv);
+ return 0;
}
- if (!(interfacecheck(kv, "RED")))
+ if (!(interfacecheck(kv, "BLUE")))
{
- strcpy(errormessage, ctr[TR_MISSING_RED_IP]);
- goto EXIT;
+ errorbox(ctr[TR_MISSING_BLUE_IP]);
+ freekeyvalues(kv);
+ return 0;
}
}
- strcpy(errormessage, "");
-EXIT:
- freekeyvalues(kv);
- if (strlen(errormessage))
- return 0;
- else
- return 1;
+ strcpy(temp, ""); findkey(kv, "RED_TYPE", temp);
+ if ((configtype == 0) || (strcmp(temp, "STATIC") == 0))
+ {
+ strcpy(temp, ""); findkey(kv, "DNS1", temp);
+ if (!(strlen(temp)))
+ {
+ errorbox(ctr[TR_MISSING_DNS]);
+ freekeyvalues(kv);
+ return 0;
+ }
+ strcpy(temp, ""); findkey(kv, "DEFAULT_GATEWAY", temp);
+ if (!(strlen(temp)))
+ {
+ errorbox(ctr[TR_MISSING_DEFAULT]);
+ freekeyvalues(kv);
+ return 0;
+ }
+ }
+ return 1;
}
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] = "";
if (netaddresschange)
strcpy(networkrestart, ctr[TR_RESTART_REQUIRED]);
- strcpy(temp, ""); findkey(kv, "CONFIG_TYPE", temp); x = atol(temp);
- if (x < 0 || x > 7) 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);
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")))
{
}
found = scan_network_cards();
- fprintf(flog,"found %d Card\'s\n", found ); // #### Debug ####
findkey(kv, "CONFIG_TYPE", temp); choise = atol(temp);
+ choise--;
- do
- {
sprintf(message, ctr[TR_NETWORK_CONFIGURATION_TYPE_LONG], NAME);
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);
}
- }
- while ( configtypecards[choise] > found);
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;
{
struct keyvalue *kv = initkeyvalues();
char message[STRING_SIZE];
- char temp[STRING_SIZE];
-// char description[STRING_SIZE], macaddr[STRING_SIZE];
-// struct nic *pnics = nics;
-// pnics = nics;
-// struct knic *pknics = knics;
-// pknics = knics;
+ char temp[STRING_SIZE] = "1";
+
int configtype;
- int rc, kcount = 0, neednics; //i = 0, count = 0,
-
- fprintf(flog,"Enter driverenu\n"); // #### Debug ####
+ int i, rc, kcount = 0, neednics;
if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
{
return 0;
}
- strcpy(temp, "0"); findkey(kv, "CONFIG_TYPE", temp);
- configtype = atol(temp);
-
-// if (configtype == 0)
-// {
-// freekeyvalues(kv);
-// errorbox(ctr[TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER]);
-// return 0;
-// }
+ if (findkey(kv, "CONFIG_TYPE", temp))
+ configtype = atol(temp);
+ else {
+ fprintf(flog,"setting CONFIG_TYPE = %s\n",temp);
+ configtype = atol(temp);
+ replacekeyvalue(kv, "CONFIG_TYPE", temp);
+ writekeyvalues(kv, CONFIG_ROOT "/ethernet/settings");
+ }
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);
- 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) ) {
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);
- 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) ) {
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 );
- 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) ) {
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);
- 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)) {
neednics++;
}
- 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);
return 1;
}
-int cardassigned(char *colour)
-{
- char command[STRING_SIZE];
- fprintf(flog,"cardassigned - %s\n", colour);
- sprintf(command, "grep -q %s < /etc/udev/rules.d/30-persistent-network.rules 2>/dev/null", colour);
- if (system(command))
- return 0;
- else
- return 1;
-}
-
int set_menu_entry_for(int *nr, int *card)
{
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; }
{ 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 ####
+ else if (configtype == "")
+ { green = 1; red = 1; }
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");
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) ) {
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) ) {
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) ) {
}
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;
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);