MES3.0はLinuxの下位互換性であり、MES3.0のユーザープログラムは原則としてLinuxでも同じソースコードで動作します。
以下、MES3.0で動作確認されたLinuxとソースコード互換のインターフェース起動の例です。
ネットワークインターフェースを起動し、IPアドレスとネットマスクを設定し、起動されたインターフェースのMACアドレスを表示します。
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>
int main(int argc, char **argv) {
int sk, ret;
struct ifreq ifr;
struct sockaddr_in *s_in;
if(argc < 4) {
fprintf(stderr, "Usage: %s dev ipaddr netmask\n", argv[0]);
return -1;
}
sk = socket(AF_INET, SOCK_DGRAM, 0);
strncpy(ifr.ifr_name, argv[1], IFNAMSIZ-1);
ret = ioctl(sk, SIOCGIFFLAGS, &ifr);
if(ret == -1) {
perror("error");
return -1;
}
ifr.ifr_flags |= IFF_UP;
ioctl(sk, SIOCSIFFLAGS, &ifr);
s_in = (struct sockaddr_in *)&ifr.ifr_addr;
s_in->sin_family = AF_INET;
s_in->sin_addr.s_addr = inet_addr(argv[2]);
ioctl(sk, SIOCSIFADDR, &ifr);
s_in->sin_addr.s_addr = inet_addr(argv[3]);
ioctl(sk, SIOCSIFNETMASK, &ifr);
ioctl(sk, SIOCGIFHWADDR, &ifr);
printf("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
(unsigned char)ifr.ifr_hwaddr.sa_data[0],
(unsigned char)ifr.ifr_hwaddr.sa_data[1],
(unsigned char)ifr.ifr_hwaddr.sa_data[2],
(unsigned char)ifr.ifr_hwaddr.sa_data[3],
(unsigned char)ifr.ifr_hwaddr.sa_data[4],
(unsigned char)ifr.ifr_hwaddr.sa_data[5]);
close(sk);
return 0;
}