}
if (!strcmp(argv[1], "attach")) {
- struct in_addr l, r;
+ struct in_addr l, r, dns1, dns2;
+
+ memset(&dns1, sizeof(struct in_addr), 0);
+ memset(&dns2, sizeof(struct in_addr), 0);
if (!inet_aton(argv[3], &l)) {
cli->sendMsg(ResponseCode::CommandParameterError, "Invalid local address", false);
cli->sendMsg(ResponseCode::CommandParameterError, "Invalid remote address", false);
return 0;
}
- rc = sPppCtrl->attachPppd(argv[2], l, r);
+ if ((argc > 3) && (!inet_aton(argv[5], &dns1))) {
+ cli->sendMsg(ResponseCode::CommandParameterError, "Invalid dns1 address", false);
+ return 0;
+ }
+ if ((argc > 4) && (!inet_aton(argv[6], &dns2))) {
+ cli->sendMsg(ResponseCode::CommandParameterError, "Invalid dns2 address", false);
+ return 0;
+ }
+ rc = sPppCtrl->attachPppd(argv[2], l, r, dns1, dns2);
} else if (!strcmp(argv[1], "detach")) {
rc = sPppCtrl->detachPppd(argv[2]);
} else {
}
int PppController::attachPppd(const char *tty, struct in_addr local,
- struct in_addr remote) {
+ struct in_addr remote, struct in_addr dns1,
+ struct in_addr dns2) {
pid_t pid;
if (mPid) {
if (!pid) {
char *l = strdup(inet_ntoa(local));
char *r = strdup(inet_ntoa(remote));
+ char *d1 = strdup(inet_ntoa(dns1));
+ char *d2 = strdup(inet_ntoa(dns2));
char dev[32];
char *lr;
// TODO: Deal with pppd bailing out after 99999 seconds of being started
// but not getting a connection
- if (execl("/system/bin/pppd", "/system/bin/pppd", "-detach", dev,
- "115200", lr, "debug", "lcp-max-configure", "99999", (char *) NULL)) {
+ if (execl("/system/bin/pppd", "/system/bin/pppd", "-detach", dev, "115200",
+ lr, "ms-dns", d1, "ms-dns", d2, "debug", "lcp-max-configure", "99999", (char *) NULL)) {
LOGE("execl failed (%s)", strerror(errno));
}
LOGE("Should never get here!");
closedir(d);
return 0;
}
-
virtual ~PppController();
int attachPppd(const char *tty, struct in_addr local,
- struct in_addr remote);
+ struct in_addr remote, struct in_addr dns1,
+ struct in_addr dns2);
int detachPppd(const char *tty);
TtyCollection *getTtyList();