Ich hab mal ein bisschen die Arbeit vom Cuebernommen :D

Aber trotzdem geht die Routine noch kein bisschen. SegFault :(
Ansonsten: Busyboy erweitert, PCMCIA Support begonnen zu entfernen


git-svn-id: http://svn.ipfire.org/svn/ipfire/trunk@375 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8
This commit is contained in:
ms
2007-01-02 18:40:12 +00:00
parent 15854f82e9
commit b4e381a848
11 changed files with 243 additions and 310 deletions

View File

@@ -14,7 +14,7 @@
#define CDROM_INSTALL 0
#define URL_INSTALL 1
#define DISK_INSTALL 2
#define INST_FILECOUNT 5600
#define INST_FILECOUNT 6600
#define UNATTENDED_CONF "/cdrom/boot/unattended.conf"
int raid_disk = 0;
@@ -288,23 +288,6 @@ int main(int argc, char *argv[])
fprintf(flog, "Manual FDISK selected.\n");
fdisk = 1;
}
if (strstr (line, "nopcmcia") == NULL) {
fprintf(flog, "Initializing PCMCIA controllers.\n");
pcmcia = initialize_pcmcia();
if (pcmcia) {
fprintf (flog, "Detected PCMCIA Controller: %s.\n", pcmcia);
sprintf(commandstring, "/sbin/modprobe %s", pcmcia);
mysystem("/sbin/modprobe pcmcia_core");
mysystem(commandstring);
mysystem("/sbin/modprobe ds");
/* pcmcia netcard drivers are not available from Boot floppy,
* they will be loaded from Drivers floppy later */
} else {
fprintf (flog, "Detected No PCMCIA Controller.\n");
}
} else {
fprintf(flog, "Skipping PCMCIA detection.\n");
}
if (strstr (line, "nousb") == NULL) {
fprintf(flog, "Initializing USB controllers.\n");
initialize_usb();
@@ -697,30 +680,6 @@ int main(int argc, char *argv[])
/* Rename uname */
rename ("/harddisk/bin/uname.bak", "/harddisk/bin/uname");
/* Write PCMCIA Config */
if (pcmcia) {
handle = fopen("/harddisk/etc/modules.conf", "a");
if (handle != NULL) {
fprintf (handle, "# PCMCIA Settings\n");
fprintf (handle, "alias pcmcia-controller %s\n", pcmcia);
fclose(handle);
}
}
handle = fopen("/harddisk/etc/pcmcia.conf", "w");
if (handle != NULL) {
if (pcmcia) {
fprintf (handle, "PCMCIA=yes\n");
fprintf (handle, "PCIC=%s\n", pcmcia);
} else {
fprintf (handle, "PCMCIA=no\n");
fprintf (handle, "PCIC=\n");
}
fprintf (handle, "CARDMGR_OPTS=\n");
fprintf (handle, "SCHEME=\n");
fclose(handle);
}
/* *always* write disk configuration */
if (!(write_disk_configs(&hdparams))){
errorbox(ctr[TR_ERROR_WRITING_CONFIG]);

View File

@@ -24,89 +24,47 @@ extern struct nic nics[];
int networkmenu(struct keyvalue *ethernetkv)
{
int i;
int count;
char nics;
char number;
char cbValue;
int rc;
char driver[STRING_SIZE] = "";
char driveroptions[STRING_SIZE] = "";
struct keyvalue *kv = initkeyvalues();
int result = 0;
char commandstring[STRING_SIZE];
char address[STRING_SIZE], netmask[STRING_SIZE];
FILE *handle;
int done;
char description[1000];
char message[1000];
char title[STRING_SIZE];
done = 0;
/* Detect and count nics */
count = mysystem("/bin/probenic.sh count");
fprintf(flog, "Number of detected nics: %s\n", count);
/* sprintf(commandstring, "/bin/probenic.sh");
sprintf(message, ctr[TR_PROBING_FOR_NICS]);
runcommandwithstatus(commandstring, message); */
/* handle = fopen("/nicdriver", "r");
fgets(nics, STRING_SIZE, handle);
fclose(handle); */
/* fprintf(flog, "Detected NIC drivers: %s\n",driver); */
/* sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN);
sprintf(message, ctr[TR_FOUND_NIC], NAME, description);
newtWinMessage(title, ctr[TR_OK], message); */
newtComponent form, checkbox, rb[count], button;
newtOpenWindow(10, 5, 60, 11, "Checkboxes and Radio buttons");
for (i = 1; i <= 2; i++)
while (!done)
{
fprintf(flog, "Scan: %d\n", i);
snprintf(commandstring, STRING_SIZE, "/bin/probenic.sh %i", i);
mysystem(commandstring);
if ((handle = fopen("/nicdriver", "r")) == NULL) {
errorbox(ctr[TR_ERROR]);
goto EXIT;
}
fgets(driver, STRING_SIZE, handle);
fclose(handle);
findnicdescription(driver, description);
if ( i == 0 )
rb[i] = newtRadiobutton(1, i+2, description, 1, NULL);
rc = newtWinTernary(ctr[TR_CONFIGURE_NETWORKING], ctr[TR_PROBE],
ctr[TR_SELECT], ctr[TR_CANCEL], ctr[TR_CONFIGURE_NETWORKING_LONG]);
if (rc == 0 || rc == 1)
{
probecards(driver, driveroptions);
if (!strlen(driver))
errorbox(ctr[TR_PROBE_FAILED]);
else
{
findnicdescription(driver, description);
sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
sprintf(message, ctr[TR_FOUND_NIC], NAME, description);
newtWinMessage(title, ctr[TR_OK], message);
}
}
else if (rc == 2)
choosecards(driver, driveroptions);
else
rb[i] = newtRadiobutton(1, i+2, description, 0, rb[i-1]);
}
button = newtButton(1, count+3, "OK");
form = newtForm(NULL, NULL, 0);
newtFormAddComponent(form, checkbox);
for (i = 1; i <= 2; i++) {
fprintf(flog, "Add: %d\n", i);
newtFormAddComponent(form, rb[i]);
done = 1;
if (strlen(driver))
done = 1;
}
newtFormAddComponent(form, button);
newtRunForm(form);
newtFinished();
for (i = 1; i <= 2; i++)
if (newtRadioGetCurrent(rb[0]) == rb[i])
printf("radio button picked: %d\n", i);
newtFormDestroy(form);
/* snprintf(commandstring, STRING_SIZE, "/bin/probenic.sh 1");
mysystem(commandstring);
if ((handle = fopen("/nicdriver", "r")) == NULL) {
errorbox(ctr[TR_ERROR]);
if (!strlen(driver))
goto EXIT;
}
fgets(driver, STRING_SIZE, handle);
fprintf(flog, "Green nic driver: %s\n", driver);
fclose(handle); */
/* Default is a GREEN nic only. */
/* Smoothie is not untarred yet, so we have to delay actually writing the
@@ -134,8 +92,6 @@ int networkmenu(struct keyvalue *ethernetkv)
result = 1;
EXIT:
freekeyvalues(kv);
return result;
}

View File

@@ -3,7 +3,8 @@
MODULES=$(/bin/kudzu -qps -t 30 -c NETWORK | grep driver | cut -d ' ' -f 2 | sort)
if [ "$1" == "count" ]; then
echo $(echo $MODULES | wc -l)
/bin/kudzu -qps -t 30 -c NETWORK | grep driver | wc -l | awk '{ print $1 }' > /drivercount
exit 0
else
NUMBER=$1
fi

View File

@@ -1,99 +1,104 @@
/* SmoothWall libsmooth.
*
* This program is distributed under the terms of the GNU General Public
* Licence. See the file COPYING for details.
*
* (c) Lawrence Manning, 2001
* Contains prototypes for library functions.
*
* $Id: libsmooth.h,v 1.4.2.3 2005/10/30 23:25:35 franck78 Exp $
*
*/
#ifndef ___LIBSMOOTH_H
#define ___LIBSMOOTH_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <wchar.h>
#include <locale.h>
#include <unistd.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <newt.h>
#include <dirent.h>
#include <sys/mount.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <linux/cdrom.h>
#include <sys/ioctl.h>
#include "langs.h"
#define STRING_SIZE 1023
#define ADDRESS 0
#define NETADDRESS 1
#define NETMASK 2
#define DHCP 3
#define NETCHANGE_TOTAL 4
struct keyvalue
{
char key[STRING_SIZE];
char value[STRING_SIZE];
struct keyvalue *next;
};
/* for stuff in net.c */
struct nic
{
char *description;
char *modulename;
};
/* libsmooth.c */
void reboot(void);
void stripnl(char *s);
int mysystem(char *command);
void errorbox(char *message);
void statuswindow(int width, int height, char *title, char *text, ...);
int runcommandwithprogress(int width, int height, char *title, char *command,
int lines, char *text, ...);
int runcommandwithstatus(char *command, char *message);
int runhiddencommandwithstatus(char *command, char *message);
int checkformodule(char *module);
int replace(char filename1[], char *from, char *to);
char* get_version(void);
/* netstuff.c */
int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
char *defaultdhcphostname);
int gettype(char *type);
int setnetaddress(struct keyvalue *kv, char *colour);
void networkdialogcallbacktype(newtComponent cm, void *data);
int interfacecheck(struct keyvalue *kv, char *colour);
int probecards(char *driver, char *driveroptions);
int choosecards(char *driver, char *driveroptions);
int manualdriver(char *driver, char *driveroptions);
int countcards(void);
int findnicdescription(char *modulename, char *description);
/* data.c */
struct keyvalue *initkeyvalues(void);
void freekeyvalues(struct keyvalue *head);
int readkeyvalues(struct keyvalue *head, char *filename);
int writekeyvalues(struct keyvalue *head, char *filename);
int findkey(struct keyvalue *head, char *key, char *value);
void appendkeyvalue(struct keyvalue *head, char *key, char *value);
void replacekeyvalue(struct keyvalue *head, char *key, char *value);
#endif
/* SmoothWall libsmooth.
*
* This program is distributed under the terms of the GNU General Public
* Licence. See the file COPYING for details.
*
* (c) Lawrence Manning, 2001
* Contains prototypes for library functions.
*
* $Id: libsmooth.h,v 1.4.2.3 2005/10/30 23:25:35 franck78 Exp $
*
*/
#ifndef ___LIBSMOOTH_H
#define ___LIBSMOOTH_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <wchar.h>
#include <locale.h>
#include <unistd.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <newt.h>
#include <dirent.h>
#include <sys/mount.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <linux/cdrom.h>
#include <sys/ioctl.h>
#include "langs.h"
#define STRING_SIZE 1023
#define ADDRESS 0
#define NETADDRESS 1
#define NETMASK 2
#define DHCP 3
#define NETCHANGE_TOTAL 4
struct keyvalue
{
char key[STRING_SIZE];
char value[STRING_SIZE];
struct keyvalue *next;
};
/* for stuff in net.c */
struct nic
{
char *description;
char *modulename;
};
struct driver
{
char *description;
char *modulename;
};
/* libsmooth.c */
void reboot(void);
void stripnl(char *s);
int mysystem(char *command);
void errorbox(char *message);
void statuswindow(int width, int height, char *title, char *text, ...);
int runcommandwithprogress(int width, int height, char *title, char *command,
int lines, char *text, ...);
int runcommandwithstatus(char *command, char *message);
int runhiddencommandwithstatus(char *command, char *message);
int checkformodule(char *module);
int replace(char filename1[], char *from, char *to);
char* get_version(void);
/* netstuff.c */
int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
char *defaultdhcphostname);
int gettype(char *type);
int setnetaddress(struct keyvalue *kv, char *colour);
void networkdialogcallbacktype(newtComponent cm, void *data);
int interfacecheck(struct keyvalue *kv, char *colour);
int probecards(char *driver, char *driveroptions);
int choosecards(char *driver, char *driveroptions);
int manualdriver(char *driver, char *driveroptions);
int countcards(void);
int findnicdescription(char *modulename, char *description);
/* data.c */
struct keyvalue *initkeyvalues(void);
void freekeyvalues(struct keyvalue *head);
int readkeyvalues(struct keyvalue *head, char *filename);
int writekeyvalues(struct keyvalue *head, char *filename);
int findkey(struct keyvalue *head, char *key, char *value);
void appendkeyvalue(struct keyvalue *head, char *key, char *value);
void replacekeyvalue(struct keyvalue *head, char *key, char *value);
#endif

View File

@@ -284,33 +284,11 @@ int replace(char filename1[], char *from, char *to)
/* Include enabled languages */
#ifdef LANG_EN_ONLY
#include "lang_en.c"
#elifdef LANG_ALL
#include "lang_bz.c"
#include "lang_cs.c"
#include "lang_da.c"
#include "lang_de.c"
#include "lang_en.c"
#include "lang_es.c"
#include "lang_fi.c"
#include "lang_fr.c"
#include "lang_el.c"
#include "lang_it.c"
#include "lang_hu.c"
#include "lang_la.c"
#include "lang_nl.c"
#include "lang_no.c"
#include "lang_pl.c"
#include "lang_pt.c"
#include "lang_sk.c"
#include "lang_so.c"
#include "lang_sv.c"
#include "lang_tr.c"
#include "lang_vi.c"
#else
#include "lang_de.c"
#include "lang_en.c"
#endif
// returns a pointer to the actual running version number of IPFire.
// Successive updates increase effective version but not VERSION !
char g_title[STRING_SIZE] = "";
@@ -321,7 +299,7 @@ char* get_version(void) {
fclose (f_title);
if (g_title[strlen(g_title) - 1] == '\n') g_title[strlen(g_title) - 1] = '\0';
} else {
sprintf (g_title, "%s v%s - %s", NAME, VERSION, SLOGAN);
sprintf (g_title, "%s %s - %s", NAME, VERSION, SLOGAN);
}
return g_title;
}

