summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mdk-stage1/adsl.c5
-rw-r--r--mdk-stage1/network.c10
-rw-r--r--mdk-stage1/network.h11
3 files changed, 17 insertions, 9 deletions
diff --git a/mdk-stage1/adsl.c b/mdk-stage1/adsl.c
index 74838aa92..706d3c96a 100644
--- a/mdk-stage1/adsl.c
+++ b/mdk-stage1/adsl.c
@@ -147,6 +147,8 @@ enum return_type perform_adsl(struct interface_info * intf)
if (results != RETURN_OK)
return results;
+ intf->boot_proto = BOOTPROTO_ADSL_PPPOE;
+
wait_message("Waiting for ADSL connection to show up...");
my_insmod("ppp_generic", ANY_DRIVER_TYPE, NULL);
my_insmod("ppp_async", ANY_DRIVER_TYPE, NULL);
@@ -158,6 +160,9 @@ enum return_type perform_adsl(struct interface_info * intf)
wait_message("Retrying the ADSL connection...");
results = adsl_connect(intf->device, answers[0], answers[1]);
remove_wait_message();
+ } else {
+ intf->user = strdup(answers[0]);
+ intf->pass = strdup(answers[1]);
}
if (results != RETURN_OK) {
diff --git a/mdk-stage1/network.c b/mdk-stage1/network.c
index e3052b149..6cf24f626 100644
--- a/mdk-stage1/network.c
+++ b/mdk-stage1/network.c
@@ -169,7 +169,7 @@ int configure_net_device(struct interface_info * intf)
intf->is_up = 1;
- if (intf->boot_proto == BOOTPROTO_STATIC && !streq(intf->device, "lo")) {
+ if (intf->boot_proto != BOOTPROTO_DHCP && !streq(intf->device, "lo")) {
/* I need to sleep a bit in order for kernel to finish
init of the network device; if not, first sendto() for
gethostbyaddr will get an EINVAL. */
@@ -303,12 +303,16 @@ static int save_netinfo(struct interface_info * intf) {
if (intf->boot_proto == BOOTPROTO_DHCP)
fprintf(f, "BOOTPROTO=dhcp\n");
- else {
+ else if (intf->boot_proto == BOOTPROTO_STATIC) {
fprintf(f, "BOOTPROTO=static\n");
fprintf(f, "IPADDR=%s\n", inet_ntoa(intf->ip));
fprintf(f, "NETMASK=%s\n", inet_ntoa(intf->netmask));
fprintf(f, "NETWORK=%s\n", inet_ntoa(intf->network));
fprintf(f, "BROADCAST=%s\n", inet_ntoa(intf->broadcast));
+ } else if (intf->boot_proto == BOOTPROTO_ADSL_PPPOE) {
+ fprintf(f, "BOOTPROTO=adsl_pppoe\n");
+ fprintf(f, "USER=%s\n", intf->user);
+ fprintf(f, "PASS=%s\n", intf->pass);
}
fclose(f);
@@ -437,8 +441,6 @@ static enum return_type setup_network_interface(struct interface_info * intf)
return RETURN_ERROR;
} else if (streq(choice, "ADSL")) {
- intf->boot_proto = BOOTPROTO_STATIC;
-
results = perform_adsl(intf);
if (results == RETURN_BACK)
diff --git a/mdk-stage1/network.h b/mdk-stage1/network.h
index 0848c715e..02eea45b6 100644
--- a/mdk-stage1/network.h
+++ b/mdk-stage1/network.h
@@ -32,14 +32,15 @@ enum return_type ftp_prepare(void);
enum return_type http_prepare(void);
-enum boot_proto_type { BOOTPROTO_STATIC, BOOTPROTO_DHCP };
+enum boot_proto_type { BOOTPROTO_STATIC, BOOTPROTO_DHCP, BOOTPROTO_ADSL_PPPOE };
/* all of these in_addr things are in network byte order! */
struct interface_info {
- char device[10];
- int is_ptp, is_up;
- struct in_addr ip, netmask, broadcast, network;
- enum boot_proto_type boot_proto;
+ char device[10];
+ int is_ptp, is_up;
+ struct in_addr ip, netmask, broadcast, network;
+ enum boot_proto_type boot_proto;
+ char *user, *pass; /* for ADSL connection */
};