Linux Kernel Socket
這陣子由於某些特殊需要
所以找了些資料如何在kernel寫socket programming...
(其實在kernel作這種事情是不道德的...小孩子千萬不要亂用喔...叔叔是有練過的)
大致上是要利用kernel裡面的struct sock直接使用
sock_create(PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
sock->ops->bind ( sock, (struct sockaddr*) &sin2, sizeof(cmdsin));
sock_release(sock);
上面是幾個比較簡單的setup function
然後要send的話就使用
struct msghdr msg;
struct iovec iov;
iov.iov_base=buf;
iov.iov_len=count;
msg.msg_iov=&iov;
msg.msg_iovlen=1;
msg.msg_control=NULL;
msg.msg_controllen=0;
msg.msg_name = (struct sockaddr*)&sin;
msg.msg_namelen = sizeof(sin);
msg.msg_flags = 0;//MSG_DONTWAIT;
sock_sendmsg(sock,&msg,count);
如果想要送的東西並不是從user level傳下來的...
就必須改成
oldseg= get_fs();
set_fs (KERNEL_DS);
// send process.......
set_fs (oldseg);
至於recieve我還在檢查packet究竟掉在那裡...orz
2 comments:
您好,我在網路上找到你的這篇文章,想請教一些問題有關在kenel發udp封包的問題,不知道方不方便,我的mail是cypress@edimax.com.tw
你可以email給我 momodalo@gmail.com
Post a Comment