关于PPPd拨号程序的虚拟网络接口PPP0数据交换问题
愿达前程 2012-06-01 04:07:33
PPP0 设备与linux内核交互接口IOCTL()进行数据交换,为什么需要创建SOCKET()来初始化IOCTL()操作,且开启的是个基于
SOCK_DGRAM 类型UDP socket。下面是创建与初始化函数:
int ppp_available(void){
////////......
fd = open("/dev/ppp", O_RDWR);
#if 0
if (fd < 0 && errno == ENOENT) {
/* try making it and see if that helps. */
if (mknod("/dev/ppp", S_IFCHR | S_IRUSR | S_IWUSR,
makedev(108, 0)) >= 0) {
fd = open("/dev/ppp", O_RDWR);
if (fd >= 0)
info("Created /dev/ppp device node");
else
unlink("/dev/ppp"); /* didn't work, undo the mknod */
} else if (errno == EEXIST) {
fd = open("/dev/ppp", O_RDWR);
}
}
#endif /* 0 */
///////......
/*
* Open a socket for doing the ioctl operations.
*/
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s < 0)
return 0;
strlcpy (ifr.ifr_name, "ppp0", sizeof (ifr.ifr_name));
ok = ioctl(s, SIOCGIFFLAGS, (caddr_t) &ifr) >= 0;
//////........
}