のソースコードを検索しましたがifup
、見つかりませんでした。代わりに、ifdown.cを少し変更して、次のコードを作成しました。
int ifup(char interface[])
{
struct ifreq ifr[64];
struct ifconf ifc;
int i, fd;
int numif;
int shaper;
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
fprintf(stderr, "ifdown: ");
perror("socket");
return -1;
}
ifc.ifc_len = sizeof(ifr);
ifc.ifc_req = ifr;
if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) {
fprintf(stderr, "ifup: ");
perror("SIOCGIFCONF");
close(fd);
return -1;
}
numif = ifc.ifc_len / sizeof(struct ifreq);
for (shaper = 1; shaper >= 0; shaper--) {
for (i = 0; i < numif; i++) {
if (strcmp(ifr[i].ifr_name, interface) == 0){
ifr[i].ifr_flags |= (IFF_UP);
if (ioctl(fd, SIOCSIFFLAGS, &ifr[i]) < 0) {
fprintf(stderr, "ifup: shutdown ");
perror(ifr[i].ifr_name);
}
}
}
}
close(fd);
return 0;
}
上記のコードを使用するifdown("wlan0");
とifup("wlan0");
、インターフェイスが無効になり、有効になります。最後に、iwconfig でインターフェイスに IP アドレスと essid などがあることがわかります。ルーターに ping を実行できますが、どのドメインまたは直接の IP アドレスにも ping を実行できません
ping 74.125.232.98
出力
connect: Network is unreachable
ネットワークマネージャーを介してルーターを切断して再度接続しない限り。
端末からifup(8)を使えばそのような問題はありません。
上記のコードを次のように機能させるには、他に何をする必要があるか教えてもらえますifup(8)
か?