X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=src%2Finstall%2Bsetup%2Flibsmooth%2Fnetstuff.c;h=de5c558c0e6091a1cb5d93194a09d70064f4aff6;hb=360378014d0ba62c1ced4b204080f05c2a3de575;hp=5aee7e03becdcae060199c8e36eeaf006c0c12e0;hpb=b04331d3e3747e5c15a6c165bcd2478e4f736d0a;p=people%2Fteissler%2Fipfire-2.x.git diff --git a/src/install+setup/libsmooth/netstuff.c b/src/install+setup/libsmooth/netstuff.c index 5aee7e03b..de5c558c0 100644 --- a/src/install+setup/libsmooth/netstuff.c +++ b/src/install+setup/libsmooth/netstuff.c @@ -30,8 +30,8 @@ newtComponent netmaskentry; newtComponent statictyperadio; newtComponent dhcptyperadio; newtComponent pppoetyperadio; -newtComponent pptptyperadio; newtComponent dhcphostnameentry; +newtComponent dhcpforcemtuentry; /* acceptable character filter for IP and netmaks entry boxes */ static int ip_input_filter(newtComponent entry, void * data, int ch, int cursor) @@ -50,11 +50,13 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, char *addressresult; char *netmaskresult; char *dhcphostnameresult; + char *dhcpforcemturesult; struct newtExitStruct es; newtComponent header; newtComponent addresslabel; newtComponent netmasklabel; newtComponent dhcphostnamelabel; + newtComponent dhcpforcemtulabel; newtComponent ok, cancel; char message[1000]; char temp[STRING_SIZE]; @@ -62,19 +64,20 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, char netmaskfield[STRING_SIZE]; char typefield[STRING_SIZE]; char dhcphostnamefield[STRING_SIZE]; + char dhcpforcemtufield[STRING_SIZE]; int error; int result = 0; char type[STRING_SIZE]; int startstatictype = 0; int startdhcptype = 0; int startpppoetype = 0; - int startpptptype = 0; /* Build some key strings. */ sprintf(addressfield, "%s_ADDRESS", colour); sprintf(netmaskfield, "%s_NETMASK", colour); sprintf(typefield, "%s_TYPE", colour); sprintf(dhcphostnamefield, "%s_DHCP_HOSTNAME", colour); + sprintf(dhcpforcemtufield, "%s_DHCP_FORCE_MTU", colour); sprintf(message, ctr[TR_INTERFACE], colour); newtCenteredWindow(44, (typeflag ? 18 : 12), message); @@ -93,26 +96,33 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, if (strcmp(temp, "STATIC") == 0) startstatictype = 1; if (strcmp(temp, "DHCP") == 0) startdhcptype = 1; if (strcmp(temp, "PPPOE") == 0) startpppoetype = 1; - if (strcmp(temp, "PPTP") == 0) startpptptype = 1; statictyperadio = newtRadiobutton(2, 4, ctr[TR_STATIC], startstatictype, NULL); - dhcptyperadio = newtRadiobutton(2, 5, "DHCP", startdhcptype, statictyperadio); - pppoetyperadio = newtRadiobutton(2, 6, "PPPOE", startpppoetype, dhcptyperadio); - pptptyperadio = newtRadiobutton(2, 7, "PPTP", startpptptype, pppoetyperadio); + dhcptyperadio = newtRadiobutton(2, 5, ctr[TR_DHCP], startdhcptype, statictyperadio); + pppoetyperadio = newtRadiobutton(2, 6, ctr[TR_PPP_DIALUP], startpppoetype, dhcptyperadio); newtFormAddComponents(networkform, statictyperadio, dhcptyperadio, - pppoetyperadio, pptptyperadio, NULL); + pppoetyperadio, NULL); newtComponentAddCallback(statictyperadio, networkdialogcallbacktype, NULL); newtComponentAddCallback(dhcptyperadio, networkdialogcallbacktype, NULL); newtComponentAddCallback(pppoetyperadio, networkdialogcallbacktype, NULL); - newtComponentAddCallback(pptptyperadio, networkdialogcallbacktype, NULL); - dhcphostnamelabel = newtTextbox(2, 9, 18, 1, 0); + dhcphostnamelabel = newtTextbox(2, 8, 18, 1, 0); newtTextboxSetText(dhcphostnamelabel, ctr[TR_DHCP_HOSTNAME]); + dhcpforcemtulabel = newtTextbox(2, 9, 18, 1, 0); + newtTextboxSetText(dhcpforcemtulabel, ctr[TR_DHCP_FORCE_MTU]); strcpy(temp, defaultdhcphostname); findkey(kv, dhcphostnamefield, temp); - dhcphostnameentry = newtEntry(20, 9, temp, 20, &dhcphostnameresult, 0); - newtFormAddComponent(networkform, dhcphostnamelabel); - newtFormAddComponent(networkform, dhcphostnameentry); + dhcphostnameentry = newtEntry(20, 8, temp, 20, &dhcphostnameresult, 0); + strcpy(temp, ""); + findkey(kv, dhcpforcemtufield, temp); + dhcpforcemtuentry = newtEntry(20, 9, temp, 20, &dhcpforcemturesult, 0); + newtFormAddComponent(networkform, dhcphostnamelabel); + newtFormAddComponent(networkform, dhcphostnameentry); + newtFormAddComponent(networkform, dhcpforcemtulabel); + newtFormAddComponent(networkform, dhcpforcemtuentry); if (startdhcptype == 0) - newtEntrySetFlags(dhcphostnameentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + { + newtEntrySetFlags(dhcphostnameentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + newtEntrySetFlags(dhcpforcemtuentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + } } /* Address */ addresslabel = newtTextbox(2, (typeflag ? 11 : 4) + 0, 18, 1, 0); @@ -121,7 +131,7 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, findkey(kv, addressfield, temp); addressentry = newtEntry(20, (typeflag ? 11 : 4) + 0, temp, 20, &addressresult, 0); newtEntrySetFilter(addressentry, ip_input_filter, NULL); - if (typeflag == 1 && startstatictype == 0 && startpptptype == 0 ) + if (typeflag == 1 && startstatictype == 0) newtEntrySetFlags(addressentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); newtFormAddComponent(networkform, addresslabel); newtFormAddComponent(networkform, addressentry); @@ -132,7 +142,7 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, strcpy(temp, "255.255.255.0"); findkey(kv, netmaskfield, temp); netmaskentry = newtEntry(20, (typeflag ? 11 : 4) + 1, temp, 20, &netmaskresult, 0); newtEntrySetFilter(netmaskentry, ip_input_filter, NULL); - if (typeflag == 1 && startstatictype == 0 && startpptptype == 0 ) + if (typeflag == 1 && startstatictype == 0) newtEntrySetFlags(netmaskentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); newtFormAddComponent(networkform, netmasklabel); @@ -160,7 +170,7 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, strcpy(type, "STATIC"); if (typeflag) gettype(type); - if (strcmp(type, "STATIC") == 0 || strcmp(type, "PPTP") == 0 ) + if (strcmp(type, "STATIC") == 0) { if (inet_addr(addressresult) == INADDR_NONE) { @@ -189,7 +199,8 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, if (typeflag) { replacekeyvalue(kv, dhcphostnamefield, dhcphostnameresult); - if (strcmp(type, "STATIC") != 0 && strcmp(type, "PPTP") != 0) + replacekeyvalue(kv, dhcpforcemtufield, dhcpforcemturesult); + if (strcmp(type, "STATIC") != 0) { replacekeyvalue(kv, addressfield, "0.0.0.0"); replacekeyvalue(kv, netmaskfield, "0.0.0.0"); @@ -210,7 +221,14 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag, setnetaddress(kv, colour); result = 1; } - } + } + /* Workaround for a bug that dhcp radiobutton also end the dialog at arm + */ + else { + if (es.u.co != cancel) { + error = 1; + } + } } while (error); @@ -231,8 +249,6 @@ int gettype(char *type) strcpy(type, "DHCP"); else if (selected == pppoetyperadio) strcpy(type, "PPPOE"); - else if (selected == pptptyperadio) - strcpy(type, "PPTP"); else strcpy(type, "ERROR"); @@ -292,7 +308,7 @@ void networkdialogcallbacktype(newtComponent cm, void *data) gettype(type); - if (strcmp(type, "STATIC") != 0 && strcmp(type, "PPTP") != 0 ) + if (strcmp(type, "STATIC") != 0) { newtEntrySetFlags(addressentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); newtEntrySetFlags(netmaskentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); @@ -303,12 +319,17 @@ void networkdialogcallbacktype(newtComponent cm, void *data) newtEntrySetFlags(netmaskentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_RESET); } if (strcmp(type, "DHCP") == 0) + { newtEntrySetFlags(dhcphostnameentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_RESET); + newtEntrySetFlags(dhcpforcemtuentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_RESET); + } else + { newtEntrySetFlags(dhcphostnameentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); - + newtEntrySetFlags(dhcpforcemtuentry, NEWT_FLAG_DISABLED, NEWT_FLAGS_SET); + } newtRefresh(); - newtDrawForm(networkform); + newtDrawForm(networkform); } int interfacecheck(struct keyvalue *kv, char *colour) @@ -335,49 +356,196 @@ int probecards(char *driver, char *driveroptions ) return 0; } -/* ### alter strupper ### -char *strupper(char *s) +int get_knic(int card) //returns "0" for zero cards or error and "1" card is found. { - int n; - for (n=0;s[n];n++) s[n]=toupper(s[n]); - return s; + struct keyvalue *kv = initkeyvalues(); + char temp[STRING_SIZE], searchstr[STRING_SIZE]; + int ret_value; + + if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings"))) + { + freekeyvalues(kv); + errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]); + return 0; + } + + sprintf(searchstr, "%s_MACADDR", ucolourcard[card]); + strcpy(temp, ""); findkey(kv, searchstr, temp); + if (strlen(temp)) { + strcpy(knics[ card ].macaddr, temp); + strcpy(knics[ card ].colour, ucolourcard[card]); + + sprintf(searchstr, "%s_DESCRIPTION", ucolourcard[card]); + findkey(kv, searchstr, temp); + strcpy(knics[ card ].description, temp); + + sprintf(searchstr, "%s_DRIVER", ucolourcard[card]); + findkey(kv, searchstr, temp); + strcpy(knics[ card ].driver, temp); + ret_value = 1; + } else { + strcpy(knics[ card ].description, ctr[TR_UNSET]); + ret_value = 0; + } + freekeyvalues(kv); + + return ret_value; } -*/ -/* neuer StringUpper, wird zur Zeit nicht benutzt da UTF-8 nicht geht. -void strupper(unsigned char *string) +int init_knics(void) { - unsigned char *str; - for (str = string; *str != '\0'; str++) - if (!(*str & 0x80) && islower(*str)) - *str = toupper(*str); + int found = 0; + found += get_knic(_GREEN_CARD_); + found += get_knic(_RED_CARD_); + found += get_knic(_ORANGE_CARD_); + found += get_knic(_BLUE_CARD_); + + return found; } -*/ -/* int ismacaddr(char *ismac) -{ - char *a; - fprintf(flog,"Check is MAC true\n"); // #### Debug #### - for (a = ismac; *a; a++) { - sprintf(flog,"%c\n", *a); // #### Debug #### - if (*a != ':' && !isxdigit(*a)) return 0; // is int != ':' or not hexdigit then exit +int fmt_exists(const char *fname) { /* Check if it is any file or directory */ + struct stat st; + if (stat(fname, &st) == -1) return 0; + else return 1; +} + +int is_interface_up(char *card) { /* Check if the interface is UP */ + char temp[STRING_SIZE]; + + sprintf(temp,"ip link show dev %s | grep -q UP", card); + if (mysystem(temp)) return 0; else return 1; +} + +int rename_device(char *old_name, char *new_name) { + char temp[STRING_SIZE]; + + sprintf(temp,SYSDIR "/%s", old_name); + if (!(fmt_exists(temp))) { + fprintf(flog,"Device not found: %s\n",old_name); + return 0; } + sprintf(temp,"/sbin/ip link set dev %s name %s",old_name ,new_name ); + mysystem(temp); + return 1; } -*/ -int write_configs_netudev(int card , int colour) -{ +char g_temp[STRING_SIZE]=""; +char* readmac(char *card) { + FILE *fp; + char temp[STRING_SIZE], mac[20]; + + sprintf(temp,"/sys/class/net/%s/address",card); + if( (fp = fopen(temp, "r")) == NULL ) { + fprintf(flog,"Couldn't open: %s\n",temp); + return NULL; + } + fgets(mac, 18, fp); + strtok(mac,"\n"); + fclose(fp); + strcpy(g_temp, mac); + return g_temp; +} + +char* find_nic4mac(char *findmac) { + DIR *dir; + struct dirent *dirzeiger; + char temp[STRING_SIZE], temp2[STRING_SIZE]; + + if((dir=opendir(SYSDIR)) == NULL) { + fprintf(flog,"Fehler bei opendir (find_name4nic) ...\n"); + return NULL; + } + + sprintf(temp, ""); + while((dirzeiger=readdir(dir)) != NULL) { + if(*((*dirzeiger).d_name) != '.' & strcmp(((*dirzeiger).d_name), "lo") != 0) { + sprintf(temp2, "%s", readmac((*dirzeiger).d_name) ); + if (strcmp(findmac, temp2) == 0) { + sprintf(temp,"%s", (*dirzeiger).d_name); + break; + } + } + } + + if(closedir(dir) == -1) fprintf(flog,"Fehler beim schliessen von %s\n", SYSDIR); + strcpy(g_temp, temp); + return g_temp; +} + +int nic_shutdown(char *nic) { + char temp[STRING_SIZE]; + + sprintf(temp,"ip link set %s down", nic); + mysystem(temp); +} + +int nic_startup(char *nic) { + char temp[STRING_SIZE]; + + sprintf(temp,"ip link set %s up", nic); + mysystem(temp); + +} + +int rename_nics(void) { + int i, j, k; + int fnics = scan_network_cards(); + char nic2find[STRING_SIZE], temp[STRING_SIZE]; + + for(i=0; i<4; i++) + if (strcmp(knics[i].macaddr, "")) + for(j=0; j/dev/null 2>&1"); - system(commandstring); - -// snprintf(commandstring, STRING_SIZE, "/bin/cat "UDEV_NET_CONF" | /bin/grep -v \"%s\" > "UDEV_NET_CONF" 2>/dev/null", macaddr); -// system(commandstring); - - snprintf(commandstring, STRING_SIZE, "/bin/cat "UDEV_NET_CONF" | /bin/grep -v \"%s0\" > "UDEV_NET_CONF" 2>/dev/null", lcolourcard[colour]); - system(commandstring); - - if( (fp = fopen(UDEV_NET_CONF, "a")) == NULL ) - { - fprintf(stderr,"Couldn't open" UDEV_NET_CONF); - return 1; - } - fprintf(fp,"ACTION==\"add\", SUBSYSTEM==\"net\", SYSFS{address}==\"%s\", NAME=\"%s0\" # %s\n", nics[card].macaddr, lcolourcard[colour], nics[card].description); - fclose(fp); - return 0; } @@ -435,9 +585,7 @@ int scan_network_cards(void) if (!(scanned_nics_read_done)) { - fprintf(flog,"Enter scan_network_cards\n"); // #### Debug #### mysystem("/bin/probenic.sh"); - // Read our scanned nics if( (fp = fopen(SCANNED_NICS, "r")) == NULL ) { fprintf(stderr,"Couldn't open "SCANNED_NICS); @@ -449,7 +597,10 @@ int scan_network_cards(void) if ( strncmp(temp_line, _driver, strlen(_driver)) == 0 ) sprintf(nics[count].driver, "%s", temp_line+strlen(_driver)); if ( strncmp(temp_line, _desc, strlen(_desc)) == 0 ) sprintf(nics[count].description, "%s", temp_line+strlen(_desc)); if ( strncmp(temp_line, _network_hwaddr, strlen(_network_hwaddr)) == 0 ) sprintf(nics[count].macaddr, "%s", temp_line+strlen(_network_hwaddr)); - if (strlen(nics[count].macaddr) > 15 ) count++; + if (strlen(nics[count].macaddr) > 15 ) { + sprintf(nics[count].nic, "%s", find_nic4mac(nics[count].macaddr)); + count++; + } } fclose(fp); scanned_nics_read_done = count; @@ -469,16 +620,8 @@ int nicmenu(int colour) char MenuInhalt[20][180]; char *pMenuInhalt[20]; -// strcpy( message , pnics[count].macaddr); -// while (strcmp(message, "")) { -// count++; -// strcpy( message , pnics[count].macaddr); -// } - while (strcmp(nics[count].macaddr, "")) count++; // 2 find how many nics in system for ( i=0 ; i<4;i++) if (strcmp(knics[i].macaddr, "")) kcount++; // loop to find all knowing nics - fprintf(flog, "Enter NicMenu\n"); // #### Debug #### - fprintf(flog, "count nics %i\ncount knics %i\n", count, kcount); // #### Debug #### // If new nics are found... if (count > kcount) { @@ -488,21 +631,14 @@ int nicmenu(int colour) for (j=0 ; j <= kcount ; j++) { if (strcmp(nics[ i ].macaddr, knics[ j ].macaddr) == 0 ) { nic_in_use = 1; - fprintf(flog,"NIC \"%s\" is in use.\n", nics[ i ].macaddr); // #### Debug #### break; } } if (!(nic_in_use)) { - fprintf(flog,"NIC \"%s\" is free.\n", nics[ i ].macaddr); // #### Debug #### if ( strlen(nics[i].description) < 55 ) sprintf(MenuInhalt[mcount], "%.*s", strlen(nics[i].description)-2, nics[i].description+1); else { - fprintf(flog,"Modify string 4 display.\n"); // #### Debug #### sprintf(cMenuInhalt, "%.50s", nics[i].description + 1); - fprintf(flog,"1: %s\n"); // #### Debug #### -// strncpy(MenuInhalt[mcount], cMenuInhalt,(strrchr(cMenuInhalt,' ') - cMenuInhalt)); -// sprintf(MenuInhalt[mcount], "%.*s", strlen(strrchr(cMenuInhalt,' ')), cMenuInhalt); - strrchr(cMenuInhalt,' '); sprintf(MenuInhalt[mcount], cMenuInhalt); strcat (MenuInhalt[mcount], "..."); } @@ -520,21 +656,16 @@ int nicmenu(int colour) pMenuInhalt[mcount] = NULL; -// sprintf(message, "Es wurde(n) %d freie Netzwerkkarte(n) in Ihrem System gefunden.\nBitte waehlen Sie im naechsten Dialog eine davon aus.\n", count); -// newtWinMessage("NetcardMenu", ctr[TR_OK], message); - - sprintf(message, "(TR) Bitte wählen Sie eine der untenstehenden Netzwerkkarten fuer die Schnittstelle \"%s\" aus.\n", ucolourcard[colour]); - rc = newtWinMenu("(TR) NetcardMenu2", message, 50, 5, 5, 6, pMenuInhalt, &choise, ctr[TR_OK], ctr[TR_SELECT], ctr[TR_CANCEL], NULL); + sprintf(message, ctr[TR_CHOOSE_NETCARD], ucolourcard[colour]); + rc = newtWinMenu( ctr[TR_NETCARDMENU2], message, 50, 5, 5, 6, pMenuInhalt, &choise, ctr[TR_OK], ctr[TR_SELECT], ctr[TR_CANCEL], NULL); if ( rc == 0 || rc == 1) { write_configs_netudev(found_NIC_as_Card[choise], colour); - } else if (rc == 2) { -// manualdriver("pcnet32",""); - } + } return 0; } else { // We have to add here that you can manually add a device - errorbox("(TR) Es wurden leider keine freien Netzwerkkarten fuer die Schnittstelle in ihrem System gefunden."); + errorbox( ctr[TR_ERROR_INTERFACES]); return 1; } } @@ -567,7 +698,6 @@ int clear_card_entry(int card) writekeyvalues(kv, CONFIG_ROOT "/ethernet/settings"); freekeyvalues(kv); - fprintf(flog,"Card \"%s\" cleared\n",ucolourcard[card]); // #### Debug #### return 0; } @@ -576,19 +706,11 @@ int ask_clear_card_entry(int card) char message[STRING_SIZE]; int rc; - sprintf(message, "(TR) Soll die Zuordnung der Netzwerkkarte \"%s\" entfernt werden ?\n", ucolourcard[card]); + sprintf(message, ctr[TR_REMOVE_CARD], ucolourcard[card]); rc = newtWinChoice(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_CANCEL], message); if ( rc = 0 || rc == 1) { clear_card_entry(card); -// sprintf(temp1, "%s_DEV", ucolour); -// sprintf(temp2, "%s_MACADDR", ucolour); -// replacekeyvalue(kv, temp1, ""); -// replacekeyvalue(kv, temp2, ""); -// sprintf(temp1, "%s_DESCRIPTION", ucolour); -// replacekeyvalue(kv, temp1, ""); - -// writekeyvalues(kv, CONFIG_ROOT "/ethernet/settings"); } else return 1; return 0;