View File

@@ -413,30 +413,88 @@ struct nic nics[] = {
/* Funky routine for loading all drivers (cept those are already loaded.). */
int probecards(char *driver, char *driveroptions)
{
int c;
char **sections;
char drivercount;
int rc;
int choice;
int done = 0;
char message[1000];
char commandstring[STRING_SIZE];
FILE *handle;
char line[STRING_SIZE];
sprintf(commandstring, "/bin/probenic.sh 1");
sprintf(message, ctr[TR_PROBING_FOR_NICS]);
runcommandwithstatus(commandstring, message);
if ((handle = fopen("/nicdriver", "r")))
{
char *driver;
/* Count all nics. */
mysystem("/bin/probenic.sh count");
if ((handle = fopen("/drivercount", "r")))
fgets(line, STRING_SIZE-1, handle);
fclose(handle);
line[strlen(line) - 1] = 0;
driver = strtok(line, ".");
fprintf(flog, "Detected NIC driver %s\n",driver);
if (strlen(driver) > 1) {
strcpy(driveroptions, "");
return 1;
}
fclose(handle);
//system("rm -f /drivercount");
line[strlen(line) - 1] = 0;
drivercount = strtok(line, ".");
fprintf(flog, "Detected %s NICs in your system.\n", drivercount);
if (!drivercount > 0) {
return 1;
}
sections = malloc(drivercount * sizeof(char *));
struct driver drivers[drivercount];
strcpy(drivers[0].modulename, "pcnet32");
fprintf(flog, "TEST0.\n");
c = 0;
while (drivers[c - 1].modulename)
{
sections[c] = drivers[c - 1].description;
fprintf(flog, "TEST1.\n");
c++;
}
sections[c] = NULL;
fprintf(flog, "TEST2.\n");
strcpy(driver, "");
strcpy(driveroptions, "");
done = 0; choice = 1;
while (!done)
{
rc = newtWinMenu(ctr[TR_SELECT_NETWORK_DRIVER],
ctr[TR_SELECT_NETWORK_DRIVER_LONG], 50, 5, 5, 6,
sections, &choice, ctr[TR_OK], ctr[TR_CANCEL], NULL);
if (rc == 0 || rc == 1)
{
if (choice > 0)
{
/* Find module number, load module. */
c = choice - 1;
if (!checkformodule(nics[c].modulename))
{
sprintf(commandstring, "/sbin/modprobe %s", nics[c].modulename);
sprintf(message, ctr[TR_LOOKING_FOR_NIC], nics[c].description);
if (runcommandwithstatus(commandstring, message) == 0)
{
strcpy(driver, nics[c].modulename);
strcpy(driveroptions, "");
done = 1;
}
else
errorbox(ctr[TR_UNABLE_TO_LOAD_DRIVER_MODULE]);
}
else
errorbox(ctr[TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED]);
}
else
{
manualdriver(driver, driveroptions);
if (strlen(driver))
done = 1;
}
}
else
done = 1;
}
return 0;
}